Customizing Unix Servers For 3D
Neophytos Iacovou DCS, UofMn
This paper describes how to add Gopher+ attributes for controlling
a Gopher item's appearance in GopherSpace VR. For the purposes
of this paper we created a Gopher Server containing information on
the author William S. Burroughs. We then proceeded to customize
the appearance of the server. All of the examples presented here are
specific to the UofMn Unix Gopher+ Server, but the concepts should
apply to any Gopher+ server.
Introduction
During GopherCon `94 we introduced to the Internet community our thoughts on how
to go about putting a 3-D spatial interface between the user and GopherSpace.
Since then we have released GopherVR clients for the Apple Macintosh platform
as well as for various flavors of UNIX. While new clients are needed to take
advantage of GopherVR, the servers do not have to be upgraded. When using a
GopherVR client to cruise GopherSpace the scenes being generated can come from
one of three sources.
If the client is not told by the server how to render a scene the client will
render the scene using pre-defined rules. When rendering the contents of a
directory the client will place the Gopher items in a ring orientation. It will
make multiple rings in order to accommodate larger directories. When rendering
the results of a database search the client will place the returned items in a
spiral orientation. In both cases the Gopher item's icon defaults to a
pre-defined shape, and color. A GopherVR client will be able to render any
Gopher item as a GopherVR scene regardless of the Gopher server - this includes
both Gopher and Gopher+ servers.
Using a Gopher+ 3D block GopherAdmins can override the default rendering of
GopherSpace. By using a Gopher+ attribute any Gopher+ server can be used to
create custom GopherVR scenes. This paper will describe how to go about making
additions to your existing Gopher+ server in order to create custom scenes.
Another way to create GopherVR scenes is to allow a program to create the
necessary Gopher+ 3D block for a given Gopher item. 3D spatial clustering
algorithms are one subset of such programs. Although this paper does not
concentrate on writing these types of programs the information presented here
will be needed in order to do so.
The Gopher+ 3D Block
The Gopher+ 3D block contains information and hints about how to render
GopherSpace VR scenes. This information is fairly simple, and extensible to
other forms of hints. Clients should use the hints they can and ignore the
ones they don't know about.
Each hint is defined by a token followed by a colon, with hint specific
information following. Here is a sample 3D block.
+3D:
Location: 0, 200, 0
Orientation: 0, 45, 0
Color: 0.0, 1.0, 0.0
Object:
gopher://arcwelder.micro.umn.edu:70/00/3dobjects/dart.geom
This block tells a GopherSpace VR browser to place the object at (x,y,z)
coordinates (0,200,0) and that the object is the rgb color (0.0, 1.0, 0.0) -
Green. The Object: hint specifies that we should fetch the file
/3dobjects/dart.geom from arcwelder.micro.umn.edu which provides the 3D
representation of a dart. The dart is then rotated 45 degrees along the Y-axis.
GopherVR Hint Reference Guide
Below is a list of the hints currently being supported by the GopherVR clients.
They provide basic functionality you would expect to find in any 3D package.
Currently the hints allow you to: move an object to a specific location; rotate
the object about an arbitrary axis; scale the object about an arbitrary axis;
specify an object description; and to specify an ambient sound.
Location: X, Y, Z
This specifies the X, Y, Z coordinates of this specific Gopher object.
These values (all units can be floating point values or integers) are
relative to the Kiosk. In each GopherVR scene the Kiosk is placed at
coordinates (0, 0, 0).
To translate the object to 2000 units north of the kiosk we'd specify:
Location: 2000, 0, 0
Orientation: Rx, Ry, Rz
This hint specifies in which direction the object should be facing. Rx, Ry,
and Rz are rotations about the X, Y, and Z-axis respectively. These values
are expressed in degrees, and can be positive or negative.
To rotate an object 180 degrees about the Y-axis specify:
Orientation: 0, 180, 0
Scale: Sx, Sy, Sz
This hint specifies how to scale the object. Sx, Sy, and Sz are scale
factors on the X, Y, and Z-axis respectively.
To make an object twice the normal height specify:
Size: 1, 2, 1
Note that a zero scale is pretty meaningless.
Object: URL
This hint specifies how the object should be drawn. The URL specifies a
Uniform Resource Locator for an object description. The object description
can be in any number of formats, the client should find the MIME type of
the object to get the specific type of object data file.
Here's an example of representing an item as a cow:
Object:
gopher://arcwelder.micro.umn.edu:70/00/3dfarmobjects/cow
Note: Some clients may ignore this entry, especially if your object
is in a weird or unknown file format.
Using Hints And The 3D Block
To use the 3D block on the Unix server you would add the following to your
gopherd.conf file:
blockext: .3d 3D
Then you would create a file with a .3d extension for each object you wish to
customize. For example, if I had a directory with 2 items ( "MooCow" and
"MyDocument" ) I would create the appropriate .3d files as follows:
MooCow MyDocument
MooCow.3d MyDocument.3d
% cat MooCow.3d
Location: 1000, -2000, -2000
Scale: 5, 5, 5
% cat MyDocument.3d
Location: 1000, -1000, 1000
Scale: 2, 4, 4
Object:
gopher://arcwelder.micro.umn.edu:70/00/3dobjects/moo.geom
The GopherVR Coordinate System
The GopherVR coordinate system is defined as follow:
� The X and Z-axis form the ground plane. The X-axis runs left to right,
the Z-axis runs in and out of the screen.
� The Y-axis runs up and down. The -Y-axis is UP and the +Y-axis is DOWN.
� The Initial viewpoint orientates your eye so it looks towards the +X-axis,
the +Z- axis to its left, the -Z-axis to its right, and the -X-axis
behind it.
� The groundplane is 40000 units along the X-axis and 40000 units along
the Z-axis.
� The Kiosk is placed at coordinates (0, 0, 0).
The following chart illustrates all of these points:
<image>
Example Of A Custom GopherVR Server
During the development of GopherVR we created many custom scenes, but we've
never developed an entire custom server. We've started to put together a server
dedicated to William S. Burroughs and customized it to make it GopherVR aware.
We wanted to show how GopherAdmins would manually create clusters of Gopher
items, and GopherVR scenes. The server can be found at
<URL:
gopher://huskerdu:6767/1>.
After selecting "William S. Burroughs" from the main menu the user enters a
directory with 10 items, split into 4 groups. The items are grouped as follows:
Books About WSB
Books By William S. Burroughs
Books With WSB Contributions
Friends Of William S. Burroughs
William S. Burroughs Jr.
Interviews Of William S. Burroughs
Magazines And Periodicals
Sound Recordings
Video Recordings
Art And Exhibitions
We've placed the 4 groups around the kiosk. We've also placed each group in
each of the 4 quadrants - the idea being that the pattern on the groundplane
can be used to organize information, as well as to help users navigate the
scene.
<image>
Selecting the item "Books About WSB" brings us to a scene where the clustering
is a bit more subtle.
<image>
Here the two clusters divide the books about William S. Burroughs into the
books mentioning him (often with other authors), and those where he is the
focus of the book.
Choosing the item "Sound Recordings" from the previous menu brings us to this
scene:
<image>
Here the scene has 3 groups: William S. Burroughs' contributions to the Giorno
poetry project; William S. Burroughs performing along with other artists;
William S. Burroughs' solo projects. The cluster of documents pertaining to
the Giorno poetry project are subdivided into two smaller clusters: recordings
as part of The-Dial-A- Poem-Poets; and general recordings for John Giorno.
<image>
Generating Clusters
While creating the scenes it quickly became apparent that we needed to easily
create rings of objects. Our first task was finding reasonable X,Y,Z
coordinates for a ring centered around the point (0,0,0). Using those points we
transformed the ring to the desired location in order to get rings at
arbitrary locations.
The following is a list of locations on a ring centered at (0,0,0):
Location: 1990, 0, 199
Location: 1623, 0, 1167
Location: 822, 0, 1823
Location: -199, 0, 1990
Location: -1167, 0, 1623
Location: -1823, 0, 822
Location: -1990, 0, -199
Location: -1623, 0, -1167
Location: -822, 0, -1823
Location: 199, 0, -1990
Location: 1167, 0, -1623
Location: 1823, 0, -822
Now, if we wanted to place a ring of objects in the +X+Z quadrant we would
translate the coordinates by adding a positive X and positive Z value to each
X, Z coordinate respectively. We move the ring by +5000 units along each axis
using the following loca- tions:
Location: 6990, 0, 5199
Location: 6623, 0, 6167
Location: 5822, 0, 6823
Location: 4801, 0, 6990
Location: 3833, 0, 6623
Location: 3177, 0, 5822
Location: 3010, 0, 4801
Location: 3377, 0, 3833
Location: 4178, 0, 3177
Location: 5199, 0, 3010
Location: 6167, 0, 3377
Location: 6823, 0, 4178
Improving The Scene With Signs
Sometimes, the reasons behind the grouping of a collection of documents becomes
apparent by looking at the titles of the documents in the same cluster; but
sometimes the reasons behind the grouping is not at all evident. In the cases
where the grouping is not evident it is a good idea to put signs in the scene.
When we organized the books written by W. S. Burroughs we grouped them into 5
clusters:
The Major Works
The 1960's
The 1970's
The 1980's
The 1990's
<image>
We centered the major works about the origin, and the other clusters in each
of the 4 quadrants. We then created large billboards which we suspended above
the clusters. Here is the .3d file for the "1990's" billboard:
% cat "The 1990's.3d"
Location: -5000, -3000, -5000
Orientation: 0, 45, 0
Scale: 4, 4, 4
Stacking Items
When we first constructed the scene we placed all of the documents on the
groundplane, but the scene became too crowded too fast. Having realized that
some of the documents pointed to translations of books we wondered if we could
group the translation of a book along with the entry for the book.
One solution is to make the book's item a directory, and to place all entries
of the book in the directory. While this is a solution we weren't too happy
with it since you had to check each directory for translations. This could
become too tedious.
What we decided to do was to stack each translation of a book over the entry of
the book. It becomes extremely obvious which books can be read in a language
other than English.
<image>
When creating stacks we found that spacing the items by 1000 units seems to
work fairly well. Here are what the .3d files for the "Yage Letters" and some
of its translations consist of:
% cat "The Yage Letters.3d"
Location: 6990, 0, 5199
Orientation: 0, 30, 0
% cat "Auf Der Suche Nach Yage.3d"
Location: 6990, -1000, 5199
Orientation: 0, 30, 0
% cat "Les Lettres Du Yage.3d"
Location: 6990, -3000, 5199
Orientation: 0, 30, 0
Redefining Objects
Something we didn't find the need for in the WSB server but is supported is
the ability to redefine the object's shape. Up to now we have been telling the
client how to override attributes such as scale, location, and orientation.
What we haven't overridden is the shape of an object. This URL
<URL:
gopher://huskerdu.micro.umn.edu:7070/11/CustomGopher/Sticks> points to a
directory where the object's shape was been altered.
<image>
% cat MyDocument.3d
Location: 1000, -1000, 1000
Object:
gopher://arcwelder.micro.umn.edu:70/00/3dobjects/moo.geom
Sometimes is it fun to put ambient sound in a directory. It can really change
the mood of the scene, and provide the user with clues about the documents in
the scene:
% cat SimpleDocument.3d
AmbientSound:
gopher://arcwelder.micro.umn.edu:70/99/mods/MistHunter
Object:
gopher://arcwelder.micro.umn.edu:70/00/3dobjects/uofm.geom
Note: Currently the Macintosh GopherVR clients do not support ambient
sounds, nor does the AIX version of the UNIX client.
Hints Under Current Consideration
The following is a list of 3D hints we are currently considering adding. If
you would like a specific hint added feel free to send e-mail to us, or to
post the idea to the newsgroup "comp.infosystems.gopher"
ObjectSelected: URL
This hint specifies how the object should be drawn after it has been
selected. The URL specifies a Uniform Resource Locator for an object
description. The object description can be in any number of formats, the
client should find the MIME type of the object to get the specific type of
object data file.
Here's an example of an `opendoor' for a directory object..
ObjectSelected:
gopher://arcwelder.micro.umn.edu/v0/objs/opendoor
Note: Some clients may ignore this entry, especially if your object is in
a weird or unknown file format.
Scenery: URL
The Scenery: hint defines objects that should be displayed, but are not
selectable. This will usually be used to put background information into
the scene. For instance, you could use this to put a street sign into your
scene:
Scenery:
gopher://arcwelder.micro.umn.edu/v0/objs/streetsign
Color: Rgb, rGb, rgB
This hint species what color the client should render the object. The
fields Rgb, rGb, rgB call for a RGB triple of floating point numbers, in
the range between 0.0 and 1.0. Clients would then be able to scale the
value based on their palette size.
Here is an example of a Blue object:
Color: 0.0, 0.0, 1.0
Conclusion
When we started to construct the William S. Burroughs Gopher Server we knew
that our task would be much easier if we had an authoring tool to help us
create the scenes. To date we've spent about 4 days putting the server
together. The first 2 days were spent researching and constructing the material
currently available on the server. We then spent an additional 2 days modifying
the server to make it GopherVR aware. If we had a GopherVR authoring tool we
could easily have saved ourselves a day and a half of work.
Because we've never put together an extensive custom GopherVR aware server we
weren't sure what tools we would want to have. We intentionally put the server
together with a lack of authoring tools in order to learn: how the tools should
work; what features would users expect to see from an authoring tool; how hard
is it to construct scenes without tools.
We are pleased with the current status of our William S. Burroughs server. We
were happy to find that even without an authoring tool we were able to
construct a useful server with meaningful use of a VR interface. We found the
currently supported Gopher+ 3D hints to be enough to construct the scenes we
needed. Two hints we didn't have available but could have made use of are the
Scenery: and Color: hints. Had these been available we would have created more
informative signs in each scene.
Over the next few months we will be developing an authoring tool based on what
we have learned from our experiment. We encourage people to create some custom
scenes and send us feedback. What problems are you having? What would you like
the authoring tool to automate for you? How do you go about creating scenes?
Send feedback to
[email protected]