I am trying to design a typical (data-oriented) ECS. The issue I am struggling with is that my rendering system have to rely on *two different* sets of entities to actually do rendering.

My current idea is to have (usually one, but possibly more) entities representing cameras (e.g. sets of components describing views and viewports). Then, I can have `CameraSystem` that iterates through all `CameraComponents` and renders everything they 'see' to appropriate viewports.

However, this requires `CameraSystem` to query for two non-intersecting sets of components: `cameras` and `renderables`.

My current approach allows systems to select all nodes having a particular combination of components. However, it is not possible in my design to select entities that have *either* `CameraComponent` or `RenderableComponent`. This is not the first time when optional component dependencies (using unions of component sets insetead of their intersections) seem useful to me, although I have never seen such an approach.

I could gather rendering data in `RenderableSystem` and then pass (e.g. through event or message) it to `CameraSystem` for actual rendering, but since two systems are so dependent, there seems to be little sense in separating them. 

So, is allowing systems to have optional dependencies on components the most convenient and flexible solution in this case, or is there a better way?