Giter Club home page Giter Club logo

wrinkles's Introduction

Wrinkles app

V3 Prototype Project

contains:

  • OpenTime math library
    • Topologies
    • Curve library
      • Bezier Curves
      • Linear curves
  • Visualizer apps
    • Wrinkles app for visualizing frequency domain "plaid" charts
    • otvis, pyguitest for looking at curves/curve projections
  • OpenTimelineIO prototype library
    • parse .otio files and project through them
    • treecode library (path through a binary tree)

IP

  • Find the two or three point projection approximation

  • Add the graph to the ui

  • thread the duals through findU

  • todo:

    • derivative with dual at u = 0
    • using the derivative in the projection
    • testing the 2 point approximation using computed derivatives
    • show derivatives on linearized curves
    • show derivatives on projected curves / projected curve imagine settings
  • hododromes

    • 0 finding over cubic bezier
    • non-linearizing bezier projection
    • non-linearizing bezier.affine projection
    • non-linearizing affine.bezier projection
    • non-linearizing bezier inversion
    • arbitrary (splitting) inversion

Todo

  • add back in linear and bezier curve topologies
    • with linearizing
    • add hododrome decomposition to bezier/bezier projection
  • project_topology in the projection operator (whoops)
  • replacing f32 with opentime.Ordinate
    • struct/union with add/mul/div/sub
    • rational object as an entry in the union (i32/i32)
  • sampling
  • domains (how do you handle that you want to evaluate the timeline at 30fps?)
  • transitions

later

  • schema design
  • graphviz viewer for otio files
    • plain format (dot -Tplain) produces a parsable output
    • visualize graph transformations over a topology with different targets
  • redesign the opentimelineio layer
    • clean up mess of Item and ItemPtr
    • Allocators should be exposed as parameters, not through allocator.ALLOCATOR
    • project_curve and so on should be !TimeCurve, not use catch unreachable everywhere
  • move to zig v0.11 and bump deps
  • topology->[]topology projection (for handling inversions)
  • time-varying parameters
  • time-varying metadata

ZIG REFERENCES

DONE

Path System

  • support arbitrary path lengths

    • use an array list of u128 to encode arbitrarily long paths
  • arbitrary TopologicalPathHash lengths

  • fix the simple_cut

  • JSON OTIO parsing

    • can parse small OTIO files (but because of path length constraints, can't build maps for large files)
  • Right now the topology has bounds, transform and curves. This is inconsistent because the curves inside the topology also represent a transformation, and implicitly define bounds (in that they're finite lists of segments, which are bounded). The math reflects this - the way that transform and boundary are applied is pretty inconsistent.

  • Part of the reason why this is the case is that there are several special cases of topology in play:

    • infinite identity (could have a transform but no bounds)
    • finite segments (do they have bounds?)
    • empty

Two options:

  • do what we did for the graph and define a set of operators that bundle up a topology and work through the cases, providing clean constructors for those useful special types

  • break these features up into things that the topology can contain and localize the math, push the matrix into handling combinations of those child types

  • Stacks

  • Timeline

  • Gap (fully)

  • how hard would parsing OTIO JSON be? Would be cool to read in real timeilines and do transformations there

Inversion

  • need to add inversion functions to the topologies
  • add error when a function isn't trivially invertible
  • if we do something with the mappings, when things aren't trivially invertible, we still know how to invert them and how the mapping functions. Can we exploit this? Or is the juice not worth the squeeze for this project

Optimization and Caching

  • MxN track related time stuff - the map should cache those kinds of intermediates
  • Can the map also cache optimizations like linearizing curves?

Ordinate Notes

const Ordinate = union(enum) {
    f32: f32,
    rational: rational,

    // math
    pub fn add() Ordinate {}
    pub fn addWithOverflow() Ordinate {}
    pub fn sub() Ordinate {}
    pub fn subWithOverflow() Ordinate {}
    pub fn mul() Ordinate {}
    pub fn mulWithOverflow() Ordinate {}
    pub fn divExact() Ordinate {}
    pub fn divFloor() Ordinate {}
    pub fn divTrunc() Ordinate {}

    pub fn to_float() f32 {}
};

wrinkles's People

Contributors

meshula avatar ssteinbach avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.