[RELEASED] BriteSprite - 2D Normalmapper and Lighting

Introducing a new tool for making your 2D games look great:

BriteSprite: 2d Normalmapper

www.2dAssassins.com/britesprite

Buy now | Demo and Website |
1472051--80984--$animated example.gif

BriteSprite is a tool used to add depth to your 2d artwork.

The process is simple: provide BriteSprite with between two and five lightmaps, and the tool will generate a high-quality normal map. BriteSprite includes several different algorithms to choose from, whether you’re looking for a subtle, smooth-shaded look or a sharp, highly dynamic shadow. These normal maps can drastically add depth and dramatic lighting to your 2d game.

BriteSprite lightmaps are greyscale images, drawn as if a light is shining directly on your artwork from each of the cardinal directions. Only the “top-lit” and “right-lit” lightmaps are absolutely required, but you can always improve the output quality by providing “left-lit”, “bottom-lit”, or “front-lit” lightmaps.

One of the best parts about BriteSprite is that you get to decide how much time to spend on each asset you want to light! Have a barrel that appears in the background of one of your levels once or twice? Quickly slap down two lightmaps and call it a day: the results will be easily good enough for a minor asset. Have a highly detailed, high-resolution set of animations for your main character? Spend a while painting full lightmaps for him or her, and you’ll end up with a flawless normal map.

BriteSprite’s core features:

  • High-quality normal map generation from two lightmaps
  • Support for up to five lightmaps for complex or highly specific art
  • Tight Unity integration: no need to switch applications!
  • Generated normal maps are shader agnostic–use them anywhere!
  • Fully functional in any version of Unity since 3.4, Pro or Free
  • Automatically optimizes import settings for pixel art or high-resolution art
  • Quick workflow supports batch processing and automatic naming
  • Normal maps are decoupled after processing–they can be used anywhere, any time, even on computers without BriteSprite!

BriteSprite works out of the box with Unity’s built-in normal mapped shaders, and includes a shader for attaching normal maps to Unity 4.3’s sprites.

Performance:

BriteSprite normal maps will perform equivalently with traditionally produced normal maps. They are suitable for any modern hardware, including mobile devices produced within the last few years.

This looks pretty neat. Is there any support for casting shadows?

Also, does it work easily with animated sprites or do we need to use a different shader?

Sorry for the delay–I didn’t see that we had a question!

BriteSprite’s normal maps work for shading within the sprite, but don’t affect art outside the sprite. That is to say, self-shadowing would occur, but one sprite wouldn’t cast a shadow on another sprite without some additional work. I decided to focus on sprite-specific solutions because there are many many different ways that shadow casting could work in a 2D game (top down, perspective, side-scroller) but sprite shading can be applied to most types of games in a straightforward way.

It will work with animated sprites. I’m working on including a few additional shaders out of the box that will play nicely with 2d Toolkit, etc, as well.

We’ve received a few emails regarding how the integration of BriteSprite with Unity Animated sprites works, so here’s a bit of clarification:

In order to provide accurate shading data to an animated character, you would need to generate a normal map for each frame of the animation. BriteSprite includes a batch processing option to speed up the generation/regeneration of many such frames at once. Alternatively, if you are using sprite sheets, you could generate a single normal map that matched the full sprite sheet. Either method works.

Unity’s built-in SpriteRenderer only changes one texture per frame, the main sprite texture. There is, however, a fairly easy way to get normal mapping to work with animated Unity sprites! All you need to do is have a MonoBehaviour that is attached to your animated sprites that detects when the sprite changes, and then updates the normal map assigned to the material accordingly. The next BriteSprite update will include an instance of this script, but if you need it sooner it would be fairly easy to write one of your own. Depending on your project’s or character’s specific needs, there could be benefits in customizing how these normal maps animate: certain animations might share normal maps, if the character doesn’t move dramatically.

BriteSprite has been updated to include a shader compatible with 2d Toolkit sprites out of the box!

What benefit is there to do it this way as opposed to:

  1. drawing a single heightmap
  2. letting unity convert it to normal map?

Does it work with repeating tiles(same sprite)?

Your results will look better.

1486277--82694--$snailex.jpg

Unity’s algorithm is very hit or miss in my experience. Sometimes, a well-drawn heightmap will work decently, and sometimes it won’t work at all. Furthermore, heightmaps lack a crucial element–directional information. BriteSprite allows you to have far better shading on a much wider variety of shapes than single heightmap->normal map extraction can.

Yes! If you look in our demo, the dungeon scene’s background is done with horizontally tiling sprites. As long as your artwork tiles, BriteSprite should work just fine.

2DAssassins,

Very cool asset you’ve got here. I’m curious to know if your built-in shader for Unity 4.3 sprites comes with any limitations. For instance, I know that other similar shaders disallow any rotating, mirroring, or dynamic batching of any sprites and do not support non-universal scaling (see the list of cons near the end of the page). These are all logical results to how the shader is scripted. Is yours scripted in the same way? Does your shader have any other restrictions that are known? Rotating, mirroring, and dynamic batching are a must for my 2D projects. I would most definitely be interested in purchasing your asset if its compatibility is ensured.

I’m interested in an answer to this question, too, esp. concerning sprite batching :slight_smile:

Thanks in advance,
Painter

Nice asset! Unity certainly needs more of this. I’m very interested in whether it has some specific functions.

I have a sprite sheet is imported as a Sprite 2D texture type (NOT a regular texture type). I do this in order to utilize Unity’s sprite slicing & pivot point placement, not to mention ease of dragging/dropping sprites into the scene view for quick prototyping.

I’ve also got custom drawn normal maps, which are very quick & easy for me to do the way I want them. I prefer to draw them myself in one single normal map. I apply these normal maps to the sprites using a custom shader that allows normal mapping on sprites. It works perfectly.

My problem arises when I apply a single normal map to a sprite that is sliced from a sprite sheet. The normal map stretches to the size of the entire sprite sheet - NOT the individual sprite. A workaround would be to make the normal map dimensions match its corresponding base sprite texture dimensions; however, I don’t want that as it is not very modular.

Here’s what I’d like to know:

  1. Can you bypass the normal mapping process in BriteSprite and just use my own normal map? I only create one as it entails every directional lighting. No need to generate one for me.
  2. Can I create a sprite sheet out of the normal maps? Something I’d be able to slice up (and animate if necessary).
  3. If I can create a sprite sheet out of them, are they required to correspond with a base sprite texture of matching dimensions? Let’s say I create a 8 tile x 4 tile sprite sheet & a 3 tile x 2 tile normal map. Could I apply any normal map to any sprite?

Whew, done! I know it’s a long post. I appreciate any help :slight_smile:

Am wondering how this differs (better/worse) from something like Sprite Lamp?

Does the current version of BriteSprite have this script? I haven’t been able to figure it out on my own :frowning:

I am willing to buy this asset, but without any updates/support - no money from me.

@2dAssassins I would like to try this asset but last update is for version 4.3, the website is down and no activity from you since 2014. I am willing to fix all the code in this asset if it helps reach my goal but 50$ for a wild guess is a lot of money.

Mind adjusting the price to something more reasonable considering this asset is abandoned and most likely unusable in its current state? Or make it available on github maybe?

I would appreciate it.