DiffTaichi: Differentiable Programming for Physical Simulation