protected virtual IRenderableMaterial GetOrCreate(string key, Func<IRenderableMaterial> create) { IRenderableMaterial material; if (_materials.TryGetValue(key, out material)) return material; return _materials[key] = create(); }