Skip to content

Latest commit

 

History

History
61 lines (56 loc) · 2.91 KB

todo.md

File metadata and controls

61 lines (56 loc) · 2.91 KB

todo list for traytor

  • architecture

    • move all the code into neat separate packages
    • fix relative paths when loading files (textures etc) to be relative to the scene file location
  • thread paralellism

    • make traytor render in multiple threads at once
    • make a simple traytor_render executable which takes a scene, number of samples and number of threads to render it on, and spits out an image (so we can use it to measure time for rendering on 1, 2, ... n threads)
    • parallel k-d tree construction
  • network paralellism

    • try out RPC libraries: rpc, jsonrpc, gorrilla rpc and decide which one is easiest to work with
    • make the scene serialiseable, so we can call a function that takes the scene as an argument remotely (maybe base64 encode the scene and pass a single string?)
    • create a "worker" command which acts as an RPC server, and has uploadScene(scene) and renderSample() Image RPC methods
    • create a "client" command which tells multiple workers to render samples and adds their results together, forming an image
    • multi-threaded workers - make workers accept several requests at once, with a limit on active renders (so that a worker with 4 processors can accept 8 requests at once, render 4 at once and start rendering the next 4 while the first 4 are being sent back to the client). This should be much easier than it sounds, because buffered channels are awesome.
  • GUI

    • try out QML without Go - for example use qmlscene
    • make the same thing run under Go with go-qml
    • figure out how the Go code will communicate with QML (shared variables?)
    • find a way to display our Image in the GUI (QPainter still not available in Go? Maybe need to use QLabel with a custom image? Or OpenGL?)
    • huge RENDER button!
    • implement the client in the GUI so that it can display a new image each time a sample is received
    • make a fancy worker selector in the GUI which lists the IP addresses of all available workers and the user can select which workers to render on
    • make a stormtrooper logo (maybe render it in Traytor?)
  • rendering

    • fix the goddamn refraction
    • sky
    • bicubic texture sampling
    • add mix shader/add shader
    • add a fresnel sampler
    • implement lamp sampling or bidirectional path tracing to speed it up a lot (hard)
    • implement matte reflection and refraction (very hard, requires statistics knowledge)
    • add sampler addition, multiplication, screen etc