No announcement yet.

Scissor2D - A new 2D toolkit plugin

  • Filter
  • Time
  • Show
Clear All
new posts

    I dont have enough knowledge to make any technical suggestions, but clear documentation is a must for less technical guys like me. The more the better!

    But really looking forward to this and hoping you get it off the ground.
    My work in progress thread: Pixel Art Sidescroller


      Just wanted to reply in support of this plugin. I love Unreal Engine, but currently the tools available for 2D just feel incomplete. I use Unity and other engines to build my 2D projects. It would be so amazing if this plugin could work towards feature parity with Unity's 2D toolkit.


        I'm a huge fan of the Sprite Lamp unity plugin, IMO it creates by far the most art-driven sprite lighting approach vs. Sprite Illuminator and other automated normal map generators. It's a time-consuming workflow but you don't have to use it for everything, e.g. use auto-normal mapper for environment stuff, Sprite Lamp for characters. You should reach out to (Finn) and see if he can't write you a shader. He's an awesome guy and super responsive.

        And in general the more features you include from Ferr2D (procedural / spline based terrain tools), Corgi engine (aka actually fun, raycasting platforming), and Adventure Creator (2d characters that can rotate and fake z-depth by scaling according to sorting layers or navmesh and a million other things), the more "take my money" I'd be. Mega bonus points for time-of-day / weather / seasons.
        Last edited by soylent_me; 04-15-2017, 04:40 PM.


          Originally posted by dbInteractive View Post
          Just wanted to reply in support of this plugin
          Thanks for your support! Feature parity with Unity is the plan in the short term, but I have a few extra ideas as well

          Originally posted by soylent_me View Post
          I'm a huge fan of the Sprite Lamp unity plugin
          Lighting models for 2D work is definitely something I will be doing a full review of when the time comes. I'll have to have a think about what tooling I want to support for the import pipeline vs doing everything in editor. Thanks for the video! very cool!
          Twitter - Scissor2D Plugin



            Hi Everyone! Time for a quick progress update on Scissor2D!

            My initial focus has been to prototype ways to make a batched geometry renderer that will allow individual actor components to submit draw calls that can then later be layer sorted and batched together if they are using the same materials and textures. Ideally this would be done at a render command level inside the Unreal render loop, but I am having to work with the limitations of what I can do in a plugin. So for now my plan has been to have a centralised ScissorRendererActor that you place into the scene, other Actor Components can then send scissor draw commands to the ScissorRendererActor that then on its render call, does all the batching / layering magic.

            The goal of this approach is to give the performance of using a Paper2DGroupedSpriteComponent while still maintaining the convenience of using individual actors with their own sets of components attached. Also because the ScissorRendererActor just accepts dynamic geometry to render each frame, all Scissor2D components such as sprites, terrain, tilemaps etc will be able to go through the same renderer and be batched and correctly layer sorted.

            I have setup a quick benchmark test in Scissor2D, Paper2D and Unity(5.6) so we can track performance metrics as the plugin is developed. Currently the benchmark just spawns 5000 identical sprites randomly over the screen. Keep in mind fps measuring is non linear as you get to very low frame millisecond times, so it is much better to look at the ms per frame for comparison.

            I am testing this on a i5-3570, 660gt at 1280x720

            Empty Scene 1.26ms (800fps)
            Scissor2D 2.1ms (470fps)
            Paper2D 76.0ms (13fps)
            Unity 5.4ms (185fps)
            From this I can say initial results are looking good performance wise! But there are some downsides to this approach that I am yet to tackle / solve. Unreal does its editor selection logic via what has been rendered onto the screen, but as you are always clicking on geometry that has been rendered via the ScissorRendererActor, it will not select the original actor that represents the geometry in the scene. I am looking at ways to get around this at the moment in this thread (if anyone has any ideas!)

            Another issue is going to be mixing things rendered via the ScissorRenderer and other unreal mesh types. Batching has the potential to break scene draw order if a mesh comes between a number of sprites that can be batched together. This is only really a problem for 2D in 3D setups, but something to keep an eye on.

            But this is all just one sprite! I hear you cry. Yes correct, the focus of the next bit of prototyping is the sprite import pipeline. Currently the sprite texture is just hard coded into a placeholder material. Once I get the import pipeline setup we can get on to testing atlas batching and layering correctly.

            Thanks for reading! Keep the ideas / feedback coming! it is all very useful
            Twitter - Scissor2D Plugin


              Thanks for the reply, I'll make sure to keep watching this space for updates. Really hoping for something Sprite lamp-esque that supports self-shadowing. Any word on raycasting platforming / 90's Lucasarts-esque fake z-depth?


                Amazing! Keep up the awesome work!


                  This is great stuff! I'm excited for what's to come.
                  WIP Wasabi Horizon:


                    I want to express my support for your project, though I will also admit that it sucks there's so little development on Paper2D that it has come to this to make it happen. My team is currently working in Paper2D and there are so many brick wall limitations in it right now.

                    The highest priorities for me would be:

                    Support for other collision shapes besides capsule (this is a big one)

                    Layer locking

                    More flipbook animation control

                    2D collision and physics

                    Best of luck with it, I hope you're able to make the improvements we'd all like to see.


                      First update looks good!


                        Hi all, thanks for your encouragement and feature suggestions. I am noting them all down, so keep them coming! Time for a quick progress update

                        My focus at the moment is to make a VERY rough and ready prototype of the core feature set the plugin needs to be usable. This is so I can discover any blocking issues early before I come back and reimplement everything properly. I have made a basic asset pipeline for setting up sprites and rendering them through the batched renderer. This also includes auto creating dynamic materials inside the renderer dependent on what the sprites need.

                        Doing this has highlighted some issues that are a little problematic:

                        1) I cannot see a way to implement priority layer rendering that will override depth sorting into scene. This means all render sorting must be done via camera depth, which is not ideal. I can still implement layer helpers that will control visibility, selection and auto depth placement, but it will not be as flexible as having a true render order ability.

                        2) Editor selection on batched geometry is also proving problematic. The only way I have managed to solve this atm is to not batch anything while in the editor viewport. This allows things to be selected individually in editor and then batch as normal in game view. The downside to this is performance in editor and selecting things when testing the game will not work correctly. There may be a better solution to this that I'm still investigating.

                        Next I want to dig into how the layer system will work as this is potential blocker to the plugin being developed if a usable solution cannot be found.
                        Twitter - Scissor2D Plugin


                          I am loving the rapid progress on this


                            Great work! Thanks for the update. I think the layer helpers would be sufficient if there is no better solution, as long as the workflow is intuitive, and you can keep two objects from inter-shuffling their child actors

                            I'll throw two more in for the wishlist:

                            1 - I'd love to see some kind of improved Matinee (Sequencer?) support for 2D types, being able to control flipbooks or change 2D specific properties on the timeline would be fantastic.
                            2 - If there was some way to author root-motion for 2D animations, that would be excellent. I've always wanted to have my 2D animations have pixel-perfect movement without having to teleport the root. (ie. climbing up a ledge, and have the player root actually move each frame with the animation, and ending up at the top of ledge). Not sure how feasible that would be to implement, but I'm throwing it out there.
                            Last edited by nopunintendo; 05-02-2017, 02:27 PM.


                              Originally posted by HeadClot View Post
                              I am loving the rapid progress on this
                              Haha thanks! It feels like that atm because I am just writing prototype code to explore how everything can fit together. It will probably take a few months to come back and write this all to a production standard with everything hooked up to Blueprint and all the editors / thumbnail previews / versioning etc working. But we'll see

                              Originally posted by dbInteractive View Post
                              I think the layer helpers would be sufficient if there is no better solution
                              Some good news about layering in my next post!

                              Originally posted by dbInteractive View Post
                              1 - I'd love to see some kind of improved Matinee (Sequencer?) support for 2D types
                              I'm not that experienced with Sequencer's code implementation atm, so I cant say if that is possible or not, but it sounds like something I should support if it is.

                              Originally posted by dbInteractive View Post
                              2 - If there was some way to author root-motion for 2D animations
                              Interesting, are you talking about frame by frame sprite animation here or 2d skeletal?
                              Twitter - Scissor2D Plugin


                                Hi all! Some good news about layering

                                I've been experimenting with different solutions to implement layering support and I've discovered that because all Scissor Components are drawn through a single renderer actor, I actually have explicit control over draw order to do whatever layering solution I like! Here I have setup a prototype with SortingLayer and OrderInLayer variables. You can see as I change them the draw order updates accordingly even though they are all drawn at the same depth value.

                                In fact SortingLayer will override scene depth, so it is possible to have something that is physically behind something else, draw on top of it. SortingLayer & OrderInLayer are what another popular engine uses for their sprite sorting, but I'm open to suggestions if anyone has any ideas for a better system.

                                As always, there are some tradeoffs to this implementation. For this to work all Scissor Components must only use translucent materials as opaque materials are drawn in a separate render pass that can only be correctly scene combined via scene depth. At first I thought this was a deal breaker, but then I noticed that Unity also only supplies translucent materials for their sprite implementation. If you change a Unity sprite to use an Opaque shader it will indeed break render order and their sorting no longer works.

                                A more significant downside is because the ScissorRendererActor that actually does all the render calls to the underlying engine is always at the root of the world, this messes up layer sorting with other non Scissor things that need drawing (such as meshes or particles). I'm looking into a way to get the renderer to spawn a new component (that can have a real depth) for each sorting layer that may alleviate some of this, but I'm not sure yet.

                                Next I want to take a quick look at how 2d physics can work. I feel like it will need to be a separate implementation to the current physics interface, so I want to try and work out the implications of that.
                                Last edited by Structure; 05-05-2017, 04:01 AM.
                                Twitter - Scissor2D Plugin