.starling-xml or castle-sprite-sheet format

This is already available. When you use the “Add…” menu item to add new frames (either by right-clicking on the “Frames” area, or by using main menu “Frame → Add”) then you can choose multiple files in the resulting “open” box (from Windows or GTK). Select the files using Shift or Ctrl as you wish.

I do not know the “Sprite Illuminator”. But if you want to add normalmaps to sprite sheets, and then illuminate them, this is certainly possible. You will need to process the scene nodes (MyScene.RootNode) a bit, to

  • find the TUnlitMaterialNode there

  • replace it with TPhysicalMaterialNode

  • and set there BaseTexture, NormalTexture to have lighting working on the sprite sheet.

Doing this would look something like this:

....
begin
  ...
  // put this  somewhere at loading, e.g. in TStateXxx.Start:
  MyScene.RootNode.EnumerateReplaceChildren(@ReplaceNodes);
end;

procedure TStateXxx.ReplaceNodes(ParentNode: TX3DNode; var Node: TX3DNode);
var
  NewNode: TPhysicalMaterialNode;
begin
  if Node is TUnlitMaterialNode then
  begin
    NewNode := TPhysicalMaterialNode.Create;
    NewNode.BaseTexture := Node.EmissiveTexture;
    NewNode.NormalTexture := TImageTextureNode.Create;
    TImageTextureNode(NewNode.NormalTexture).SetUrl(['castle-data:/my-normal-map.png']);

    Node := NewNode;
  end;
end;

The above is a pseudo-code, I didn’t test it, but hopefully it should get you started.

The removal of empty space is important as I can really see a bounding box around the image running it in the editor, so I guess the Scene shrinks and expands directly around the image which makes collision more accurate?

The bounding box of the scene just follows the geometry (underlying quad) created. I agree that removal of this is important to have smaller atlases. Note that for collisions, the workaround it to manually use smaller rectangle – e.g. instead of SomeScene.BoundingBox.RectangleXY you can use SomeScene.BoundingBox.RectangleXY.Grow(-10, -20).