```cs public abstract class Primitive { // This material controls the amount of energy loss when rays bounce off this primitive public MaterialType material; } ``` This is a base abstract class for all Primitives. `material` must be set to anything other than `MaterialType.Air`. Any property on any primitive can be changed at any time on the main thread, because the background raytracing threads operate on a copy of these primitives. When the background threads finish running, all changes will be propagated to these copies.