Skybox Generator

From Unify Community Wiki
Jump to: navigation, search

Author: Ethan Vosburgh (with help from Joe ;)

Description

Generates the 6 images necessary to create a Skybox in Unity.

Usage

You must place the script in a folder named "Editor" in your project's Assets folder for it to work properly.

The script will create a menu called "Custom/Render Skybox". When selected a dialog will pop up with a selection for the Transform you want to use as the origin point for the Skybox. Once the Transform is set hit "Render" and wait a few seconds, then Refresh the Project Pane and the 6 generated images will import into Unity in a folder named "Skyboxes". Be warned that each time you run this script it will overwrite previously generated images.

JavaScript - SkyBoxGenerator.js

#pragma strict
class SkyBoxGenerator extends ScriptableWizard
{
    var renderFromPosition : Transform;
 
    var skyBoxImage = new Array ("frontImage", "rightImage", "backImage", "leftImage", "upImage", "downImage");
 
    var skyDirection = new Array (Vector3 (0,0,0), Vector3 (0,-90,0), Vector3 (0,180,0), Vector3 (0,90,0), Vector3 (-90,0,0), Vector3 (90,0,0));
 
 
    function OnWizardUpdate()
    {
        helpString = "Select transform to render from";
        isValid = (renderFromPosition != null);
    }
 
    function OnWizardCreate()
    {
        var go = new GameObject ("SkyboxCamera", Camera);
 
        go.camera.backgroundColor = Color.black;
        go.camera.clearFlags = CameraClearFlags.Skybox;
        go.camera.fieldOfView = 90;    
        go.camera.aspect = 1.0;
 
        go.transform.position = renderFromPosition.position;
 
        if (renderFromPosition.renderer)
        {
            go.transform.position = renderFromPosition.renderer.bounds.center;
        }
 
        go.transform.rotation = Quaternion.identity;
 
        for (var orientation = 0; orientation < skyDirection.length ; orientation++)
        {
            renderSkyImage(orientation, go);
        }
 
        DestroyImmediate (go);
    }
 
    @MenuItem("Custom/Render Skybox", false, 4)
    static function RenderSkyBox()
    {
        ScriptableWizard.DisplayWizard ("Render SkyBox", SkyBoxGenerator, "Render!");
    }
 
    function renderSkyImage(orientation : int, go : GameObject)
    {
	go.transform.eulerAngles = skyDirection[orientation];
	var screenSize = 1024;
	var rt = new RenderTexture (screenSize, screenSize, 24);
	go.camera.targetTexture = rt;
	var screenShot = new Texture2D (screenSize, screenSize, TextureFormat.RGB24, false);
	go.camera.Render();
	RenderTexture.active = rt;
	screenShot.ReadPixels (Rect (0, 0, screenSize, screenSize), 0, 0); 
 
	RenderTexture.active = null;
	DestroyImmediate (rt);
	var bytes = screenShot.EncodeToPNG(); 
 
	var directory = "Assets/Skyboxes";
	if (!System.IO.Directory.Exists(directory))
	System.IO.Directory.CreateDirectory(directory);
	System.IO.File.WriteAllBytes (System.IO.Path.Combine(directory, skyBoxImage[orientation] + ".png"), bytes);   
    }
}
Personal tools
Namespaces

Variants
Actions
Navigation
Extras
Toolbox