Git Product home page Git Product logo

spritelightkit's Introduction

SpriteLightKit

SpriteLightKit brings back the old two buffered blend trick to get pseudo lighting with just sprites. It handles the setup process of getting that second buffer blended with your normal scene.

how it works

The same scene with two different ambient light setups:

low ambient light brighter ambient light

Setup

  • create an empty GameObject as a child of your main camera and add the SpriteLightKit component
  • add the SpriteLightKitImageEffect component to your main camera and drag the SpriteLightKitBlendImageEffect.shader into the inspector in the shader property
  • set the Light Layer in the SpriteLightKit component, which is the layer you want to place your sprite lights on
  • remove the Light Layer from your main camera's culling mask so that it does not render the sprite lights
  • create some sprites using the SpriteLightMaterial and make sure they are on the Light Layer you chose in the previous step

You can set the ambient lighting by changing the background color of the camera on the SpriteLightKit GameObject. Each of your lights can use the normal sprite tint color to change how it affects the underlying scene. The SpriteLightKitImageEffect has a toggle for 1x or 2x multiplicative blending (bool use2xMultiplicationBlending). 2x is useful for a scene where the sprite lights can lighten or darken a scene. Use colors darker than the ambient color to darken the scene and lighter colors to lighten it.

Lights look best when they are white and falloff to 0 alpha. That lets you use the tint color to color the lights and the tint color.alpha to set the intensity of the lights. Get creative with your light shapes and experiment! If you need to occlude lights (if you have walls where light shouldn't pass for example) you can just use any black sprite and place it so that it blocks the light however you want it to.

Advanced Emissive Features

SpriteLightKit has some extra, more advanced features baked in as well along with some shaders/materials to help you utilize them. The following emissive features are for use on your normal GameObjects that are not on the Light Layer. The emissive materials will write to the stencil buffer which will then be read by the SpriteLightKitImageEffect and lights will not be rendered for those pixels. This basically makes the masked pixels always display as if lights do not affect them. Materials are provided that let you use a Sprite or a Mesh as the emissive mask.

Since the emissive materials main purpose is to write to the stencil buffer you can stick your geometry that uses them behind all other geometry. This gives you some flexibility when using the SpriteLightEmissiveSpriteMaterial. If it is behind your other Sprites/geometry then it will work like a mask. If it is in front of your other Sprites/geometry it will work like a mask and it will also be displayed.

  • SpriteLightEmissiveSpriteMaterial lets you use a Sprite as an emissive mask. Set the Alpha Cutoff of the Material to control which pixels will be discarded.
  • SpriteLightEmissiveMeshMaterial lets you use a Mesh as an emissive mask.

Advanced Shadow Features

SpriteLightKit can also cast simple offset shadows. The current implementation uses a brute force approach to find affected lights but a b-tree or other spatial search will be added to speed things up. The shadow shader is ready to handle approximated planar shadows (via skew and scale in addition to the offset) but it hasn't yet been implemented due to some decisions that need to be made about how to best handle things.

Implementing shadows requires the following steps:

  • stick the SpriteLightKitLightManager on a GameObject in your scene
  • add the SpriteLightKitShadow component to any objects that should project shadows
  • make sure the objects that should cast shadows have the SpriteLightShadowedMaterial on them

Credit

The sweet little town sketch is from the amazing work of @pixelatedcrown. Follow on Twitter and Tumblr to see more awesome art!

License

Attribution-NonCommercial-ShareAlike 3.0 Unported with simple explanation with the attribution clause waived. You are free to use SpriteLightKit in any and all games that you make. You cannot sell SpriteLightKit directly or as part of a larger game asset.

spritelightkit's People

Contributors

prime31 avatar slonermike avatar brianasu-notdoppler avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.