@startuml class Scene { } Scene *-- Node class Camera { } class Node { + transform } Node *-- AnimationObject Node *-- Object Node *-- Light Node *-- Camera Node *-- Node class AnimationObject { } AnimationObject *-- Animation AnimationObject --> AnimationState AnimationObject --> Skeleton class AnimationState { + time + current_animation + pose } class Animation { + name } Animation *-- Keyframe class Keyframe { + time + transforms } class Skeleton { + joints } class Object { + transform } Object *-- Mesh class Mesh { } Mesh --> BoundingVolume Mesh --> Geometry Mesh --> Material Mesh --> Shader class Geometry { + positions + normals + texcoords + indices } class BoundingVolume { } class Material { + shader params } Material o-- Texture class Shader { + uniforms } Shader --> VertexShader Shader --> FragmentShader class VertexShader { + pos + normal + texcoords + Modelview + Projection } class FragmentShader { + lights + textures } class Texture { + pixels + format } @enduml