Sky Sphere Script

I’ve noticed quite a few people posting questions about creating skyboxes (sky boxes, skycubes, sky cubes, skydomes, sky domes, there, all the tags I can think of. XD) for use in Panda3D. I was looking around for ways to do that myself, and I decided to come up with my own solution. Then I figured I should share that solution with all of you.

The purpose of this script is to create a sphere and use a 3D cube map to take a 6 image skybox and wrap it seamlessly around the sphere, to create a perfect all around backdrop.

My intention when making this script was to use it in combination with the Spacescape program created in Ogre3D by Alex Peterson. It’s a phenomenal program for making beautiful outer space skyboxes and I highly recommend it. Here’s a link to the Spacescape page on his blog: http://alexcpeterson.com/spacescape or you can look up Spacescape on Sourceforge. Note that if you do use Spacescape, you’ll need to renumber the images it creates from 1-6 to 0-5. I also had to swap images 2 and 3 (after they were renumbered, to be even more explicit I am referring to the images called top and bottom by Spacescape) by changing their names.

This script will load an InvertedSphere egg file, generate the 3D texture coordinates, apply the cube map, and then save out a bam file. All you need to do in your game, then, is load the bam file, set the bin and depth sorting, and create a task so that repositions the sphere to the camera’s position each frame. The last piece of code in this post will explain how to do that stuff as well.

Here is the script:

import direct.directbase.DirectStart
from direct.showbase.DirectObject import DirectObject
from pandac.PandaModules import Texture, TextureStage, DirectionalLight, AmbientLight, TexGenAttrib, VBase4

class SkySphere(DirectObject):
	def __init__(self):		
		self.sphere = loader.loadModel("InvertedSphere.egg")
		# Load a sphere with a radius of 1 unit and the faces directed inward.
		
		self.sphere.setTexGen(TextureStage.getDefault(), TexGenAttrib.MWorldPosition)
		self.sphere.setTexProjector(TextureStage.getDefault(), render, self.sphere)
		self.sphere.setTexPos(TextureStage.getDefault(), 0, 0, 0)
		self.sphere.setTexScale(TextureStage.getDefault(), .5)
		# Create some 3D texture coordinates on the sphere. For more info on this, check the Panda3D manual.
		
		tex = loader.loadCubeMap("BlueGreenNebula_#.png")
		self.sphere.setTexture(tex)
		# Load the cube map and apply it to the sphere.
		
		self.sphere.setLightOff()
		# Tell the sphere to ignore the lighting.
			
		self.sphere.setScale(1000)
		# Increase the scale of the sphere so it will be larger than the scene.
		
		self.sphere.reparentTo(render)
		# Reparent the sphere to render so you can see it.
		
		result = self.sphere.writeBamFile("SkySphere.bam")
		# Save out the bam file.
		print(result)
		# Print out whether the saving succeeded or not.

SS = SkySphere()
run()

Here is the code you need to use the skysphere in your game:

self.skysphere = loader.loadModel("Tracks/Morgenstern/SkySphere.bam")
self.skysphere.setBin('background', 1)
self.skysphere.setDepthWrite(0) 
self.skysphere.reparentTo(render)
taskMgr.add(self.skysphereTask, "SkySphere Task")

def skysphereTask(self, task):
	self.skysphere.setPos(base.camera, 0, 0, 0)
	return task.cont

Edit: One more note. You should make sure to run this script in the folder where the SkySphere.bam will be loaded from, and have your images for the cubemap be wherever they are going to be in relation to the bam file. When it saves out the bam, it will be written with relative path names, and you want those path names to be correct.

Here is the first half of the inverted sphere egg file:

<CoordinateSystem> { Y-Up }

<Group> groundPlane_transform {
}
<Group> "InvertedSphere:default1" {
  <VertexPool> "InvertedSphere:defaultShape.verts" {
    <Vertex> 0 {
      -5.65713e-017 -0.92388 -0.382683
      <UV> { 0.717778 0.12875 }
      <Normal> { 1.14254e-008 0.924039 0.382299 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 1 {
      -0.130885 -0.92388 -0.359605
      <UV> { 0.772778 0.12875 }
      <Normal> { 0.130754 0.924039 0.359243 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 2 {
      -6.12323e-017 -1 0
      <UV> { 0.745278 0.005 }
      <Normal> { 9.71244e-009 1 0 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 3 {
      -0.245984 -0.92388 -0.293153
      <UV> { 0.827778 0.12875 }
      <Normal> { 0.245737 0.924039 0.292858 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 4 {
      -6.12323e-017 -1 0
      <UV> { 0.800278 0.005 }
      <Normal> { 9.71244e-009 1 0 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 5 {
      -0.331414 -0.92388 -0.191342
      <UV> { 0.882778 0.12875 }
      <Normal> { 0.331081 0.924039 0.191149 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 6 {
      -6.12323e-017 -1 0
      <UV> { 0.855278 0.005 }
      <Normal> { 9.71244e-009 1 0 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 7 {
      -0.37687 -0.92388 -0.0664523
      <UV> { 0.937778 0.12875 }
      <Normal> { 0.376491 0.924039 0.0663855 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 8 {
      -6.12323e-017 -1 0
      <UV> { 0.910278 0.005 }
      <Normal> { 9.71244e-009 1 0 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 9 {
      -0.37687 -0.92388 0.0664523
      <UV> { 0.992778 0.12875 }
      <Normal> { 0.376491 0.924039 -0.0663855 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 10 {
      -6.12323e-017 -1 0
      <UV> { 0.965278 0.005 }
      <Normal> { 9.71244e-009 1 0 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 11 {
      -0.37687 -0.92388 0.0664523
      <UV> { 0.00277777 0.12875 }
      <Normal> { 0.376491 0.924039 -0.0663855 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 12 {
      -0.331414 -0.92388 0.191342
      <UV> { 0.0577778 0.12875 }
      <Normal> { 0.331081 0.924039 -0.191149 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 13 {
      -6.12323e-017 -1 0
      <UV> { 0.0302778 0.005 }
      <Normal> { 9.71244e-009 1 0 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 14 {
      -0.245984 -0.92388 0.293153
      <UV> { 0.112778 0.12875 }
      <Normal> { 0.245737 0.924039 -0.292858 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 15 {
      -6.12323e-017 -1 0
      <UV> { 0.0852778 0.005 }
      <Normal> { 9.71244e-009 1 0 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 16 {
      -0.130885 -0.92388 0.359605
      <UV> { 0.167778 0.12875 }
      <Normal> { 0.130754 0.924039 -0.359244 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 17 {
      -6.12323e-017 -1 0
      <UV> { 0.140278 0.005 }
      <Normal> { 9.71244e-009 1 0 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 18 {
      -6.12323e-017 -1 0
      <UV> { 0.195278 0.005 }
      <Normal> { 9.71244e-009 1 0 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 19 {
      -5.65713e-017 -0.92388 0.382683
      <UV> { 0.222778 0.12875 }
      <Normal> { 0 0.924039 -0.382299 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 20 {
      -6.12323e-017 -1 0
      <UV> { 0.250278 0.005 }
      <Normal> { 9.71244e-009 1 0 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 21 {
      0.130885 -0.92388 0.359605
      <UV> { 0.277778 0.12875 }
      <Normal> { -0.130754 0.924039 -0.359244 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 22 {
      -6.12323e-017 -1 0
      <UV> { 0.305278 0.005 }
      <Normal> { 9.71244e-009 1 0 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 23 {
      0.245984 -0.92388 0.293153
      <UV> { 0.332778 0.12875 }
      <Normal> { -0.245737 0.924039 -0.292858 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 24 {
      -6.12323e-017 -1 0
      <UV> { 0.360278 0.005 }
      <Normal> { 9.71244e-009 1 0 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 25 {
      0.331414 -0.92388 0.191342
      <UV> { 0.387778 0.12875 }
      <Normal> { -0.331081 0.924039 -0.191149 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 26 {
      -6.12323e-017 -1 0
      <UV> { 0.415278 0.005 }
      <Normal> { 9.71244e-009 1 0 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 27 {
      0.37687 -0.92388 0.0664523
      <UV> { 0.442778 0.12875 }
      <Normal> { -0.376491 0.924039 -0.0663855 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 28 {
      0.37687 -0.92388 -0.0664523
      <UV> { 0.497778 0.12875 }
      <Normal> { -0.376491 0.924039 0.0663855 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 29 {
      -6.12323e-017 -1 0
      <UV> { 0.470278 0.005 }
      <Normal> { 9.71244e-009 1 0 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 30 {
      0.331414 -0.92388 -0.191342
      <UV> { 0.552778 0.12875 }
      <Normal> { -0.331081 0.924039 0.191149 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 31 {
      -6.12323e-017 -1 0
      <UV> { 0.525278 0.005 }
      <Normal> { 9.71244e-009 1 0 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 32 {
      0.245984 -0.92388 -0.293153
      <UV> { 0.607778 0.12875 }
      <Normal> { -0.245737 0.924039 0.292858 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 33 {
      -6.12323e-017 -1 0
      <UV> { 0.580278 0.005 }
      <Normal> { 9.71244e-009 1 0 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 34 {
      0.130885 -0.92388 -0.359605
      <UV> { 0.662778 0.12875 }
      <Normal> { -0.130754 0.924039 0.359244 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 35 {
      -6.12323e-017 -1 0
      <UV> { 0.635278 0.005 }
      <Normal> { 9.71244e-009 1 0 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 36 {
      -6.12323e-017 -1 0
      <UV> { 0.690278 0.005 }
      <Normal> { 9.71244e-009 1 0 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 37 {
      -4.32978e-017 -0.707107 -0.707107
      <UV> { 0.717778 0.2525 }
      <Normal> { -1.91382e-008 0.707519 0.706695 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 38 {
      -0.241845 -0.707107 -0.664463
      <UV> { 0.772778 0.2525 }
      <Normal> { 0.241704 0.707519 0.664076 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 39 {
      -0.454519 -0.707107 -0.541675
      <UV> { 0.827778 0.2525 }
      <Normal> { 0.454255 0.707518 0.54136 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 40 {
      -0.612372 -0.707107 -0.353553
      <UV> { 0.882778 0.2525 }
      <Normal> { 0.612016 0.707519 0.353347 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 41 {
      -0.696364 -0.707107 -0.122788
      <UV> { 0.937778 0.2525 }
      <Normal> { 0.695958 0.707519 0.122716 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 42 {
      -0.696364 -0.707107 0.122788
      <UV> { 0.992778 0.2525 }
      <Normal> { 0.695958 0.707519 -0.122716 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 43 {
      -0.696364 -0.707107 0.122788
      <UV> { 0.00277777 0.2525 }
      <Normal> { 0.695958 0.707519 -0.122716 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 44 {
      -0.612372 -0.707107 0.353553
      <UV> { 0.0577778 0.2525 }
      <Normal> { 0.612016 0.707519 -0.353347 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 45 {
      -0.454519 -0.707107 0.541675
      <UV> { 0.112778 0.2525 }
      <Normal> { 0.454255 0.707519 -0.541359 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 46 {
      -0.241845 -0.707107 0.664463
      <UV> { 0.167778 0.2525 }
      <Normal> { 0.241704 0.707519 -0.664076 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 47 {
      -4.32978e-017 -0.707107 0.707107
      <UV> { 0.222778 0.2525 }
      <Normal> { 0 0.707519 -0.706695 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 48 {
      0.241845 -0.707107 0.664463
      <UV> { 0.277778 0.2525 }
      <Normal> { -0.241704 0.707519 -0.664076 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 49 {
      0.454519 -0.707107 0.541675
      <UV> { 0.332778 0.2525 }
      <Normal> { -0.454255 0.707519 -0.541359 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 50 {
      0.612372 -0.707107 0.353553
      <UV> { 0.387778 0.2525 }
      <Normal> { -0.612016 0.707519 -0.353347 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 51 {
      0.696364 -0.707107 0.122788
      <UV> { 0.442778 0.2525 }
      <Normal> { -0.695958 0.707519 -0.122716 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 52 {
      0.696364 -0.707107 -0.122788
      <UV> { 0.497778 0.2525 }
      <Normal> { -0.695958 0.707519 0.122716 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 53 {
      0.612372 -0.707107 -0.353553
      <UV> { 0.552778 0.2525 }
      <Normal> { -0.612016 0.707519 0.353347 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 54 {
      0.454519 -0.707107 -0.541675
      <UV> { 0.607778 0.2525 }
      <Normal> { -0.454255 0.707519 0.541359 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 55 {
      0.241845 -0.707107 -0.664463
      <UV> { 0.662778 0.2525 }
      <Normal> { -0.241704 0.707519 0.664076 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 56 {
      -2.34326e-017 -0.382683 -0.92388
      <UV> { 0.717778 0.37625 }
      <Normal> { -3.0774e-008 0.38306 0.923723 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 57 {
      -0.315985 -0.382683 -0.868163
      <UV> { 0.772778 0.37625 }
      <Normal> { 0.315932 0.38306 0.868016 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 58 {
      -0.593858 -0.382683 -0.707733
      <UV> { 0.827778 0.37625 }
      <Normal> { 0.593758 0.38306 0.707613 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 59 {
      -0.800103 -0.382683 -0.46194
      <UV> { 0.882778 0.37625 }
      <Normal> { 0.799968 0.38306 0.461862 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 60 {
      -0.909844 -0.382683 -0.16043
      <UV> { 0.937778 0.37625 }
      <Normal> { 0.90969 0.38306 0.160403 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 61 {
      -0.909844 -0.382683 0.16043
      <UV> { 0.992778 0.37625 }
      <Normal> { 0.90969 0.38306 -0.160403 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 62 {
      -0.909844 -0.382683 0.16043
      <UV> { 0.00277777 0.37625 }
      <Normal> { 0.90969 0.38306 -0.160403 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 63 {
      -0.800103 -0.382683 0.46194
      <UV> { 0.0577778 0.37625 }
      <Normal> { 0.799968 0.38306 -0.461862 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 64 {
      -0.593858 -0.382683 0.707733
      <UV> { 0.112778 0.37625 }
      <Normal> { 0.593758 0.38306 -0.707613 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 65 {
      -0.315985 -0.382683 0.868163
      <UV> { 0.167778 0.37625 }
      <Normal> { 0.315932 0.38306 -0.868016 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 66 {
      -2.34326e-017 -0.382683 0.92388
      <UV> { 0.222778 0.37625 }
      <Normal> { 0 0.38306 -0.923723 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 67 {
      0.315985 -0.382683 0.868163
      <UV> { 0.277778 0.37625 }
      <Normal> { -0.315932 0.38306 -0.868016 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 68 {
      0.593858 -0.382683 0.707733
      <UV> { 0.332778 0.37625 }
      <Normal> { -0.593758 0.38306 -0.707613 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 69 {
      0.800103 -0.382683 0.46194
      <UV> { 0.387778 0.37625 }
      <Normal> { -0.799968 0.38306 -0.461862 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 70 {
      0.909844 -0.382683 0.16043
      <UV> { 0.442778 0.37625 }
      <Normal> { -0.90969 0.38306 -0.160403 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 71 {
      0.909844 -0.382683 -0.16043
      <UV> { 0.497778 0.37625 }
      <Normal> { -0.90969 0.38306 0.160403 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 72 {
      0.800103 -0.382683 -0.46194
      <UV> { 0.552778 0.37625 }
      <Normal> { -0.799968 0.38306 0.461862 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 73 {
      0.593858 -0.382683 -0.707733
      <UV> { 0.607778 0.37625 }
      <Normal> { -0.593758 0.38306 0.707613 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 74 {
      0.315985 -0.382683 -0.868163
      <UV> { 0.662778 0.37625 }
      <Normal> { -0.315932 0.38306 0.868016 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 75 {
      -3.7494e-033 -6.12323e-017 -1
      <UV> { 0.717778 0.5 }
      <Normal> { -1.54186e-008 -3.85465e-009 1 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 76 {
      -0.34202 -4.02896e-017 -0.939693
      <UV> { 0.772778 0.5 }
      <Normal> { 0.34202 0 0.939693 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 77 {
      -0.642788 -2.1873e-017 -0.766044
      <UV> { 0.827778 0.5 }
      <Normal> { 0.642788 0 0.766044 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 78 {
      -0.866025 -8.20358e-018 -0.5
      <UV> { 0.882778 0.5 }
      <Normal> { 0.866025 3.85465e-009 0.5 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 79 {
      -0.984808 -9.30261e-019 -0.173648
      <UV> { 0.937778 0.5 }
      <Normal> { 0.984808 -3.85465e-009 0.173648 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 80 {
      -0.984808 -9.30261e-019 0.173648
      <UV> { 0.992778 0.5 }
      <Normal> { 0.984808 -3.85465e-009 -0.173648 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 81 {
      -0.984808 -9.30261e-019 0.173648
      <UV> { 0.00277777 0.5 }
      <Normal> { 0.984808 -3.85465e-009 -0.173648 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 82 {
      -0.866025 -8.20358e-018 0.5
      <UV> { 0.0577778 0.5 }
      <Normal> { 0.866025 3.85465e-009 -0.5 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 83 {
      -0.642788 -2.1873e-017 0.766044
      <UV> { 0.112778 0.5 }
      <Normal> { 0.642788 0 -0.766044 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 84 {
      -0.34202 -4.02896e-017 0.939693
      <UV> { 0.167778 0.5 }
      <Normal> { 0.34202 0 -0.939693 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 85 {
      -3.7494e-033 -6.12323e-017 1
      <UV> { 0.222778 0.5 }
      <Normal> { 0 3.85465e-009 -1 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 86 {
      0.34202 -8.2175e-017 0.939693
      <UV> { 0.277778 0.5 }
      <Normal> { -0.34202 0 -0.939693 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 87 {
      0.642788 -1.00592e-016 0.766044
      <UV> { 0.332778 0.5 }
      <Normal> { -0.642788 3.85465e-009 -0.766044 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 88 {
      0.866025 -1.14261e-016 0.5
      <UV> { 0.387778 0.5 }
      <Normal> { -0.866025 0 -0.5 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 89 {
      0.984808 -1.21534e-016 0.173648
      <UV> { 0.442778 0.5 }
      <Normal> { -0.984808 0 -0.173648 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 90 {
      0.984808 -1.21534e-016 -0.173648
      <UV> { 0.497778 0.5 }
      <Normal> { -0.984808 0 0.173648 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 91 {
      0.866025 -1.14261e-016 -0.5
      <UV> { 0.552778 0.5 }
      <Normal> { -0.866025 0 0.5 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 92 {
      0.642788 -1.00592e-016 -0.766044
      <UV> { 0.607778 0.5 }
      <Normal> { -0.642788 0 0.766044 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 93 {
      0.34202 -8.2175e-017 -0.939693
      <UV> { 0.662778 0.5 }
      <Normal> { -0.34202 0 0.939693 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 94 {
      -0.315985 0.382683 -0.868163
      <UV> { 0.772778 0.62375 }
      <Normal> { 0.315932 -0.38306 0.868016 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 95 {
      2.34326e-017 0.382683 -0.92388
      <UV> { 0.717778 0.62375 }
      <Normal> { -3.0774e-008 -0.38306 0.923723 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 96 {
      -0.593858 0.382683 -0.707733
      <UV> { 0.827778 0.62375 }
      <Normal> { 0.593758 -0.38306 0.707613 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 97 {
      -0.800103 0.382683 -0.46194
      <UV> { 0.882778 0.62375 }
      <Normal> { 0.799968 -0.38306 0.461862 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 98 {
      -0.909844 0.382683 -0.16043
      <UV> { 0.937778 0.62375 }
      <Normal> { 0.90969 -0.38306 0.160403 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 99 {
      -0.909844 0.382683 0.16043
      <UV> { 0.992778 0.62375 }
      <Normal> { 0.90969 -0.38306 -0.160403 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 100 {
      -0.909844 0.382683 0.16043
      <UV> { 0.00277777 0.62375 }
      <Normal> { 0.90969 -0.38306 -0.160403 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 101 {
      -0.800103 0.382683 0.46194
      <UV> { 0.0577778 0.62375 }
      <Normal> { 0.799968 -0.38306 -0.461862 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 102 {
      -0.593858 0.382683 0.707733
      <UV> { 0.112778 0.62375 }
      <Normal> { 0.593758 -0.38306 -0.707613 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 103 {
      -0.315985 0.382683 0.868163
      <UV> { 0.167778 0.62375 }
      <Normal> { 0.315932 -0.38306 -0.868016 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 104 {
      2.34326e-017 0.382683 0.92388
      <UV> { 0.222778 0.62375 }
      <Normal> { 0 -0.38306 -0.923723 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 105 {
      0.315985 0.382683 0.868163
      <UV> { 0.277778 0.62375 }
      <Normal> { -0.315932 -0.38306 -0.868016 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 106 {
      0.593858 0.382683 0.707733
      <UV> { 0.332778 0.62375 }
      <Normal> { -0.593758 -0.38306 -0.707613 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 107 {
      0.800103 0.382683 0.46194
      <UV> { 0.387778 0.62375 }
      <Normal> { -0.799968 -0.38306 -0.461862 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 108 {
      0.909844 0.382683 0.16043
      <UV> { 0.442778 0.62375 }
      <Normal> { -0.90969 -0.38306 -0.160403 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 109 {
      0.909844 0.382683 -0.16043
      <UV> { 0.497778 0.62375 }
      <Normal> { -0.90969 -0.38306 0.160403 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 110 {
      0.800103 0.382683 -0.46194
      <UV> { 0.552778 0.62375 }
      <Normal> { -0.799968 -0.38306 0.461862 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 111 {
      0.593858 0.382683 -0.707733
      <UV> { 0.607778 0.62375 }
      <Normal> { -0.593758 -0.38306 0.707613 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 112 {
      0.315985 0.382683 -0.868163
      <UV> { 0.662778 0.62375 }
      <Normal> { -0.315932 -0.38306 0.868016 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 113 {
      -0.241845 0.707107 -0.664463
      <UV> { 0.772778 0.7475 }
      <Normal> { 0.241704 -0.707519 0.664076 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 114 {
      4.32978e-017 0.707107 -0.707107
      <UV> { 0.717778 0.7475 }
      <Normal> { -2.1052e-008 -0.707519 0.706695 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 115 {
      -0.454519 0.707107 -0.541675
      <UV> { 0.827778 0.7475 }
      <Normal> { 0.454255 -0.707518 0.54136 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 116 {
      -0.612372 0.707107 -0.353553
      <UV> { 0.882778 0.7475 }
      <Normal> { 0.612016 -0.707519 0.353347 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 117 {
      -0.696364 0.707107 -0.122788
      <UV> { 0.937778 0.7475 }
      <Normal> { 0.695958 -0.707519 0.122716 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 118 {
      -0.696364 0.707107 0.122788
      <UV> { 0.992778 0.7475 }
      <Normal> { 0.695958 -0.707519 -0.122716 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 119 {
      -0.696364 0.707107 0.122788
      <UV> { 0.00277777 0.7475 }
      <Normal> { 0.695958 -0.707519 -0.122716 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 120 {
      -0.612372 0.707107 0.353553
      <UV> { 0.0577778 0.7475 }
      <Normal> { 0.612016 -0.707519 -0.353347 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 121 {
      -0.454519 0.707107 0.541675
      <UV> { 0.112778 0.7475 }
      <Normal> { 0.454255 -0.707519 -0.541359 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 122 {
      -0.241845 0.707107 0.664463
      <UV> { 0.167778 0.7475 }
      <Normal> { 0.241704 -0.707519 -0.664076 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 123 {
      4.32978e-017 0.707107 0.707107
      <UV> { 0.222778 0.7475 }
      <Normal> { 0 -0.707519 -0.706695 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 124 {
      0.241845 0.707107 0.664463
      <UV> { 0.277778 0.7475 }
      <Normal> { -0.241704 -0.707519 -0.664076 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 125 {
      0.454519 0.707107 0.541675
      <UV> { 0.332778 0.7475 }
      <Normal> { -0.454255 -0.707519 -0.541359 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 126 {
      0.612372 0.707107 0.353553
      <UV> { 0.387778 0.7475 }
      <Normal> { -0.612016 -0.707519 -0.353347 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 127 {
      0.696364 0.707107 0.122788
      <UV> { 0.442778 0.7475 }
      <Normal> { -0.695958 -0.707519 -0.122716 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 128 {
      0.696364 0.707107 -0.122788
      <UV> { 0.497778 0.7475 }
      <Normal> { -0.695958 -0.707519 0.122716 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 129 {
      0.612372 0.707107 -0.353553
      <UV> { 0.552778 0.7475 }
      <Normal> { -0.612016 -0.707519 0.353347 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 130 {
      0.454519 0.707107 -0.541675
      <UV> { 0.607778 0.7475 }
      <Normal> { -0.454255 -0.707519 0.541359 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 131 {
      0.241845 0.707107 -0.664463
      <UV> { 0.662778 0.7475 }
      <Normal> { -0.241704 -0.707519 0.664076 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 132 {
      -0.130885 0.92388 -0.359605
      <UV> { 0.772778 0.87125 }
      <Normal> { 0.130754 -0.924039 0.359243 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 133 {
      5.65713e-017 0.92388 -0.382683
      <UV> { 0.717778 0.87125 }
      <Normal> { 1.04733e-008 -0.924039 0.382299 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 134 {
      -0.245984 0.92388 -0.293153
      <UV> { 0.827778 0.87125 }
      <Normal> { 0.245737 -0.924039 0.292858 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 135 {
      -0.331414 0.92388 -0.191342
      <UV> { 0.882778 0.87125 }
      <Normal> { 0.331081 -0.924039 0.191149 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 136 {
      -0.37687 0.92388 -0.0664523
      <UV> { 0.937778 0.87125 }
      <Normal> { 0.376491 -0.924039 0.0663855 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 137 {
      -0.37687 0.92388 0.0664523
      <UV> { 0.992778 0.87125 }
      <Normal> { 0.376491 -0.924039 -0.0663855 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 138 {
      -0.37687 0.92388 0.0664523
      <UV> { 0.00277777 0.87125 }
      <Normal> { 0.376491 -0.924039 -0.0663855 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 139 {
      -0.331414 0.92388 0.191342
      <UV> { 0.0577778 0.87125 }
      <Normal> { 0.331081 -0.924039 -0.191149 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 140 {
      -0.245984 0.92388 0.293153
      <UV> { 0.112778 0.87125 }
      <Normal> { 0.245737 -0.924039 -0.292858 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 141 {
      -0.130885 0.92388 0.359605
      <UV> { 0.167778 0.87125 }
      <Normal> { 0.130754 -0.924039 -0.359244 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 142 {
      5.65713e-017 0.92388 0.382683
      <UV> { 0.222778 0.87125 }
      <Normal> { 0 -0.924039 -0.382299 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 143 {
      0.130885 0.92388 0.359605
      <UV> { 0.277778 0.87125 }
      <Normal> { -0.130754 -0.924039 -0.359243 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 144 {
      0.245984 0.92388 0.293153
      <UV> { 0.332778 0.87125 }
      <Normal> { -0.245737 -0.924039 -0.292858 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 145 {
      0.331414 0.92388 0.191342
      <UV> { 0.387778 0.87125 }
      <Normal> { -0.331081 -0.924039 -0.191149 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 146 {
      0.37687 0.92388 0.0664523
      <UV> { 0.442778 0.87125 }
      <Normal> { -0.376491 -0.924039 -0.0663855 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 147 {
      0.37687 0.92388 -0.0664523
      <UV> { 0.497778 0.87125 }
      <Normal> { -0.376491 -0.924039 0.0663855 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 148 {
      0.331414 0.92388 -0.191342
      <UV> { 0.552778 0.87125 }
      <Normal> { -0.331081 -0.924039 0.191149 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 149 {
      0.245984 0.92388 -0.293153
      <UV> { 0.607778 0.87125 }
      <Normal> { -0.245737 -0.924039 0.292858 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 150 {
      0.130885 0.92388 -0.359605
      <UV> { 0.662778 0.87125 }
      <Normal> { -0.130754 -0.924039 0.359243 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 151 {
      6.12323e-017 1 1.22465e-016
      <UV> { 0.745278 0.995 }
      <Normal> { 9.71244e-009 -1 0 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 152 {
      6.12323e-017 1 1.22465e-016
      <UV> { 0.800278 0.995 }
      <Normal> { 9.71244e-009 -1 0 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 153 {
      6.12323e-017 1 1.22465e-016
      <UV> { 0.855278 0.995 }
      <Normal> { 9.71244e-009 -1 0 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 154 {
      6.12323e-017 1 1.22465e-016
      <UV> { 0.910278 0.995 }
      <Normal> { 9.71244e-009 -1 0 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 155 {
      6.12323e-017 1 1.22465e-016
      <UV> { 0.965278 0.995 }
      <Normal> { 9.71244e-009 -1 0 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 156 {
      6.12323e-017 1 1.22465e-016
      <UV> { 0.0302778 0.995 }
      <Normal> { 9.71244e-009 -1 0 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 157 {
      6.12323e-017 1 1.22465e-016
      <UV> { 0.0852778 0.995 }
      <Normal> { 9.71244e-009 -1 0 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 158 {
      6.12323e-017 1 1.22465e-016
      <UV> { 0.140278 0.995 }
      <Normal> { 9.71244e-009 -1 0 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 159 {
      6.12323e-017 1 1.22465e-016
      <UV> { 0.195278 0.995 }
      <Normal> { 9.71244e-009 -1 0 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 160 {
      6.12323e-017 1 1.22465e-016
      <UV> { 0.250278 0.995 }
      <Normal> { 9.71244e-009 -1 0 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 161 {
      6.12323e-017 1 1.22465e-016
      <UV> { 0.305278 0.995 }
      <Normal> { 9.71244e-009 -1 0 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 162 {
      6.12323e-017 1 1.22465e-016
      <UV> { 0.360278 0.995 }
      <Normal> { 9.71244e-009 -1 0 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 163 {
      6.12323e-017 1 1.22465e-016
      <UV> { 0.415278 0.995 }
      <Normal> { 9.71244e-009 -1 0 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 164 {
      6.12323e-017 1 1.22465e-016
      <UV> { 0.470278 0.995 }
      <Normal> { 9.71244e-009 -1 0 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 165 {
      6.12323e-017 1 1.22465e-016
      <UV> { 0.525278 0.995 }
      <Normal> { 9.71244e-009 -1 0 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 166 {
      6.12323e-017 1 1.22465e-016
      <UV> { 0.580278 0.995 }
      <Normal> { 9.71244e-009 -1 0 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 167 {
      6.12323e-017 1 1.22465e-016
      <UV> { 0.635278 0.995 }
      <Normal> { 9.71244e-009 -1 0 }
      <RGBA> { 1 1 1 1 }
    }
    <Vertex> 168 {
      6.12323e-017 1 1.22465e-016
      <UV> { 0.690278 0.995 }
      <Normal> { 9.71244e-009 -1 0 }
      <RGBA> { 1 1 1 1 }
    }
  }

Here is the second half of the egg file. Paste this in after the first half to complete the egg.

  <Polygon> {
    <Normal> { 0.0343784 0.980206 0.194974 }
    <VertexRef> { 0 1 2 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.0989903 0.980206 0.171458 }
    <VertexRef> { 1 3 4 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.151662 0.980206 0.12726 }
    <VertexRef> { 3 5 6 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.186042 0.980206 0.0677134 }
    <VertexRef> { 5 7 8 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.197981 0.980206 0 }
    <VertexRef> { 7 9 10 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.186042 0.980206 -0.0677134 }
    <VertexRef> { 11 12 13 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.151662 0.980206 -0.12726 }
    <VertexRef> { 12 14 15 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.0989903 0.980206 -0.171458 }
    <VertexRef> { 14 16 17 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.0343784 0.980206 -0.194974 }
    <VertexRef> { 18 16 19 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.0343784 0.980206 -0.194974 }
    <VertexRef> { 20 19 21 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.0989903 0.980206 -0.171458 }
    <VertexRef> { 22 21 23 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.151662 0.980206 -0.12726 }
    <VertexRef> { 24 23 25 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.186042 0.980206 -0.0677134 }
    <VertexRef> { 26 25 27 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.197981 0.980206 0 }
    <VertexRef> { 28 29 27 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.186042 0.980206 0.0677134 }
    <VertexRef> { 30 31 28 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.151662 0.980206 0.12726 }
    <VertexRef> { 32 33 30 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.0989903 0.980206 0.171458 }
    <VertexRef> { 34 35 32 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.0343784 0.980206 0.194974 }
    <VertexRef> { 0 36 34 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.0974948 0.827508 0.552924 }
    <VertexRef> { 37 38 1 0 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.280727 0.827508 0.486233 }
    <VertexRef> { 38 39 3 1 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.430099 0.827507 0.360896 }
    <VertexRef> { 39 40 5 3 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.527595 0.827507 0.192029 }
    <VertexRef> { 40 41 7 5 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.561454 0.827508 0 }
    <VertexRef> { 7 41 42 9 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.527595 0.827507 -0.192029 }
    <VertexRef> { 11 43 44 12 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.430099 0.827507 -0.360896 }
    <VertexRef> { 12 44 45 14 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.280727 0.827508 -0.486233 }
    <VertexRef> { 14 45 46 16 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.0974948 0.827508 -0.552924 }
    <VertexRef> { 19 16 46 47 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.0974948 0.827508 -0.552924 }
    <VertexRef> { 21 19 47 48 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.280727 0.827508 -0.486233 }
    <VertexRef> { 23 21 48 49 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.430099 0.827507 -0.360896 }
    <VertexRef> { 25 23 49 50 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.527595 0.827508 -0.192029 }
    <VertexRef> { 27 25 50 51 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.561454 0.827508 0 }
    <VertexRef> { 52 28 27 51 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.527595 0.827507 0.192029 }
    <VertexRef> { 53 30 28 52 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.430099 0.827508 0.360896 }
    <VertexRef> { 54 32 30 53 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.280727 0.827508 0.486233 }
    <VertexRef> { 55 34 32 54 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.0974948 0.827508 0.552924 }
    <VertexRef> { 37 0 34 55 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.145061 0.549694 0.822675 }
    <VertexRef> { 56 57 38 37 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.417684 0.549693 0.723448 }
    <VertexRef> { 57 58 39 38 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.639928 0.549694 0.536963 }
    <VertexRef> { 58 59 40 39 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.784987 0.549694 0.285713 }
    <VertexRef> { 59 60 41 40 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.835366 0.549694 0 }
    <VertexRef> { 41 60 61 42 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.784987 0.549694 -0.285713 }
    <VertexRef> { 43 62 63 44 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.639927 0.549694 -0.536963 }
    <VertexRef> { 44 63 64 45 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.417684 0.549693 -0.723448 }
    <VertexRef> { 45 64 65 46 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.145061 0.549694 -0.822675 }
    <VertexRef> { 47 46 65 66 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.145061 0.549693 -0.822675 }
    <VertexRef> { 48 47 66 67 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.417684 0.549693 -0.723448 }
    <VertexRef> { 49 48 67 68 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.639927 0.549694 -0.536963 }
    <VertexRef> { 50 49 68 69 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.784987 0.549694 -0.285713 }
    <VertexRef> { 51 50 69 70 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.835366 0.549694 0 }
    <VertexRef> { 71 52 51 70 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.784987 0.549694 0.285713 }
    <VertexRef> { 72 53 52 71 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.639927 0.549694 0.536963 }
    <VertexRef> { 73 54 53 72 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.417684 0.549693 0.723448 }
    <VertexRef> { 74 55 54 73 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.145061 0.549694 0.822675 }
    <VertexRef> { 56 37 55 74 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.170409 0.192237 0.96644 }
    <VertexRef> { 75 76 57 56 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.490675 0.192237 0.849873 }
    <VertexRef> { 76 77 58 57 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.751757 0.192237 0.630798 }
    <VertexRef> { 77 78 59 58 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.922166 0.192237 0.335642 }
    <VertexRef> { 78 79 60 59 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.981349 0.192237 0 }
    <VertexRef> { 60 79 80 61 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.922166 0.192237 -0.335642 }
    <VertexRef> { 62 81 82 63 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.751757 0.192237 -0.630798 }
    <VertexRef> { 63 82 83 64 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.490675 0.192237 -0.849873 }
    <VertexRef> { 64 83 84 65 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.170409 0.192237 -0.96644 }
    <VertexRef> { 66 65 84 85 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.170409 0.192237 -0.96644 }
    <VertexRef> { 67 66 85 86 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.490675 0.192237 -0.849873 }
    <VertexRef> { 68 67 86 87 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.751757 0.192237 -0.630798 }
    <VertexRef> { 69 68 87 88 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.922166 0.192237 -0.335642 }
    <VertexRef> { 70 69 88 89 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.981349 0.192237 0 }
    <VertexRef> { 90 71 70 89 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.922166 0.192237 0.335642 }
    <VertexRef> { 91 72 71 90 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.751757 0.192237 0.630798 }
    <VertexRef> { 92 73 72 91 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.490675 0.192237 0.849873 }
    <VertexRef> { 93 74 73 92 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.170409 0.192237 0.96644 }
    <VertexRef> { 75 56 74 93 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.170409 -0.192237 0.96644 }
    <VertexRef> { 94 76 75 95 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.490675 -0.192237 0.849873 }
    <VertexRef> { 96 77 76 94 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.751757 -0.192237 0.630798 }
    <VertexRef> { 97 78 77 96 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.922166 -0.192237 0.335642 }
    <VertexRef> { 98 79 78 97 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.981349 -0.192237 0 }
    <VertexRef> { 80 79 98 99 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.922166 -0.192237 -0.335642 }
    <VertexRef> { 82 81 100 101 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.751757 -0.192237 -0.630798 }
    <VertexRef> { 83 82 101 102 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.490675 -0.192237 -0.849873 }
    <VertexRef> { 84 83 102 103 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.170409 -0.192237 -0.96644 }
    <VertexRef> { 84 103 104 85 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.170409 -0.192237 -0.96644 }
    <VertexRef> { 85 104 105 86 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.490675 -0.192237 -0.849873 }
    <VertexRef> { 86 105 106 87 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.751757 -0.192237 -0.630798 }
    <VertexRef> { 87 106 107 88 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.922166 -0.192237 -0.335642 }
    <VertexRef> { 88 107 108 89 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.981349 -0.192237 0 }
    <VertexRef> { 108 109 90 89 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.922166 -0.192237 0.335642 }
    <VertexRef> { 109 110 91 90 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.751757 -0.192237 0.630798 }
    <VertexRef> { 110 111 92 91 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.490675 -0.192237 0.849873 }
    <VertexRef> { 111 112 93 92 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.170409 -0.192237 0.96644 }
    <VertexRef> { 112 95 75 93 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.145061 -0.549694 0.822675 }
    <VertexRef> { 113 94 95 114 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.417684 -0.549693 0.723448 }
    <VertexRef> { 115 96 94 113 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.639927 -0.549694 0.536963 }
    <VertexRef> { 116 97 96 115 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.784987 -0.549694 0.285713 }
    <VertexRef> { 117 98 97 116 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.835366 -0.549694 0 }
    <VertexRef> { 99 98 117 118 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.784987 -0.549694 -0.285713 }
    <VertexRef> { 101 100 119 120 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.639928 -0.549694 -0.536963 }
    <VertexRef> { 102 101 120 121 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.417684 -0.549693 -0.723448 }
    <VertexRef> { 103 102 121 122 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.145061 -0.549694 -0.822675 }
    <VertexRef> { 103 122 123 104 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.145061 -0.549694 -0.822675 }
    <VertexRef> { 104 123 124 105 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.417684 -0.549693 -0.723448 }
    <VertexRef> { 105 124 125 106 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.639927 -0.549694 -0.536963 }
    <VertexRef> { 106 125 126 107 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.784987 -0.549694 -0.285713 }
    <VertexRef> { 107 126 127 108 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.835366 -0.549694 0 }
    <VertexRef> { 127 128 109 108 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.784987 -0.549694 0.285713 }
    <VertexRef> { 128 129 110 109 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.639927 -0.549694 0.536963 }
    <VertexRef> { 129 130 111 110 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.417684 -0.549693 0.723448 }
    <VertexRef> { 130 131 112 111 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.145061 -0.549693 0.822675 }
    <VertexRef> { 131 114 95 112 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.0974948 -0.827508 0.552924 }
    <VertexRef> { 132 113 114 133 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.280727 -0.827508 0.486233 }
    <VertexRef> { 134 115 113 132 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.430099 -0.827507 0.360896 }
    <VertexRef> { 135 116 115 134 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.527595 -0.827507 0.192029 }
    <VertexRef> { 136 117 116 135 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.561454 -0.827508 0 }
    <VertexRef> { 118 117 136 137 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.527595 -0.827507 -0.192029 }
    <VertexRef> { 120 119 138 139 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.430099 -0.827507 -0.360896 }
    <VertexRef> { 121 120 139 140 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.280727 -0.827508 -0.486233 }
    <VertexRef> { 122 121 140 141 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.0974948 -0.827508 -0.552924 }
    <VertexRef> { 122 141 142 123 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.0974948 -0.827508 -0.552924 }
    <VertexRef> { 123 142 143 124 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.280727 -0.827508 -0.486233 }
    <VertexRef> { 124 143 144 125 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.430099 -0.827508 -0.360896 }
    <VertexRef> { 125 144 145 126 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.527595 -0.827507 -0.192029 }
    <VertexRef> { 126 145 146 127 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.561454 -0.827508 0 }
    <VertexRef> { 146 147 128 127 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.527595 -0.827508 0.192029 }
    <VertexRef> { 147 148 129 128 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.430099 -0.827507 0.360896 }
    <VertexRef> { 148 149 130 129 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.280727 -0.827508 0.486233 }
    <VertexRef> { 149 150 131 130 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.0974948 -0.827508 0.552924 }
    <VertexRef> { 150 133 114 131 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.0343784 -0.980206 0.194974 }
    <VertexRef> { 132 133 151 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.0989903 -0.980206 0.171458 }
    <VertexRef> { 134 132 152 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.151662 -0.980206 0.12726 }
    <VertexRef> { 135 134 153 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.186042 -0.980206 0.0677134 }
    <VertexRef> { 136 135 154 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.197981 -0.980206 0 }
    <VertexRef> { 137 136 155 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.186042 -0.980206 -0.0677134 }
    <VertexRef> { 139 138 156 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.151662 -0.980206 -0.12726 }
    <VertexRef> { 140 139 157 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.0989903 -0.980206 -0.171458 }
    <VertexRef> { 141 140 158 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { 0.0343784 -0.980206 -0.194974 }
    <VertexRef> { 141 159 142 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.0343784 -0.980206 -0.194974 }
    <VertexRef> { 142 160 143 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.0989903 -0.980206 -0.171458 }
    <VertexRef> { 143 161 144 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.151662 -0.980206 -0.12726 }
    <VertexRef> { 144 162 145 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.186042 -0.980206 -0.0677134 }
    <VertexRef> { 145 163 146 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.197981 -0.980206 0 }
    <VertexRef> { 164 147 146 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.186042 -0.980206 0.0677134 }
    <VertexRef> { 165 148 147 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.151662 -0.980206 0.12726 }
    <VertexRef> { 166 149 148 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.0989903 -0.980206 0.171458 }
    <VertexRef> { 167 150 149 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
  <Polygon> {
    <Normal> { -0.0343784 -0.980206 0.194974 }
    <VertexRef> { 168 133 150 <Ref> { "InvertedSphere:defaultShape.verts" } }
  }
}

Why post the egg source?

I don’t have anywhere to upload an egg file to right now.

This works great… thank you very much.
I would love the ability to add attachments to the posts. I wonder why this simple feature is missing…

Man, this is awesome!

If it helps others, here’s the InvertedSphere.egg.

http://awesometi.me/wp-content/uploads/2012/11/InvertedSphere.zip

Maybe I missed something, but why don’t you use a sky cube? Sinc eyou have 6 textures one for each face it would be way easier and a little bit less polygons that way.

Sorry for posting on such an old post. I ran the file and I got this error:

File "test2.py", line 16, in __init__
    tex = loader.loadCubeMap("BlueGreenNebula_#.png")
  File "/Developer/Panda3D/direct/showbase/Loader.py", line 733, in loadCubeMap
    raise IOError, message
IOError: Could not load cube map: BlueGreenNebula_#.png

Where can I find the BlueGreenNebula_#.png file?

That’s saying that it can’t find files named BlueGreenNebula_0.png, BlueGreenNebula_1.png, etc. You’re supposed to use those generated from the tool linked in the original post.

Holy moly, I forgot all about Panda & this project I was doing 2 years ago.

If I remember correctly, that’s several files - each side of a skybox. The # is an in-code placeholder; you need the files to actually exist, though.

I used SpaceScape to generate my skybox. It’s the balls.

alexcpeterson.com/spacescape

And, because I’m a packrat, here’s the inverted sphere zip again. I have since given up awesometi.me, but my old vanity domain still stands. Enjoy, whoever.

http://ralph.hogaboom.org/wp-content/uploads/2014/10/InvertedSphere.zip

Got it working! You guys are the best!