Scissor2D - A new 2D toolkit plugin

Scissor2D is a new 2D toolkit plugin currently in development

http://i.imgur.com/10VmRk4.gif

Progress Update 12 - Sorting Groups

http://i.imgur.com/uNowlpw.gif

Progress Update 11 - Animated Sprites (with keyframe notifies)

http://i.imgur.com/6A7cPGB.gif

Progress Update 10 - Sorting Layers

Previous Updates:

Progress Update 9 - Auto Asset Handler
Progress Update 8 - Production Renderer
Progress Update 7 - Production Sprites
Progress Update 6 - Public Roadmap
Progress Update 5 - Perspective 2D Mode Prototype
Progress Update 4 - Box2D Physics Prototype
Progress Update 3 - Sorting Layer Experiments
Progress Update 2 - Rough Asset Pipeline
Progress Update 1 - Batched Renderer Prototype

(original post was an initial call for feedback)

Yes!!! The list sounds awesome.
One addition I’d like to see is 2D collision or at least non-capsule collision on Character blueprints. Its pure hell to work with this and I would prefer to use the character blueprint/class with Box or Sphere collision on paper 2d characters.

Hey @Structure -

Got a few requests for this.

  1. Being able apply a sprite to a billboard similar to Wolf3D or DooM would be awesome.
  2. Being able to use Spine, DragonBones, or Spriter with this toolkit would be useful.
  3. A Top down character template would be awesome as well.
  4. A DooM 1 or 2 Like Character Controller would be useful as well. Unsure if this falls into the scope of the project though.

Game Maker Studio 2: UE4 Definitive Version. `Nuff Said.

My biggest issues in paper2d is animation handling. Controlling how animations play as in do they loop or not and making sure certain animations play all the way through before another can begin etc. I also had trouble with animation state machines in paper2d. I must be doing something wrong but I can not for the life of me seem to make it work properly. Maybe my checks are not done well enough I don’t know but for whatever reason I can not get the animations to properly switch using any of the ways I have seen examples of. I tried everything I can think of and it just never works. I can’t even imagine what would happen if I had a ton of different animation states.

Having a better way to control these things would make using unreal for 2d games so much better than it is right now.

Yes this is something I want to support but I will need to plan how this will work. Currently Paper2D tries to add Box2D as a replacement physics backend, I think this has had limited success due to differences in feature set available in the physics engines (3d vs 2d). My feeling at the moment is that Box2D should be integrated as a separate set of 2D Physics Components, but the downside to this is you will lose some functionality written to the current physics interface. This will then need a set of new components (such as character controllers etc) that are specialised to use the new 2D physics components. With this we can support any collider type that Box2D supplies, and this will all be covered by the toolkit.

  1. 2D in 3d workflow is something I would like to support, but I will need to investigate the implications for auto batching of sprites interfering with other ‘non sprite’ geometry. This comes down to where I can do the batching of geometry in the render pipeline, while still keeping the functionality in a plugin. For example, say you had 2 billboard sprites with another actor with a mesh component in between then when viewed from the camera. If I auto batch these billboards together and send them as one draw call, this will produce incorrect draw order when drawing all 3 items. Some experimentation will be needed here :slight_smile:
  2. We use Spine in our current workflow so this is something we would be keen to integrate. Other solutions may come over time depending on demand.
  3. A top down character template does sound awesome, I’ll put it on the list!
  4. Probaby out of the scope of this, but if i end up messing around with billboards enough it could be a good example project.

Game Maker Studio 2 is looking pretty solid. Apart from the integrated asset production tools it is my goal for this plugin to surpass its functionality for 2D work, while still having all the joys of the UE4 ecosystem :slight_smile:

I will be doing a full review of animation handling both in Paper2D and other engine solutions to find an enjoyable workflow. Ideally this should be controllable from tooling, blueprints and c++ with ease.

Thanks everyone, this feedback is very useful and will help shape the plugin into something great for everyone to use. I am currently investigating where in the Unreal render pipeline I can insert a batch renderer for sprites, there are a few options so I will need to do some prototyping and see what works well.

Keep the feedback / ideas coming!

Question: If you’re going to be building out this functionality why not use what’s already available but finish the implementations or rework the current implementations? The reason I ask is because it might be easier to put in pull requests on the git that Michael Noland can approve of and everyone can get via engine updates (with the added benefit Epic approval and maintenance ) instead of having to constantly manage another plugin to their source code.

Yep, this is a good question that I’ve been considering myself.

As this is a commercial plugin, I would like to not rely on core functionality from another plugin that could potentially change significantly in the future. Although initially there will be quite a bit of core implementation overlap, I think this is the way to go for long term stability for the users.

I have evaluated the code supplied by Paper2D and I would need to rewrite parts of how the internals work to achieve some of our feature goals. This creates an issue where I would need to push functionality into Paper2D to move forwards with the features I need to implement, but still leave it in a usable state without this plugin.

This will be a bit of a maintenance headache as I will not have control over when Paper2D functionality is updated or what could change underneath me.

Hope that makes sense!

Autotiling at mapping.
F.e. select and tag Tiles that work as autotile via mapping.

Animated tiles

Layer Data Control.
In Paper2D is no control for setzing visibility of layers in a tilemap, or changing materials of specific layers only…etc

Would bring Maps forward :slight_smile:

  1. Not exactly sure what you mean here, but if you are talking about tiles that lay themselves out correctly depending on their neighboring tiles, yes I plan to support customisable tile brushes with placement logic
  2. Yep!
  3. I can add these features to tile editor yes :slight_smile:

For me, having Flipbooks (or a replacement) support all the same (non-bone specific) animation functionality that skeletal mesh animations do would be huge. So, animation blueprint stuff, state machines, anim notifies, montages (with branching points), animation curves, etc. etc. You can already do a lot of 2d bone animation stuff using run-times from Spine and Creature, but they are all outside of the UE4 built-in functionality. In other words, I really just want the 2d sprite animation to work just like the standard 3d animation asset and use the standard editor features. Sounds easy :slight_smile:

Sounds great!

How many people will be working on the new 2d system at your company?
Why did yall choose unreal over other engines with better 2d features? (lol, I had you yall here before edit)

I mainly want better physics and notifications from animations.

Yes I would like to see this too, but it will depend on how decoupled the tooling is from the 3d skeletal mesh system. If it is not then I would like to provide alternative GUI tooling for this functionality.

  1. We are just a small indie studio, so initially it will be me working on this full time (with contractors for example assets)
  2. Yes agreed there are alternatives with much better 2d toolsets, but I feel Unreal outshines them in all other areas. Specifically: c++ with source, feature set / platform support, engine licensing model, Epics long term stability and great community!
  3. Noted!

How are things going? Is there a github repo where we can view progress? Trello for a roadmap? Thanks!

Hi , the plugin is just in planning at the moment so early days for such things. I am currently making some prototypes for how the batched renderer can work with the underlying Unreal renderer, while still remaining a plugin. I will post some updates about this when I have something I’m happy with. It is important to get the design of this right as everything else will build off off how this works :slight_smile:

Reg a public github repo, this is a commercial plugin, so that is not possible, but I will be providing full source through the marketplace. Trello roadmap is a great idea and I’ll get one set up a little further down the road.

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.

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.

Thanks for your support! Feature parity with Unity is the plan in the short term, but I have a few extra ideas as well :slight_smile:

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!


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


[table=“width: 300”]

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!) Making a Batched Sprite Renderer - Selection Issues - C++ - Epic Developer Community Forums

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 :slight_smile: