Voxels for Unity: Release at the Asset Store

In fall the tool had been rejected by an administrator of the Unity Asset Store because they perceived it as a complete tool, which cannot compete with existing packages. Generated objects with high color variation had too many draw calls and the complete conversion process was taking too much time. After explaining that my extension focuses on the scanning step, that this step is done in a unique way by using the GPU so it would add a matchless feature to the store and that the generator scripts are only examples to show the ability to use it in existing or own frameworks, the administrator advised me to adopt the description, to change the title and maybe to include more examples. I really modified the statement and added a subtitle to underline the main function of the extension. But before I did a lot of work to improve some of the points, which had been criticized.

A mesh and a tree from the Asset Store had been converted to voxel objects. Half of a combined object had been voxelized and is displayed using a sphere for every cell.

First I tried to implement multi-threading and I could really accelerate the rasterizing by 100% for more complex tasks. Unfortunately sometimes there are errors in the result objects and I did not find the reason up to now. So I removed the option from the inspector but it is still available using an undocumented API command.
Next I included an iterator to access only filled cells and I changed the mesh processor script to utilize it. That way I improved the building time for voxel meshes. Moreover I added a new processor class to store coloration data into a 2D texture and implemented options in the mesh script to make use of them. Such data can also be stored per vertex now. Both ways are allowing the merge objects with high color variation much better and so massively reducing the draw calls. Thus I optimized the creation as well as the presentation.

As you can see in the manual I refactored the class Voxels.Converter to Voxels.Rasterizer because the former name rather described the whole execution. And I removed Voxel from scripts like Voxels.VoxelMesh so the duplicated labels vanished.

I resubmitted the package on Thursday. In fall it took about two weeks to get a rejection notification but this time “Voxel for Unity: Rasterizer” has gone live within a day and can be purchased at the Asset Store now.

Category: Content Creation, Technology, Voxels / Author: Lightrocker / Date: 2016-02-21 - Sunday / Comment(s): none

Voxel for Unity: Tutorial

I added a tutorial video to YouTube. It shows how to add the extension to your objects, so they get converted to voxel meshes. Moreover you can see how to set up materials for best outcome and how important properties of the plug-in impact the result.



Please turn on the sub-titles, if you want to get more information!

Category: Content Creation, Technology, Voxels / Author: Lightrocker / Date: 2015-10-09 - Friday / Comment(s): none

Voxels for Unity 1.0: The manual

I completed the manual for the first version of the tool, which is still waiting for approval to be published in the Unity Asset Store.

You can download the PDF here or read it on SlideShare:

Category: Content Creation, Technology, Voxels / Author: Lightrocker / Date: 2015-09-24 - Thursday / Comment(s): none

Voxels for Unity: The release version



“Voxels” is being published as an extension to the Unity runtime and editor via the Asset Store. Its purpose is to scan existing graphics for its colors or materials and store those into a three-dimensional data structure. Those scanned cells can be called “volume pixels”, or voxels for short, and are being transferred to processor classes. Two types of processors are included in the release package.
The first one constructs a hierarchy of game objects from the incoming data and attaches a specified mesh, a renderer and a material to every of its objects. The material is instantiated using a standard shader or a given template and modulated by the sampled color data of the individual cell. An optimization can be enabled to merge multiple voxels that share the same material into single meshes.
And the second processor is able to store the voxel data into a particle system, which is also instantiated by a given one.
Because there is a very simple programming interface it is easy to write own scripts, which are building other game objects, passing the voxels to volume textures, converting the data for (existing) scripts respectively plug-ins or even exporting them to be used outside of Unity. You can use the two included processor classes as blueprints for your own efforts.

But you can also stay away from programming and only utilize the user interface of the components to create appealing voxel graphics. The conversion can be done in the edit mode and while the game or application is running.

Converter inspector in edit mode Converter inspector in runtime while processing

It is also possible to mix inspector adjustments and scripting. For example you set up converter and processor properties in the editor but the operation will only be started when an event in the game like loading a level occurs.

The scanning process works by rendering the desired items in slices to off-screen buffers, which are being copied to main memory afterwards. Whenever a pixel is set, its color is added to a cell in an octree. Later the colors are being combined per cell using mathematical operations or a more complex algorithm for the most frequent color method. That way source materials, lights and shaders remain intact and you get a result comparable to the original, if the settings are right. And this solution is the unique feature of the tool because other, existing extensions are using the ray casting methods provided by Unity. Those methods do not perceive vertex transformations by the shader or material computations per pixel.

Voxels logo

Further on you can also create results that only resample the shape of the basis but contain total different surfaces and appear as holograms, dust clouds, artistic effects and so on. Another option is the ability to animate voxels, e.g. for detonating 3D models or transforming between different ones.

Converter inspector in runtime while processing

Unfortunately not everything works the way it has been planned. Shadow maps seem to become effectless and particle systems are culled in the scanning process because of the near depth clipping planes. Up to now no options could be found to prompt Unity to use other clipping values for shadow map creation or not to hide specific objects while rendering. But I am still looking for answers. Moreover I want to include new features into upcoming versions. Some will help to make the conversion more powerful, others may handle the results in various directions.

Category: Programming, Technology, Voxels / Author: Lightrocker / Date: 2015-09-16 - Wednesday / Comment(s): none

Voxels: A personal introduction

In my free time of the past year I developed a tool for Unity, which arose out of Project: Evolution. For the planned main effect I need pixels in three-dimensional shape to advance graphically from level to level. Those cells are commonly called voxels, which is a combination of “volume” and “pixels”, and they have to be generated from 3D models with generic meshes like I did it for the 2D presentation in the prototype. So I started to program a solution to do the conversion and shortly afterwards a decision grew inside me. Because there was no plug-in comparable to mine I wanted to release it as a product, which other people can use.

The actual functionality for meshes had been finished relatively rapidly but at that state it was a quick-and-dirty implementation, which could be used in-house but was not ready to be published. I began to adapt the user interface and polish the functionality. And it lasted a long time and there are still sections to improve and features to be added. But I am satisfied by now and intent to release “Voxels overview” in the next days.

Category: Programming, Technology, Voxels / Author: Lightrocker / Date: 2015-09-14 - Monday / Comment(s): none

Prototyping summary

My full time prototyping phase is over and I have not nearly reached the state I wanted to. But I learned to utilize Unity and how to implement software using it. And I have got a good base to continue the development in my spare time, so you will read, hear and see more of “Project: Evolution” in the future.

There are two main reasons, why the development schedule could not be translated into action. At first the plan was too tight and I had not enough time every single feature would have required. And the second point dramatized that even more. I abstracted too much, what does not support fast prototyping. But it will help me in the future to add new functionality and content in shorter time and is essential for the flexibility in configuration and modding.

Project: Evolution screenshot

Screenshot of “Project: Evolution” from 2014-04-11

You can still track the progress of the game when you follow my updates on Twitter and Facebook. I hope that you enjoyed and will enjoy the insights in the development I gave and will still give.

Category: Game Development, Project: Evolution / Author: Lightrocker / Date: 2014-04-13 - Sunday / Comment(s): none

Update on “Project: Evolution”

Here are two screenshots from the current process of the prototype:

Project: Evolution Project: Evolution

You can see day by day progress by watching the highlights on YouTube:


Category: Project: Evolution / Author: Lightrocker / Date: 2014-04-04 - Friday / Comment(s): 1

Let’s get started!

The development of “Project: Evolution” has just begun.

Watch the stream on Twitch: www.twitch.tv/Lightrocker
Follow my tweets: twitter.com/LightrockerRon
See my updates on Facebook: www.facebook.com/LightrockerRon

I hope you will enjoy it!

Category: Content Creation, Game Development, Programming, Project: Evolution / Author: Lightrocker / Date: 2014-03-26 - Wednesday / Comment(s): none

Development Schedule: Building a game in less than three weeks!

Yes! A full game! Okay… It will only be a playable prototype. But hey, you nearly cannot have a sensational headline without bending the truth today. Nonetheless I intend to do a lot of things in short time without knowing my tools well. But I have got a plan:

Time Plan Result
Week 1
Day 1 - Set up the camera
- Import a space craft from the asset store
- Make the player vehicle controllable
- Cameras for 3 levels set
- Free space craft imported
- Player can control vehicle view dependent with keys
- Mouse/touch input is not finished
Day 2 - Import enemies
- Create hostile movements by using mathematical functions
- Project floating-point movement to level resolution grid
- Mouse input finished
- Two free space vehicle imported as enemies
- Enemy spawning functionality implemented
- Hostile movements created using predefined way points, but not finished
- Resolution grid missing
Day 3 - Render entities to textures and display results
- Apply shaders to the sprites for "quality downgrade" to match retro style
- Scene is being drawn to a render texture
- Vehicles are placed on a grid
- "Retro" shader is absent
Week 2 – Research for modding options
Day 4 - Implement shooting and destruction system - Post-process shader program added
- Grid and render texture functions have been improved
- No projectile/destruction system introduced
Day 5 - Add environment (from asset store?) - Post-processing has been refined
- Weapon/Projectile system and simple destructions are included now
- Environmental visualization has not been addressed
Day 6 - Write "AI" scripts for enemy behaviour
- Integrate scoring system
- An environment was added
- Simple scoring system has been implemented
- Projection to 2D grid was refined
- First attempt to integrate spline movement
- Research for asset loading capabilities
Day 7 - Include sounds and music
- Refine shading system
- Spline movement between way points fully integrated
- Background music inserted
- Shoot and hit sound effects added
Day 8 - Build framework including menus - Movement of the environment added on
- Level abstraction and loading functionality assembled
Week 3 – Investigate releasing options
- Test, fix and improve
Day 9 - Level loading refined
- Colors mapped to Commodore 64 palette
Day 10 - Environmental shader for harder edges added
- Started to replace color palette constants by grading texture map
Day 11 - Finished to replace color palette constants by grading texture map
- Trying various combinations of environmental and post-process shader properties
Day 12 - Environment rendering for stage two simplified
- Directional alignment adapted to grid
- Indirect movement by mouse positioning introduced
Day 13 - Publish prototype - Vital energy for objects introduced
- Sounds can be played using an identifier
- Player is destructible and will respawn after some time
- NO DEMO HAS BEEN PUBLISHED!

I will amend and adjust items, when the right time has come.

Category: Project: Evolution / Author: Lightrocker / Date: 2014-03-18 - Tuesday / Comment(s): none

The passion


If you read my last post, you may recognize that I went from a full time game developer to a software architect, who has professionally little to do with computer games. And I regret that very much. So I decided to take a break and defer my current projects for nearly three weeks. In that time I want to create and publish a new game prototype, which means that I am planning to develop a fully playable demo version as polished as possible in thirteen workdays. The result will be the foundation for improvements, advancements and experiments whenever I find time for it. But for now I am focusing the prototype and the time span is very short for a game, which should generate more fun than frustration. I am not practiced in small projects anymore so I have to be very disciplined to reach my self-defined goal. But even if my intention fails, I will have improved my skills and will have done some research for a current project of our studio.

The prototype

The idea for the game emerged about five years ago and although there is already a published game, which assembled the most innovative core feature in the meantime, it belongs to the RPG genre. My prototype will be a Shoot’em Up (or “shmup” for short) and I call it “Project: Evolution”. The player will control a aircraft (most likely a space ship) and has to fight against appearing waves of enemies. A very familiar representative is “Space Invaders” from 1978.
For my prototype I am aligning for a subsequent time but not for a single spot. In the first level you look from the top down to your ship and the scenery. That will change to a bird’s view in the second and side perspective in the third one. And that is not all, which is changing. Screen resolution, color depth, graphical complexity and even player control will increase from stage to stage. At first you may only see ships and stars, then some kind of blocky space station exterior and at last you will enter one displayed using fantastic parallax scrolling. Everything should look like 2D pixel art from “Zaxxon“, “R-Type” and other similar hits from more than two decades before.
As you might see the project is showcasing some of the evolution of the genre and that is the origin for the name. The concept is kind of similar to the earlier mentioned role-playing game named “Evoland“.

Free spaceship fighter
Free spaceship model by CgPitbull

The execution

Three years ago I started to develop the basic technology once before. It was written in XNA to be able the run the game on an Xbox 360, PC and maybe Windows Phone. But now XNA is dead and I favorite a more common opportunity called “Unity“. It became a famous game engine and I need a well established one to realize my tight time schedule whereas I must give up technical control, because the source code is not available to me and so a lot of work is done in a black box. In return I can rely on an optimized and tested base, which is working on nearly all important gaming platforms, and I save much time in not needing to develop fundamental technology.
Even though the prototype may only show two-dimensional graphics, every art source should exist as 3D model. I want to render those to textures and modify them using shaders with specific adjustments for every stage. That creates a distinctive design in the advancing look and saves me hours on pixelating sprites several times. Moreover it should make the game moddable in an easier way because I am already planning to support that in the demo, but it is the largest variable in my schedule. It should allow players to some kind of recreate their favorite Shoot’em Ups from the past or to build completely new ones. And there is another feature, which is only possible with three-dimensional base material, but I will not include it yet so that is something to tell you about in the future.

The insight

As you can realize I am not only trying to make the final game known, I also try to generate public awareness for the development by writing about it before it starts. And I will extend my efforts when it has begun by posting tweets, publishing screenshots, summarizing collected experience and maybe streaming the progressing results. Everybody, who is interested to be up to date, should have a look on my Twitter and my public Facebook account. Not everything will land on this blog but everything here will be linked on the social networks.
Why will I devote so much time for social interaction, when I could spend it for development instead? First and foremost I want to generate buzz for the release of course. I reckon that is very hard but maybe I will be in luck. Secondly I hope to get support from the community and I want to give some help back by making my information public available. And at last I would like that people are getting interested in modding the game as soon as the prototype is being released.

The release

I am planning the publish the prototype at the last day. Perhaps it only appears as a browser game on a site like “Kongregate” but I will also investigate in the options to bring it to the “Windows Store” or the “Windows Phone Store“. The reason for preferring Windows over Android and iOS is simply because my Unity license includes export options for “Windows (Phone) 8” but not for the other two. Still there are a lot of time consuming things to pay attention to to get released on an app marketplace. So I do not know if I am able to accomplish it in my short time frame.

The development will start on Wednesday, March 26th, 2014!

 

Category: Game Development, Project: Evolution / Author: Lightrocker / Date: 2014-03-13 - Thursday / Comment(s): none

« Previous Entries