5.0 Volumes

5.1 Volume Overview

A volume is an area of space in the level that has special properties. In the context of web.alive, volumes are used to:

  • define location names for specific areas in a virtual environment (these location names are displayed to the users on their status bar directly below the mini-map display)
  • setup both OMNI speaker and listener areas
  • setup private speech areas
  • control access to different areas of the map

For the most part, content developers tend to work with PhysicsVolumes directly instead of basic Volumes because they can control the physics applied to actors within their area thereby affecting things like gravity, velocity, etc. One limitation of volumes is that a given user can only be considered to be in one volume at a time. If they are standing in a location occupied by multiple volumes (i.e. the volumes overlap), only the volume with the highest priority will affect the user. All PhysicsVolumes have a priority number under properties -> PhysicsVolume -> Priority. This determines whether it will take precedence over any other overlapping volumes. Higher numbers have higher priority.

All volumes have a location name under properties -> Volume -> LocationName. This name is displayed to users on their status indicator whenever they are within that volume. The LocationName of a volume should always be set to an appropriate value in web.alive environments.

5.2 Chainsaw Volumes

The web.alive product defines a custom new volume type called a ChainsawVolume in order to realize a variety of web.alive specific functionality. A single chainsaw volume can be configured to:

  • have special voice distance and falloff properties
  • act as an OMNI speaker area
  • act as an OMNI listener area for a number of unrelated OMNI speaker areas
  • act as a private speech area
  • restrict access based on user group membership
  • provide additional meeting controls to users

This flexibility in a single ChainsawVolume acts to over come the limitation that a given user can only be considered to be in one volume at a time by allowing content developers to define a single chainsaw volume with all the properties they desire. For example, a single ChainsawVolume can be restricted, be private, have special voice properties and act as an OMNI listener area. The following sections highlight how to configure the various aspects of a chainsaw volume.

5.2.1 Voice Distance and Falloff Configuration

In a web.alive environment a given user can be in one of three voice modes:

  • Normal – the default voice mode representing a normal voice
  • Whisper – a special voice mode in which the range of the user’s voice is shortened
  • Shout – a special voice mode in which the range of the user’s voice is made larger.

By default, the various properties configuring the three voice modes are set on a server wide basis or derived from the properties of another mode. For example, the normal voice range is set in a configuration file on the server and the shout distance is computed from the normal voice range (i.e. by multiplying it by some factor).

However, the content developer may wish to customize the properties defining these voice modes based on the characteristics of their environment. In the case of a medium sized meeting room the content developer may wish the user’s normal voice to travel the length of the room so that all users within the room can hear each other easily during a collaboration session. In another case, the content developer may wish to shorten the normal voice range to allow many distinct conversations to take place on a virtual trade show floor.

The table below lists the various voice properties which can be configured on a ChainsawVolume.

ChainsawVolume Voice Properties

Property Name     Description
-------------     -----------
voiceDistance     The distance in unreal units that a user’s voice will travel before not being heard at all while in normal voice mode.  The default is 0 indicating that the environments default value should be used.   See Figure 29.
voiceFallOff      The voice fall off when speaking in normal voice mode.  It is expressed as a percentage between 0.0 and 0.99.   It is the voice volume percentage that the user’s voice should be heard at when at the cutoff point.  For example, a value of 0.0 (default) indicates that the user’s voice should be zero at the cutoff point where a value of 0.5 indicates that the user’s voice should be at half volume at the cutoff point.   See Figure 30.
whisperDistance   The distance in unreal units that a user’s voice will travel before not being heard at all while in whisper voice mode.  The default is 0 indicating that the environments default value should be used.
whisperFallOff    The voice fall off when speaking in whisper voice mode.  It is expressed as a percentage between 0.0 and 0.99.   It is the voice volume percentage that the user’s voice should be heard at when at the cutoff point.  For example, a value of 0.0 (default) indicates that the user’s voice should be zero at the cutoff point where a value of 0.5 indicates that the user’s voice should be at half volume at the cutoff point.
shoutDistance     The distance in unreal units that a user’s voice will travel before not being heard at all while in shout voice mode.  The default is 0 indicating that the environments default value should be used.
shoutFallOff      The voice fall off when speaking in shout voice mode.  It is expressed as a percentage between 0.0 and 0.99.   It is the voice volume percentage that the user’s voice should be heard at when at the cutoff point.  For example, a value of 0.0 (default) indicates that the user’s voice should be zero at the cutoff point where a value of 0.5 indicates that the user’s voice should be at half volume at the cutoff point.

Since the shout distance is by default derived from the normal voice distance and there doesn’t tend to be much variance in a typical whisper distance, it typically suffices for a content developer to set the voiceDistance property according to the size of the room or area that the ChainsawVolume encompasses.

5.2.2 OMNI Voice Configuration

There are two types of OMNI voice areas which function together to allow a user to broadcast his/her voice to all users in a specific area or areas. The first type of OMNI voice area is the OMNI listener area which is used to define the specific area(s) over which an OMNI speaker can be heard. The second type of OMNI voice area is the OMNI speaker area which is used to define the specific area from which a user must speak in order to have OMNI voice over associated OMNI listener areas.

Anything spoken while standing in an OMNI speaker area will be broadcast to anybody standing in associated OMNI speaker or listener areas. Speaker areas can be associated with multiple listener areas and vice versa. As their names imply, the difference between the two is that speaker areas allow a user to broadcast to associated OMNI areas; listener areas do not. Figure 31 illustrates an example OMNI voice area configuration with one main listener area encompassing a stage and two crowd mic areas which can be spoken from over the entire listener region.

To set up an OMNI Area, complete the following steps:

  1. Choose an OMNI area name. This value is used to link the speaker and listener areas together and it also determines the sound channel used by the OMNI area. The OMNI area name must be unique among other OMNI areas and private areas in the entire level.
  2. In the web.alive Editor build an appropriately sized brush which will be used to define the ChainsawVolume representing the OMNI listener area.
  3. Place the brush in the correct position where the ChainsawVolume representing the OMNI listener area will be located.
  4. Right click on the volume icon positioned on the main editor palette located on the left hand side of the editor and select the ChainsawVolume option to create a ChainsawVolume with the dimensions and location of the builder brush.
  5. Add the OMNI area name you decided on in step 1 to the OMNIListenerAreaNames list in the ChainsawVolume that was just created in step 4.
  6. Now resize the brush to the desired dimensions of the ChainsawVolume representing the OMNI speaker area and position the brush appropriately.
  7. Right click on the volume icon positioned on the main editor palette located on the left hand side of the editor and select the ChainsawVolume option to create a ChainsawVolume with the dimensions and location of the builder brush.
  8. Set the OMNISpeakerAreaName of the ChainsawVolume you created in step 7 to the OMNI area name you decided on in step 1.
  9. Determine if the OMNI speaker area should be initially enabled or disabled when the level starts and set the “speakerAreaEnabled” property appropriately. You might use this property to have the OMNI speaker area initially disabled in cases where an in environment switch could be used to turn the OMNI speaker area on and off.
  10. If you desire additional OMNI listener areas then repeat steps 2-5 and if you desire additional OMNI speaker areas then repeat steps 6-9.
  11. As with any volume the LocationName property should be set appropriately on all ChainsawVolumes created. (see section 5.1 for more information)
  12. As with any volume the Priority property should be set appropriately so that a user will be considered in the correct volume whenever two or more volumes overlap. For example, if the OMNI speaker area is encompassed inside a larger OMNI listener area it is important that the OMNI speaker area have a higher priority value on its ChainsawVolume then the OMNI listener area’s ChainsawVolume otherwise the user will never be considered inside the OMNI speaker area volume and therefore it will have no affect. When setting the priority of any volume it is important to set the Priority property under the PhysicsVolume category and not the Priority under the general Volume category. (see section 5.1 for more information)

Once setup and configured correctly it is possible to turn an OMNI speaker area on or off with an environmental control. A ToggleOMNISpeakerTrigger can be used to toggle the OMNI speaker area on and off. However, users cannot interact directly with a ToggleOMNISpeakerTrigger, so another trigger must be used to invoke the ToggleOMNISpeakerTrigger which in turn toggles the OMNI speaker area. For example, a LookAndUseTrigger can be used to toggle the OMNI speaker area on and off indirectly through a ToggleOMNISpeakerTrigger as illustrated in Figure 33. As the user clicks on the LookAndUseTrigger, the ToggleOMNISpeakerTrigger is invoked which will finally toggle the speaker area.

The content developer may also use the EnableOMNISpeakerTrigger and the DisableOMNISpeakerTrigger if they wish to explicitly set the state of the OMNI speaker area (i.e. rather than toggling). These two triggers can be used in the same manner as described for the ToggleOMNISpeakerTrigger.

5.2.3 Private Area Configuration

Private areas allow content developers to create an area which prevents anybody outside it from hearing any speech originating from inside it. Note that the private area will only prevent speech from being heard outside the area; other audio, such as movies and environmental sounds, can still be heard outside.

To set up a private area, complete the following steps:

  1. In the web.alive Editor build an appropriately sized brush which will be used to define the ChainsawVolume representing the private area.
  2. Place the brush in the correct position where the ChainsawVolume representing the private area will be located.
  3. Right click on the volume icon positioned on the main editor palette located on the left hand side of the editor and select the ChainsawVolume option to create a ChainsawVolume with the dimensions and location of the builder brush.
  4. Now set the PrivateAreaName of the ChainsawVolume. This property determines the sound channel used by this ChainsawVolume for the private area functionality. The PrivateAreaName must be unique among other private areas and OMNI areas.
  5. Determine if the private area should be initially enabled or disabled when the level starts and set the “privateAreaEnabled” property appropriately. You might use this property to have the private area initially disabled in cases where an in-environment switch could be used to turn the private area on and off.
  6. As with any volume the LocationName property should be set appropriately on the ChainsawVolume. (see section 5.1 for more information)
  7. As with any volume the Priority property should be set appropriately so that a user will be considered in the correct volume whenever two or more volumes overlap. When setting the priority of any volume it is important to set the Priority property under the PhysicsVolume category and not the Priority under the general Volume category. (see section 5.1 for more information)

Once setup and configured correctly it is possible to turn a private area on or off with an environmental control. In order to enable and disable a private area the content developer must utilize an “EnablePrivateRoomTrigger” and a “DisablePrivateRoomTrigger.” Figure 34 illustrates an example where the opening of a door will invoke a DisablePrivateRoomTrigger to disable an associated private area. Similarly, the closing of the door will invoke an EnablePrivateRoomTrigger to enable an associated private area.

5.2.4 Restricted Area Configuration

Restricted areas allow developers to create an area that will only allow specific users or members of specific groups into it.

To create a restricted area:

  1. In the web.alive Editor build an appropriately sized brush which will be used to define the volume of the restricted ChainsawVolume. This should encompass the entire area to be restricted. In other words, it is not sufficient to size the restricted ChainsawVolume to block a doorway to the restricted area since users may teleport to other users in the restricted area in order to gain access to the restricted area.
  2. Place the brush in the correct position where the restricted ChainsawVolume will be located.
  3. Right click on the volume icon positioned on the main editor palette located on the left hand side of the editor and select the ChainsawVolume option to create a ChainsawVolume with the dimensions and location of the builder brush.
  4. In the properties of the ChainsawVolume under the heading RestrictedPhysicsVolume, set the PermittedUsersList to the list of specific users that should have access to the restricted area. (see notes below for syntax)
  5. In the properties of the ChainsawVolume under the heading RestrictedPhysicsVolume, set the PermittedGroupsList to the list of group names that should have access to the restricted area. Members of the PermittedGroupsList will be able to access the restricted area. (see notes below for syntax)
  6. Note: If both the PermittedUsersList and PermittedGroupsList properties are not set then everyone will have access to the restricted area.
  7. Users who are granted access to a restricted area based on the values of the PermittedGroupsList and PermittedUsersList may also invite unauthorized users into a restricted area for the duration of a single session. In order to permit authorized users the ability to invite unauthorized users into a restricted area the GuestGroup property under the heading of RestrictedPhysicsVolume must be set for the restricted ChainsawVolume.

A few notes on the above:

  • In keeping with Windows semantics, all user and group names are case insensitive.
  • A user or a group without a domain prefix is considered to be part of the local domain. This allows the content developer to use and specify local account and group names in the content without making the content server specific. Network users and groups (e.g. americase\areiche or the new americase\webalive group) must always specify the domain and group name separated by a \ or /.
  • Every authenticated user is added to a special group which defaults to wa_auth_users. This group can always be counted on to identify authenticated users.
  • Since anonymous users have no group membership, they will not be able to access any of the restricted areas of the server.

5.2.5 Teleporters

It is necessary to add a teleporter just outside the volume in order to support the ability to kick people from the room and to support
teleporting / spawning at a particular location. See 11_Miscellaneous for more information on teleporters.

5.2.6 Configuring Meeting Controls

A ChainsawVolume can be configured to grant users within it additional meeting controls. This is done by adding predefined group names to the “VolumeAdditionalGroups” list in the ChainsawVolume properties.
Table 7 list the various meeting controls which can be granted to users within the volume along with the predefined group names which should be added to the “VolumeAdditionalGroups” list in order to grant the particular capability.

Meeting Controls and associated Predefined Group Names

Capability                                                         Predefined Group Name
----------                                                         ---------------------
Laser Pointer control                                              WA_LASERPOINTER
Soft Mute another User                                             WA_SOFTMUTE
Kick another user from the current room                            WA_KICKFROMROOM
Kick another user from the current server                          WA_KICKFROMSERVER
Allow interaction with specified Actor from anywhere in the volume WAInteract_<ActorTag>        *available in 3.0 only
Allow interaction with specified Actor from within proximity range WAInteractNearby_<ActorTag>  *available in 3.0 only

5.2.7 Configuring Live Webcam Wall

New for release 3.0

A new feature in release 3.0 is the live webcam wall. This allows users in a specified ChainsawVolume to display their personal webcams on a web renderer. Setting this up requires a web renderer (please see Chapter 9) and a ChainsawVolume. To enable the live webcam wall we link the WebActor to the ChainsawVolume by adding the WebActor's Tag to the AssociatedActorTagNames in the ChainsawVolume properties.

Then, while standing in this ChainsawVolume, users who opt to share their webcams will have them appear on the web renderer surface. The feature is activated by users in the environment via right clicking on the web renderer and selecting "Live Webcam Wall". The web renderer will display webcam feeds from all users who have oped to share their webcams and are currently standing in the specified volume.

5.3 ChainsawRoom

In version 3.0, a new ChainsawRoom actor has been added which can designate one or more volumes as a cohesive "room" unit. This allows the content developer to perform certain actions depending on if the room is locked or unlocked, and occupied or unoccupied. It also allows administrators to perform actions which affect all users in the room, such as mute all.

To define a Chainsaw room, complete the following steps (assuming the room has at least one chainsaw volume and a triggered door mover to control access):
  1. add a ChainsawRoom actor from the Actor Class Browser. It inherits directly from the Actor base class. Give it a unique Tag
  2. Enter the volume tag(s) of the volume(s) which make up the entire room in the AssociatedVolumeTagNames array.
  3. set InitRoomLocked depending on the default state of the room. If the room is closed when the map first starts, you may wish to set it to True. If the room doors default to open, leave it False
  4. add a LockRoomTrigger and UnlockRoomTrigger (under the Triggers in the Actor Class Browser). Give each a unique Tag, and in each of their Event fields, enter the Tag which you gave the ChainsawRoom actor in step 1.
  5. select the door mover which controls access to this room. Under the Mover Properties, MoverEvents, enter the tags given to the LockRoomTrigger and UnlockRoomTrigger in ClosingEvent and OpeningEvent. These can be counter-intuitive because they are named with the assumption that the doors default to a closed position. OpeningEvent fires when the mover travels from key 0 to key 1 and ClosingEvent fires when the mover travels back to key 0. Hence, if the door is open at key 0, then the OpeningEvent should activate the LockRoomTrigger and the ClosingEvent should activate the UnlockRoomTrigger.