My RTC implementation in Go originally used values everywhere. I was trying to avoid state issues in advance by using: value types for struct fields, value types for function parameters, and the Null object pattern instead of nil (you can't use nil with value fields in Go anyway).
This week I tried replacing the above with pointers instead, and the performance boost was way better than I expected! Some examples from the book:
I haven't done a lot of profiling since matrix inversion caching, so I don't know how much room I have for optimization. I have used a lot of value objects, allocating new objects every time instead of updating existing values. You might have given me incentive to go back and do some profiling.
Out of curiosity, what are your rendering resolutions, and CPU specs (model, # cores/threads, Ghz)?
I am by default using: 640x360, AMD A10-9850K (state-of-the-art 2014 technology! ha-ha), 4 cores (single threaded cores), 3.69Ghz; implemented in Java 8 with parallelized rendering (4 threads)
Table scene: 00:48.73 Cover Scene: 00:43.81 Three spheres: 00:19.46