Jellybean World Specification


Overview

The goal of this specification is to define a consistent appearance for objects that will populate a persistent 3D virtual "Jellybean" world. Objects which may occur in this world include but are not limited to houses, vehicles, people/avatars, animals/pets, natural occurrences such as trees, mountains, rocks etc...

Materials

A key characteristic of objects residing in the Jellybean world is their metallic appearance. The globes to the left show most of the materials used thus far in producing Jellybean objects. The method used for defining such materials is to first select the object's RGB values as usual, next set the object's specular values to 2*R, 2*G, and 2*B and specular power to 10.

   
   // Material Specification
   Material shinyMetal   = new Material().setColor(.6, .6, .6, 2*.6, 2*.6, 2*.6, 10);
   Material redMetal     = new Material().setColor(.9, .4, .4, 2*.9, 2*.4, 2*.4, 10);
   Material purpleMetal  = new Material().setColor(.8, .4, .9, 2*.8, 2*.4, 2*.9, 10);
   Material yellowMetal  = new Material().setColor(.8, .9, .2, 2*.8, 2*.9, 2*.2, 10);
   Material greenMetal   = new Material().setColor(.3, .9, .3, 2*.3, 2*.9, 2*.3, 10);
   Material blueMetal    = new Material().setColor(.3, .3, .9, 2*.3, 2*.3, 2*.9, 10);
   Material orangeMetal  = new Material().setColor(.8, .6, .1, 2*.8, 2*.6, 2*.1, 10);
   Material blackPlastic = new Material().setColor(.1, .1, .1, .9, .9, .9, 20);
   

3D Primitives

The primary primitive used in defining Jellybean world objects is the globe. For example the car to the right uses globes for the main body, windshield, and wings. In particular it is the oblong globe from which the Jellybean name was derived. An approximate 2:2:3 ratio seems to work well in scaling the globe primitive's x:y:z values. Some flat surfaces, like the wings, use globes as well. This is accomplished with a 2:3 ratio for x:z and a minimal y value. Flattening other rounded primitive objects also fits in with the theme. For example, the wheel mounts and tailfin were created with flattened tapered cylinders, and the window borders for the Jelly Bean house above utilized flattened toruses.

Car Code Excerpts
    // Define Main Body
    Body = new Geometry();
    Body.add().globe(30, 30, .25, 1, 0, 1).setMaterial(greenMetal);
    push();
       scale(3.0, 1.85, 1.85);
       transform(Body.child[0]);
    pop();

    // Define WindShield()
    Windshield = new Geometry();
    Windshield.add().globe(30, 30, 0, .25, 0, 1).setMaterial(glass);
    push();
       scale(3.0, 1.85, 1.85);
       transform(Windshield);
    pop();

    // Define and Transform Tail Fin
    Tailfin = new Geometry();
    Tailfin.add().tube(30, .2).setMaterial(redMetal);
    push();
       translate(-2.4, 1.6, 0.0);
       scale(1.0, 1.0, 0.2);
       rotateX(-Math.PI/2);
       rotateY(-0.4);
       transform(Tailfin);
    pop();

    // Define and Transform Wings
    Wing = new Geometry[2];

    // Back Right Wing (Wing[0])
    Wing[0] = new Geometry();
    Wing[0].add().globe(30, 30, 0, 1, .5, 1).setMaterial(redMetal);
    push();
       translate(-1.4, 0.0, 1.4);
       scale(1.3, .15, 1.0);
       rotateY(-0.5);
       transform(Wing[0]);
    pop();
                   ...


    // Define Wheel Mounts
    WheelMount = new Geometry[4];

    // Front Right Wheel Mount (WheelMount[0]);
    WheelMount[0] = new Geometry();
    WheelMount[0].add().tube(30, .2).setMaterial(redMetal);
    push();
       rotateX(.8);
       translate(1.4, 0.2, 2.0);
       scale(.6, .1, .6);
       transform(WheelMount[0]);
    pop();

Scale

To simplify scaling, there will be no correlation between a JellyBean world measurement Unit (JBU) and any existing real world measurement unit such as inches or feet. Rather, one (1.0) JBU will represent the height of the typical Jelly Bean person. Thus scaling for vehicles, houses, etc. will be loosely based on the necessary dimensions required to accomodate such a Jellybean World inhabitant. For example, one story in a house should be about 1.3 - 1.5 JBUs high, and the cockpit of a single person vehicle should be approximately 0.8-1.0 JBUs high and 0.6-0.8 JBUs wide.