For anyone interested in this script, I edited it to work in Unity 3. Since there is a bug that doesn’t let eulerAngles read a vector from an array I edited the script to just run the renders from functions defined for each angle.
It’s a sloppy mess but works.
It works the same as the original skybox generator but allows you adjust the Far Clip Plane, Skybox or Solid Color and what Color for Solid Color.
Great for using Unity terrain to make mountains or forest skyboxes. you can also render on black Solid Color and cut the image out and place them on planes and you have billboard trees or mountains to populate your BGs with. Lots of options.
Enjoy
SkyBoxGenerator.js
#pragma strict
class SkyBoxGenerator extends ScriptableWizard
{
var renderFromPosition : Transform;
var skyBoxImage = new Array ("frontImage", "rightImage", "backImage", "leftImage", "upImage", "downImage");
var farClip : float = 1000;
var skyBox : boolean;
var skyColor = Color (0,0,0,0);
function OnWizardUpdate()
{
helpString = "Select transform to render from";
isValid = (renderFromPosition != null);
}
function OnWizardCreate()
{
var go = new GameObject ("SkyboxCamera", Camera);
if (skyBox)
go.camera.clearFlags = CameraClearFlags.Skybox;
else
go.camera.backgroundColor = skyColor;
go.camera.clearFlags = CameraClearFlags.Skybox;
go.camera.fieldOfView = 90;
go.camera.aspect = 1.0;
go.camera.farClipPlane = farClip;
go.transform.position = renderFromPosition.position;
if (renderFromPosition.renderer)
{
go.transform.position = renderFromPosition.renderer.bounds.center;
}
go.transform.rotation = Quaternion.identity;
renderSkyImage0 (0, go);
renderSkyImage1 (1, go);
renderSkyImage2 (2, go);
renderSkyImage3 (3, go);
renderSkyImage4 (4, go);
renderSkyImage5 (5, go);
DestroyImmediate (go);
}
@MenuItem("Custom/Render Skybox", false, 4)
static function RenderSkyBox()
{
ScriptableWizard.DisplayWizard ("Render SkyBox", SkyBoxGenerator, "Render!");
}
function renderSkyImage0(orientation : int, go : GameObject)
{
go.transform.eulerAngles = Vector3 (0,0,0);
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);
//
}
function renderSkyImage1(orientation : int, go : GameObject)
{
go.transform.eulerAngles = Vector3 (0,-90,0);
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);
//
}
function renderSkyImage2(orientation : int, go : GameObject)
{
go.transform.eulerAngles = Vector3 (0,180,0);
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);
//
}
function renderSkyImage3(orientation : int, go : GameObject)
{
go.transform.eulerAngles = Vector3 (0,90,0);
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);
//
}
function renderSkyImage4(orientation : int, go : GameObject)
{
go.transform.eulerAngles = Vector3 (-90,0,0);
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);
//
}
function renderSkyImage5(orientation : int, go : GameObject)
{
go.transform.eulerAngles = Vector3 (90,0,0);
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);
//
}
}