21

Fabric Engine: Scene graph 2.0

Embed Size (px)

DESCRIPTION

Details on the new Python scene graph that will be released with Fabric Engine 2.0 in Spring 2014. You can see a video presentation of this deck here: https://vimeo.com/84300368

Citation preview

Page 1: Fabric Engine: Scene graph 2.0
Page 2: Fabric Engine: Scene graph 2.0

●○

○●●

Page 3: Fabric Engine: Scene graph 2.0

Scene Graph Node(Python)

DGNode OtherDGNodeInteger foo; Scalar bar<>;

String strings<>;

●○

●○

Page 4: Fabric Engine: Scene graph 2.0

Node Type A Node Type BPort inPort(Node Type A)

●○○

●○

● Parameter foo(Scalar)● Parameter bar(Integer)def __onConnectInPort(self, otherNode):

if disconnecting: dgnode.removeDependency(‘otherNode’) elif connecting: dgnode.setDependency(‘otherNode’, otherDGNode)

Page 5: Fabric Engine: Scene graph 2.0

○●

○○

Page 6: Fabric Engine: Scene graph 2.0

●●

● Most DCCs follow this model○ e.g. ICE, Maya, Houdini, Nuke...

Page 7: Fabric Engine: Scene graph 2.0

Node A Node BInPort of ‘Value Type A’OutPort of ‘Value Type A’

OutPort of ‘Value Type B’

● Merge Parameters and Ports into a single concept.● OutPorts of a data type connect to InPorts of that data type● Dependencies and Operator Bindings are generated from the

Node’s InPorts○ Connecting ports sets dependencies, and generates bindings.

InPort of ‘Value Type C’

Page 8: Fabric Engine: Scene graph 2.0

Node A Node BTypeA aTypeA aVar

operator myOp( in TypeA a, io TypeC result){ result = a.get();}

Node ATypeA aVar TypeB result

Node BTypeA a TypeB result

parameterLayout = [ self.a, self.result]

parameterLayout = [ nodeA.aVar, self.result]

operator myOp( in TypeA a, io TypeC result){ result = a.get();}

Page 9: Fabric Engine: Scene graph 2.0

Viewport

viewportParams RenderSequenceDataViewportParamsviewportParamsWidth

HeightWidthHeight RenderSequenceData

Page 10: Fabric Engine: Scene graph 2.0

Core:(KL, DGNodes, dependencies, operators, bindings)

Scene Graph:(Nodes, Ports, Parameters)

Core:(KL)

Data-flow Graph:(Nodes, Ports, Operators)

Scene Graph:(Node presets, operator code, custom classes)

Page 11: Fabric Engine: Scene graph 2.0

class MyNode(SceneGraphNode): def __init__(): dgnode = self.constructDGNode() # Explicit construction of DGNodes dgnode.addMember('toggle', 'Boolean') # Explicit member management self.addMemberParameter(dgnode,'toggle', True) # Expose values on the UI.

self.bindDGOperator(dgnode.bindings, # Explicit binding of operators # name = 'myOp', fileName = 'MyNode.kl', layout = [ 'self.toggle, 'otherNode.geometry', ] )

self.addInPort('inport', NodeType, …, self.__callback) # Ports with callbacks

def __callback(data): # to set dependencies. if disconnecting: self.getDGNode().removeDependency('otherNode’) if connecting: self.getDGNode().setDependency('otherNode’, data.getDGNode())

Page 12: Fabric Engine: Scene graph 2.0

class MyNode(SceneGraphNode): def __init__(): self.addInPort('toggle', 'Boolean', …) self.addInPort('inGeom', 'Geometry', …) self.addOutPort('result', 'Geometry', …)

self.bindOperator( name = 'myOp', fileName = 'MyNode.kl', )

● MyNode exposes 2 inputs, 1 output, and binds an operator● The operator bindings are generated automatically when the

ports are connected.● The Core DG is completely abstracted.

Page 13: Fabric Engine: Scene graph 2.0

●○

●○

InPortScalarArray[]

Scalar

ScalarArray[]

Scalar

Port merges inputs into a single array which is bound to operators.

Page 14: Fabric Engine: Scene graph 2.0

○■

Geometry Instance

material

Transform

geometry

GeometryGeometry

TransformglobalXfo

MaterialRenderParams

GeometryInstance

Page 15: Fabric Engine: Scene graph 2.0

●●

○○○

Alembic ImporterGeometries[]

filters[]

fileLocation

GeometryInstances[]

Page 16: Fabric Engine: Scene graph 2.0

●●●

Alembic ImporterGeometries[]

filters[]

fileLocation

GeometryInstances[]

Instancer

GeometryInstances[]

Transforms[] GeometryInstances[]

Transform LibraryTransforms[]

Page 17: Fabric Engine: Scene graph 2.0

RenderData

ViewportrenderData

Geometry InstanceGeometry

Transform

Material ViewportrenderDataImporter

geometryInstances renderData

Page 18: Fabric Engine: Scene graph 2.0

MyPrim Twist DeformerinGeomgeometryWidth

Height twist

outGeom

●●

Page 19: Fabric Engine: Scene graph 2.0

●○

●○

●●

Page 20: Fabric Engine: Scene graph 2.0

●●●

○●

Page 21: Fabric Engine: Scene graph 2.0

●●●●●