SceneView.txt 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. GIZMO TODO:
  2. - Make a C# wrapper for Renderable
  3. The bounds I retrieve from GUIUtility are relative to the entire window, not just the current widget. Another reason to move editor widgets to their own GUIWidget.
  4. Passing a Vector2I (and I'm assuming any script) through a thunk crashes the runtime
  5. Set up Application::getPrimaryViewport so it returns a valid viewport otherwise C# Camera won't work properly
  6. REFACTOR material getParams* and related classes. Those params should update all gpu program params that share that variable, not just the first found
  7. Need a way to drag and drop items from Scene tree view to Scene view
  8. When dragging a handle make sure it works when cursor leaves the scene view
  9. Also make sure that handle manager receives mouse up event if its done outside of scene view
  10. When selecting/deselecting stuff handle display is delayed
  11. Create the scene widget completely in C#?
  12. - Port RenderTexture, SceneCameraController, ProjectSettings, SceneGrid
  13. - Will need to track when widget resizes so I can resize the render target
  14. - Handle manager update will originate from the widget
  15. - Actually it could still be done from C++
  16. - How will scene grid rendering be handled? Currently it's done from a render() callback
  17. - It's still going to have a C++ representation, just call the callback there
  18. - I will still need a C++ version of scene widget (not in script code but in editor code) because handle/gizmo manager reference it
  19. AFTER I have scene widget in C#:
  20. - Finish up C# Handles class so it returns proper values
  21. - Ensure fixed handle size and handle snapping works
  22. - Implement free move handle and remaining handles
  23. - Test custom handles from C#
  24. IMPLEMENT SELECTION RENDERING
  25. IMPROVE SceneGrid LOOK
  26. - LIKELY USE PIXEL SceneGrid WITH AA
  27. - OR (better) instead of drawing rows and columns of lines, just draw a plane with procedural texture
  28. LATER:
  29. - Need a way to render text for gizmos and handles, and in scene in general
  30. - Add drag to select
  31. - Need a better system to catch broken shaders. DX11 just draws nothing with depth, DX9 draws all white.
  32. ---------------------------------------------------------------------
  33. Render textures in C#:
  34. - In C# have Texture2D, TextureCube, TextureVolume. They should have a common Texture base.
  35. - Each of those can be created with a Renderable flag
  36. - Render textures mirror what we have in C++
  37. - RenderTexture and MultiRenderTexture (since we have these separate representation we don't need RenderBuffer that Unity has)
  38. - You can provide an existing texture from types listed above, or create a new render target and
  39. create a basic 2D texture (multiple constructors)
  40. - Both RT types should have their color buffer (s) and depth buffer accessible as a texture to be used for rendering, or for reading
  41. ----------------------------------------------------------------------
  42. Handles
  43. SliderLine - position, direction, length
  44. - When initially activated it records position nearest so the line as the starting point
  45. - Further mouse dragging also finds nearest position to the line
  46. - Difference between those two results in a float value (how much to move along direction from position to reach new position)
  47. - Slider line has a capsule + sphere collider size of which can be set manually
  48. SliderPlane - position, normal, size
  49. - Similar to line slider only the direction is determined dynamically as well as distance
  50. - Outputs a Vector2 (direction * distance moved)
  51. - A OOB is used as a collider
  52. SliderDisc - position, normal, radius
  53. - When initially activated it records position nearest so the disc as the starting point
  54. - Further movement calculates the dynamic direction from the starting point to the current point on the plane the disc lies on
  55. - Distance along that direction is returned as amount of movement (similar to line slider)
  56. - Outputs a single float
  57. - A torus is used as a collider
  58. Free move/rotate/scale handles need to exist as well
  59. - Scale is easy, just perform uniform scale. Use SliderPlane oriented towards camera
  60. - Move also use SliderPlane oriented towards camera
  61. - Rotation use SliderDisc oriented towards camera
  62. ----------------------------------------------------
  63. STAGE 1
  64. CONCRETE TODO:
  65. HandleSliderPlane/HandleSliderDisc
  66. - update() implementation
  67. ----------------------------------------------------
  68. STAGE 2
  69. Implement RotateHandle & ScaleHandle in C#
  70. - Nearest point to disc/arc code
  71. Add free move, free rotate, free scale functionality
  72. Handles that remain the same size regardless of distance from camera
  73. - For both drawing and collision
  74. More complex types for drawing like DrawArrow in HandleDrawManager
  75. ----------------------------------------------------------------------
  76. SelectionRenderer
  77. Retrieve a list of selected objects from SelectionManager
  78. Find ones with Renderable components
  79. Retrieve Meshes, and world transforms from them
  80. Draw that same mesh with either a wireframe or a grayed out shader with a slight depth bias
  81. ---------------------------------------------------------------------
  82. Multi-resources
  83. Importer::import
  84. - Each SpecificImporter is responsible for importing all needed resources and registering them with Resources manager
  85. - However only the main resource is returned from that method
  86. - Rest of the resources are referenced by the UUID in ResourceMeta and can be retrieved there if needed
  87. Resources::save
  88. - Add to documentation that it will only save that exact resource and not any dependencies, you must call save() for them manually
  89. Resources::load
  90. - Will automatically load all dependencies, optionally add a boolean that allows you to load only the main asset
  91. ProjectLibrary
  92. - Needs to be extended so it shows sub-resources in tree view
  93. - Need to extend my mapping so one asset maps to multiple assets in library (need to remember how I do that currently, is it just by name or meta-file identifier?)
  94. ---------------------
  95. With this approach I can:
  96. - Reference and load the sub-resources directly
  97. - Technically I can also delete sub-resources