Nuke ötletek


bendi firkálta ekkor: 2011. október 20. 12:55

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.

bendi képe

dotLabel

import os
import 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())))

#2042
bendi képe

Jogos, oda nem kell '^' (valszeg másoláskor nem figyeltem).

A korrekt kód:

return re.sub('^e:', 'f:', filename)

#1787
szbzs képe

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?

#1786
bendi képe

Egy kis tutorial:

A nuke /plugins könyvtárában van egy hasznos kis script a filenameFix.py. Az ebben lévő filenameFix fü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:/source kö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 re
def 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.

#1785
Rees képe

Az HSVtool többek között erre van.

#1695
ScotyPipec képe

Jaja, megvan. Bindzsizek vele.
Köszi.

#1694
klm képe

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.

#1693
ScotyPipec képe

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.

#1692
bendi képe

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.

#1677
Zeedorf képe

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).

#1652
Roby képe

Váó, nagyon-nagyon köszi!!!!! :)

#1290
bendi képe

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 None

fontos, 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.

#1283
gltoth képe

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

#1274
kidintwo3 képe

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.

#1273
marci2001 képe

a scale volt a problema

#1270
marci2001 képe

szerintem azok polygonok, de nem vagyok biztos benne

a durva az, hogy egy mayabol exportalt kocka mukodik, egy plane meg nem

#1269
Kodiak képe

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.

#1268
marci2001 képe

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?)

#1266
Roby képe

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.

#1265
villain képe

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

#1263
Roby képe

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!

#1262
sirpalee képe

igaza van abban, hogy ez nem az a topic :-)

#1241
bendi képe

Ezekkel a tutorialokkal érdemes kezdeni.

Ezek közül is a 3d alapok: itt.

#1236
mrdr képe

Olvastam nem talaltam, Letöltöttem alap tutorokat foundry hon laprol erre pont nem tert ki satöbbi..
Azért köszi ..

#1235
villain képe

- 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 :)

#1234
mrdr képe

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

#1232
bendi képe

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.

#1230
Zeedorf képe

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?

#1196
afrob képe

ne nyulj a nuke hoz! csak elrontod! :) ott van neked a brush :))

...........................jajj de jo ez a cg blog...........................

#1113
kidintwo3 képe

Jo van ragyuttem :D

[value parent.input.file]

#1064
kidintwo3 képe

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.

#1062
Krisz képe

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

#1039
kidintwo3 képe

Valaki probalt mar tile-olt UV-t betolni Nuke-ba (es nem a lassu contact sheet-es hekkel)?

#982
Krisz képe

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 ?

#981
marci2001 képe

eltuntek a tabok :(

#924
marci2001 képe

if disNode.knob <=8:
for i in femaleSet:
list.copulate(i)
else go gyoker.knob

#923
marci2001 képe

disznod.knob!

#922
bendi képe

Aljas :D

#920
marci2001 képe

nuke = abs(knob)

#919
bendi képe

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.disable

Ha a vezérlőnode kikapcsolásával akarod bekapcsolni a másikat, akkor meg:

!vezérlőnode.disable

Ez pl. gizmo gyártásakor hasznos, ha gizmon lévő checkboxal akarsz ki-bekapcsolni nodeokat a gizmon belül.

#916
Krisz képe

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

#905
dzsi képe

Ja jut eszembe: Tocy honlapjan is van jopar hasznos script: thoughtvfx

#685
Zeedorf képe
#684
villain képe

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

#644
villain képe

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?

#642
bendi képe

A kép méreteire lehet közvetlenül hivatkozni, mint knobokra:

node.width node.height

Pl. 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.height

A 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.t

Pl. 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:

input0
input1
input2
stb.

Ha visszafele akarunk haladni a gráfban, akkor írhatjuk az inputokat egymás után is:

input.input1.input0.knobnév

Fontos, hogy a sorban az első lesz a node-unkhoz közvetlenül csatlakozó node, utána az ahhoz csatlakozó, és így tovább.

#632
krisztianfuredi képe

Sziasztok....Igen...igen..sok ilyet még.....köszön(jük)öm szépen!!!

#631
villain képe

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)

#630
villain képe

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)

#629