SceneView.txt 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. TODO:
  2. - Core thread gets stuck on shutdown when OpenGL is used...Somewhere in kernel
  3. IMMEDIATE:
  4. - SceneGrid is very ugly. Consider using default lines for now and come back with a better approach later.
  5. - Potentially enable line AA?
  6. - In Picking code I don't set main texture when rendering with alpha
  7. - Picking code is completely untested and will likely need major fixing
  8. - Disable DX9 for editor as I will likely want to use geometry shaders for icon rendering, and possibly new AA line shader
  9. - Or just use MeshHeap and update the icon/lines every frame?
  10. - Test all the new DrawHelper3D methods
  11. GIZMO TODO:
  12. - IMPORTANT: Gizmo rendering happens in update() but it should happen whenever scene view is being rendered as the render target isn't set anywhere
  13. - Add a method that renders gizmos for picking
  14. - Figure out how to deal with builtin components like Camera and Renderable (e.g. how will they have gizmos since they're not managed components?)
  15. LATER:
  16. - Need a way to render text for gizmos and handles, and in scene in general
  17. ----------------------------------------------------------------------
  18. Handles
  19. - Make a few different base handle types:
  20. - Slider 1D (e.g. for movement using an arrow cap)
  21. - Slider 2D (e.g. for movement in 2D using a plane render)
  22. - Similar for scale/rotation handles (see Unity for its implementations of those)
  23. Handles should have colliders which will be queries whenever user input is detected in scene view
  24. If any handle is hit the input will not proceed further (e.g. no picking will be done) and that handle control
  25. will become active.
  26. Base handle types should just be positioned in space and then return value every frame as user moves them.
  27. - This way they can also easily be used from C# for custom user-made stuff
  28. TODO - Think about this
  29. See for inspiration: http://docs.unity3d.com/ScriptReference/Handles.html
  30. ----------------------------------------------------------------------
  31. Picking
  32. BsPicking
  33. - HGameObject PickClosestGameObject(Camera cam, Vector2 position, Vector2 area)
  34. - PickResult PickClosestObject(Camera cam, Vector2 position, Vector2 area)
  35. - void PickGameObjects(Camera cam, Vector2 position, Vector2 area, Vector<HGameObject>& selection)
  36. - void PickObjects(Camera cam, Vector2 position, Vector2 area, Vector<PickResults>& selection)
  37. PickResult
  38. Type (GameObject or Gizmo)
  39. Data (Handle to GameObject or gizmo ID)
  40. Picking will internally:
  41. - Be performed on the Scene render target just before actual rendering
  42. - Use scissor rect to limit itself to the specified screen area
  43. - TODO later - I could also limit the camera frustum to this area for additional culling
  44. - Go through every scene object and find all renderables
  45. - Perform culling over all renderables and generate a list of visible nodes
  46. - Access GizmoManager and get a list of all gizmos and their IDs
  47. - Generate unique colors for all renderables and gizmos
  48. - Send meshes/colors/ids to core thread to be rendered with a special shader
  49. - Wait until core thread completes and returns an AsyncOp with a list of selected IDs
  50. - Ensure I can read-back from a render target on the core thread
  51. - Check DX9, DX11 and OpenGL implementations for both render textures and render windows
  52. Also:
  53. - I need to send the primary used texture so I properly determine transparent areas using alpha
  54. - TODO - But I do not have a way of defining a primary texture in-engine. Add a renderer semantic?
  55. ----------------------------------------------------------------------
  56. Rendering selection
  57. Get the mesh from the selected Renderable
  58. Draw that same mesh again using a shader that grays out the original
  59. The second mesh will likely need to use depth bias (sloped depth bias too?)
  60. ----------------------------------------------------------------------
  61. Grid
  62. Generate grid of X size around Y point
  63. Normally Y is (0, 0, 0) but we should be able to move it with camera
  64. There will be minor and major axes with slightly different color (and thickness?)
  65. Instead of pixel perfect lines draw 2D quads (Using DrawHelper which has thick line support)
  66. Mesh can be static, I can just move its origin by length of the major line (+ maybe have a fadeout in shader with 1 invisible major line so the movement is not noticeable)
  67. Material is retrieved from builtin materials list
  68. This can be drawn directly using the draw list and not a renderable
  69. ----------------------------------------------------------------------
  70. Gizmos
  71. Custom gizmos:
  72. - Users can override the Gizmo class to create their own custom gizmos
  73. - It contains various methods that can be used for constructing the gizmo
  74. - DrawCube
  75. - DrawSphere
  76. - DrawWireCube
  77. - DrawWireSphere
  78. - DrawRay
  79. - DrawLine
  80. - DrawFrustum
  81. - DrawIcon
  82. - Any Gizmo is registered with GizmoTypes manager
  83. - Components may associate themselves with a gizmo using [SetGizmo(Gizmo)] attribute
  84. - It contains other properties, like when should gizmo be displayed (active, selected, not selected, parent selected) and whether
  85. or not the gizmo is pickable
  86. - When drawing an icon
  87. - It should always face the camera
  88. - It can be static size in screen space, or resizable with distance
  89. - Need a way to notify the gizmo needs updating from component with the gizmo
  90. - Gizmos.MarkDirty(GameObject)
  91. - How do I assign a texture to DrawIcon? I'm assuming Gizmo class will not have an inspector.
  92. - A special ManagedResource that allows you to assign textures to it?
  93. - WIll need a Dictionary inspector?
  94. Gizmo rendering:
  95. GizmoTypes
  96. - All gizmo types are registered here
  97. - It contains prebuilt gizmo meshes and textures
  98. GizmoManager
  99. - Every frame goes through all game objects and create/removes their gizmos. It keeps a cached version of all gizmos
  100. - It keeps a list of gizmo descriptors
  101. - A "diff" of this list is sent to Core thread every frame
  102. GizmosRenderer
  103. - Batches all gizmos into a single buffer and renders them with a single call
  104. - It might be a bit problematic if custom textures are used for gizmos
  105. - Just don't batch those? Yep, probably not worth batching at this point.
  106. When picking GizmosRenderer can draw the gizmos as normal but using a special shader.