     @edges new @constructor.Edges
       mesh: @mesh
 
+    @horizon new @constructor.Horizon
+      currentNormal: => @shadingSphere()?.currentNormal()
+      cameraAngle: @cameraAngle
+
     @pixelCanvas new LOI.Assets.Components.PixelCanvas
       initialCameraScale: 8
       activeTool: @activeTool
       lightDirection: @lightDirection
       drawComponents: =>
-        return [] unless @sourceImageVisible()
+        return [] unless @sourceImageVisible() and @spriteData()
         
         [
           @sprite()
           @landmarks()
           @edges()
+          @horizon()
         ]
         
       symmetryXOrigin: @symmetryXOrigin

      LOI.Assets.SpriteEditor.Tools.Pencil
      LOI.Assets.SpriteEditor.Tools.Eraser
      LOI.Assets.SpriteEditor.Tools.ColorFill
      LOI.Assets.SpriteEditor.Tools.ColorPicker
      LOI.Assets.MeshEditor.Tools.MoveCamera
      LOI.Assets.SpriteEditor.Tools.PaintNormals
      LOI.Assets.SpriteEditor.Tools.Symmetry
      LOI.Assets.MeshEditor.Tools.PixelGrid
      LOI.Assets.MeshEditor.Tools.PlaneGrid
      LOI.Assets.MeshEditor.Tools.SourceImage
    ]

    tools = for toolClass in toolClasses

    
    @pixelGridEnabled = new ReactiveField true
    @planeGridEnabled = new ReactiveField true
    
    @currentCluster = new ReactiveField null

    @meshId = new ComputedField =>
      AB.Router.getParameter 'meshId'
