0% found this document useful (0 votes)
352 views504 pages

Manual Estudio10

Uploaded by

Oliver Bonilla
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
352 views504 pages

Manual Estudio10

Uploaded by

Oliver Bonilla
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 504

Publishing Information

BRAINSTORM ESTUDIO REFERENCE MANUAL


Copyright © 2005 by Brainstorm Multimedia

FOURTH EDITION: DECEMBER, 2005


This printed manuals are Brainstorm eStudio v10 Manuals version 1.0
This materials are liable to change.
Check the Brainstorm Forum for updates.

Authors: Brainstorm Team


Brainstorm eStudio Introduction

Brainstorm eStudio Introduction


Brainstorm specializes in the development of interactive real-time 3D graphics solutions and is a
leader in the field of virtual sets and on-air graphics for television and feature film production.

eStudio is the culmination of over fifteen years of software development and production experience,
developed as both a stand-alone application and a foundation for building 3D graphics solutions.

eStudio enables you to build high quality presentations incorporating sophisticated features such as,
multi-pipe graphics, complex camera tracking, real-time data I/O, multi-pass rendering, particle
systems, and integrated offline rendering.

eStudio bypasses the classical approach of constructing "fixed real-time 3D graphics applications",
which may take months or years of programming effort. eStudio enables rapid development using a
combination of drag&drop and pop-up menus, and python©, a powerful object-oriented interpreted
language which provides eStudio with unlimited extensibility.

eStudio is Brainstorm virtual studio and 3D broadcast graphics software. It provides virtual studio
when combined with the latest graphics hardware and camera tracking devices. Any type of 3D
graphics can be created or imported and animated in real time within eStudio. Version 9 provides
the latest developments that include a wide range of new functions and features.

1
Brainstorm eStudio Introduction

Brainstorm eStudio is used in a wide variety of fields like Virtual Reality, 3D Presentations,
Simulation, Virtual Sets, Reality Centers, Domes, Caves, Film Previsualization, Broadcast graphics,
Education, and Research.

Examples of applications include the following:

Broadcast graphics
The software allows 3D graphics to be interfaced to external data. A typical broadcast application is
election graphics where data is collected from the votes being counted around the country and
turned into a graphical representation using 3D objects, textures, various colours etc. Often includes
the parties logos or pictures of the personel etc.

3D Corporate Presentations
Brainstorm allows corporate companies to use the same studio space to do different shows with
completely different branding on each one. Also this type of presentation often uses Powerpoint or
Excel. eStudio can convert these files directly to 3D to enhance the presentation and display them
through multiple projectors.

TV Tickers
Displaying changing data in a graphical form. A typical example is financial data. Graphics can be
linked directly to the data from databases, websites or any other source and displayed in realtime.

Game Shows
Once again this might be a situation where the graphics on screen need to be linked to a database
of random questions/answers. Or there may be the requirement for the graphics to change as the
contestant presses certain objects or triggers.

Shopping TV
Displaying the on air graphics for a shopping channel. The graphics are linked directly to the
channels database of goods that they are selling. As the item they sell changes, the graphics change
in real-time.

Virtual Sets
There are many different type of customers using the system for virtual sets. News, sports shows,
interviews, chat shows, film reviews, etc, all have applications where virtual sets are ideal.

2
Brainstorm eStudio Introduction

Film Pre-visualization
In simple terms this allows a director to see a composite of the final shot rather than looking at just
the green screen when he is shooting.

Some of the new functions this version of eStudio includes are:

- New Desktop Interface primitive presets.


- Create your own lists with Extra editors and functionality.
- Enhanced animation capabilities using timeline editors.
- Create animations by drag and drop 3D Curves to the timelines.
- Instant Ticker capabilities.
- New Group Effect animation capabilities.
- New Shader capabilities.
- Phong and Bumpmap shading.
- Advanced Cubemaps.
- Auto generated Bump Mapping textures.
- 3D Positional sound capabilities.
- Enhanced general handling capabilities.
- Propietary video codec format.

3
Brainstorm eStudio Lists concept

Brainstorm eStudio Lists concept


Lists, List elements and List editors
Generating Brainstorm eStudio Lists configurations
Saving Brainstorm eStudio Lists configurations
Brainstorm eStudio databases
Brainstorm eStudio sets
Editing Lists elements
Working with List editors

Understanding Brainstorm eStudio organization in Lists, List elements and List editors is crucial to
understand the whole interface design and behaviour of eStudio , thus, this section should be read
carefully.

Brainstorm eStudio uses lists to organize all its data configuration. We can say that everything in
eStudio is inside a list.

Every list represents a concept and every element of the list is an instance of the concept, for
example, there exists a list of lights and every element on that list is one of the lights of the
simulation.

The default lights list

5
Brainstorm eStudio Lists concept

The same applies to objects, materials, textures, etc. Even those modes or states that seem to
resist to the list concept (because they exist only once for the whole database) are organized by
eStudio in a list: the list of modes, though this list is forced to have one only instance and that
instance holds all the modes of eStudio.

We call these lists the Lists of eStudio and each element of the list a List element or item.

For example:

List of Lights: List of Objects: List of Materials:


Light1 Object1 Material1
Light2 Object2 Material2
... ... ...

Every List has a short and a long name assigned to it, for example, the material List has as a long
name material and as short name mat. The list of all eStudio Lists with their long and short names
can be seen in the Brainstorm eStudio index file.

There exists even a list of Lists containing all the lists of eStudio :

List of Lists:
- List of Lights
- List of Objects
- List of Materials
- ...

Every List element has a collection of parameters that define the element. For example, every light
in the list of lights has a position, orientation, color, etc.

A light's collection of editors

The interface tools that allow the user to modify these parameters are called editors. That means
that every list has a collection of editors that allow to modify the parameters of the elements of that
list. For example:

Editors of the list of Lights: Editors of the list of Objects:


LIGHT_TYPE OBJ_TYPE
LIGHT_COLOR OBJ_TRANSPARENCY
... ...

The name of the editors are important because they are extensively used to create binds, events,
setting values, etc.

Making a Brainstorm eStudio database configuration consists in generating items for several of
eStudio Lists and specifying the parameters for those elements by using the appropiate editors.

6
Brainstorm eStudio Lists concept

Usually some of these parameters are references to items of another Lists, for example, a material
from the list of materials might reference a texture from the list of textures.

These references From and To different List elements stablish the squeleton of an eStudio
configuration.

Brainstorm eStudio provides ways to graphically visualize those references to help in the analysis
of a given configuration.

A Brainstorm eStudio database

Such a user generated configuration is called an eStudio database.

When Brainstorm eStudio is started every List is empty and it is up to the user to fill each List and
edit the appropriate List elements and references to make the desired configuration.

When saving the program configuration an independent text file is generated for each List with the
description for each of one of its List elements.

The short name of the List is used as the file name where to save the List plus the .py extension,
for example, the short name of the lights List is light and it is saved in a file named light.py

When saving the configuration, the user only specifies the name for a global file that will have the
calls to read all the independently saved List files.

Once a eStudio database has been configurated the user usually saves it to disk so that it can be
read later.

Brainstorm eStudio allows the simultaneous reading of more than one eStudio database.

7
Brainstorm eStudio Lists concept

Multiple databases

Once they are loaded the user selects the database on which he wishes to work and then eStudio
only shows in every List window those elements that belong to the selected database.

In theory, loaded eStudio databases are supposed to be independent from each other, that is,
none of the List elements in one database references others from another database. But,
sometimes is usefull to stablish such kind of cross references and eStudio permits the user to do so.

An eStudio set is the collection of List elements that is generated when a reference chain is followed
from a List element.

For example, an object element could generate a set of three elements composed of the object
itself, the material that it references and the texture that the material references, that is, object-
>material->texture.

Brainstorm eStudio sets are useful because allow the user to save and load sets independently. So
they are a convenient way to transport List elements configurations from one database to another
or to use them as library configurations.

Each List element has to have a unique name in the scope of that List and database.

When a new element is created it is given a default new name (the short name of the List plus a
number) that the user should edit inmediatly to reflect the intended purpose of the element. Then,
by interacting with the List editors the user configurates the List element.

An internal notification mechanism allows eStudio to know for one List element what elements of
another Lists are referencing him, or which ones are being referenced by him. This way, if the user
tries to delete one List element that is actually being referenced from another List element the
program will alert the user about this reference. In addition, the user can query about the
references to and from any List element.

When working with a big number of elements in a List it is convenient to organize them in a tree
fashion. The slash bar inserted in the name is used for this purpose in a similar way of how UNIX
directories are organized. Inserting the adecuate slash bars in the names of the List elements the
user can organize them as a configuration of parents and children. Also a graphical interface of the
tree can be displayed and manipulated. In some of the Lists, particularly the object List the tree
organization determines much more than a simple organization but the order and transformations in
which objects are rendered.

Brainstorm eStudio interface window for a List always shows the same standard model where the
user can select, create, delete, duplicate, copy, paste, rename and edit the different List elements.

8
Brainstorm eStudio Lists concept

The size of the window where the List is displayed can grow and shrink in vertical size (not in
horizontal) to be able to fit it all.

A scroll list inside the List window allows to select the desired List element. Elements can be also
displayed in a compressed form according to the parent and children organization and also in a tree
graphical fashion.

By clicking in the scroll list, the user selects one element of the list. Every List has one and only one
element that is the selected one. This element is the actual element that is being edited and it is
highlighted in the scroll list. Every change in the editors of the List will affect to the selected item.

Nevertheless, a multiple selection is also allowed in the scroll list, in this case any change in the List
editors will affect also to all the selected items in the scroll list.

As we said before, every List has a collection of editors that modify its elements parameters. Any
action or modification done inside a List happen through these editors.

There exists a list of editors that holds all the editors of all the lists of eStudio. This list is generated
internally by eStudio on start up. Every push button, toggle button, selector, number modificator,
etc. that the user can interact with is one of these editors.

Every editor has a unique name that indentifies it, always in capital letters, for example, some
editors of the list of lights are named LIGHT_POS, LIGHT_COLOR, etc. (The name of an editor is
displayed in the title of the popup menu that appears when pressing the right mouse button over
the editor).

There exist several ways in which an editor can be activated to execute its action or modify its
parameter:

● By user interaction with the editor with the mouse or the keyboard.

9
Brainstorm eStudio Lists concept

This is the most typical way and corresponds to the manual editing of the List elements.
● By running a script command.
A command of the form:
itemset(itemName, editorName, value)

where:
itemName is the name of an eStudio List element
editorName is the name of an element of the editor List.
value is the value we are setting the parameter to.

Several things have to be noticed here:

The name of the List to which the item belongs to is not specified. This is possible because
given the editor name eStudio knows what List are we talking about.

The value parameter can be of different types according to the editor (number, string,
vector, etc..) or not be specified at all if the editor is a Push button.

There exist another command of the form:


itemget(itemName, editorName)
that returns the actual value of the parameter.

This mode is used when the user generates his own scripts.

● By executing an event.
There exists another list called the List of events where every element represents a command
of the form itemset(itemName, editorName, value) like the script command of the previous
paragraph.

The elements in this list can be run in a sequential mode or by pressing a keyboard key.
This mode is used to automatize a collection of events to happen automatically or by user
interaction.
● By binding the editor.
Every editor can be directed to receive its modification automatically from an external varying
function. This modification occurs for every frame and allows List element parameters to be

10
Brainstorm eStudio Lists concept

modified in real time by external means. When an editor is binded its color is changed to blue
to reflect this state.

Editor yscale binded

11
Interface description

Interface Description
Interface windows
Editors description
The List window
Interface popup menus
Graphic Tools

When eStudio starts it generates at least one window: the GFX Window. This is the window where
all 3D visualization happens. It could be that in some user configurations this is the only window
that eStudio generates.
Apart from this window some other windows can be generated to provide customized user interfaces
or as eStudio lists editing interfaces. So, three types of windows can be generated:

GFX Windows.
The windows showing the 3D simulation. Several of these windows may appear in case
eStudio runs in multipipe mode. By default they are open with a black background.

Folder windows.
These windows contain user customized interfaces.

List windows.
Windows that are opened to edit eStudio lists. One window exists for each list and all of them
show the same standard eStudio list editing fashion. Some of these interface windows can
also generate subwindows to provide tear-offs or to get more window space in the editing
process.

Apart from those windows some independent temporal windows can also be generated by eStudio
to prompt the user about an action to be taken or to display warnings or errors, etc.. By default,
eStudio automatically creates on start up one Folder window to provide the user an easy way to
access eStudio functionalities: The GlobalLists folder.

A window located on the right of the GFX Window containing a toggle button for almost all of
eStudio lists.
Pressing one of these buttons pop ups the corresponding list window below the GlobalLists folder
window.
Also in this window there's a selection of the most common modes or actions as Statistics, Axis,
Exiting, etc...

The following picture displays the default composition of eStudio windows on start up:

13
Interface description

In this section we'll describe all the type of editors that exist in eStudio.

The Button editor execute an action when being pressed.


Usually it shows a label or an icon inside the button meaning the action that will be taken when
pressed.

The Toggle editor modify an integer variable to zero or one (that is, off or on).
They are usually smaller than Buttons and do not show the label inside the button but on the right
side.
When the Toggle editor is in on state, it shows a red check sign over the button.

The Option editor allow the user to choose a selection from a fixed number of them. It is composed
of a label showing the title and a Button showing the selection.

14
Interface description

The list of choices are displayed when clicking the left mouse button while the mouse is over the
Push button.

The Preset editor allows to select between different predefined options.The editor also allows to
create your own presets, just set the different editors in a list with Preset editors, like curves3D or
texts and select Create from the Preset menu. This will add your preset to the dropdown list to be
used whenever you want.

To delete a preset select in the list items area with the right mouse button and from the Preset
submenu, delete the preset you want.

The Integer editor modifies an integer variable.


It is composed of three zones: the Title label, two small Arrow buttons and the Text field show the
actual value being edited

15
Interface description

● Pressing the arrow up button increments the value. Keeping the button pressed without
moving the mouse will repeatedly increment the value.
● Pressing the arrow down button decrements the value. Keeping the button pressed without
moving the mouse will repeatedly decrement the value.
● The value will be continuously incremented or decremented with the horizontal movement of
the mouse if any of the arrow buttons is kept pressed and the mouse is moved horizontally.
● The value of the increment can be selected in powers of ten resolution by clicking with the left
mouse button in the corresponding digit in the Text field.

The Integer2 editor modifies an array of two integer values. It consists of two Integer editors.
The title is displayed on the left. The title of the Integer editors becomes X and Y.

The Integer3 editor modifies an array of three integer values it consists of three Integer editors.
The title is displayed on the left. The title of the Integer editors becomes X, Y, and Z.

Is the same as the Integer editor but modifying a floating point value.

Is the same as the Integer2 editor but modifying an array of two floating points.

Is the same as the Integer3 editor but modifying an array of three floating points.

A version of this editor is used to modify the Euler angles of an orientation (head, pitch and roll)
The title of the Float editors becomes H, P and R.

16
Interface description

The Table editor modifies an array of strings. The array is displayed in rows and columns. The New
and Del buttons generate or delete a block of components.

The header line on the top of the scroll list have the same functionality as in the List editor.

The String editor modifies a string of text. It is composed of a label and a text field. The text field
behaves as a single line text editor.

The LString editor modifies an array of strings.


The header line on the top of the scroll list have the same functionality as in the List editor.

17
Interface description

The Selector editor selects a reference from a List element to another List element.
It is composed of the following elements:

● A Text field showing the selected element.


● A Toggle button on the right allowing to fold or unfold the Scroll window.
● A Scroll window showing the elements of the List.
● A header for the Scroll window.

In the folded mode, it shows the selected element in the Text field.

In the unfolded mode, it shows a Scroll window and a header similar to those used in the List
window from where to pick the selection.

To delete a selection select the whole text and press the Backspace key.

Double clicking in the text field automatically edits the selected element by poping up its List
window with the element as the selected one.

The Color editor modifies an array of three floating point numbers meaning the red, green and blue
components of a color. The editor contains a customizable color palette.

18
Interface description

The Gradient editor modifies an array of interpolated colors.


It is composed of a rectangular polygon displaying the interpolated array of colors with small
arrows in the bottom pointing to the interpolation key points. When this small arrows are double
clicked a color editor is displayed in the bottom that allows to modify the pointed key color.

19
Interface description

The File editor modifies a string containing a file name.

It is composed of a label, a text field and a toggle button. The text field show the current value of
the string. The toggle button allows to fold/unfold a file selector.

The following picture show the unfolded state of the editor.

The Label editor modifies a string. It has no editing capabilities because it is only used to display
information.

Frame buttons are Toggle buttons that hold a submenu inside. They have a rectangular shape
extending from left to right of the List window. The Toggle button is displayed on the left side and
the title of the menu is centered in the frame.

The submenu is folded or unfolded according to the Toggle button state.


This button is not an editor in the current version of eStudio.

Notice that eStudio uses a lazy technique to create the submenu trees that make the interface. This

20
Interface description

means that some of the sub-menues will take a bit longer to be unfolded the first time because the
widgets that make the menu are then being generated.

The List menu is the standard menu for any of the eStudio Lists.
It is composed of the following elements:
Scroll Window
Scroll Window popup menu
Header
Buttons
Editing frame
Element name editor

It shows the name of each element on the list.


Although one and only one element is selected on an eStudio List at any time (unless the list is
empty) the scroll menu has the capability of multiple selections (by simultaneusly pressing the Shift
or Control keys) to apply the editors actions to all the scroll menu selected items at the same time.

The selected elements are highlighted with reverse video.

Each element can be selected by clicking with the mouse in its line.

When the height of the window is not big enough to show all the elements off the list a scroll bar is
displayed on the right side of the window that allows the user to scroll the visible part of the list
through the whole list.

Every List owns a popup menu that can be popped up by clicking with the right mouse button while
the mouse is over the window.

21
Interface description

The header is displayed as a narrow horizontal portion on top of the Scroll window.

It is composed of the following elements from left to right:

Up & Down buttons


They allow to swap up and down the selected List Element in the List.

Element index
Showing the index of the selected element and the total number of elements in the List.

Search label
Showing the actual searched label. Searching is activated when typing any key on the Scroll window
of the List menu. The focus has to be there, so you have to click with the mouse in the window
before start typing.

Display graphic tree mode button


Switches the display mode of the List.

Divide scroll window mode button


Switches the window in two parts.

Maximize button
Makes the height of the Scroll window big enough to hold all the elements of the List. If pressed
again it returns to the previous height.

Minimize button
Makes the height of the Scroll window be five elements. If pressed again it returns to the previous
height.

Increment window height button


Increments the height of the Scroll window in one line.

Decrement window height button


Decrements the height of the Scroll window in one line.

22
Interface description

Six Push buttons are shown on the bottom of the Scroll window:

● New
Creates a new element. The new element is inserted below the selected one.
● Del
Deletes the selected element
If the list becomes empty and the Editing Frame was unfolded it will be automatically folded
● Copy
Copies the actual parameters of the List element in to an internal buffer.
● Paste
Pastes the values in the internal buffer to the selected element
● Dup
Duplicates the selected element.
● Clean
Deletes (after prompting the user one by one) all the unreferenced elements of the List.

The first line in the Editing Frame when unfolded is the Element name editor. It allows to rename
the selected element.

You can doble click in the field name if there is no element created and eStudio creates it for you
and also changes to the list referenced in the editor.

All the elements in the List can be organized in a tree fashion. The slash character introduced in the
names of the elements configure the tree organization in a similar way than Unix directory names
do.

List popup menus


Frame popup menu
The editor popup menu
Gfx popup menus

List popup menus


Every List in eStudio has an assigned popup menu. This popup menu may be popped up from:

● The Screen popup menus when picking objects in the GFX Window.
● The List window when pressing the right mouse button on the scroll list window.
● The Selector editor when pressing the right mouse button on the text field.

23
Interface description

Example of a screen popup

Every List popup menu has a common part and might have some other buttons that vary according
to the List.
The following buttons are common to every List popup menu:

● Edit >
This cascade button allows to edit another element.
❍ Edit>This
Edit the selected element.
❍ Edit>Parent>
Edit one of the ancestors.
❍ Edit>Child>
Edit one of the children.
● Database >
This cascade button selects the current editing database.

● References >
❍ References>View the references window
This toggle button displays or hides the View references window.
❍ References>From Edit>
Edit one of the elements that reference this one.
❍ References>To Edit>
Edit one of the elements that are referenced from this one.
❍ References>Sets>
Note that the directory for loading, saving or deleting sets is specified in the modes List.
References>Sets>Load>
Load an eStudio set.
References>Sets>Save
Save the eStudio set generated from the selected item of the list.
References>Sets>Delete>
Delete an eStudio set.
● Help
Opens an html browser for the manual page describing the selected List.

Below this buttons, in some lists, a line separator may appear and some specific buttons for the
selected list appended. This appended buttons usually perform a common action on the List, for
example, a Cull action in the object List.

24
Interface description

Specific List popup menus


The following Lists add some specific buttons to the standard List popup menus:

● Object
❍ Pivot Displays the pivot popup menu.
❍ Cull Allows to cull on and off the object.
❍ NewPivot Generates a new pivot and assigns it to the object.
● Pivot
❍ Reset resets the position and orientation of the pivot.
❍ The Visible button toggles the Pivot graphic manipulator visible for the selected
pivot.
❍ The HideAll button hides every Pivot graphic manipulator.
● Light
❍ A Delete button.
❍ A selector for the pivot of the light.
❍ A Hide All button to hide all the visible pivots.
❍ The Edit Reference popup menu.
● Trajectory
❍ Visible toggles the visibility of the graphic representation.
❍ Delete Deletes the trajectory.
❍ HideAll Hides all graphics.
● Timer
❍ The Edit button displays the Timer List menu selected for this timer.
❍ The Action submenu allows to act on the selected timer.
❍ The ToList submenu allows to send an action on the selected timer to the List of
Events.

Frame popup menu


This menu popups when positioning the mouse over any of the Frame buttons and clicking with the
right mouse button. It is usually popped up from the Editing Frame of a List Window.
It is provided as a convenient way to save databases or backups easily without the need of editing
the databases List.

● Save
Saves the configuration of the currently selected database. It might be insensitive in case the
current database has not been assigned a file name.
● Save as
Edits the database List for the selected database. This button is used when there is no file
name assigned yet to the database or another file name for saving has to be assigned.
● Save All
Saves all the databases in the database List. Note that the buttons Save and Save as only
save the current database, Reload reloads the current database.
● Save Backup
Saves a back up of the current database. This action will generate a subdirectory under the
current database directory with the name backup1, backup2 or backup3 respectively. It will
be unsensitive if there is no configuration loaded.
● Exit>Save&Exit
Saves the current database and exists the program.
● Exit>Exit
Exits the program. It promps the user in case there have been modifications since the last
save action.

The editor popup menu


The menu is popped up from all the editors of the interface when the mouse is over their widget and

25
Interface description

the right mouse button is pressed. It allows to bind the action of the editor to specific functions.
See the Brainstorm concepts section and the Bind List for information about bindings.

The editor popup menu displays a title specifying the name of the affected List, the name of the List
element in brackets and the name of the editor modifying the List parameter.
Under it the following cascade buttons are displayed:

● The Control button displays the following cascade of buttons:


❍ To List
Generates in the event list a new event whose action is to set the actual state of the
parameter that modifies the editor (or run the action if the editor is a push button).
Two cases are posible:

■ If the parameter is not binded it generates the event that sets the current value
into the parameter.

■ If the parameter is already binded three choices are possible:


To List>Value
The event that sets the current value into the parameter.
To List>Bind
The event that sets the actual binding into the parameter.
To List>Free
The event that removes the binding on the parameter.
❍ Free
Frees the current binding on the parameter.
❍ Free Curve
Frees the Binded curve.
❍ Paste
Pastes the content of the clipboard.
❍ Paste Bind
To paste a bind in the editor.
❍ OverBind
❍ Edit
Edits a List element:
■ Edit>Bind
Edits the bind List element that modifies the parameter.
■ Edit>Function
Edits the binding function that is using the bind. For example, if there is a binding
to a curve, the curve List window is displayed.
■ Edit>Curve
Edits the curve that is using the bind.
■ Edit>Timer
Edits the timer that is using the bind.
❍ Timer
Displays the timer popup menu
❍ Record
Selects the timer for recording. When this timer is fired running forward the binding

26
Interface description

starts recording the values into a curve and when the timer ends running forward the
recording stops.
❍ View bind
Allows to see the bind values in the editor.

● The Function button displays a cascade of buttons representing the different options for
binding.
Each one selects a List element of the corresponding List. See the Bind List for the
specification of the return value from each function.
❍ Curve
❍ Curve1D
❍ Curve3D
❍ Tray
❍ Pivot
❍ Object
■ ObjCG (the object CG)
■ ObjBoxCen (the object bounding box center)
■ ObjBoxMin (the object bounding box minimum corner)
■ ObjBoxMax (the object bounding box maximum corner
❍ Map
❍ Dll
❍ Intersection
❍ Condition
❍ Editor
● The Curve button selects a curve that filters the bind function return value. For example, any
binded value can be scaled by selecting a Linear curve with a scale parameter different than
one.
● The Component button selects a component of the binding function. See the Bind List for the
specification of binding components. The user can select one of these choices according to the
type of returned value and the type of parameter that is binded:
❍ Single
❍ .XYZ
❍ .X
❍ .Y
❍ .Z
❍ .HPR
❍ .H
❍ .P
❍ .R
❍ Valid

● The Timer button selects the bind timer. See the Bind List.

GFX popup menus


Gfx popup menus are designed to be a handy way to perform some of the most common operations
of the interface on the GFX Window without the need to edit the corresponding List window.

When the mouse pointer is over the GFX Window while the right mouse button is clicked the
mouse pointer icon changes to a small hand pointing to the left, meaning that the pointer is in
selecting mode. Keeping the mouse button pressed and dragging the mouse over the screen
highlights the selected element and displays the names of the objects, lights, pivots or
trajectories under the mouse pointer:

If the mouse button is released while over one of these elements then the corresponding Gfx
popup menu is popped up.

If the mouse button is released while not over any of these elements then the global Gfx

27
Interface description

popup menu is popped up.

The global Gfx popup menu


The menu is popped up when the right mouse button is released in the GFX Window while it is not
over any object, light, pivot or trajectory. It can also be displayed from the Object screen
popup menu.
This menu performs some of the common operations that affect the way the perspective is driven
with the mouse.

The following options are available from this menu:

● View Mouse Point of interest toggles the actual viewing mode for the Point of Interest.
● Mouse sets the mouse mode.
● Perspective reset resets the camera parameters to the default position.
● Perspective Set as Reset.
● Pipe properties.
● Hide all graphics hides the graphic representation of all 3D graphic manipulators. (Lights,
pivots and trajectories)
● Show Desktop shows the Desktop Interface.
● Databases. Shows the existing databases and allows to change between them.
● Folders. Shows the existing folders.

The object Gfx popup menu


The menu is poppped up when the right mouse button is released in the GFX Window while it is
over an object. The object is highlighted according to the actual highlight mode.

When the mouse pointer goes over an object with right mouse button pressed a list of the form:

Object 1: Object name [Material name]


Object 2: Object name [Material name]
...

is shown in the GFX screen. This list indicates the names of all objects and polygon materials (in
brackets) the mouse pointer is crossing through.
When the mouse button is released a popup menu appear with the following options:

● The Picked Object cascade. In case several objects were picked this submenu allows to select
one of them for the popup menu. The first of them is selected by default. In case only one
object was picked, this button is not shown.
● The Parent> submenu is shown whenever the selected object is a child. It allows to select any
of the parents of the selected object for the popup menu.
Note that this is needed because when popping up this menu, if the object we want is a group
composed of several children, there is no way to select the parent of them with the mouse
because the parent is not a real object being displayed, only children have real geometry
that is displayed. To solve this problem the popup menu shows in its first line this submenu
with all of the parents of the selected object.
In case the object has no parent this button is not shown.
● The object List popup menu selected for the picked object with the following buttons:
❍ The Pivot button selects a pivot for the object and displays the Pivot popup menu for
this pivot.
❍ The Cull button culls the selected object.
❍ The New Pivot button creates and assigns a new pivot for the object.
● The material List popup menu selected for the picked material.
● The global Gfx popup menu. This menu is also popped up here because there should be no
other way to popup it up in case the GFX Window is totally covered with objects.

28
Interface description

The light gfx popup menu


This menu is popped up when the right mouse button is released in the GFX Window while it is
over the pivot graphic manipulator of a light.

When the mouse pointer goes over an pivot graphic manipulator with the right mouse button
pressed a line of the form:

Light: Light name

is shown in the GFX Window. This line indicates the name of the light associated to the pivot
graphic manipulator the mouse pointer is crossing through.

When the mouse button is released, the light List popup menu is popped up.

The pivot Gfx popup menu


This menu is popped up when the right mouse button is released in the GFX Window while it is
over a pivot graphic manipulator.

When the mouse pointer goes over an pivot graphic manipulator with right mouse button
pressed a line of the form:

Pivot: Pivot name

is shown in the GFX Window. This line indicates the name of the pivot associated to the pivot
graphic manipulator the mouse pointer is crossing through.

When the mouse button is released, the pivot List popup menu is popped up.

The trajectory Gfx popup menu


This menu is popped up when the right mouse button is released in the GFX Window while it is
over a pivot graphic manipulator belonging to a trajectory.

When the mouse pointer goes over an pivot graphic manipulator belonging to a trajectory with
right mouse button pressed a line of the form:

Tray: Trajectory name

It is shown in the GFX Window. This line indicates the name of the trajectory associated to the
pivot graphic manipulator the mouse pointer is crossing through.

When the mouse button is released, the trajectory List popup menu is popped up.

Picking mode
Picking mode is entered when the focus in the GFX Window and the Ctrl key of the keyboard is
pressed and maintained pressed. The mouse pointer icon changes to a small square meaning that
the pointer is in Picking mode.

Note that it is not enough to move the mouse pointer to the GFX Window and press the Ctrl key,
also the focus has to be there before. The focus is moved to the GFX Window by taking the mouse
pointer there and pressing the left mouse button.

In picking mode, the user can manipulate the different graphic manipulators.

29
Interface description

While in this mode the perspective parameters can not be modified with the mouse.

Mouse manipulation of the perspective parameters


The mouse move the camera and its orientation in the following modes:

● EulerHPR:
Control the Head, Pitch and Radius of the Point of View relative to the Point of Interest.
● EulerPTZ:
Control the Pan, Tilt and Zoom. (Point of Interest relative to the Point of View).
● Aligned:
Control the Point of View along the Global Axis.
● Drive:
Like a driving simulator.
● Navigator:
Navigation in third person.
● FrameRec:
Centers the view on the object surrounded by the selection rectangle.
● FrameObj:
Centers the view on the clicked object.
● Pick:
Allows to pick and select objects in the GFX Window.
● Drag:
Enters drag mode.
● Info:
Shows info about the object, pivot...
● SelecRec:
Draws a selection rectangle area.

All this modes can be changed with combinations of keys. Press alt-h to have onscreen info about
this combinations.

Mouse camera movement modes (and other modes)

The default mode is EulerHPR, in this mode the head and pitch of the camera are controlled by
pressing the left mouse button on the GFX Window and dragging it horizontally and vertically. The

30
Interface description

Field of View is controlled by pressing simultaneously the left and middle button and moving the
mouse vertically.

The Mouse mode can be changed mode from EulerHPR to EulerPTZ by double clicking with the left
button.

The user can always reset to the default position the Point of View and Interest and set
EulerPTZ mode by pressing the Reset perspective button in the global GFX popup menu or
pressing alt-r keys simultaneously.

EulerHPR: (Head/Pitch/Radius)

EulerHPR Mode

● Moving horizontally the mouse with the left button depressed will change the head angle.
● Moving vertically the mouse with the left button depressed will change the pitch angle.
● Moving vertically the mouse with the left and middle button depressed will change the distance
from the point of view to the point of interest.
● Moving vertically the mouse with the left and right button depressed will change the roll angle.

EulerPTZ: (Pan/Tilt/Zoom)

EulerPTZ Mode

● Moving horizontally the mouse with the left button depressed will change the pan angle.
● Moving vertically the mouse with the left button depressed will change the tilt angle.
● Moving vertically the mouse with the left and middle button depressed will change the field of
view angle.
● Moving vertically the mouse with the left and right button depressed will change the roll angle.

The Pivot Graphic Manipulator

31
Interface description

The Pivot Graphic Manipulator is an special 3D object that allows the user to modify
transformation parameters by clicking and dragging in specific parts of the object which are called
manipulators.

Picking mode has to be entered first by taking the focus to the visualization screen and keeping
pressed the Ctrl key of the keyboard. The mouse pointer icon changes to a small cross meaning
that the pointer is in Picking mode.

The Position of the Pivot can be modified by clicking and dragging horizontally the 3D red, green
and blue arrows.

You can adjust the size of the pivot graphic manipulator by double-clicking the 3D red, green or
blue arrows to maintain a usable size of the manipulator.

Clicking in any of the extreme yellow spheres assigns the manipulators to the spheres, that is,
display the angles and hides the axis manipulators.

The Head, Pitch and Scale of the Pivot can be modified by dragging the 3D white-to-green, white-
to-blue and white-to-red arrows. (Note: The Scale value does not affect the appearance of the
graphic).

The Roll can be modified by dragging the 3D white-to-yellow arrow.

Clicking in the central yellow cube assigns the manipulators again to the central cube.

Clicking in any of the extreme yellow spheres shows the angles manipulators.

Clicking in the same sphere again changes their shapes to become cubes. This indicates that the
graphic is in Relative mode as opposed to Absolute mode.

In Relative mode, dragging the white-to-green or white-to-blue manipulators applies a relative


rotation to the actual orientation of the graphic.

As a rule of thumb, clicking in a sphere or cube will assign manipulators to it in case it did not have
them, but if the manipulators were already there then the graphic will change mode.

The tab key allows to change between the Pivot, Velocity and Offset modes. These modes can
also be entered by clicking repeatedly in the central cube.

The Object Graphic Manipulator


The Object Graphic Manipulator is an special 3D object that allows the user to modify
transformation parameters by clicking and dragging in specific parts of the object which are called
manipulators.

Picking mode has to be entered first by taking the focus to the visualization screen and keeping
pressed the Ctrl key of the keyboard. You can also enter in picking mode by pressing alt-k. The

32
Interface description

mouse pointer icon changes to a small cross meaning that the pointer is in Picking mode.

The object to edit The object has been selected

The object graphic manipulator Scaling with the manipulator

The graphic manipulator has five picking sections, this sections allow the user to do uniform and
non uniform scaling, rotation, change the object axis, and do displacements. The following image
shows the five zones.

33
Interface description

By keeping pressed ctrl and moving the mouse over each zone, you will see that it changes his
color to reflect that you can select it. When you are over the desired zone just keep pressed ctrl and
pick and drag with your mouse to make the manipulation you wish to do.

Pressing <alt> key and the '/' or '*' keys enlarges/reduces the size of the manipulators.

The Point of Interest Graphic manipulator


eStudio provides a graphic manipulator to represent the point of interest generated by the
mouse. This graphic manipulator is in fact a pivot graphic manipulator located in the point of
interest and oriented towards the point of view.

By default, this graphic manipulator is hidden. It can be made visible from the global Gfx popup
menu by toggling on the View Mouse Point of Interest Toggle button.

This graphic manipulator is used in the same way as the Pivot Graphic manipulator. In this
case, the following effects will be achieved:

Clicking and dragging the red arrow moves the Point of Interest along the X axis (the red one).

Clicking and dragging the green arrow moves the Point of Interest along the Y axis (the green
one).

Clicking and dragging the blue arrow moves the Point of Interest along the Z axis (the blue one).

Clicking and dragging in the smaller white-to-green arrow rotates horizontally (heading) the Point
of Interest.

Clicking and dragging in the smaller white-to-blue arrow rotates vertically (pitch) the Point of
Interest.

Clicking and dragging in the white-to-yellow arrow rolls the perspective in the viewing direction.

Clicking and dragging in the centered square moves the Point of Interest along the line that
connects it with the Point of View.

34
Database list

Database List
Description
Editors
Tutorial

Brainstorm eStudio works with the database concept to load, edit and save data. All the eStudio
elements (objects, pivots, lights, etc...) are well organized in this databases.

Databases are independent eStudio configuration information that can be loaded together, but
edited and saved independently from each other.

As each database is saved in an independent file that does not know anything about other
databases, there must be a way to load all databases together without the need of having the
user loading them one by one.
Thus, another independent file (called the loader) references all of them and is the one that is used
when loading and saving the whole configuration of databases (the one that you specify from the
Desktop Floppy Icon saving dialog). It resides by default in the eStudio root directory under the
dbs directory.

This "indirection", meaning that the file that you specify for saving only contains references to the
files that really contain the databases information, is a common source of confusion among users.
To avoid it, you can use the Isolated or Zipped saving modes, because those modes will always
generate a structure of directories under the file name you specify (the loader) containing copies of
your databases and you can always imagine that the file you specify contains directly all your data.
The cost of saving Isolated or Zipped on a new file is that they can take longer to save and use
more disk space.

The number of current databases that the program is working with can change while in the editing
process. In those cases where the number of loaded databases is changing, eStudio can generate
a file in dbs with a default name to always provide one loader for its current databases
configuration.

As you see, you could create a new database and load on it the dbs1 that you saved before, this
way you should have two databases loaded with the same content. And also you can have many
databases each one loaded with different content.

Saving
The way to store all your work is by saving this databases in what we call configurations. eStudio

36
Database list

allows for many databases in each configuration file. So you can organize your work in databases
and then save all this databases in a single file.

There are several editors in the list interface that allow you to load, save, save isolated, save as a
zip, save the thumbnail, save encrypted and merge databases.

For this editors to be enabled you have to create at least one object, because it's nonsense to save
nothing!

When you create database content you can add geometries, sounds, textures that are on
different directories. When saving, this elements remain in its original directories and the database
references this directories in a relative way so if you copy the database and put it on another
computer, all this elements are not copied and the database fails to load them.

To solve this eStudio implements the 'Save isolated' that makes a copy of all this elements in the
database directory. In the following picture theres a sample database directory desglosed. Note
the structure.

The database name is dolph, and the filename is dolph.py. In the same directory there's a
dolph directory that contains a geo dir with the geometry Dolphin.obj and the tex dir with the
texture Temple.jpg. Also contains several .py files for other lists that are used in this database. For
example the light.py contains information about the lights in the database.

The save zip saves your work in a .pyz file that is a zipped file containing all the necessary files.
You have no need to have any decompressor installed in your system because eStudio decompreses
the pyz file just by loading it from the program.

The save encrypted mode creates a special zip file that is decompressed direct to memory,
although some file formats still need to be decompressed to disk (like movies and fonts).

The database list also allows you for locking the database to avoid saving it by error and destroy
your previous work. As a rule of thumb you should save your work with a different name than the
default one.

The Master toggle


Databases should be, in theory, independent from each other: Each database loads, edits and
saves only its own data.

To differentiate between database items we use the '<...>item' syntax, so:

37
Database list

<dbs1>pivot1 belongs to database dbs1, while <dbs2>pivot1 belongs to database dbs2, etc

But we have got a problem: there exist a part of the configuration of the program that can not
belong to any particular database, for example all the information contained in the modes List, the
pipes List, editor List, list of list, etc. because they specify global information that affects to all.

Also the user can generate his own global items in any list by renaming the item as '<>myitem',
that is, no name in the database field between the '<' and the '>'. This way you can have, for
example, lights that belong to all of them.

When saving, all global items are saved in all databases, that is, every database when
saved will also save within its information all global information.
We need to do this because this way every database can still be loaded independently and
have the same behaviour as when loaded together with the rest.

But this leads to a problem because when an item is read, if it already exists, it is
overwritten and thus the last read item has preference.
And databases can be read in different groups and in different orders and the configuration
for global items would depend then on the ordering of reading the databases.

To avoid it:

When reading several databases together the global items only overwrite the existing ones
if the reading database is marked as Master.
This way, the database marked as Master will have preference for global items. Also note
that the interface only allows to mark one database as Master.

And, if no database is marked as Master it is assumed that the first one is the Master
one.
This way, as a standard rule: The user does not mark any database as master and just
puts as the first one always the one that should be the master and define all global items

DBS_FILE Selector editor Selects the database filename. By default the


name dbs1.py is selected. When loading or
saving, selecting a name here doesn't mean it
is saved, you must press the Load or Save
buttons after choosing the filename.
DBS_LOAD Button editor Effectively loads the selected database.
DBS_SAVE Button editor Effectively saves the current database.
DBS_LOAD_MODE Option editor Selects the load mode. There are three modes,
Full, NoTexture, and disabled.

Full: loads the database with all textures


loaded and enabled.

NoTexture: loads the database without


textures.

Disabled: the Load button is disabled for the


selected database.
DBS_LOAD_ALL Button editor Loads all the selected databases.

38
Database list

DBS_RESET_ALL Button editor Resets All the databases opened.


DBS_MERGE Button editor Merges a database.
DBS_LIST_FILE File editor Selects a python file that contains all the
databases to open.
DBS_LOCKED Toggle editor This toggle disables the Save button to avoid
saving by error.
DBS_MASTER Toggle editor The database marked as Master has
preference for global items.
DBS_EDITABLE Toggle editor Toggles database edition. The small square
icon in the top part of the database list that
represents the database, changes to a
'forbidden' sign icon.
DBS_SAVE_DATE Toggle editor Appends the date and hour to the database
filename.
DBS_SAVE_ALL Button editor Saves all the databases opened.
DBS_SAVE_MODE Option editor Selects the saving mode for a database. There
are four modes, Reference, Isolate, Zip and
Encrypt.

Reference: saves the database with reference


paths to all sounds, pictures, textures, etc. The
files are not copied, just referenced. Opening
this database in another computer will present
problems unless all the referenced items are in
that computer and in the same locations.

Isolate: saves the database copying also all


the textures, sounds, geometries, etc so if you
open it in another computer the database will
work perfect.

Zip: the same as Isolated but also 'zips' the


complete database onto a single file with a
'pyz' extension. When you load this file, all the
items are extracted to hard disk.

Encrypt: the same as Zip but the extension is


'pye'. The contents of this file are encrypted
and are decompressed to memory instead to
hard disk. There is an exception to this, movies
are extracted to hard disk unless they are in
Brainstorm propietary movie format 'm2v', in
this case are also extracted to memory.
DBS_SAVE_ALL_MODE Option editor Selects the saving mode for all the existing
databases. There are four modes, Reference,
Isolate, Zip and Encrypt.
DBS_SAVE_INLINE Toggle editor Saves all the elements in a single python file.
Textures, sounds and other files are encoded in
the file using a propietary encoding method.
DBS_SPLASH_FILE Image selector editor Allows to select a picture for the database
loader that will act as a splash screen with a
progress bar for the database.

39
Database list

DBS_MAKE_LOADER Button editor Creates a loader python file in the dbs folder
(by default) or in any folder you choose, that
loads all the databases when you open it.
DBS_UPDATE_LOADER Button editor Updates the loader in case you have changed
paths or added new databases.
DBS_SAVE_SINGLE_FILE Toggle editor Saves the work in a single py file instead of one
for each list. The textures, sounds, videos, etc,
are saved in a separate folder as always (is the
mode is isolate or zip).
DBS_GLOBAL_VISIBLE Toggle editor Makes items in the lists of the selected
database to be visible from the selectors of lists
in other databases. For example you may want
to have a database that works as a library that
has all the materials, movies, sounds, etc, and
reference them from the other databases. With
this option you are able to see them although
they are in another database.
DBS_MAKE_DESKTOP_SHORTCUT Toggle Saves two things, a loader in the Dbs folder,
editor and a shortcut in the desktop. This shortcut
opens the eStudio software with the contents
inside the loader.

Start eStudio. You are welcome with three windows, the GFX Window, the Desktop Interface
window and the Command Window. For this explanation we just need the Desktop Interface, so
forget the others.

For an explanation on the different areas of the Desktop Interface follow this link. For now look
at the area with the three files, halo.py, isense.py and slidelist.py. This files are loaders, if you
double click on one of this files or drag&drop them to the GFX Window eStudio will load them but
don't do that in this moment. Press and hold with the right mouse button in one of this files, a small
window will open in place showing you some information about the databases that references and
an option to rename the file.

40
Database list

Now we are going to create a loader file with more databases, this way you will understand how
loaders work. Press the GlobalLists Interface icon to show that interface.

This interface is intended for advanced user's and allows access to all parts of eStudio. Press the
upper left icon to open the databases list.

This list allows you to load, save, save isolated, save as a zip, save encrypted, save the thumbnail

41
Database list

and merge databases.

By default, what you see in the above picture is what you have when you start the program.

When you start eStudio a database is created automatically. All the elements that you create after
this moment will be hold in this database. Note that if you installed in other directory than
'Archivos de programa/Brainstorm' the path may differ. This 'default' database is created in the
'tmp' directory.

Press the New button two or three times. This button creates a new database each time is
pressed. Look closely to the following picture (and your list too!) to see the changes after pressing
the New button. As you can easily see, new databases are below the dbs1 database. In the
following picture you can see dbs2, dbs3 and dbs4. Above this there are some coloured squares,
each one for a database. To select one of them you can click on it's name or click on this little
squares. This squares are on all the eStudio Lists so you can select each database from other lists.
The other thing to notice is that the path for this new databases doesn't exist. This is because we
haven't saved anything yet.

Now press the Del button to delete the selected database. Repeat this operation to delete the

42
Database list

other databases. Note that you can't delete the first one, this is because there must exist at least
one database.

Each database can hold 3d objects, sounds, textures... and each database can be independent
from the others, you can have just one database or many.

You can change the name of the databases as you can change the name of any eStudio element
the same way. To do it just double click on its name to enter edit mode, change the name to one
that suits you and press enter/return.

Do the same with the other databases. Usually you will name a database with something that
reminds you what it contains.

Press the arrow button to the right of the dbs1.py path.

Choose a directory and write a name for the .py file that will reside on disk. I wrote data1.py as the
name of my database. Press the OK button to close the frame that opened when you pressed the
arrow button.

At this moment, you haven't saved anything yet, just selected the name that the database will be
saved with. You have to press the Save button to actually save it. But, as you can see, the button is
disabled this is because the database contains nothing. Let's create some objects for this
database.

In the GlobalLists interface select the Object list.

43
Database list

Note that the four squares representing the databases are in this list too, as we said above, this
way you can select the database in which you will create objects. (To learn more about the object
list follow this link)

Press New to create a new object. After pressing it a new object named 'obj1' will appear in the
object list. Change its name as before or leave it as is. Also the properties for this object are
displayed too.

For this example we are going to make this object an external geometry (to see the Geometry list
follow this link). Click in the button with a down arrow at the right of the file selector (see the
following picture).

In the selector that unfolds, select the Max directory, do a double click to enter it and then scroll
down to select and load audi.m3b. This geometry has been created in 3DMax and exported to
eStudio .

44
Database list

After loading the audi geometry, the Object list is changed, don't worry about how the object is
loaded or anything about the geometry, you just need to know that you have one object in
database one. To see this, click in the other squares representing the databases and see that
there are no objects in there except in database one.

Select database three and repeat the previous steps but instead of loading the audi.m3b, load the
apache.m3b file. Now we have the audi object in database one and the apache object in
database three. See the following picture.

If you select now the first database and press the Save button, you will save only the first
database, and any other work will be lost. You have to save all the databases that contain data
and then make a loader for the all the databases.

This loader can be done and the databases saved as well just by opening the Global frame and
choosing a name for the loader. After selecting the name, pres the SaveAll button and all the
databases will be saved and a loader will be created that loads all this databases.

Loading a database
Start eStudio and open the database list.

Press the arrow button and select a database from the selector. After selecting, press the Ok
button to close the frame. Now press the Load button and the desired database will load into
eStudio .

Saving isolated
After creating or loading a database you will want to save it. The different saving modes, Reference,
Isolate, Zip and Encrypt allow for different ways to save your data. The default mode is Reference.
With this mode all references to texture files, geometry files, sound files, etc... are just that,
references. If you take your database to another computer it will fail loading because all this
referenced objects are on the database original computer.

Create or load a database, for example the Halo.py that can be found on the eStudio distribution.
After loading, choose a new name and directory and in the Save mode option editor select Zip.

45
Database list

Press the Ok button and then the Save button. This will save a zipped file with your database
whose name will be the one you choosed and the extension will be .pyz. This zipped file contains all
the database files including all the geometries, textures, sounds, movies, etc...

Save Inline
This saving option creates a file and saves inside also the picture files used as textures, the movies,
the sound files, all the external files. It saves them in a encoded fashion. If you save a database this
way you can inspect the generated python file and see sections like the following example:

itemnew("tex", "obj1",
"TEX_FILE", uutmpfile('begin-base64 0 Basebrd.JPG\n\
/9j/4AAQSkZJRgABAgIAAAAAAAD/4QC8RXhpZgAASUkqAAgAAAAGABIBAwAB\n\
AAAAAQAAABoBBQABAAAAVgAAABsBBQABAAAAXgAAACgBAwABAAAAAgAAABMC\n\
AwABAAAAAQAAAGmHBAABAAAAZgAAAAAAAABIAAAAAQAAAEgAAAABAAAABgAA\n\
kAcABAAAADAyMDABkQcABAAAAAECAwAAoAcABAAAADAxMDEBoAMAAQAAAAEA\n\
.
.
CtnirURyIz71jdmDnR8lae6Abv8ARY50RzAz4JaUQ7Z1k34LGG7th9FZY/sD\n\
LHBY1x/AUsoDB3MPoit11sj6JjHPO6EpwLwRcQUtSGscR9ifRTqO/cn0VrbT\n\
jJsAris2+I/cD8yWj//Z\n\
====\n\
'),

This sections usually are very long ones and encode the external files using ascii characters.

Save Single File


Databases can be saved also in just one file, using the Save Inline option. With this you get only a
python file instead of one for each list. If your database uses external files like movies, sounds, etc,
it stores them inside the usual folders.

Globally Visible
Makes items in the lists of the selected database to be visible from the selectors of lists in other
databases. For example you may want to have a database that works as a library that has all the
materials, movies, sounds, etc, and reference them from the other databases. With this option you
are able to see them although they are in another database.

You can create primitives in the other databases and add them materials located in the 'library'
database.
46
Modes List

Modes List
Description
Editors

This List is forced to contain always one single element. It can not be deleted and no more can be
generated. This list element contains global modes that configure eStudio to work in a certain way.

The only reason to have eStudio global modes inside such a particular list is to mantain the same
structure than the rest of the program, this way the list and its parameters can be treated as any
other standard list and editors.

Some of these modes are saved when saving the eStudio configuration and some of them are
volatile and they are never saved.

There are several modes that are used very often and should be cumbersome to edit this list every
time they have to be changed. That is why on start up, a couple of folders are automatically
generated and displayed together with the GFX Window containing as icons the most commonly
used modes.

48
Modes List

IPFMODE_TEXTURE Toggle editor This mode will force all geometry to be


rendered without texturing when toggled on.
IPFMODE_WIRE Toggle editor This mode will force all geometry to be
rendered in wire frame when toggled on. It is
useful to be able to see through the objects or
to visualize the triangles complexity of an
object.
IPFMODE_SCREEN_POPUP Toggle editor This mode enables or disables the whole
functionality of the screen popup menus.
IPFMODE_LIGHTING Toggle editor This mode will force all geometry to be
rendered without illumination when toggled
on.
IPFMODE_AXIS_BLEND Toggle editor Blends the x, y and z negative axis with the
background.

49
Modes List

IPFMODE_CURSOR_OFF Toggle editor When this mode is on the cursor will not be
visible on the GFX Window. Unless you use
this mode, the cursor will be visible in the
video output of some systems
IPFMODE_CLEAR_SCREEN Toggle editor This flag disables clearing the screen. In some
scene configurations it is possible to do so and
save a few miliseconds performance in low
end machines.
IPFMODE_AXIS Toggle editor This mode has eStudio render the Global
Axis with every frame. It is extensively used
in the editing stage of eStudio.
IPFMODE_REMOTE_TRACE Toggle editor When connecting eStudio to another program
using ethernet this mode turns on debugging
for the transmitted commands.
IPFMODE_VIDEO Toggle editor According to the hardware configuration it is
possible to have the performance of the
simulation greatly decreased when video
texturing is in use. Thus, it is important to
allow for video texturing only when it is
needed. This mode is a global mode that
enables or disables video texturing for all
textures.
IPFMODE_INFO Toggle editor This mode has eStudio draw in the overlay
planes the information about the camera
parameters.
IPFMODE_DESKTOP_VIEW Toggle editor Toggles desktop mode/lists mode.
IPFMODE_SPINNER Toggle editor This mode displays a changing small
wireframe rectangle in the bottom left part of
the GFX Window. It is only used in
debugging circumstances when the user wants
to be sure that the simulation is running and
what is being displayed in the GFX Window is
not a frozen picture. Also gives a clue of the
current performance.
IPFMODE_SOUNDMASK Toggle editor Enables/Disables sounds.
IPFMODE_PICKMULTI Toggle editor When selecting, shows info about all the
objects in the GFX Window. Also adds a
menu to the popup menu.
IPFMODE_ALPHA Toggle editor Shows the alpha channel.
IPFMODE_WHOLEMENU Toggle editor Shows all the lists.
IPFMODE_EVENT_ECHO Toggle editor Shows info about the events after playing in
the shell window.
IPFMODE_SAVE_DEFAULT Toggle editor Saves the database by default.
IPFMODE_AUTO_OK Toggle editor Avoids showing of confirmation windows.
IPFMODE_STATS Option editor Selects on-screen statistics. Available options
are OFF, DFT, GFX, PIPE, PRIM, MISSED.

50
Modes List

IPFMODE_HIGHLIGHT Option editor Selects the highlight mode for picking.


Options are, Off, Points, Lines, Normals,
Strips, FillPat, Color, Blink and Contour.

Pressing the <ctrl> key and moving the


mouse over the objects in the GFX Window
fires the selected highlight mode. Modes can
be:

Off: nothing happens.

Points: displays the vertex of the geometry


as highlight.

Lines: displays the lines that connect vertex.

Normals: display the normals in each vertex


of the geometry.

Strips: displays the strips that compose the


object.

FillPat: the default option, a pink pattern that


covers all the geometry.

Color: increases brightness of the color of the


object.

Blink: displays a brightness animation.

Contour: a 'marching ants' contour animation


works as the highlight.
IPFMODE_AALIAS Option editor Number of antialias samples for the picture
snapshot.
IPFMODE_VIDEO_RATE Integer editor Shows the frequency of the genlock signal,
this signal can be proceed from a external
signal, or from the Monitor Sync.
IPFMODE_MONITOR_SYNC Toggle editor Syncs with the monitor.
IPFMODE_FRAMERATE_DIVISOR Integer Provides an aditional control that makes a
editor swapbuffers each 2, 3, etc vertycal syncs.
IPFMODE_SOFTRENDERER Option editor Selects the software renderer.
IPFMODE_SOFTRENDERER_RADIOSITY Toggles radiosity in the software renderer.
Toggle editor
IPFMODE_RESET_TOSTART Button editor When you are using itemgo commands, or
events whose execution lasts some time, you
may want to go to the reset the command or
event. This editor resets to the initial state of
the command.
IPFMODE_RESET_TOCURRENT Button editor When you are using itemgo commands, or
events whose execution lasts some time, you
may want to go to the reset the command or
event. This editor resets to the current state
of the command.

51
Modes List

IPFMODE_RESET_TOEND Button editor When you are using itemgo commands, or


events whose execution lasts some time, you
may want to go to the reset the command or
event. This editor resets to the end state of
the command.
IPFMODE_TOOLTIPS Toggle editor Enables tooltips.
IPFMODE_DEBUG Toggle editor Shows debug information in the command
window. For example, when binds change
values, having this toggle activated shows this
info.
IPFMODE_PICK_SHOWNAMES Toggle editor When you are in pick mode, it shows the
name of the objects when you move your
mouse over them.
IPFMODE_WINCOMMAND Toggle editor Opens the Python command window.
IPFMODE_TIMER_INTERFERENCES_ON Enables the timer interferences.
Toggle editor
IPFMODE_EDITOR_ECHO Toggle editor Shows info about the editors in the shell
window.
IPFMODE_FRAMECOUNT_TIMELOCK Toggle Enables counting by frames.
editor
IPFMODE_TIMECODE_ENABLED Toggle editor When selected, editors that control time
display its contents in frames. It depends on
the frequency of the Video Output.
IPFMODE_LOAD_ATTACH Toggle editor When loading a new object it attaches
automatically to the object that you drop the
new object on. If this toggle is off, the new
object appears in the center of the Global
axis.
IPFMODE_LOADTEXNODES Toggle editor In older versions, textures were loaded as
needed. With this toggle you could load them
at start time. For compatibility reasons.
IPFMODE_PHASEMODE Option editor
IPFMODE_ZOOM_FILTER Option editor When pictures are loaded in eStudio, they are
converted to 'power of 2' textures. This editor
allows to choose a filter algorithm to do this.
Options are, Impulse, Box, Triangle,
Quadratic, Mitchell and Gaussian.

Impulse option causes eStudio to do no


filtering as the image is resized.

Box option causes eStudio to use a box as the


filter kernel.

Triangle option is the default (quality and


speed).

Quadratic option indicates that a quadratic


function should be used as the filter kernel.

Mitchell and Gaussian options uses this


algorithms as kernel.

52
Modes List

IPFMODE_MULTIPROCESS String editor If you have more than one processor then it
shows here.
IPFMODE_TIME_HOUR Integer editor Contains the system hour.
IPFMODE_TIME_MIN Integer editor Contains the system minutes.
IPFMODE_TIME_SEC Integer editor Contains the system seconds.
IPFMODE_TIME_DAY Integer editor Contains the system day.
IPFMODE_TIME_MONTH Integer editor Contains the system month.
IPFMODE_TIME_YEAR Integer editor Contains the system year.
IPFMODE_TIME_WEEKDAY Integer editor Contains the system weekday.
IPFMODE_TIME_YEARDAY Integer editor Contains the system yearday.
IPFMODE_TIME_HHMMSS Integer editor Contains the system time in the Hours,
Minutes, Seconds format.
IPFMODE_TIME_DDMMYY Integer editor Contains the system date in the Day, Month,
Year format.
IPFMODE_FRAME_COUNT Integer editor Number of frames since eStudio was started.
IPFMODE_TIME_COUNT Integer editor Time since eStudio was started.
IPFMODE_TIME_FRAME_COUNT_RESET Resets the Frame count editors.
Button editor
IPFMODE_MOUSECAM_KDIST Float editor This value is a multiplier for the camera. When
you move the mouse forward this value is
used to make the movement faster.
IPFMODE_MOUSECAM_KANGLE Float editor This value is a multiplier for the camera. When
you move the mouse to rotate the view this
value is used to make the rotation faster.
IPFMODE_MOUSE_INERTIAL Toggle editor Enables inertia for the mouse.
IPFMODE_MOUSE_MULTIPIPE Toggle editor If several pipes are used, eStudio threats
them as one pipe with the size of the sum of
all the pipes, to calculate movements and
collisions.
IPFMODE_CAMERA_COLLIDE Toggle editor Enables camera collision detection.
IPFMODE_MOUSECAM_COLLIDE_HEIGHT Mouse camera collision height.
Float editor
IPFMODE_MOUSECAM_COLLIDE_DMIN Float Mouse camera collision minimum distance.
editor
IPFMODE_MOUSECAM_COLLIDE_DMAX Float Mouse camera collision maximum distance.
editor
IPFMODE_EDITLIST_BACK Button editor Does an edit back to the previous list.
IPFMODE_EDITLIST_FWD Button editor Does an edit forward from the current list to
the previous list.
IPFMODE_CLOSEALL Button editor Closes all the lists opened.
IPFMODE_UNDO Button editor Undo the last made operation.
IPFMODE_REDO Button editor Redo the last undoed operation.
IPFMODE_EXIT Button editor The normal exit button. You have to double
click it to exit the program.

53
Modes List

IPFMODE_QUIT Button editor Another exit button. With just a single click
the program ends.
IPFMODE_CAM_MOUSE Button editor Creates a mouse camera with the needed
binds. Also sets this camera as the selected
one.
IPFMODE_HIDE_GRAPHICS Button editor Hides lights, pivots, etc.
IPFMODE_DLLSYM_DEFAULT Option editor Creates default DLL symbols to help you
manage a mouse or a joystick.
IPFMODE_SNAP Button editor Saves a snapshot of the screen with the
filename defined in the editor
IPFMODE_SNAP_NAME.
IPFMODE_SNAP_NAME Button editor Selects a filename for the snapshot.
IPFMODE_SNAP_THUMBNAIL Button editor Saves a thumbnail using the GFX Window as
source.
IPFMODE_DESKTOP_TEXT_FILE Selector To select a text file to load or save.
editor
IPFMODE_DESKTOP_TEXT_FILE_LOAD This button loads in the text editor the text file
Button editor specified in
IPFMODE_DESKTOP_TEXT_FILE.
IPFMODE_DESKTOP_TEXT_FILE_SAVE This button saves the text in the text editor to
Button editor the file specified in
IPFMODE_DESKTOP_TEXT_FILE.
IPFMODE_DESKTOP_LISTS Button editor To change to the GlobalLists interface.
IPFMODE_DESKTOP_SAVEED Button editor Button to save databases. It's located on the
Desktop Interface.
IPFMODE_DESKTOP_FOLDER Button editor Button to create folders from the Desktop
Interface.
IPFMODE_DESKTOP_TEXTED Button editor Button to open the text editor in the Desktop
Interface.
IPFMODE_DESKTOP_COLORED Button editor Button to open the color editor in the
Desktop Interface.
IPFMODE_DESKTOP_PHOTO Button editor Button to make captures of the GFX Window.
IPFMODE_DESKTOP_RESET Button editor Performs a program reset.
IPFMODE_DESKTOP_EXIT Button editor Exits the program.
IPFMODE_DESKTOP_TRASH Button editor To delete objects by drag and drop to this
icon.
IPFMODE_PYCODE String editor Python code window.
IPFMODE_PYCODE_EXE Button editor Executes the Python code that resides in a
line in the IPFMODE_PYCODE code window.
IPFMODE_PYCODE_EXEALL Button editor Executes all the Python code in the code
window IPFMODE_PYCODE.
IPFMODE_PYCODE_TOLIST Button editor Sends the code in the IPFMODE_PYCODE
code window to the event list.
IPFMODE_PYCODE_CLEAR Button editor Clears the IPFMODE_PYCODE code window.
IPFMODE_PYCODE_ATEXIT Python editor The Code written in this editor is executed just
before exiting eStudio.

54
Modes List

IPFMODE_PYCODE_ATEXIT_EXE Button To test the code in


editor IPFMODE_PYCODE_ATEXIT.
IPFMODE_DIALOG_TITLE String editor The title for the dialog that opens when
executing IPFMODE_DIALOG_PROMPT.
IPFMODE_DIALOG_TEXT String editor The text of the body of the dialog window that
opens when executing
IPFMODE_DIALOG_PROMPT.
IPFMODE_DIALOG_OPTIONS LSelector editor How much option buttons have the dialog that
opens when executing
IPFMODE_DIALOG_PROMPT.
IPFMODE_DIALOG_PROMPT Button editor Opens a dialog with the parameters specified
in the three previous editors.
IPFMODE_DIALOG_ANSWER Float editor This is the answer from the buttons in the
dialog window. You can do an itemget of this
value to perform some action. With one button
the value returned is 0, with two buttons the
values are 0 and 1 for the first and second
button respectively and so on.
IPFMODE_TREE_ACTIVE Toggle editor Shows the Node Scene tree in the GFX
Window.
IPFMODE_TREE_RELOAD Button editor Regenerates the Node Scene tree.
IPFMODE_SIM_STOP Button editor Stops the simulation. This only works if you
are running eStudio in multi-thread mode.
IPFMODE_SIM_RESUME Button editor Resumes the simulation. This only works if
you are running eStudio in multi-thread mode.
IPFMODE_TREE_PANX Float editor Displaces the Node Scene tree in the X axis
in the GFX Window.
IPFMODE_TREE_PANY Float editor Displaces the Node Scene tree in the Y axis
in the GFX Window.
IPFMODE_TREE_SCALE Float editor Scales the Node Scene tree representation in
the GFX Window.
IPFMODE_CLEAR_COLOR Color editor Color editor to change the background color of
the GFX Window.
IPFMODE_CLEAR_COLOR Float4 editor RGBA sliders to change the background color
of the GFX Window.
FOG_GLOBAL Toggle editor Activates the fog.
FOG_TYPE Option editor There are two fog types: Linear and
Exponential. With the Exponential type you
can control fog distances better.
FOG_NEAR Float editor Sets the Near distance for the fog.
FOG_FAR Float editor Sets the Far distance for the fog.
FOG_COLOR Color editor To set the fog color.
IPFMODE_GRID_MODE Toggle editor When toggled on, the grid is activated. This
way objects displace, scale and rotate in
increments. The same can be done pressing
the shift key while using the Graphic
manipulator to transform an object.
IPFMODE_GRID_VIEWX Toggle editor Toggles visibility of the X grid.

55
Modes List

IPFMODE_GRID_VIEWY Toggle editor Toggles visibility of the Y grid.


IPFMODE_GRID_VIEWZ Toggle editor Toggles visibility of the Z grid.
IPFMODE_GRID_POS Float3 editor The position editor modifies the distances of
the grid. Modify this to get smaller or bigger
distances in the grid.
IPFMODE_GRID_EUL Float3 editor The position editor modifies the rotation
angles of the grid. If you want to rotate
objects in ranges of 30 degrees you must put
that value in the Euler editors.
IPFMODE_PICKED_OBJ String editor The object selected in Pick or SelectRec
mode.
IPFMODE_PICKED_POS Float3 editor The position of the initial pick with the mouse
cursor.
IPFMODE_PICKED_EUL Float3 editor The angle of the selection rectangle.
IPFMODE_PICKED_RECT Float2 editor The x and y dimensions of the selection
rectangle.
IPFMODE_PICKED_MAT String editor Contains the material of the picked object.
IPFMODE_PICKED_FRAME Integer editor Contains the frame when the object was
picked.
IPFMODE_USER_EXT LString editor Sets a user file extension to be recognized by
the program. This extension allows the
program to 'see' files with that extension but
to effectively load such type of file, a loader
must be programmed.
IPFMODE_TIMER1_OVERLAY Float editor When this editor equals 0, the timer evolution
is displayed in overlay in the GFX Window.
When equals 1 or greater the timer visibility is
toggled off.
IPFMODE_UNDO_LEVEL Float editor The number of undo operations that can be
done. By default this number equals 64.
IPFMODE_PW2_ZOOM_LIMIT Float editor eStudio converts textures that are not power
of two to power of two ones at load time. This
value delimits what to do when a texture
dimensions are between two power of two
values. For example, having a 100x64 texture
means that eStudio can convert to 64x64 or
128x64. Depending on the value it will convert
to one or the another.

A value of 0 means that it will always convert


to the bigger value (128x128), a value of 1
will convert to the smaller value (64x64). You
can test this by creating a texture of this size
(100x64) and change the value to see the
different conversions.
IPFMODE_FRAMEOVER Toggle editor Toggles on/off the visibility of the frame
overlay.
IPFMODE_FRAMEOVER_FACTOR Float editor This value is used to make the frame overlay
bigger or smaller.

56
Modes List

IPFMODE_MAT_INHERIT Selector editor In older versions, for performance issues,


eStudio used this material to define material
properties that were common to several
objects. Now it is only maintained for
compatibility issues.
IPFMODE_LISTOVERLAY Selector editor This allows to select a list from the List of lists
and puts its items in overlay in the GFX
Window.
IPFMODE_CURRENTDBS Selector editor Contains the current database.
IPFMODE_USER_PATH String editor The user path for the program.
IPFMODE_HIGHLIGHT_MOD Float editor The frecuency of the highlight in the object
when you are in picking mode and the
highlight mode is blink.
IPFMODE_HIGHLIGHT_INT Float editor The intensity of the highlight in blink mode.
IPFMODE_PATH_SETS File editor This editor holds the path to where the sets
are saved. See the object list to learn how to
save sets.
IPFMODE_VERSION String editor The program version.
IPFMODE_INSTALL_PATH String editor The path where is installed eStudio.
IPFMODE_VIEWINTEREST Toggle editor Displays in the GFX Window the point of
interest.
IPFMODE_SHOW_TEXT_BLOCKS Toggle This mode means that when the manipulator
editor of a text object is made visible all other text
objects automatically show their text box.
IPFMODE_ENABLE_VOUT Toggle editor Enables video output.
IPFMODE_FIND_STRING_VIEW Toggle editor Opens a window to search for a python string
in all the opened databases. The window
allows to search inside all the icons in the
database as well as in maps and events. It
also allows for replacing.
IPFMODE_WINDOW_PROPERTIES_HEADER Shows/Hides the properties header in every
Toggle editor list.
IPFMODE_VIDEO_RATE Integer editor Displays the frecuency rate of the video
output. Disabled.
IPFMODE_FRAMERATE_DIVISOR Integer Divides the frecuency rate of the simulation. If
editor your Video rate is 60, typying a 2 in this
editor makes the simulation go at 30 Hz.
IPFMODE_MONITOR_SYNC Toggle editor If you have a AJA Board or a DIGITAL
VOODOO board, this flag is off because the
Video rate is taken from that card and not
from your monitor. If it is toggled on, the
Video rate comes from your monitor.

57
Modes List

IPFMODE_DBG_VOTRANSFER_MODE Option When loading a movie, it can happen that the


editor frame rate of the simulation is bigger than the
movie frame rate. For example, simulation can
be 60 Hz and the movie 20Hz, so in the first
frame of the simulation the first frame of the
movie will be loaded, causing unbalance in the
next two simulation frames.

Using Full option in this case does this and


can make peaks in the simulation
performance. Choosing Portions fixes this
situation by loading a third of the movie frame
in each simulation frame. This also has a
problem, movie interlacing can appear. Using
the PortionsSwap2D fixes also that situation
by using a double buffer trick. This editor is
for debug.
IPFMODE_DBG_VOTRANSFER_OFF Toggle This editor disables the video ransfer. It is
editor there for debug reasons, to know how much
performance takes the transfer.
IPFMODE_FRAME_PULSE Integer editor This editor changes at every frame.
IPFMODE_FRAME_PULSE_MODULE Integer This editor divides the
editor IPFMODE_FRAME_PULSE so it happens
every group of frames, i.e, Module = 60, then
the pulse happens every second.
IPFMODE_TIMECODE Integer editor If you have Timecode reader hardware in
your system, then this editor is updated with
the timecode read data.
IPFMODE_TIMECODECHAR Integer editor If you have Timecode reader hardware in
your system, then this editor is updated with
the timecode read data, but in Hours, Minutes,
Seconds and Frames format.
IPFMODE_SHIFT_GRAPHICS Button editor Cycles through the different graphic
manipulators.
IPFMODE_FIXV7OBJ Button editor Fixes an incompatibility problem with textures
in databases saved with eStudio version 7.
IPFMODE_THUMBNAIL_CAPTURE_SIZE Specifies the size of the thumbnail.
Integer editor
IPFMODE_SNAP_RES Integer2 editor This editor contains the resolution for the snap
picture and is updated when you select an
option in the IPFMODE_SNAP_SIZESRC
editor. There is an exception to this, when you
select Window, the values used come directly
from the pipe and this editor is not updated.

58
Modes List

IPFMODE_SNAP_SIZESRC Option editor Selects a size for the picture snapshot.


Options are Window, Full Screen, Custom,
Max Allowed.

Window: the size of the snapshot is taken


from the GFX Window. The values are taken
from the pipe.

Full Screen: the size of the snapshot is the


size of your actual monitor resolution.

Custom: you must specify the size of the


snapshot in the IPFMODE_SNAP_SIZESRC
editor

Max Allowed: the maximum size allowed by


the graphics card that you have in your
system.
IPFMODE_SNAP_POSTCODE String editor In this window you can write python code that
is executed after the snapshot has been made.
This way you can for example write code to
control when has a snapshot finished and then
do something else.
IPFMODE_SNAP_POSTCODE_RUN Button Executes the python code that is written in the
editor IPFMODE_SNAP_POSTCODE editor.
IPFMODE_PYCODE_POSTEXE Button editor
IPFMODE_FIND_STRING String editor The python string to be found in a database
maps, events or icons.
IPFMODE_FIND_PREVIOUS Button editor Go to the previous code string specified in the
IPFMODE_FIND_STRING editor was found.
IPFMODE_FIND_NEXT Button editor Go to the next code string specified in the
IPFMODE_FIND_STRING editor was found.
IPFMODE_FIND_SENSITIVE Toggle editor Checks case sensitivity in the strings specified
in the IPFMODE_FIND_STRING editor.
IPFMODE_FIND_IN_ICONS Toggle editor Makes the Find String window search in
Icons.
IPFMODE_FIND_IN_MAPS Toggle editor Makes the Find String window search in Maps.
IPFMODE_FIND_IN_EVENTS Toggle editor Makes the Find String window search in
Events.
IPFMODE_FIND_REPLACE_STRING String Allows to specify a string to replace the string
editor specified in IPFMODE_FIND_STRING.
IPFMODE_FIND_REPLACE Button editor Does the replace of the string specified in the
editor IPFMODE_FIND_REPLACE_STRING.
IPFMODE_CONSOLE_PRINT String editor This editor allows to write messages in the
command window.
IPFMODE_CONSOLE_COLOR Option editor Selects the color of the text specified in the
editor IPFMODE_CONSOLE_PRINT.

59
Modes List

IPFMODE_DIALOG_TITLE String editor The editors in the Dialog tab allow you to
create a dialog box to show a message and
display button options. This options return a
value (the first button returns 0, the second 1
and so on).

You can write python code to do something


depending on the return value.

The following code generates a dialog using


this editors and prints the return value.

def showDialogOkCancel(title, options, message):


itemset('<>ipfmode', 'IPFMODE_DIALOG_TITLE', title)
itemset('<>ipfmode', 'IPFMODE_DIALOG_OPTIONS', options)
itemset('<>ipfmode', 'IPFMODE_DIALOG_TEXT', message)
itemset('<>ipfmode', 'IPFMODE_DIALOG_PROMPT')
return itemget('<>ipfmode', 'IPFMODE_DIALOG_ANSWER')

print showDialogOkCancel ("Question", ["Ok", "Cancel"],


"Message")

In this editor you can specify the Title to


appear in the dialog window.
IPFMODE_DIALOG_TEXT String editor The body text of the dialog window.
IPFMODE_DIALOG_OPTIONS LSelector editor Allows to add options to the dialog window.
IPFMODE_DIALOG_PROMPT Button editor This button displays the dialog window.
IPFMODE_DIALOG_ANSWERS Integer editor The return value of the pressed button in the
dialog window.
IPFMODE_CLEAR_COLOR Color editor This editor changes the GFX Window
background color.
IPFMODE_PALETTE_COLORS Table editor This table editor contains the <r,g,b,a>
values for all the colors in the colors palette of
the IPFMODE_CLEAR_COLOR editor.
IPFMODE_TEX_ALLCONTRAST Float editor Increments/decrements contrast on all
textures in the texture list.
IPFMODE_GRAPHICS_SIZE Float editor Increments/decrements the size of the
graphics in the GFX Window, for example,
the small squares in the Object Graphic
Manipulator, or the points in a curve3D or
pivots. This size can be changed when the
focus is on the GFX Window by pressing the
<alt> key and the slash (/) to reduce or the
arsterisc (*) to increase.
IPFMODE_BINDWAIT Float editor It is a delay taken to dispatch the binds.
IPFMODE_MOUSE_INERTIAL_HARD Float Controls the inertia of the mouse. A value of 0
editor means that is easier to use the mouse inertia
and a value of 1 it is more difficult. An
example is when you drag in the GFX
Window to rotate the view, with a value of 0
is easier to have the view rotating than with a
value of 1.

60
Modes List

IPFMODE_PATH_KEYS File editor Specifies the path to save the keys file. Keys
can be defined in the List of lists for every list.
There is an editor there, LIST_KEYS_SAVE,
that saves this file.
IPFMODE_VERSION_TITLE String editor The Title of the version, by default
Brainstorm eStudio.
IPFMODE_BINDS_ACTIVE Toggle editor Allows to enable or disable all the binds.
Mostly implemented for debugging.
IPFMODE_REMOTE_PYTHON_PARSE Toggle Allows to decide if all received remote
editor commands should be sent directly to python
for evaluation or should be parsed internally
by eStudio (and in case it can not be parsed
internally then sent to python anyway.)

This mode has been implemented because


python evaluation of itemsets() seems to have
a small memory leak (in the python library)
that can be important when hundreds of
itemset() commands are sent remotely. Note
that ipf can only parse internally itemset()
commands when they are made of literal
values, that is, eStudio can not interpret
internally any kind of expressions.
IPFMODE_FILE_LIBPATHS Lselector editor The default directory paths for libraries that
appear in file selectors are customizable now
from this editor.
IPFMODE_REMOTE_PYTHON_PARSE Toggle Allows to decide if all received remote
editor commands should be sent directly to python
for evaluation or should be parsed internally
by eStudio (and in case it can not be parsed
internally then sent to python anyway.)

This mode has been implemented because


python evaluation of itemsets() seems to have
a small memory leak (in the python library)
that can be important when hundreds of
itemset() commands are sent remotely. Note
that ipf can only parse internally itemset()
commands when they are made of literal
values, that is, eStudio can not interpret
internally any kind of expressions.
IPFMODE_CAMERA_LISTENER Camera sel This editor is used to be able to use 3D
editor positional sound. Selects the camera that
'listens' to the 3D sound. by default the
camera active is the one attached to the pipe
0.

61
Object List

Object List
Description
Editors

The Object List contains the configuration for all the 3D geometry data that is rendered in the
simulation.

The following types of objects are implemented:

Nothing
This is the case when the object has not been assigned yet to anything. In this case a File selector
allows to load an object from disk, but loading this file is just a short cut to generate a geometry of
type File using the file and assign it to the object.

Geometry
Geometries contains usually object data loaded from disk. (See Fig.1)

Text
Text are 3D representations of strings of text. They are updated on the fly in the simulation when
the string that defines them is modified. In particular you can bind changing values to the string and
the Text will be continuously updated to reflect the changing value. (See Fig. 2)

63
Object List

Group
Group objects group several other objects in order to be able to apply object operations to several
objects as a whole. The grouped objects are called the children while the grouping object is called
the parent.

Primitive
Primitives are internally generated objects of predefined shape but whose parameters can be
modified in real time. (See Fig. 3)

Particle
Particle objects are auto regenerated for every frame to simulate the generation and evolution of
particles. Note that all the properties of objects apply also to this kind of objects, that is, they can
be repositioned with a pivot, a channel can be applied, etc. (See Fig. 4)

Photo
Photo objects are a special kind of objects whose position, orientation and textures can
automatically be updated on the fly to represent a photograph taken from the actual position of the
camera. If the camera does not move its position anymore, the whole 3D scene can be then
substituted by the Photo object without any means of discontinuity.

Drawing

64
Object List

Drawing objects are objects that are auto regenerated for every frame to draw in 3D space the path
that a pointer is following. When the pointer is properly binded they can be used to have the talent
painting in space.

Engine
Engine objects are deformation objects. They allow for making objects wave, bend, morph, simulate
shadows and other deformations. (See Fig. 5)

Folder
Folders are containers for icons. They are used mainly for building custom interfaces.

Clone
Clone objects are references to any other object of the object List. They will be rendered as exact
copies of the cloned object. The pivots applied to the cloned object are not reflected on the clone
object.

The Cull mode allows to discard objects from the simulation. The object is still in the drawing
hierarchy but it is disabled for rendering. This way it is possible to have objects appearing or
disappearing from the simulation by only modifying this flag.

There is a toggle editor that controls this mode, but three aditional button editors are provided that
allow to set, unset and toggle the mode. These Button editors are not strictly necessary but they
add some more flexibility on actions controlled by the list of events or when binding.

Objects can be assigned a pivot (See Fig. 6) Any transformation applied to the pivot is reflected in
the object and its descendents. This is useful for repositioning the objects in the scene.

The pivot transformation can be flattened, meaning that the transformation of the currently

65
Object List

attached pivot is applied to the object and then the pivot is released from the object. If you are only
using the pivot for repositioning the object and are not going to use it any more you may want to
flatten the object because it improves a little bit the simulation performance.

You may also want to flatten when you want to concatenate another pivot transformation to the
actual one.

Billboards are useful for complex objects which are roughly symmetrical about one or more axes.
The billboard tracks the viewer by rotating about an axis or a point to present the same image to
the viewer using far fewer polygons than a solid model. A classic example is a textured billboard of
a single quadrilateral representing a tree.

The following modes are implemented:

Off
Billboard mode is off.

Axial
The object (i.e. a tree) must be defined with its origin in the 0,0,0 and vertical through the z axis.
The object must be oriented looking to the Y axis. Modifiying the “position" it is posible to define the
place where the tree is, and with "Axis", it's possible to change the orientation of the tree's trunk.

World
Is useful to orientate objects that do not have a main axis in the direction that looks to the camera.
The rotation axis is asigned internally.

Eye
Similar to the previous one, but the Z of the object stays all time upright on the screen. It is slower
than the World mode.

Object properties control the way the object is rendered in the GFX Window, some of them are
called override properties because they are also defined as material properties of the object
polygons, the meaning of these properties is the same as the meaning of the material properties but
when defined on the object they override the materials properties.

66
Object List

eStudio graphics scenegraph uses a tree hierarchy for rendering the database geometry. This tree is
regenerated by eStudio every time that a change is made to the object list to reflect the actual
configuration of the user geometry.

Objects are rendered in the same order and with the same hierarchy as they appear in the Object
List unless the mode option CullMode is used. Thus, the hierarchy that the user specifies in the
object list greatly affects the behaviour of the simulation because almost all object properties also
affect to the object descendants (See Fig. 8).

Every object can be assigned a reference position and orientation that can be used as binding
functions (see the Binds list). When the object is transformed by the hierarchy transformation of
its ascendents this position and orientation is also transformed.

They can be used for example to attach lights and cameras to an object that is being transformed
by a hierarchy of transformations.

67
Object List

The Object list allows to choose what lights affect an object (and its children) by selecting and
enabling the desired lights. Lights that are not in this list doesn’t affect the object (see Fig. 9).

OpenGL has a lights limitation, objects can only be affected by eight lights. With eStudio, you can
use eight different lights for an object of the scene. This is because of the Accumulate toggle. In the
Object list you can have all the lights that you wish, some would affect some objects, others
another objects an so on. The accumulate toggle blocks light accumulation upwards. In Fig. 10 we
can see the tree of a scene.

Without having yet into consideration the Accumulate and Select toggles, we can see that the
bottom lights should be affected by seven lights, its two own lights, the three from the parent and
two more from the parent of its parent.

In the leftmost branch, the object at the bottom has the Accumulate toggle on, and its parent has it
off, meaning that this object uses two lights that are only affecting itself, plus three lights (the
parent ones) accumulated. But the lights of the root of the scene does not affect the object. This
can be done because of a flag in the Lights list that tells the system what lights are global to the
scene and which ones are not. This flag is Select (see the Light list). The lights that affect all the
scene must have the Select toggle on and the lights that are going to affect only individual objects
(and not the scene) must have it off.

68
Object List

In OpenGL, as in any graphics package, there exists a space inside which your data is displayed.
This space is a cube (with proper perspective), outside of which nothing is drawn. The way to
ensure that nothing is drawn past the limits of this cube is by using clipping planes.

Additional clipping planes can be used to make objects dissapear or ensure that they are only drawn
when you need them.

Selecting a clipping plane for an object creates a pivot that controls the position and orientation of
the clipping plane. This pivot can be made visible using the Visible toggle in the pivot list and
manipulated using the pivot manipulator. Moving it will make portions of the object appear or
dissapear (See Fig. 12).

The clipping tab also has an Accumulate toggle. This one (as in the lights) also refers to the parent.
If the parent has a clipping plane and accumulate is on in the child, both clipping planes will affect
the object. If not only the clipping plane of the child will affect.

The Relative flag makes the clipping plane move with the object, if it is on and you move the object
to another position, the clipping plane will travel with it, if not it will stay were was defined.

The Click tab (Fig. 13) contains editors that allow you to control aspects related to the object
clickable capabilities, mouse over and highlight. The Clicked state integer editor informs you when
the object has been clicked. It is disabled but its value can be retrieved from python code or used
with binds. The Run button simulates the click of the object. The Clickable toggle allows the object
to be clicked and the Click Selectable allows to select the object.

There is another toggle, Clickable Group, disabled for objects but enabled for groups, that makes
posible to select all the contents of a group from the GFX Window, this helps a lot when moving
objects, ensuring that you move the whole object, and not only a part of it.

69
Object List

The last two highlight editors allow to select the highlight mode for this object.

Several utilities that can be used with objects have been grouped in this tab. In the RefPos tab we
can find a Reference point that allows us to bind objects to this point. The Bounding box, allows us
to know the bounding boxes of an object defined by its Min and Max values. The Own bounding box
is the one of the object as it is created or loaded. The Relative is the bounding box when a
transformation has been added, and the Absolute has also the transformation information of the
parents (if they exist).

The Vertex tab can be used to bind an object to the vertex of another object, changing the Index
editor would make the first object go from one vertex to another of the second object.

Remember that you can do binds by pressing with the right mouse button in an editor (or the label
of an editor) and select Control->Copy and then in other editor select Control->Paste Bind, for more
info about this please check the manual pages of the Binds list.

70
Object List

This utility converts an object to eStudio internal geometry format. After converting an object to
Built you can even delete the original geometry from the database. The conversion process culls the
original object.

The other buttons convert work as follows:

The To built Geometry Collapsed button collapses the hierarchy of the object so all his children
are at the same level of grouping. The To built Geometry Triangles converts to triangles creating
a geometry for each one. The Isolate Children button (disabled if the object has no descendants)
creates groups for each of the children and the EquiDist Children button (also disabled for the
same reason) makes the children of a group to be equidistan between them. The distance is
computed between 2 children.

Loading sequences of objects can be a nightmare depending on the number of objects to load. This
utility helps you by loading all the objects and setting them inside a group. The selector allow you to
choose a file and using the ‘#’ character and the start/end indices tells eStudio how much files must
load (See Fig. 16).

eStudio manages several internal object formats. This formats range from Performer formats, obj
format and m3b and m3a formats.

pfa: IRIS Performer ASCII format.


pfb: IRIS Performer BINARY format.
dpy: Internal format (Obsolete).
obj: Wavefront Technologies data format.
m3a: eStudio internal ASCII format.
m3b: eStudio internal BINARY format.

This formats are selectable from the Filter editor that appears in the file selector dialog of the object
to save (See Fig. 17).

71
Object List

The Apply matrix editor allows to choose from three options:

Full: saves the object adding all the transformations in its hierarchy.
Self: saves the object adding just its transformations.
Ident: saves the object without transformations.

Using this tab editors, animations can be created easily to objects inside a group. The selected
options in each dropdown list are applied to each object inside the Group parent.

When using geometries, you can go to the Convert tab, select the To Built Geometry Collapsed,
expand the geometry and then use the Group effects. The following picture is just the
Transformation/Explosion/Air preset.

72
Object List

As well as in any list, key shortcuts can be created in the list of Lists. By default several key
shorcuts are predefined for you. You can remove them and create your own shorcuts. To learn more
about this check the manual pages of the list of Lists (See Fig. 18).

Level of Detail is a new feature of eStudio version 9 that allows to easily change the complexity of
models to speed up the drawing.

LOD are a special kind of group whose childs are geometries with different mesh complexity. They
are ordered from low to high mesh resolution inside the group.

Besides the group, a table must be set, this table is the Ranges-Transitions table. The values for
Ranges, the first values of each row, represent the radius of the bounding sphere of each object. So
when doing a zoom, if the LOD group reaches the end of a bounding sphere, it changes the object
so the next one in resolution is drawn.

The change from drawing one object to the next is made with a smooth transition, and this
transition is specified in the second value of every row. In Fig. 19 there is an example showing a car
LOD group in the GFX Window with its bounding boxes displayed.

73
Object List

View Ranges toggles on/off the visibility of the bounding spheres and Direct Control allows to
manually change from one object to others.

Level of Zoom is another new feature of eStudio version 9 to do progressive zooms using objects of
great complexity without slowing performance.

To learn how LOZ works we are going to use the example of a world map. The first object in the
group is a surface with a world map texture. This object has a reasonable resolution to make it look

74
Object List

nice.

The second object has the same resolution but there is a mapped texture of an area of the world
map where we are going to travel using zoom and the third object is another surface with the same
resolution and with a close-up texture of a smaller area inside the previous one.

What the LOZ does is substitute each object with the next with a non noticeable transition to make
it look as if it was the same object. This way resolution is maintained and performance is good also
(See Fig. 21).

The LOZ Value works similar to the LOD group, changing from one object to the next. The Levels
Before and Levels After allow to set how many objects are going to be seen. In Fig. 22 the three
map objects of the world map example are displayed in wireframe at the start of the LOZ process.

75
Object List

OBJ_TYPE Option editor Selects the objetct type. This can be one of the
following: Geometry, Text, Group,
Primitive, Particle, Photo, Drawing,
Engine, Folder or Clone.
OBJ_CULL_TOG Toggle editor Toggles the Cull mode of the object. If it is
toggled on the object is not displayed on the
GFX Window.
OBJ_CULL_ON Button editor Hides the selected object. It is the same as
OBJ_CULL_TOG on but in a button instead of
a toggle.
OBJ_CULL_OFF Button editor Draws the selected object. It is the same as
OBJ_CULL_TOG off but in a button instead of
a toggle.
OBJ_CULL_INV Button editor This action toggles the Cull mode of the
object. It is provided to be able to send the
toggling action to the List of Events.
OBJ_LOAD_FILE File editor Loads an object from disk, is a shortcut to
generate a geometry of type File, loading that
file and assigning the geometry to this object.
OBJ_TEXT Selector editor Selects/creates a text when the object is of
type Text.
OBJ_GEOMETRY Selector editor Selects/creates the geometry when the object
is of type Geometry.
OBJ_PRIM Selector editor Selects the primitive when the object is of
type Primitive.
OBJ_PARTICLE Selector editor Selects the particle when the object is of type
Particle. See the particle List.
OBJ_DRAWING Selector editor Selects the drawing when the object is of type
Drawing.
OBJ_SELCLONE Selector editor Selects the clone when the object is of type
Clone.

76
Object List

OBJ_ENGINE Selector editor Selects the engine when the object is of type
Engine.
OBJ_PHOTO Selector editor Selects the photo when the object is of type
Photo.
OBJ_FOLDER Selector editor Selects the folder when the object is of type
Folder.
OBJ_GROUP_TYPE Option editor Selects the group type. It can be of the
following types:
Standard
Just a collection of objects.

Layer
When two polygons that occupy the same
position in space are rendered, some
annoying blinking pixels can be experienced
in the rendering. This is because the
machine cannot distinguish what polygon to
render in front of the other, and the decision
seems to be taken randomly from pixel to
pixel. The Layer type can be used to solve
this kind of problems. The first child of the
object is assumed to be the base geometry
and the rest of the children are assumed to
be the decal objects.

Switch
Selects one child only as visible for every
frame and the selected one rotates through
the elements of the group.
We use this type to import complex
animations (inverse kinematics, skining,
etc.) from Maya or 3dmax.
It shows very nice results at a very low
performance cost, only the rendering time.
But it can use a lot of memory. Also switch
models are imported as .m3b files,
otherwise they can take minutes to load (for
example as .obj)

Sort
It sorts the children according to the
distance to the camera and renders
accordingly.
It is good to render transparent objects
later.
The problem is that generally transparent
objects are randomly dispersed in the
hierarchy and do not belong to a single
group.

LOD (level-of-detail):
Level-of-detail is a technique for
manipulating the model complexity.
Typically, a model is drawn in finer detail
when close to the viewer (occupies a large
screen area) than when it is far away
(occupies smaller screen area). This way,

77
Object List

costly detail is drawn only when necessary.

LOZ (level-of-zoom): Is a techique to


make a progresive 3D zoom over a detailed
area of an object, i.e. going from a world
globe to a detailed view of a building in a
city. Its possible to define all the needed
intermediate levels. The size of the detail is
progressively increasing until it reaches the
size of the original object.
OBJ_LAYER_TYPE Option editor Selects the type of group as Layer. A Layer
can be rendered in one of the following modes:
Displace
Displace+Offset
Stencil
Fast
High Quality
Layer are implemented using the M3
Scenegraph Library.
OBJ_SWITCH_TIMER Selector editor When the object is of type Group Switch
selects the timer to drive the switch.
OBJ_SW_TIMER_ADJUSTLEN Button editor When the object is of type Group Switch sets
the length of the timer equal to the number of
children of the object to ensure that one only
child is rendered per frame.
OBJ_GEOMETRY_EXPAND Button editor When the object is of type Geometry
replicates the geometry hierarchy in the
geometry List, in the object List and has
every object child pointing to the
corresponding child in the geometry List.
This action is used when after loading an
object from a file as a geometry of File type,
we wish to have the hierarchy of the loaded
geometry in the object List to be able to
treat every child as an independent object.
OBJ_PIVOT Selector editor Selects the object pivot. Any transformation
applied to the pivot is reflected in the object.
OBJ_CULLFACE Option editor Allows to select what polygons of the object
are to be discarded for rendering.
It has the same meaning as the material
CullFace property but applied to the whole
object.
OBJ_ZCLEAR Toggle editor Clears the Z-buffer so the object you want to
paint, is always painted.
OBJ_OTYPE Option editor Selects the transformation type.
OBJ_ORESET Button editor Resets the object transformation to the
original loaded one.
OBJ_VISIBLE Toggle editor Show/Hide the Graphic Manipulator.

OBJ_SCALE Float3 editor The Scale transformation.


OBJ_ORIENTATION Float3 editor The Orientation transformation.
OBJ_DISPLACEMENT Float3 editor The Displace transformation.

78
Object List

OBJ_UNIFORM_SCALE Toggle editor This toggle makes it possible to change the


three components of the Scale transformation
at once.
OBJ_CENTER Float3 editor The center of the eccentric transformation.
OBJ_OFFSET Float3 editor A offset for the composed transformation.
OBJ_CLICK Integer editor If the object is clicked this editor equals 1, if
not equals 0.
OBJ_CLICK_RUN Button editor This button does the same as clicking the
object.
OBJ_CLICKABLE Toggle editor Toggles on/off if the object can be picked.
OBJ_CLICK_SELECTABLE Toggle editor Toggles if the object can be selected. Combined
with the OBJ_CLICKABLE allows to pick and
select.
OBJ_HIGHLIGHT Option editor Chooses the way to highlight the object when
selecting.
OBJ_HIGHLIGHT_ON Toggle editor If a highlight mode is selected, the object
appears with the highlight independently of
where the mouse is.
OBJ_PICK_OVER Integer editor If the mouse passes over the object this editor
equals 1, if not equals 0. To work properly it
must be toggled on Passive Pick in the Pipe
list.
OBJ_BBOX_MIN Float3 editor The Bounding box, allows us to know the
bounding boxes of an object defined by its Min
and Max values.
The Own bounding box is the one of the object
as it is created or loaded.
OBJ_BBOX_MAX Float3 editor The Bounding box, allows us to know the
bounding boxes of an object defined by its Min
and Max values.
The Own bounding box is the one of the object
as it is created or loaded.
OBJ_RELBBOX_MIN Float3 editor The Bounding box, allows us to know the
bounding boxes of an object defined by its Min
and Max values. The Relative bounding box is
when a transformation has been added.
OBJ_RELBBOX_MAX Float3 editor The Bounding box, allows us to know the
bounding boxes of an object defined by its Min
and Max values. The Relative bounding box is
when a transformation has been added.
OBJ_OWNBBOX_MIN Float3 editor The Bounding box, allows us to know the
bounding boxes of an object defined by its Min
and Max values. The Absolute bounding box
has also the transformation information of the
parents (if they exist).
OBJ_OWNBBOX_MAX Float3 editor The Bounding box, allows us to know the
bounding boxes of an object defined by its Min
and Max values. The Absolute bounding box
has also the transformation information of the
parents (if they exist).

79
Object List

OBJ_REF_POS_ABS Float3 editor Queries for the absolute value (with parent
transformations) of the object reference
position.
OBJ_REF_EUL_ABS Float3 editor Queries for the absolute value (with parent
transformations) of the object reference
position.
OBJ_REF_POS Float3 editor Queries for the relative value of the object
reference position.
OBJ_REF_EUL Float3 editor Queries for the relative value of the object
reference position.
OBJ_NODE_VERTEX_INDEX Float editor This editor allows to select a vertex of the
object.
OBJ_NODE_VERTEX Float3 editor The Vertex editor can be used to bind an object
to the vertex of another object, changing the
Index editor would make the first object go
from one vertex to another of the second
object.
OBJ_PRENDER Selector editor Selects a PRender.
OBJ_PRENDER_PAINT Button editor To start the Prender.
OBJ_CASTSHADOW Toggle editor Toggles the casting of shadows.
OBJ_LOAD_FORMAT_FILE LSelector editor This utility helps you load several objects that
have a posfix index. The selector allow you to
choose a file and using the ‘#’ character and
the start/end indices tells eStudio how much
files it must load.
OBJ_SAVE_MATRIX Option editor This editor allows to choose from three options:

Full: saves the object adding all the


transformations in its hierarchy.
Self: saves the object adding just its
transformations.
Ident: saves the object without
transformations.
OBJ_CLIP_ACCUM Toggle editor Accumulates the clipping of all the clipping
planes defined in the clipping tab with the
one's defined for the scene.
OBJ_LLIGHTS_ACCUM Toggle editor Accumulates with lights that affect the whole
scene.
OBJ_LLIGHTS_LIST Lselector editor This list selects the lights that illuminate only
the object and its children. Note local
illumination has to be also enabled by using the
'OBJ_LLIGHTS_ENABLED' mode.
OBJ_LLIGHT_ENABLED Toggle editor Enables or disables the local illumination mode.
If this mode is disabled (the default mode)
then the list of local lights
(OBJ_LLIGHTS_LIST) is discarded.

80
Object List

OBJ_BILLBOARD Option editor Selects the object billboard mode.


Off
Billboard mode is off.
Axial
The object (i.e. a tree) must be defined with its
origin in the 0,0,0 and vertical through the z
axis. The object must be oriented looking to
the Y axis. Modifiying the “position" it is posible
to define the place where the tree is, and with
"Axis", it's possible to change the orientation of
the tree's trunk.
World
Is useful to orientate objects that do not have a
main axis in the direction that looks to the
camera. The rotation axis is asigned internally.
Eye
Similar to the previous one, but the Z of the
object stays all time upright on the screen. It is
slower than the World mode.
OBJ_BBOARD_POS Float3 editor When billboard is active sets the rotation
point.
OBJ_BBOARD_AXIS Float3 editor When billboard is active sets the rotation axis.
OBJ_ALPHA_MODE Option editor The Alpha Channel option is used to
customize how the object fills the alpha planes
of the frame buffer. This option should be used
only when really needed because it imposes a
penalty in the simulation performance. The
following modes are supported:

AlphaOff
Disables this mode.
AlphaSet
Forces the object to render the Alpha planes
(This is accomplished rendering the object
twice).
AlphaClear
Forces the object to not render the Alpha
planes (An internal mask is used for this).
Remember that the alpha channel should be
specified as the material Alpha property. But,
this property is not always honored because of
the interference between the alpha values and
the transparency. When a material is
transparent, the final alpha is the amount of
transparency.

Specifically, the alpha set is accomplished by


redrawing a second time without transparency
the object while masking the R, G and B
components and redrawing only the Alpha
value.

Thus, it is recommended to specify alpha


requirements through the alpha component of
the color of the material whenever it is
possible. If it is not possible because of the
need of transparency then use this option.

81
Object List

When testing this mode toggle on the Alpha


button in the top modes menu bar to visualize
the final image alpha channel.
AlphaMax
Draws the object a second time rectifying the
alpha channel. In the second pass it uses the
openGl commands glBlendEquation(GL_MAX)
and glBlendFunc(GL_ONE, GL_ONE). The
openGL functions glBlendFuncSeparate and
glBlendEquation cannot be supported in any
graphic cards. Run ipf -wOGLINFO to check if
_extBlendFuncSeparate and _extBlendMinMax
(respectively) are present.
OBJ_ALPHA_COND Selector editor Selects the condition for Alpha Channel
modes that need it.
OBJ_TRANSPARENCY Float editor Sets the transparency for the whole object.
Though transparency is a material property,
it is useful to have it as an object property
because it allows to change the transparency
of the object as a unit indepently of each
material properties.
This value is composed with the transparency
values of the materials making the object.
OBJ_TRANSPARENCY_ON Toggle editor Enables or disables the object transparency
property.
OBJ_OVERMAT Selector editor Selects a material that will override all the
object materials.
OBJ_CLIPX1 Selector editor See OBJ_CLIPZ2.
OBJ_CLIPX2 Selector editor See OBJ_CLIPZ2.
OBJ_CLIPY1 Selector editor See OBJ_CLIPZ2.
OBJ_CLIPY2 Selector editor See OBJ_CLIPZ2.
OBJ_CLIPZ1 Selector editor See OBJ_CLIPZ2.
OBJ_CLIPZ2 Selector editor Clipping planes cut the geometry of the
object. Only the part of the object in the
positive side of all of them remain visible. They
are usually used to cut out objects against the
floor or walls of a scene. Up to six clipping
planes can be specified. Each one of them
references a pivot, the origin of the pivot and
its Y axis define the clipping plane.
OBJ_CDG Float3 editor Sets the reference position of the object. See
the objects reference transformation.
OBJ_DIRCDG Float3 editor Sets the reference orientation of the object.
OBJ_AUTOCG Button editor Calculates the center of gravity of the
vertices of the object and sets it on the
OBJ_CDG editor.
OBJ_TO_BUILT Button editor Generates a geometry of type Built
replicating the current object and the changes
the object type to geometry and references
the generated geometry.

82
Object List

OBJ_SAVE_FORMAT Option editor Selects the object file format used by the
OBJ_SAVE_FILE editor.
OBJ_SAVE_FILE File editor Saves the object in one of the formats that can
be selected in the selector. This formats can be
pfa, pfb, dpy, obj, m3a and m3b. Check the
reference in previous pages for explanation of
this formats.
OBJ_CLIP_ON Toggle editor Saves the object data in a file according to the
file format specified in OBJ_SAVE_FORMAT.
OBJ_CLIP_REL Toggle editor Makes the clipping plane move with the object,
if it is on and you move the object to another
position, the clipping plane will travel with it, if
not it will stay were was defined.
OBJ_GLLOAD_TOG Toggle editor Objects that are draw can use a huge amount
of texture memory. When you cull on an object
(hide it) this texture memory is not freed, only
the object is hidden. This toggle culls and
unloads from texture memory all the textures.
OBJ_BINORDER Integer editor Object trees are drawn using a system of
‘layers’, first a layer of objects is drawn, then
the next and so on. This for example is useful
when drawing objects with alpha. If you don’t
want this order, you can ‘create’ your own
layers. For example, you can assign some
objects to layer 0, others to layer 1 and the
objects in layer 0 will be drawn first.
OBJ_BINORDER_ENABLED Toggle editor Activates the Binorder system.
OBJ_CLIP_ON Toggle editor Enables the object clipping planes.
OBJ_CLICKABLE_GROUP Toggle editor If the object is of group type allows to select
the parent and not one of its childs. Selects the
complete object. If the object is not of group
type then the editor is disabled.
OBJ_LOAD_TABLE Table editor The table Ranges - Transitions holds the
information to perform the LOD group updates.
RANGES:
The radius of the bounding sphere for the next
level of detail change.
TRANSITIONS:
The LOD objects change from one to another
with a transition. This value is the time taken
for that transition.
OBJ_LOD_VIEW Toggle editor Displays the bounding spheres of the objects in
the LOD group.
OBJ_LOD_DIRECTCTRL_ON Toggle editor Allows to change manually from one LOD
object to another using a slider.
OBJ_LOZ_VALUE Float editor Selects the next object to draw in a LOZ group.
OBJ_LOZ_LEVELSBEFORE Integer editor Chooses how many objects are displayed at the
same time. Depends on the LOZ Value.
OBJ_LOZ_LEVELSAFTER Integer editor Chooses how many objects are displayed at the
same time. Depends on the LOZ Value.
OBJ_SAVE_M3B Button editor Saves the object to m3b format.

83
Object List

OBJ_TO_BUILT_COLLAPSE Button editor If the object has childrens that are inside
groups, collapses all the structure to a lineal
one, allowing for using the new Group Effects.
OBJ_TO_BUILT_TRIANGLES Button editor Converts the geometry to triangles.
OBJ_ISOLATE_CHILDREN Button editor Creates a parent for each children.
OBJ_EQUIDIST_CHILDREN Button editor Ensures that the objects inside a parent are
equidistant from each other.
OBJ_MATRIX Label editor This editor contains the Transformation values
for the Scale, Euler and Displacement. Meant
for binding purposes.
OBJ_MATRIX_INCENTER Label editor This editor contains the Transformation values
for the Scale, Euler and Displacement. The
Center editors are preserved. Meant for binding
purposes. It is used for the Group Effects.
OBJ_MAT_COORD_SYS Option editor Objects can have its coordinates specified in
different coordinate systems:

- Object: The object uses his transformation


plus the transformation inherited from it
ancestors (the traditional approach).
- World: The object does not apply his
ancestors transformation.
- Camera: The object uses his transformation
in the camera coordinate system (X left, Y
depth, Z up). The ancestor transformations are
discarded.
- Eye: Like Camera but another transformation
is applied that scales in X and Z proportinally to
the field of view tangents. This way the object
seems to stay in the same position when
zooming in and out although in reality it is
being scaled in X and Z to simulate the
stationary position.

Changing from one coordinate system to


another modifies the object transformation to
keep the object in the same space position.

When changing to or from Eye mode there is a


small position jump because the Eye field of
view transformation is discarded.

84
Geometry List

Geometry List
Description
Editors

Geometries are a type of object created to hold 3D geometry user generated or loaded from a
file. They can be of three types: File, Built and Group.

When a 3D object definition that resides in disk has to be loaded it has to be done as a geometry
of File type.

Loaded File geometry may generate a hierarchy of children geometry. Those children of a File
geometry are not allowed to be edited because eStudio will never save back to disk and modify the
used file. Nevertheless, those children can also be referenced by objects of type geometry.

File geometry can be converted if required to Built geometry by selecting Built in the Type
Option editor.

When File geometry is selected a copy of the object is done in memory. When you modify this
memory copy (for example showing part of the object faces) if you want to come back to the
original object, the program has to load it again because the memory copy has been altered.

Built geometry builds a copy of the object for reference and manipulation and maintains it
unaltered.

Built geometry is defined as a collection of:

Vertices
Normals
Texture vertices
Colors
Faces

and one material.

86
Geometry List

The array of Vertices, Normals, Texture vertices and Colors define the coordinates for every
vertex of the geometry. The array of Faces are a collection of indexed triangles generating the
faces of the geometry.
A single material is applied to all the geometry faces.

Some 3D object file formats include the texture and material definitions.

In these cases materials are automatically generated when the geometry is loaded. The
properties of these materials can be later modified by the user, but the same original materials
and properties will be generated every time the object is loaded cause eStudio does not modify the
original object file.

But when loading a database the material List configuration file is loaded after the geometry List
configuration file. This way, the properties set by the user will redefine and have priority over the

87
Geometry List

intrinsic definition of the 3D object file format material properties.

Many of the object loaders do not provide a name for the materials they generate and a default
new name for them having the same root as the filename is automatically generated. Every time
the object is loaded it generates again the same material names (based on the filename) and
have to be respected, that is why the user is not allowed to change those material names in the
interface to avoid incongruences.

Both File and Built type geometries go through a reconstruction process when the internal
representation of the object is being generated.

In some load modes a point and an orientation simulating a point of view in 3D space and a viewing
frustum are required. These are called the geometry Eye, Eye direction and Eye window.

Several modes and flags apply to the reconstruction process:

Optimize.
The internal representation goes usually through an optimization process to increase rendering
performance. Vertices and faces can be modified in the process while keeping the same
external aspect of the geometry.
This process might be undesirable some times, for example when the object is going to be
morphed to another.

The Tessellation toggle editor re-meshes the object to make strips. Strips have the benefit of
increasing performance. To see the strips of an object you can go to the object utilities tab
and set the Highlight Mode to Strips and toggle on the Highlight editor.

88
Geometry List

Subtriangle Level
All geometry triangle faces are recursive subdivided in smaller triangles up to a user specified
level.

Decimate.
This option reduces the complexity of the object. The reduction is done trying to preserve the
object shape. When this reduction is extreme, the shape changes.

Faces.
This option loads the object faces acording to the settings of the Load Faces option editor:

FacesAll
Generate all faces of the geometry.

FacesFront
Generate only those faces seen from the geometry Eye.

FacesBack
Generate only those faces not seen from the geometry Eye.

FacesEyeFrustum
Generate only those faces inside the geometry Eye viewing frustum.
Faces that intersect the frustum are clipped.

FacesEyePos
Generate only those faces oriented to the eye position.

FacesDirNeg
Generate only those faces with normals oriented negative to the eye position.

FacesDirPos
Generate only those faces with normals oriented positive to the eye position.

The Following options are the same as the previous one's but in the XYZ Axis.

FacesDirXNeg

FacesDirXPos

FacesDirYNeg

89
Geometry List

FacesDirYPos

FacesDirZNeg

FacesDirZPos

Faces Margin.
When Load Faces is in FacesFront or Back mode, this value specifies a margin to take
the decision if the polygon is facing front or back. The margin is compared against the
projection of the face normal direction on the eye direction.

Texture.

Texture margin.
When the texture generation mode is set to TexGenEye this value specifies a reduction
of the texture coordinates to reduce border limit problems.

Texture generation.
Texture coordinates can be redefined during the loading process according to the
following modes:

TexGenOff
No internal texture coordinates generation takes place.

TexGenPlaneX
Texture coordinates are generated for every vertex according to the projection of the
vertex coordinates on the X plane.

TexGenPlaneY
Texture coordinates are generated for every vertex according to the projection of the
vertex coordinates on the Y plane.

TexGenPlaneZ
Texture coordinates are generated for every vertex according to the projection of the
vertex coordinates on the or Z plane.

TexGenCylinderX
Texture coordinates are generated for every vertex according to the cylindrical
coordinates in the X direction.

TexGenCylinderY
Texture coordinates are generated for every vertex according to the cylindrical
coordinates in the Y direction.

TexGenCylinderZ
Texture coordinates are generated for every vertex according to the cylindrical
coordinates in the Z direction.

TexGenSphereX
Texture coordinates are generated for every vertex according to the spherical
coordinates in the X direction.

TexGenSphereY
Texture coordinates are generated for every vertex according to the spherical
coordinates in the Y direction.

TexGenSphereZ
Texture coordinates are generated for every vertex according to the spherical
coordinates in the Z direction.

TexGenEye

90
Geometry List

TexGenEye
Texture coordinates are generated for every vertex according to the perspective its
projection on the geometry viewing frustum.

GEO_TYPE Option editor Selects the type of the geometry.


GEO_OPTIMIZE Toggle editor Specifies if the geometry should be loaded with
or without optimization. The optimization
consists in reorganizing the geometry in tri-
strips.
GEO_LOAD_REUSEMAT Toggle editor Specifies if when loading a File geometry every
generated material that has the same
properties as an already generated one should
reuse the existing one.
GEO_FACES_LOAD_MODE Option editor Selects the type of geometry faces to be
loaded. Options are:
FacesAll
FacesFront
FacesBack
FacesEyeFrustrum
FacesEyePos
FacesDirNeg
FacesDirPos
FacesDirXNeg
FacesDirXPos
FacesDirYNeg
FacesDirYPos
FacesDirZNeg
FacesDirZPos.
GEO_FACES_EYE_PICK Button editor Automatically updates the
GEO_FACES_EYE_POS, GEO_FACES_EYE_HPR
and GEO_FACES_EYE_WINDOW editors to
those values of the current GFX Window
simulation view.
GEO_FACES_TEX_MARGIN Float editor Sets the Faces margin value for selecting front
and back looking faces.
GEO_VIEW_GRAPHICS Float editor Show geometry manipulators.
GEO_FACES_EYE_POS Float3 editor Sets the geometry Eye position used by some
load modes.
GEO_FACES_EYE_HPR Float3 editor Sets the geometry Eye orientation used by
some load modes.
GEO_FACES_EYE_WINDOW_LEFT Float Sets the geometry Eye window used by some
editor load modes.
GEO_FACES_EYE_WINDOW_RIGHT Float Sets the geometry Eye window used by some
editor load modes.
GEO_FACES_EYE_WINDOW_BOTTOM Float Sets the geometry Eye window used by some
editor load modes.
GEO_FACES_EYE_WINDOW_TOP Float Sets the geometry Eye window used by some
editor load modes.

91
Geometry List

GEO_TEX_GEN_MODE Option editor Selects the mode for automatically generating


texture coordinates. This texture coordinates
can be generated using a Plane (in X, Y or Z), a
Sphere , a Cylinder (in X, Y or Z) and the Eye
frustrum.
GEO_LOAD_SUBTRI Float editor Sets the level for recursive subdividing triangle
faces.
GEO_RELOAD Button editor Reloads a File geometry from disk.
GEO_FILE File editor Selecs the file for a File geometry.
GEO_VERTEX LFloat editor Sets the list of vertices for a Built geometry
using a table editor.
GEO_NORMAL LFloat editor Sets the list of normals for a Built geometry
using a table editor.
GEO_TEX LFloat editor Sets the list of texture coordinates for a Built
geometry using a table editor.
GEO_COLOR LFloat editor Sets the list of colors for a Built geometry using
a table editor.
GEO_TRIS LFloat editor Sets the list of triangle faces for a Built
geometry using a table editor.
GEO_MAT Selector editor Selects the material for a Built geometry.
GEO_FILE_FLATTEN Button editor Converts the File Geometry to M3B format.
The software manages more efficiently this
format.
GEO_RELOAD Button editor Reloads the geometry from disk.
GEO_CENTER Float3 editor The center of the transformation.
GEO_DECIMATION Float editor Reduces mesh complexity.
GEO_OTYPE Option editor Chooses the transformation type, between
Basic, Eccentric and Composed.
GEO_ORESET Button editor Resets the geometry transformation.
GEO_TO_ORIGIN Button editor Brings the object to the origin of coordinates.
GEO_SCALE Float3 editor Scale transformation editor.
GEO_ORIENTATION Float3 editor Rotate transformation editor.
GEO_DISPLACEMENT Float3 editor Displace transformation editor.
GEO_UNIFORM_SCALE Toggle editor This toggle enables uniform scaling in XYZ.
GEO_FACES_MARGIN Float editor When Load Faces is in FacesFront or Back
mode, this value specifies a margin to take the
decision if the polygon is facing front or back.
The margin is compared against the projection
of the face normal direction on the eye
direction
GEO_DISPLAYLIST_MODE Option editor Transforms the geometry into a Display List.
This sends the geometry in this form to the
graphics card memory and depending on the
hardware and the opengl driver it can speed
things up.
GEO_OPTIMIZE_GROUPLINE Toggle editor Performs a group optimization.

92
Geometry List

GEO_TRANSFER_MODE Option editor Controls how the geometries are transferred to


the GPU. It can be, Immediate, DisplayList,
VBO.

Immediate geometries are easier to transfer


but less efficient.

DisplayList works as a cache for geometries,


and improves performance. A geometry is
stored inside a display list and compiled
somehow so using it again and again speeds up
performance.

VBO has an advantage over DisplayList that


consist in that display lists can only be
compiled one time. VBO's can be compiled
many times, so if something changes just
recompiles and use it. VBO are not available in
all graphics cards.
GEO_TO_ORIGIN_ROOT Button editor Inside a geometry with childs, you can select
one of the childs and press this button, it will
center the object but moving also the parent.
GEO_TO_ORIGIN_AUTOSCALE_ROOT Button This does the same as
editor GEO_TO_ORIGIN_ROOT but it also scales
the object to 1 unit.
GEO_GEN_TANGENTS Toggle editor Geometries usually doesn't have tangent
coordinates that are needed for example for
Bump Mapping.
GEO_MATDICT List editor When geometries are loaded, the materials
used are linked to them. If you change the
materials and save, when you load again the
database the old materials are back. Now,
changing the materials stores them in this
editor so when the database is reloaded this
editor is checked and the materials created and
asigned.
GEO_MATDICT_RESET Button editor Clears the editor.

93
Primitives List

Primitives List
Description
Editors

Though eStudio is not a modeling program, primitive objects can be generated from inside the
program. The reason for this is the need to interactively modify the shape, resolution and size of
this kind of objects. The most common case is when trying to represent numerical data by
modifying the definition parameters of objects like bars, disks, etc. It should be very hard or some
times impossible for eStudio to make this kind of transformations with imported 3D objects and the
transformation tools.

All the primitive parameters (dimensions, radius, etc.) can be modified in real time.
Also the resolution (number of points that make the primitive) can be modified in real time, but it
should be done as less as possible because they involve the deletion and regeneration of the object,
while changing the rest of parameters only involve the redefinition of the data that makes the
object.

Most primitives allow for the selection of different materials for the different surfaces that make
the primitive. In case one only material is needed for the whole primitive it is enough to select
the material for the first one that appears in the interface, the rest of them will inherit the graphic
state and will be rendered with the same material as the previous one.

In the current version of eStudio, these are the types of implemented primitives:

Nothing
In this mode the primitive has no geometry associated to it.

Reference Grid
The reference grid fills a rectangular region of space by drawing small XYZ axis in evenly
spaced positions in space. This is a visual tool implemented only as a help for locating and
positioning objects in space.

95
Primitives List

Surface
The Surface is a 2D rectangular mesh of polygons. The main use of this primitive is to create
a simple quadrilateral object to make a screen, a wall, floor, etc., but it allows some other
shapes.
The following Surface types are available:

SurfPlane. The triangle mesh is generated in a plane.

SurfCylinder. The triangle mesh is generated in a cylinder.

96
Primitives List

SurfSphere. The triangle mesh is generated in a sphere.

Several options allow to apply an extra deformation to the generated surface:

Sinusoidal. The shape of a two dimensional sinusoidal wave.


Fractal. A fractal deformation.
Trajectory. The path of a trajectory (only for SurfPlanes).

DataBar
The DataBar is a kind of primitive to be used when a bar has to grow to represent a
numerical data. The bar can grow in the direction of any of the axis and even in a circular path.
Several parameters control the size, bevel, etc.

DataSphere
The DataSphere is a primitive to be used in similar cases as the DataBar but it allows for
some different rotating topology that is not allowed by the DataBar. The following picture
shows one of the presets available, the TorusSkin.

97
Primitives List

Platon
The Platon primitives generate regular polyhedron objects. Two parameters, Open corners
and Open edges allow to derive some other polyhedron based on the regular polyhedron.
These two parameters are not intended to be changed in real time.

Graphic
The Graphic primitives are designed specific but commonly used shapes. Only two are
implemented:

Frame
Arrow

Cylinder
Generates a cylinder by specifying two points in space, the radius and resolution. The fact that
the cylinder is specified by two points allows to bind these coordinates to pivots or maps to
generate some kinds of graphics.

98
Primitives List

Prism
A simple prism defined by its position and size.

Disc
Generates a disc by specifying a center, direction, resolution and radius.

Sphere
Generates a sphere by specifying a center, radius, and resolution.

99
Primitives List

Extruded
Generates an extruded object based on 3D curves.

Path and Bevels: The polygon to be extruded is given by the 'Path' 3D curve and the shape of
the extrusion is given by the 'Bevel' 3D curve.

Note that we only use the Y-Z projection of the 3D curves because the data needed from this
curves is only 2D dimensional but 3D curves provide 3D dimensional data.

- The extrusion polygon (Path) is given by the Y-Z projection of a 3D curve. The sign of the
rotation has to be pointing in the Y negative direction.

- The extrusion Bevel is given by the Y-Z projection of a 3D curve.


The Y coordinate specifies the width of the extrusion.
The Z coordinate (negative) specifies the depth of the extrusion.

In this curve only the relative position of the points to the first one defines the bevel, that is,
the result is independentent of the position of the curve in Y-Z plane, only the difference with
the first point matters.
Note that the generated extruded volume grows with the bevel in the Y positive direction.

100
Primitives List

Extrusion types: Extrusion types can be Linear and Revolution.

- In Linear type the extrusion grows linearly in the direction given by the Direction value.

- In Revolution type the extrusion grows forming a revolution around the Z plane.

The 'FractionIni' and 'FractionEnd' values allow to generate only the selected segment of the
whole 'Path' curve3D.

Path modes:

- GoBack mode: By default the curve Path is automatically closed by joining the last point of the
curve with the first one, but if the GoBack mode is set then the curve is closed by creating a
parallel curve. The distance 'Thickness' specifies the thickness of the generated line.

- Path Back curve3D: When the GoBack mode is set then a curve1D can be specified that
modifies the thickness of the generated parallel line according to the covered distance. This
capability allows to generate shapes as the isobars used in weather maps.

101
Primitives List

The 'Symetric' flag allows the thickness to be applied in both sides of the line.

The 'Reverse' flag allows to reverse the origin from where the 'Path Back' curve1D is applied.

Resolution:

Resolution values can be specified for X and Y.

- The Resolution in X specifies the amount of segments (subdivisions) that should be generated
for every interval of the Bevel curve3D.

- The Resolution in Y specifies the amount of segments (subdivisions) that should be generated
for every interval of the Path curve3D.

Covering Modes:

- CoverFront: Indicates if the front side of the generated volume should be covered with a
polygon.

- CoverBack: Indicates if the back side of the generated volume should be covered with a
polygon.

- CoverLat: Indicates if the lateral side of the generated volume should be covered with a
polygon.

Render modes:

- 'Flat Path' indicates if the Path curve3D should be interpreted as flat segments (shading
changes abruptly on the edges) or smooth transitions. For example an extrusion that generates
the letter 'O' would be created as non 'Flat' but a extrusion that generates the letter 'M' should
be flat.

- 'Flat Bevel' indicates if the Bevel curve3D should be interpreted as flat segmentes or smooth.

Generation modes:

- 'GoBack Parallel'. It is only effective when in GoBack mode.

- If set to TRUE indicates that the generated parallel line should be created so that it is always
parallel at a distance 'Thickness' from the Path curve3D.

- If set to FALSE indicates that only the distance from vertex to vertex of the parallel lines
should be constant at a distance 'Thickness'. (And as a result lines are not parallel).

102
Primitives List

- Walls. This mode is usefull for the generation of charts.


It automatically creates vertical segments growing from zero height at the start and end of the
curve3D so that they act as 'walls' of the generated shape.

Materials:
Two different materials can be selected for the extruded volume:

- 'Front': The material for front and back sides.

- 'Lateral': The material for the extrusion.

Chroma
The Chroma primitive generates a special kind of geometry that is used to solve the
common problem of covering the outside of the cyclorama walls with polygons rendering
only the Alpha channel to be able to point the camera outside the cyclorama walls and still
see the 3D scene.
A box represents the virtual studio room and a hole inside the box represent the chroma
walls.
The masking properties that the material needs to have to behave as transparent but still fill
the Alpha planes can be set or remove from the primitive interface.

Flare
This primitive generates an object that simulates the flare of real optical lens. It is made of a
collection of textures that are always drawn facing the camera and at certain positions and
sizes. A default configuration that generates the needed textures and set the corresponding
positions and sizes can be generated.

Flares have also a direction that is used to fade off the flare when to the angle between the

103
Primitives List

direction and the one from the flare to the point of view tends to 90 degrees. The length of the
direction can be used to increase/decrease the cone where the flare is visible.

To be able to use Bump Mapping or Parallax Mapping several things are needed, geometry vertex,
normal cordinates and tangent coordinates. When importing geometries, commonly no tangent
coordinates are present. When you create primitives in eStudio the same happens.

Vertex Normals Tangent Coordinates

Bump Mapping

104
Primitives List

If tangent coordinates are not present there exists an shading aberration between Gouraud shading
and Bump Mapping Shading. See the next two pictures for reference.

When the tangents are computed, the shading looks very similar regardless of the shading mode.

PRIM_TYPE Option editor Selects the primitive type.


PRIM_INVERSE Toggle editor Reverses the primitive polygons orientation.
Only implemented in some primitive types.
PRIM_ORIENTATION Option editor Surface orientation.
PRIM_RECGLO_OFFCENTER Toggle editor Centers the surface in the center of the global
axis.
REFGRID_SPACE Float3 editor Selects the distance between the points that
make the grid.
REFGRID_RESOL Float3 editor Selects the amount of points in the X, Y and Z
directions.
REFGRID_LENAXIS Float3 editor Selects the length of the small axis drawn in
each point of the grid.
PRIM_RECGLO_TYPE Option editor Selects the Surface type:
SurfPlane. The triangle mesh is generated
in a plane.
SurfCylinder. The triangle mesh is
generated in a cylinder.
SurfSphere. The triangle mesh is generated
in a sphere.
PRIM_RECGLO_RES Integer2 editor Sets the resolution of the surface mesh in
both directions.
PRIM_RECGLO_HBLEND Integer2 editor Selects the horizontal blending.
PRIM_RECGLO_VBLEND Integer2 editor Selects the vertical blending.
PRIM_RECGLO_INFLATE Float editor Does a deformation in the surface mesh to do
a blending to avoid aliasing in machines
without antialiasing.
PRIM_RECGLO_INFLATE_TEX Toggle editor The deformation does not affect the texture.
PRIM_RECGLO_RADIUS Float editor The radius of the SurfSphere.

105
Primitives List

PRIM_RECGLO_ESQ0 Float3 editor Displaces the vertex of the SurfQuad.


PRIM_RECGLO_ESQ1 Float3 editor Displaces the vertex of the SurfQuad.
PRIM_RECGLO_ESQ2 Float3 editor Displaces the vertex of the SurfQuad.
PRIM_RECGLO_ESQ3 Float3 editor Displaces the vertex of the SurfQuad.
PRIM_EXTRUDED_THICKNESSBACK Float Sets the thickness of the pathback curve.

PRIM_RECGLO_OFF Float2 editor Sets the distance from the lower corner of the
surface to the origin. If the surface is of type
Cylinder or Sphere it can be an angle and is
measured in degrees.
PRIM_RECGLO_LEN Float2 editor Sets the surface size. If the surface is of type
Cylinder or Sphere it can be an angle and is
measured in degrees.
PRIM_RECGLO_RADIUS Float editor Sets the radius when the surface is of type
Cylinder or Sphere.
PRIM_RECGLO_MAT Selector editor Selects the surface material.
PRIM_RECGLO_TRAY Selector editor Selects the Trajectory to use as the path
deformation for the surface.
PRIM_RECGLO_SINCOS_MODE Toggle editor When active a two dimensional sinusoidal wave
is added to the surface.
PRIM_RECGLO_SINCOS_SCALE Float2 editor Sets the xyScale parameter of the sinusoidal
wave.
height = xScale * sin(xOffset + x * xScalePar)
* yScale * cos(yOffset + y * yScalePar)
PRIM_RECGLO_SINCOS_OFFSET_PAR Float2 Sets the xyOffset parameter of the sinusoidal
editor wave.
height = xScale * sin(xOffset + x * xScalePar)
* yScale * cos(yOffset + y * yScalePar)
PRIM_RECGLO_SINCOS_SCALE_PAR Float2 Sets the xyScalePar parameter of the
editor sinusoidal wave.
PRIM_RECGLO_FRACTAL_MODE Toggle When active, a fractal is added to the
editor surface.
PRIM_RECGLO_FRACTAL_PEGGED Option Selects which portion of the surface should
editor remain fixed when the fractal is calculated:
Corners. The four corners.
Both Sides. The four sides of the surface.
SideX. Only the sides parallel to the X axis.
SideY. Only the sides parallel to the Y axis.
Free. Nothing should remain fixed.
PRIM_RECGLO_FRACTAL_TILEABLE Option Selects what sides of the surface should be
editor tileable after adding the fractal. This mode is
important when the surface is going to be
continued with a clone of itself or when the
Surface type is Cylinder or Sphere and a 360
degrees angle is specified so that the start and
final sides should match to avoid
discontinuities.
The following types are available:
Tile Off. Nothing is tileable.
Tile X. Sides parallel to the X axis.
Tile Y. Sides parallel to the Y axis.

106
Primitives List

Tile XY. The four sides of the surface.


PRIM_RECGLO_FRACTAL_INTENSITY Float Controls the intensity of the added fractal.
editor
PRIM_RECGLO_FRACTAL_CONTRAST Float Controls the contrast of the added fractal.
editor
PRIM_RECGLO_FRACTAL_SEED Integer Sets a seed for the random values used by the
editor fractal. Modifying this value the whole fractal
shape is changed.
PRIM_DATABAR_TYPE Option editor Selects the mode the databar should grow
when modifying its size.
Grow X+. Grow in the positive X axis.
Grow Y+. Grow in the positive Y axis.
Grow Z+. Grow in the positive Z axis.
Grow Center. Grow in all directions.
Grow Arc X-. Grow rotating with the X
negative axis as the rotating Axis.
Grow Arc X+. Grow rotating with the X
positive axis as the rotating Axis.
PRIM_BAR_RES Integer3 editor Sets the mesh resolution in the X,Y,and Z
directions.
PRIM_BAR_OFFSET Float3 editor Sets the distance of the starting growing point
of the bar to the origin.
PRIM_BAR_SIZE Float3 editor Sets the size of the bar in the XYZ directions.
PRIM_BAR_RADIO_BORDER Float editor Sets the radius of the corners of the bar when
looking at it from the Z axis.
PRIM_BAR_RADIO_CORNER Float editor Sets the radius of the corners of the bar when
looking at it from the X or Y axis.
PRIM_BAR_RADIO_ARCO Float editor Sets the radius of the arc in case the bar is in
Growing Arc mode.
PRIM_BAR_MATCR Selector editor Selects the material of the bar corners.
PRIM_BAR_MATX1 Selector editor Selects the material of bar face pointing in the
X negative direction.
PRIM_BAR_MATX2 Selector editor Selects the material of bar face pointing in the
X positive direction.
PRIM_BAR_MATY1 Selector editor Selects the material of bar face pointing in the
Y negative direction.
PRIM_BAR_MATY2 Selector editor Selects the material of bar face pointing in the
Y positive direction.
PRIM_BAR_MATZ1 Selector editor Selects the material of bar face pointing in the
Z negative direction.
PRIM_BAR_MATZ2 Selector editor Selects the material of bar face pointing in the
Z positive direction.

107
Primitives List

PRIM_DATASPH_TYPE Option editor Selects a Closing Mode:


Off: The surface is not closed in any
direction.
Horizontal: The surface is closed with two
lids (bottom and top).
Vertical: The surface is closed making of it
an opened torus.
Radial: The surface is closed making of it
like a thick surface.
All: The surface is closed in Horizontal and
Vertical mode simultaneously. This is useful
in case the materials that are going to be
applied are going to be transparent.
PRIM_SPHERE_RES Integer2 editor Selects the resolution in the X and Y
directions.
PRIM_SPHERE_RADIUS Float editor Selects the radius for the initial sphere that
makes the primitive.
PRIM_SPHERE_FLATHOR Float editor Selects the radius for the toroidal part of the
primitive.
PRIM_SPHERE_COTAZ1 Float editor Sets the height for the central point of the
bottom lid. This editor is only sensitive when in
Horizontal or All Closing Mode.
PRIM_SPHERE_COTAZ2 Float editor Sets the height for the central point of the top
lid. This editor is only sensitive when in
Horizontal or All Closing Mode.
PRIM_SPHERE_HEAD_INI Float editor Sets the initial angle for the heading
(Horizontal angle) of the torus.
PRIM_SPHERE_HEAD_LEN Float editor Sets the length for the heading angle (Total
horizontal angle) of the torus.
PRIM_SPHERE_PITCH_INI Float editor Sets the initial angle for the Pitch (Vertical
angle of the section of the torus).
PRIM_SPHERE_PITCH_LEN Float editor Sets the length for the Pitch angle (Vertical
angle of the section of the torus).
PRIM_SPHERE_THICK Float editor Sets the thickness of the volume generated
when in Radial closing mode.
PRIM_SPHBAR_MAT_TORUS Selector editor Selects the material for the external surface of
the torus.
PRIM_SPHBAR_MAT_TORUS_SEC Selector Selects the material for the closing surface
editor when in Vertical or All closing mode.
PRIM_SPHBAR_MAT_LID Selector editor Selects the material for the lids surfaces when
in Horizontal or All closing mode.
PRIM_SPHBAR_MAT_LID_SEC Selector Selects the material for the section between
editor the lids when in Horizontal or All closing
mode.
PRIM_PLATON_TYPE Option editor Selects the type of polihedron for platon
primitive.
PRIM_PLATON_SIZE Float editor Sets the size of the primitive.
PRIM_PLATON_CORNERS Float editor Sets the parameter that controls the opening of
the polihedron corners.

108
Primitives List

PRIM_PLATON_EDGES Float editor Sets the parameter that controls the opening of
the polihedron edges.
PRIM_PLATON_MAT_SURF Selector editor Selects the material for the primitive.
PRIM_PLATON_MAT_OPEN Selector editor Selects the material for the new polygons
generated when using the Open Corners or
Open edges (PRIM_PLATON_CORNERS or
PRIM_PLATON_EDGES) parameters.

PRIM_GRAPH_TYPE Option editor Selects the Graphic primitive type.


PRIM_GRAPHIC_INT Toggle editor Specifies if the interior of the graphic frame
should be visible.
PRIM_GRAPHIC_WIDTH Float editor Sets the width of the graphic.
PRIM_GRAPHIC_HEIGHT Float editor Sets the height of the graphic.
PRIM_GRAPHIC_THICK Float editor Sets the thickness of the graphic.
PRIM_GRAPHIC_BEVEL Float editor Sets the bevel width of the graphic.
PRIM_GRAPHIC_MWIDTH Float editor Sets the frame width of the graphic.
PRIM_GRAPHIC_MHEIGHT Float editor Sets the frame height of the graphic.
PRIM_GRAPHIC_ARROWHEAD Float editor In case the Graphic is of Arrow type sets the
width of the arrow head.
PRIM_FRAME_MAT_FRONT Selector editor Selects the front and back materials of the
graphic frame.
PRIM_FRAME_MAT_LAT Selector editor Selects the lateral material of the graphic
frame.
PRIM_FRAME_MAT_BEVEL Selector editor Selects the bevel material of the graphic
frame.
PRIM_FRAME_MAT_FRAME Selector editor Selects the material of the graphic inside
front frame polygons.
PRIM_FRAME_MAT_BACK Selector editor Selects the material of the graphic inside
back frame polygons.
PRIM_CYL_INI Float3 editor Sets the starting vertex for the cylinder axis.
PRIM_CYL_END Float3 editor Sets the final vertex for the cylinder axis.
PRIM_CYL_RADIUS_INI Float editor Sets the initial radius for the cylinder.
PRIM_CYL_RADIUS_END Float editor Sets the final radius for the cylinder.
PRIM_CYL_ALPHA_INI Float editor Sets the initial angle for the surface around
the cylinder.
PRIM_CYL_ALPHA_LEN Float editor Sets the length of the angle for the surface
around the cylinder.
PRIM_CYL_RESOLXYZ Integer3 editor Sets the cylinder surface resolution.
PRIM_CYL_COVER_FRONT Toggle editor Specifies if the cylinder should cover with a
surface its front extreme.
PRIM_CYL_COVER_BACK Toggle editor Specifies if the cylinder should cover with a
surface its back extreme.
PRIM_CYL_COVER_LAT Toggle editor Specifies if the cylinder should cover with a
surface its lateral.
PRIM_CYL_MATLAT Selector editor Selects the lateral material of the cylinder.
PRIM_CYL_MATFRONT Selector editor Selects the frontal material of the cylinder.

109
Primitives List

PRIM_PRISM_OFFSET Float3 editor Sets the distance of the lower corner of the
primitive to the origin.
PRIM_PRISM_SIZE Float3 editor Sets the size of the prism in the XYZ
directions
PRIM_PRISM_MATX1 Selector editor Selects the material of prism face pointing in
the X negative direction.
PRIM_PRISM_MATX2 Selector editor Selects the material of prism face pointing in
the X positive direction.
PRIM_PRISM_MATY1 Selector editor Selects the material of prism face pointing in
the Y negative direction.
PRIM_PRISM_MATY2 Selector editor Selects the material of prism face pointing in
the Y positive direction.
PRIM_PRISM_MATZ1 Selector editor Selects the material of prism face pointing in
the Z negative direction.
PRIM_PRISM_MATZ2 Selector editor Selects the material of prism face pointing in
the Z positive direction.
PRIM_DISC_PTO Float3 editor Sets the disc center.
PRIM_DISC_HPR Float3 editor Sets the disc orientation.
PRIM_DISC_RES Integer editor Sets the disc resolution (the amount of
vertices that make the circle).
PRIM_DISC_RADIO Float editor Sets the disc radius.
PRIM_DISC_MAT Selector editor Selects the disc material.
PRIM_SPH_CENTER Float3 editor Sets the sphere center.
PRIM_SPH_RADIUS Float editor Sets the sphere radius.
PRIM_SPH_RES Integer2 editor Sets the sphere resolution.
PRIM_SPHERE_MAT Selector editor Selects the sphere material.
PRIM_EXTRUDED_TYPE Option editor Selects the extrusion type:
Linear
The extrusion happens in a linear direction
Revolution
The extrusion happens in a circular path.
PRIM_EXTRUDED_FLAT Toggle editor Specifies if the faces generated in the
extrusion should look continuous from one to
the other or a flat look.
PRIM_EXTRUDED_COVER_FRONT Toggle Specifies if the front side of the extrusion
editor should be covered.
PRIM_EXTRUDED_COVER_BACK Toggle Specifies if the back side of the extrusion
editor should be covered.
PRIM_EXTRUDED_COVER_LAT Toggle editor Specifies if the lateral side of the extrusion
should be covered.
PRIM_EXTRUDED_CLOSE Toggle editor Specifies if the first and last vertices of the
extruded data (PRIM_EXTRUDED_DATA)
should be also joined to close the surface.
PRIM_EXTRUDED_DATA LFloat editor Sets the array of two dimensional vertices
making the shape to be extruded.
PRIM_EXTRUDED_HEAD_INI Float editor In case of extruded Radial type sets the
starting extrusion angle.

110
Primitives List

PRIM_EXTRUDED_HEAD_LEN Float editor In case of extruded Radial type sets the length
of the extrusion angle.
PRIM_EXTRUDED_PATH Selector editor Selects a Curve3D to extrude the primitive.
PRIM_EXTRUDED_GOBACK Toggle editor To enable a Curve1D to close the extrusion.
PRIM_EXTRUDED_PATH_FINI Float editor Initial value of the extrusion.
PRIM_EXTRUDED_PATH_FEND Float editor Final value of the extrusion.
PRIM_EXTRUDED_FITTEXTURE Toggle Adjust the texture mapping to the extruded
editor object.
PRIM_EXTRUDED_HEAD_INI Float editor Initial value of the revolution extrusion.
PRIM_EXTRUDED_HEAD_LEN Float editor Final value of the revolution extrusion.
PRIM_EXTRUDED_PATH_BACK Selector Selects the Curve1D to close the extrusion
editor path.
PRIM_EXTRUDED_DIR Float3 editor In case of extruded Linear type sets the
extrusion direction.
PRIM_EXTRUDED_RES Integer2 editor Sets the resolution of the extrusion.
PRIM_EXTRUDED_MATLAT Selector editor Selects the material used for the lateral
polygons of the extrusion.
PRIM_EXTRUDED_MATFRONT Selector Selects the material used for the frontal
editor polygons of the extrusion.
PRIM_CHROMA_ESQINI Float3 editor Sets the lower corner of the chroma box.
PRIM_CHROMA_ESQEND Float3 editor Sets the higher corner of the chroma box.
PRIM_CHROMA_Y1 Float editor Sets the lower Y coordinate of the hole inside
the chroma box.
PRIM_CHROMA_Y2 Float editor Sets the higher Y coordinate of the hole inside
the chroma box.
PRIM_CHROMA_X Float editor Sets the higher X coordinate of the hole inside
the chroma box.
PRIM_CHROMA_MAT Selector editor Selects the chroma material.
PRIM_CHROMA_SET Button editor This action automatically modifies all the
chroma material to properties needed to
behave as totally transparent but still render
the Alpha plane.
PRIM_CHROMA_REMOVE Button editor This action removes the properties set by the
PRIM_CHROMA_SET action. It is used to be
able to see the object in the GFX Window
while the chroma box is still being adjusted.
PRIM_FLARE_TEXS LSelector editor Selects the list of textures making the flare.
PRIM_FLARE_SIZES LFloat editor Sets the size for each one of the polygons
making the flare (each one of them using one
of the PRIM_FLARE_TEXTURES).
PRIM_FLARE_POS Float3 editor Sets the position in space where the flare
source is going to be simulated.
PRIM_FLARE_SIZE_GLOBAL Float editor Sets a global scale applied to all the flare
polygons simultaneusly.

111
Primitives List

PRIM_FLARE_CONE Float editor The flare is attenuated outside the cone


formed by the camera with axis in the line of
sight and the flare source. This parameters
specfies the aperture of such cone.
PRIM_FLARE_CONE_MARGIN Float editor Controls the attenuation margin outside the
flare cone.
PRIM_FLARE_TRANSPARENCY Float editor Sets a global transparency value for the
whole flare.
PRIM_FLARE_BRIGHTNESS Float editor Sets the brightness for every flare texture.
PRIM_FLARE_SATURATION Float editor Sets the saturation for every flare texture.
PRIM_FLARE_DEFAULT Button editor This button automatically generates a default
flare configuration.
PRIM_TRANSFER_MODE Option editor Controls how the primitives are transferred to
the GPU. It can be, Immediate, DisplayList,
VBO.

Immediate primitives are easier to transfer


but less efficient.

DisplayList works as a cache for primitves,


and improves performance. A primitive is
stored inside a display list and compiled
somehow so using it again and again speeds up
performance.

VBO has an advantage over DisplayList that


consist in that display lists can only be
compiled one time. VBO's can be compiled
many times, so if something changes just
recompiles and use it. VBO are not available in
all graphics cards.
REFGRID_BARS Toggle editor Displays a bars grid instead of a points grid.
REFGRID_OFFSET Float3 editor Offsets the bars in XYZ.
REFGRID_SCALE Float3 editor Scales the bars in XYZ.
PRIM_EXTRUDED_PRESETS Preset editor Selects a preset for the extrusion. Options are:
Line, Disk, Ring, Torus, Arrow, Isobar,
Strap, HalfStrap and the one's you define.
PRIM_EXTRUDED_BEVEL Curve3D selector Selects a curve3D to create the Bevel.
editor
PRIM_EXTRUDED_DIR Float3 editor The direction of the Bevel.
PRIM_EXTRUDED_PATHBACK Curve1D When the GoBack mode is set then a curve1D
editor can be specified that modifies the thickness of
the generated parallel line according to the
covered distance. This capability allows to
generate shapes as the isobars used in weather
maps
PRIM_EXTRUDED_THICKNESSBACK Float Sets the thickness of the pathback line.
editor
PRIM_EXTRUDED_PATHBACK_SYM Toggle Allows the thickness to be applied in both sides
editor of the line.

112
Primitives List

PRIM_EXTRUDED_PATHBACK_REV Toggle Allows to reverse the origin from where the


editor 'Path Back' curve1D is applied
PRIM_EXTRUDED_TRUNCATE Toggle editor It subdivides each vertex of the table into two
vertices located the 'truncate' distance towards
the neighbor vertices and the extrusion is
applied to the obtained line.

Test with a simple extruded primitive using a


curve3D in table format to see the effect of the
truncate value.
PRIM_EXTRUDED_PATH_BREAK_ANGLE The angle means the limit between normal
Float editor angles to create discontinuity, thus a value fot
the angle of 0 implies always discontinuity (flat
faces) and a value of 180 implies always
smooth edges.
PRIM_EXTRUDED_COVER_WALLS Toggle It automatically creates vertical segments
editor growing from zero height at the start and end
of the curve3D so that they act as 'walls' of the
generated shape.
PRIM_EXTRUDED_GOBACK_PARALLEL It is only effective when in GoBack mode.
Toggle editor
- If set to TRUE indicates that the generated
parallel line should be created so that it is
always parallel at a distance 'Thickness' from
the Path curve3D.

- If set to FALSE indicates that only the


distance from vertex to vertex of the parallel
lines should be constant at a distance
'Thickness'. (And as a result lines are not
parallel).
PRIM_DATASPH_PRESETS Presets editor Selects predefined values for the datasphere
editors. You can create your own presets as in
all the preset editors in eStudio. We have
predefined for you four datasphere primitives,
Disk, Ring, Torus and TorusSkin.
PRIM_EXTRUDED_TRUNCATE Float editor It subdivides each vertex of the table into two
vertices located the 'truncate' distance towards
the neighbour vertices and the extrusion is
applied to the obtained line.
PRIM_EXTRUDED_BEVEL_BREAK_ANGLE The angle means the limit between normal
Float editor angles to create discontinuity, thus a value fot
the angle of 0 implies always discontinuity (flat
faces) and a value of 180 implies always
smooth edges.
PRIM_COMPUTE_TANGENTS Toggle editor Computes the tangent coordinates necessary
for Bump Mapping.
PRIM_FLARE_EUL Float3 editor A direction that is used to fade off the flare
when the angle between the direction and the
one from the flare to the point of view tends to
90 degrees. The length of the direction can be
used to increase/decrease the cone where the
flare is visible.

113
Primitives List

PRIM_FLARE_MATRIX Matrix editor Contains the transformation matrix of the flare


primitive. This editor can be used for binding
purposes.
PRIM_FLARE_ANGLE Float editor The angle used in conjuntion with the direction
to calculate the vanishment of the flare.
PRIM_FLARE_ANGLE_DECAY Float editor This value determines the increase of the
transparency of the flare as the angle changes.

114
Engine List

Engine List
Description
Editors

Engines are types of objects which take as input another object(s) and generate a new one whose
geometry (vertices, normals, textures or colors) is obtained by means of applying mathematical
transformations to the input object(s).

Input objects can also be of engine type.

Possible transformations are:

- Morph
- Bend
- Wave
- Pole
- Project

116
Engine List

A list of objects is taken as input and the output object is obtained as a linear combination of the
geometry of the input objects.

As each vertex of the output object is obtained as a transformation of the respective vertex of the
input objects it is needed that all input objects contain exactly the same amount of vertices,
normals, textures and colors.

When input objects are of type Geometry the 'Tessellation' mode of the geometry should be
turned off because otherwise the applied optimization when loading the geometry could change
differently for each object the amount of vertices.

Optimization of the output object (tessellation, etc.) can be obtained by toggling On the 'Optimize'
mode of the engine.

Morphs can be Sequential or Weighted:

Sequential morphing is obtained by interpolating linearly from one object of the list to the next
one as an interpolation factor changes from zero to one. That is, if the list is composed of three
objects and the interpolation factor is set to 0.5 then the output object corresponds exactly to the
second one of the list.

This method is adequate when the input objects correspond to a sequence of shapes and the output
object has to interpolate sequentially through all of them.

Weighted morphing is obtained by averaging a weighted sum of the input objects. Each input
object is assigned a weight value. This method is adequate when the output object has to be
obtained as a simultaneous combination of several of them.

117
Engine List

A 'Bend' engine takes as input one object and outputs another one whose geometry is 'bent'.

The bending transformation simulates the deformation obtained when a steel beam that juts out
from a wall is applied a force on the free extreme. Parameters are:

- Position of where the bending starts (wall position in the steel beam analogy).

- Orientation for the direction of bending (orientation of the wall in the steel beam analogy,
although in our case the orientation can also have pitch angle).

- Bending constants for positive and negative half-spaces of the plane given by the position and
orientation. Vertices contained in the positive side of the plane will use the positive constant and
those in the negative side the negative constant. If one of the constants is zero then no bending is
applied in that side of the plane.

- Bending exponential constants control exponentially how much of the bending decays in the
traversal direction of the transformation.

A 'Pole' engine makes pixels at a fixed distance from a center point, transparent. For example, it
can be used to open holes in surface primitives.

118
Engine List

The parameters are:

- Pole Type, there are three options available for the 'shape' of the transparency change:

Plane. The pixels are made transparent using a plane.

Cylinder. The pixels are made transparent using a cylinder.

Sphere. The pixels are made transparent using a sphere.

- The Half editor makes the calculations to be done on half of the space.

- Center sets the center point for the pole calculations.

- Distance sets the distance from the pole center for the transparency effect to be applied.

- The Margin editor sets the amount of blur applied to the transparency.

- The Color gradient editor sets the color to be used to calculate the transparency.

The 'Project' engine creates a projection of an object that can be used to create shadows or to
'stick' objects that adapt to others. If the engine is set to Plane it defines a focus point and a plane
that will be used to do the projection.

The parameters for Plane are:

Factor sets the quantity of projection to be done, setting to zero makes the projection to coincide
with the real object and setting to one puts the projection on the plane defined by the engine.

Point and Euler define the plane where the projection will be acomplished.

If the engine is set to Object then the proyection is done making one object adapt to another one's
geometry. The engine takes the geometry specified in the ENGINE_OBJ_INI editor and makes a
projection over the object specified in ENGINE_PROJECT_TO_OBJ.

119
Engine List

In the previous picture two surfaces are sticked to the cow geometry. This stickers can be created
from the Desktop Interface using the primitive dropdown menu and the only thing to take care
with is that when you drag to define an area where the sticker will appear, this area must be inside
the geometry, see the next pictures to see how to do it.

Correct selection Incorrect selection

If the selection is incorrect, eStudio will calculate an aproximation of the sticker in the geometry.
This calculation takes some time but it is done only one time when you stick.

ENGINE_TYPE Option editor Selects the type of engine deformation. It can


be, Morph, Wave, Bend, Pole, Compress,
Roll and Project.
ENGINE_MORPH_WEIGHTED Toggle editor Allows to asign weight to the morph targets.
ENGINE_MORPH_OPTIMIZE Toggle editor Optimizes the tesellation and other geometry
related parameters.
ENGINE_MORPH_OBJS Lselector editor Allows to select the morph geometry targets.
ENGINE_MORPH_WEIGHT Float editor Specifies the morph proportion.
ENGINE_MORPH_WEIGHTS LLString editor This table stores the weights for the morph
targets.
ENGINE_OBJ_INI Selector editor Selects the bend source object.

120
Engine List

ENGINE_BEND_PTOP Float3 editor Specifies the point that defines the position of
the bend plane.
ENGINE_BEND_EULER Float3 editor Orientation for the direction of bending.
ENGINE_BEND_KPOS Float editor Bending constants for positive half-spaces of
the plane given by the position and orientation.
ENGINE_BEND_KNEG Float editor Bending constants for negative half-spaces of
the plane given by the position and orientation.
ENGINE_BEND_KFEXP Float editor Specifies a distance exponential factor of
bending decay in the plane positive half space.
ENGINE_WAVE_CENTER Float3 editor Specifies the point where the wave starts.
ENGINE_WAVE_AXIS Option editor Sets the axis where to apply the wave.
ENGINE_WAVE_ANGLE_SPEED Float editor The speed at what the effect propagates.
ENGINE_WAVE_DECAY Float3 editor Limits the effect of the wave generated from its
center.
ENGINE_WAVE_PERTURBATION Float editor Is the movement that displaces the point where
the wave is generated,
ENGINE_WAVE_TIMELEN Float editor Specifies the amount of segments that each
bezier interval should be divided in when
converted to the internal table.
ENGINE_POLE_TYPE Option editor The Pole engine changes the transparency of
the material around the ENGINE_POLE_PTOP
editor.

There are three options available for the


'shape' of the transparency change:

Plane. The pixels are made transparent using


a plane.

Cylinder. The pixels are made transparent


using a cylinder.

Sphere. The pixels are made transparent using


a sphere.
ENGINE_POLE_HALF Toggle editor Only half of the calculations are done.
ENGINE_POLE_PTOP Float3 editor Sets the center point for the pole.
ENGINE_POLE_HALFEULER Float3 editor Selects angle for the calculated points when
using half computing.
ENGINE_POLE_MINDIST Float editor Sets the distance around the pole center point
at what the pixels are made transparent.
ENGINE_POLE_MARGINDIST Float editor Sets a margin for the
ENGINE_POLE_MINDIST distance. This
editor applies a blur to the area around the
pole center point.
ENGINE_POLE_COLOR Color editor Sets the color gradient for the pole.
ENGINE_POLE_EULER Float3 editor Selects angle for the calculated points.

121
Engine List

ENGINE_PROJECT_TO_TYPE Option editor There exist two options:

Plane: This defines a plane for the projection


to be done.

Object: To create objects that stick and adapt


to other.
ENGINE_PROJECT_TO_MARGIN Float editor Artifacts can appear when objects are in the
same position. This editor allow us to slightly
modify the engine to remove the artifacts.
ENGINE_PROJECT_FACTOR Float editor If it is zero the projection coincides with the
projected geometry. If set to 1, then the
projection is on the plane.
ENGINE_PROJECT_FOCUS Float3 editor This sets the focus point from where the
projection is done.
ENGINE_PROJECT_PTOP Float3 editor Sets the point that defines the plane together
with the ENGINE_PROJECT_NORP editor.
ENGINE_PROJECT_NORP Float3 editor Sets the euler that defines the plane together
with the ENGINE_PROJECT_PTOP editor.
ENGINE_PROJECT_TO_OBJ Selector editor Sets the object in which the
ENGINE_OBJ_INI will be sticked.

122
Text List

Text List
Description
Editors

One of the object types available in eStudio is the Text object. This object type allows for text
creation as well as impressive text effects creation and reproduction with ease, from a single text
onscreen to a complex ticker guided by paths.

Nowadays the importance of On-Air graphics for TV stations, different display types, multi-screens,
planetariums and OTS among others, forces to have character generator tools that allow to create
outstanding text effects the easiest way.

In Brainstorm eStudio version 10 we have added several new features and improvements in
different areas directly related with texts. From Curves3D, with improved manipulation and
capabilities to new render routines that allow eStudio to display high quality texts faster than
before, and the new replace text effects and Fonts improvement that make eStudio a powerful but
flexible On-Air character generator.

In this chapter we will show you everything you must know about every aspect and parameter of
the Text List, the related lists and how to optimize your texts to obtain the best results both if you
are going realtime or not.
This description travels all the list tab by tab, editor by editor showing screenshots of every option
to ensure that you don’t get lost in the explanation.

127
Text List

The Text List shares with all the eStudio lists the look and the interface. You can access the list
from different places, from the GFX Window popup menu with an existing text, from the
GlobalLists interface pressing the appropriate icon (Fig. 2) or from another list using the
appropriate editors (see the manual pages titled eStudio Interface Description)

The Text List contains all the elements common to all the lists that allow to create new list items,
delete, duplicate, etc. It also has a Font selector. Fonts and Texts combination allow to create texts
of great impact.
The list editors are distributed along four main tabs, String, where you can write text or load and
save files, with Unicode and normal text options, Box, where all the text box justify related
parameters reside, Modes, whose editors allow for kerning manipulation, colors, bullets, travellers
and much more and Effects, the jewel of the crown of this list.

Summary of the Text List


-Text box notions.
Justifications. HotPoint. Autogrow.
Spacing, Color.
-Text editing in 3D.
-Text effects.
In and Out Effects.
Effects presets.
Effects creation.
-Ticker modes.
-Control codes.
-Advanced text editing. Paths.
-Text list editors table.

128
Text List

When a text is created in eStudio, an special box is created at the same time. This ‘Text Box’ is like
a canvas where we write text. The utility of this box is given to the necessity of justifying texts. Any
kind of justification that we do to texts is made in relation to this box. (Fig. 3)

The text box grows as we write text, if we add a new line, the box grows vertically besides
horizontally. For a better understanding of the concept of text box as a canvas where we write and
justify texts we will use some examples. With this aim in mind we will use an editor that will be
explained forward in the text. In the Box tab there is a toggle editor called Autogrow that, by
default, when a text is first created, is checked, when deselected, it allows us to modify the text box
size in a manual way.

Checking the Visible toggle allows us to see the text box. Using the Size editors we expand the text
box and if we look closely we can see a small triangle in the left side of the box. This small triangle
is called the HotPoint. (Fig. 4)

The HotPoint acts as a reference for the box justifying and points by default to the Baseline of the
first line of text. By means of the justifying editors of the Box tab we can see how to justify the box
in relation to the HotPoint and how to justify the text inside the box. (Fig. 5)

Different horizontal box justify types are shown in figure 6. From the pictures you can appreciate
that the HotPoint never changes, it is the box what changes in relation to the HotPoint.

129
Text List

The other box justify type, the vertical one works analog to horizontal one, that is, is the box that
displaces itself in relation with the HotPoint. The most useful or typical vertical justify types are
shown in figure 7.

The next concept related to the text box is Autogrow. Autogrow allows the box to grow as you type
text. The box grows horizontally when you add a new letter and vertically when you add a carriage
return (Fig. 8).

Let’s move to the Modes tab to learn more about text box basics before moving on more advanced
concepts. In this section we are going to cover two of the subtabs inside Modes, Spacing and Color
(Fig. 9).

130
Text List

There are several other options in the text list that affect the text box besides of the text itself.
Changing Size will change the text and of course also the text box to be able to accomodate it.
Don’t forget to check the Visible toggle editor in the Box tab to see the changes.

The Leading float editor changes the interline separation and the Tab Size editor allows for
different tab sizes. This changes displace the text so the text box must change for the text to fit
inside.

The Tracking editor changes the separation between characters. This editor increments or
decrements the same quantity in every letter. The FixedSpacing toggle changes this separation to
ensure that the same distance exists between every character. This is useful for example if you
have a grid to make each individual character fit inside a space in the grid.

Note that a dark red extension to the text box can appear if the text does not fit and the Autogrow
is disabled (Fig. 10) This is an advanced concept and is explained later in this chapter.

When people create ttf fonts, it can include kerning values inside the file to ensure that the
aesthetic separation between each pair of characters is maintained. To see this effect you can
choose the Verdana font and write pairs of letters like VA or LT and toggle on/off the Use Font
Kerning. You will be able to spot the difference between them.

The Snap To Unit Grid toggle is a utility to make pixel fit rendering and is an advanced concept
involving several lists.

Fonts are resource expensive and you may want to use just one font applied to different texts but
with different colors. This is why this capability is added to texts. But be aware that you can later

131
Text List

change the color in the font and if Text Color Enabled is checked, you will see no change!

Besides editing text in the String editor (Fig. 11) you can edit it in 3D. This adds a lot of control to
text editing, you can change Kerning, Size of the text box and other text features from the 3D
editing.

To select a text for editing in 3D we must use a key-mouse combination (To see all key and mouse
shortcuts please check the Key Shortcuts sections in the Appendix B).

With the focus in the GFX Window, pressing the <Control> key while moving the mouse pointer
over the text (or any object as you will know by now) makes a highlight to appear to let you know
that you can select the text. (Fig. 12)

Holding pressed the <Control> Key and clicking in the text shows the Text Manipulator (Fig. 13).

At this moment you can edit the text by inserting the cursor whenever you want inside the text, or
selecting some letters or words in the text (Fig. 14), exactly as you will do in any word processor.
You can also press the <Alt> key while you click and drag in the text to edit Kerning (Fig. 15).

132
Text List

The text Effects tab allows the user to create a whole new set of great text effects just by doing a
couple of clicks. But don't get wrong, it's a simple tool but indeed a powerful one, the text effects
you can create with it are nearly infinite.

eStudio effects can be created in two ways, in the first you can just select one of the Brainstorm
created presets and in the latter you will edit the parameters in the list to get the effect that you
have in mind.

To start with, eStudio effects have a In effect and an Out effect. This two effects carry a
transformation matrix that defines the position of the text.

With this matrix you can have the text in some position from where the In effect takes place and
have another position to where the text will go after the Out effect performs.

Usually, when effects are played you cannot see the position of the text before the In effect plays or
the position after the Out effect because of the Fade Mode (Fig. 16) option editor. This editor fades
the text to make it play the transition in a smoother way. Setting this editor to Off allows you to see
where the text is before a In/Out effect is performed.

The following sequence of pictures shows an effect with In and Out effects. The Fade Mode editor
has been set to Off to be able to see the complete animation (Fig. 17 - 21).

133
Text List

This brief explanation about the In/Out effects will allow you to better understand the next
sections. Change the Fade Mode editor to see transformations that happen when an effect is
played.

The first editors in the effects tab are the play effect buttons. This six buttons control the
reproduction of the effects (Fig. 22).

The Presets option editor contains a set of pre-defined text effects. Five general categories

134
Text List

comprise 24 different effects. Included in this sets are the most common text effects so maybe you
will never have to change a parameter. But you can also use them as a reference and modify them
to obtain the desired effect (Fig. 23).

Effects can also be saved by using the Create option in the menu. When you are satisfied with
your effect, just select the Create option and a new preset will be created. The name of the preset
will be the same of the text item in the Text list.

By default, the Mirror Out Effect toggle is enabled, so when you select a preset for the In effect
all the editors are duplicated in the Out effect. This saves time because you don’t have to select the
effect again for the Out effect just in case you need one. But you must be aware that an effect that
looks good enough in the In effect can look ugly in the Out effect.

This is because some of the editors that are duplicated must be inverted because the effect must be
different when the text enters or leaves and not all the inverted curves behave the same way.
Usually all the effects will look good, but some of them can look bad.

When this toggle makes more sense is when you create your effect from scratch, as you will see in
the next section, because you can change so many editors that having the capability of
automatically duplicate them is a great addition.

As told before, you can choose a preset effect or you can create your own using the editors present
in the In, Out and Replace tabs.

When you first open the Text list and create a new text, a default effect is assigned to both In/Out
effects. Using this default effect we will travel along all the important concepts and editors. We will
concentrate in the In effect because the other one works the same.

The text effects consist in applying a transformation to each letter of the text. This transformation
can be a scaling, a rotation or a displacement. All this transformations are controlled by the editors
in the Transformation tab. (Fig. 24)

The transformation of the letters can be performed from the start of the text to the end or from the
end to the start among other three options. This can be set with the Order editor. The visual effect

135
Text List

can change a lot modifying the order in which the transformation develops. (Fig. 25)

Another editor that affects this is the Char Time. This editor controls the speed of the
transformation, the bigger the number the more time needed to finish the effect.

The Overlap editor float editor controls when the effect starts for each character. If this editor is
set to zero, the effect in a character doesn’t start until the previous character has finished. If set to
one then the effect starts at the same time in all the characters.

The speed curve is a strange but powerful curve. Emulates the behavior of a spring. Using just three
parameters we can get different phisics movements that allow us to create realistic effects with
anticipation and attenuation.

136
Text List

In a spring equation, the amplitude depends on the speed at which the movement is done, the
bigger the speed the bigger the amplitude of the spring.

The main parameter is the Decay Start, this parameter controls the speed and defines the curve.
The other two parameters, Decay Amplitude and Start Slope are modifiers of the speed curve
that modulate the amplitude and the speed (Fig. 28).

Using the Start Slope and Decay Amplitude parameters we can get some interesting curve
movements, like linear, acceleration-deceleration and many others. (Fig. 29)

All this speed curve concepts are applied to text effects using the parameters of the Speed Curve
tab. There are also five predefined presets with the Linear curve, Accel-Decel curve and three
Decay type curves.

The five speed curve presets with its parameters and the associated curves will allow us to
introduce other text effects parameters. The following curves where generated using a special
database that can be found in the Tutorials manual. Check the Spring Ball tutorial to see an
application.

137
Text List

With the Linear curve (see Fig. 30 above) the text effects play at a constant pace and there are no
spring rebounds.

To see the effect of the Acceleration-Deceleration curve we must change some parameters. If
you create a text and just select this speed curve preset and play the effect you will notice no
difference between the Linear aproach and this.

This preset requires a Transformation and an Alpha transition. Optionally you could change also
the Overlap between letters. Displacing the text to another position allows to see when the text
comes how it slows down before reaching the end position. But to see the acceleration at the start
position you must set to off the Fade Mode editor. This editor manages the Alpha transition of the
text, for example, to avoid seen the text travel to the screen from another area.

The options of this editor change how fast or slow is made the fading. This Alpha transition is also
managed by a curve (Fig. 32).

138
Text List

The first of the three Decay option presets, Decay1, changes the speed curve to have the effect of
a spring with its rebounds. Having the text as in the Acceleration-Deceleration curve, that is, in
another position, allows to better see the effect.

The other two Decay presets, Decay2 and Decay3, make smaller rebounds. The curves of this
three presets can be seen in the following pictures (Figs. 33, 34 and 35).

139
Text List

One of the advanced and useful utilities that can be created with eStudio is a Ticker. A Ticker is a
compound of texts, pictures, and 3d objects that travels the screen and is used in many TV stations
as an instant information news system.

In this news space, several informations like economics data, latest news, headlines or sports data
among many others, are constantly read from files, databases or the internet and constitute a great
way of sending information to the viewer while they view their favourite TV programs.

Tickers can be complex to create and can involve other eStudio lists besides the Text list, for
example the Maps one. Maps would be created to take control over the ticker. To learn to create a
complex maps driven Ticker, please refer to the Tutorials manual and see the Endless Ticker
tutorial.

The Ticker (or Traveller) editors are located under the Modes/Traveller tab in the Text list (Fig.
37).

140
Text List

The default option is Normal, this options means just text with no animation. The other three
options are Crawl, Paragraph and FXReplace and all of them affect the way the text appears on
screen.

This traveller takes the text and animates it along a line (Fig. 38).

The text used in the travel can come from the String editor in the Text list, from a text file in a
hard disk or network or from the internet.

To better understand how the traveller works we must explain some more ‘text box’ concepts.
Besides the Text Box, there is a Text Traveller Box, this box is used to make the text travel in
the Ticker. In the Fig. 38, the green box is the text traveller and the red is the text box. To see this
boxes you must toggle on the View Clip Area toggle editor.

The red box acts as a clipping alpha plane for the text that appears when the green box enters the
red box. The text disappears outside the limits of the red box. You can see this effect by dragging
the Goto slider editor.

The Left and Right Fade Margins editors control the way the text fades at his left and right sides.
Changing it's values makes the fade more or less smooth (Fig. 39).

141
Text List

When you change this margins the red box changes to yellow in the area where the fading is done
(Fig. 40).

The Speed editor controls how fast the travel is done and the Duration editor informs us of the
time required for it to finish. There is an easy way of having a text constantly travelling the screen.
Checking on the Loop mode allows us to automatically do this.

The Feeder Mode editor allows you to update the traveller text in two ways. The first mode,
Autoconsume, takes the lines in the Feeder List editor and uses them as the text for the Crawl.
As the strings are used they are deleted, this is whre the name Autoconsume comes.

The Append String editor allows to add new strings to the ticker without being noticed in the GFX
Window. Note that if you added the string using the New button, this new line would be changed
in realtime in the GFX Window.

The other mode, Fixed, preserves the strings entered in the Feeder List editor.

142
Text List

The Gap float editor allows you to add a separation between the texts. The new text that replaces
the old one can produce visual jumps. To avoid this, eStudio adds a Hat to the new text. This hat
consists in some of the characters of the exit string. How much characters? all the characters that fit
in the text box, because if different, you will notice the change (Fig. 42).

The Pre-End Alarm editor informs you when the text is going to finish the travel. This is very
helpful when you must load a new text to update the previous one. The editor gives you enough
time to load the new text.

In this traveller mode the text is distributed in paragraphs. You can create several paragraphs and
the traveller makes them appear with smooth transitions between them (Fig. 43).

To create paragraphs you must only precede each line with a control code (Fig. 44) similar to this,
\p<10,10,10>, where the numbers refer to the time required to fade in, the time that the text is
visible and the time required to fade off. There are two types of control codes for this kind of
traveller and they are explained in the Control codes section later in this text.

143
Text List

This traveller, replaces the text with the next one using the selected text effect in the Effects tab.

The Feeder Mode works the same way as with the Crawl traveller.

Another feature if the Text list are the Control Codes. This codes allow you to set extra text
capabilities like blink, color, paragraphs, fonts, underlines, gaps, kerning, etc.

The following list contains all the eStudio text control codes:

Control Code: BLINK

It can be defined at several levels. Each value is an integer which shows the number of frames that
the text will be in that state.

String interpretation:

\b<a> visible = a; not visible = a; fadein = 0; fadein = 0


\b<a,b> visible = a; not visible = b; fadein = 0; fadein = 0
\b<a,b,c> visible = a; not visible = b; fadein = c; fadein = c
\b<a,b,c,d> visible = a; not visible = b; fadein = c; fadein = d
\b disables blinking

Example:

In this text\b<10,5> this part blinks\b and this one don't.

144
Text List

Control Code: COLOR

Each color component is defined with an integer which ranges between 0 and 255.

There are two versions (with and without parameters):

\c<r,g,b> by default the alpha value is 255


\c<r,g,b,a> the alpha value is set by the user
\c returns to the default color value

Example:

This word in \c<255,0,0> red \c<0,255,0> green \c and normal.

Control Code: PARAGRAPHS

Indicates text FadeIn, stay and FadeOut times. The values are specified in frames. For them to
work, it has to be selected in the text the Paragraph traveller mode. Usually a timer is associated
to the Travel slider, whose lenght has to be the total sum of all the paragraph defined times. There
is a function that can be called from python that calculates the total number of frames used by a
Paragraph text:

numFrames = textparagraphstime(string)

Example:

numFrames = textparagraphstime('\p<20,10,10>This is an example string')


print numFrames

There are two versions:

\p<in,on,out>

\p<off,in,on,out>

Example:

\p<10,200,20> This is a paragraph that appears during 10 frames, it stays visible other
200 frames and dissappears in 20 frames.
\p<10,20,50,30> This text is hidden 10 frames, appears during 20 frames, it stays visible
other 50 frames and dissapears in 30 frames.

Control Code: FONT

Font change. Allows texts to use several diferent fonts.

String interpretation:

\f<fontName> fontname is a string with the name of a font installed in the system
\f returns to the default font

Example:
If you have two fonts with names "fontA" and "fontB", its posssible to define a string as:

"This is written in default font, \f<fontA> this in fontA, \f<fontB> this in fontB, \f and this again in
the default font"

145
Text List

Control Code: KERNING

Fixes the letters position, to be able for example, to narrow the distance between the A and the V in
the word VALENCIA.

String interpretation:

\k<float>

Example:

V\k<-0.2>ALENCIA

Control Code: GAP

Defines the gap between two characters in a similar way to \k. But this gap is not depending on the
font size. It is useful to make tables using different font styles.

String interpretation:

\g<floatVal> floatVal is a float value

Example:

This\g<2.4>is an example

Control Code: OTHER

Other Codes

String interpretation:

\n inserts a carrier return.


\t inserts a tab.
\ascii value between 000 y 255. replaces with that ascii's character.
\u Hexadecimal unicode value (example: \u5d50 pictogram value representing the word
Storm)
\l<> enable underline.
\l disable underline
\\ write "\" character.
\i<> indent start. enables indentation mode. tabs are interpreted as indentation tags
\i indent end.

Over the previous pages and sections we have seen the majority of the Text list capabilities. We
have intentionally left some concepts unexplained that fit in a more advanced section of the manual.
As with the previously explained concepts, please complement this reading with the tutorials that
will allow you to gain a better knowledge of the software.

The new concepts to explain include Paths, Bullets, Replacement texts, or Autogrow limits.

As we told before in the Text box concepts section, if the Autogrow toggle is set, the text box
grows automatically as you write text. In case you need more control over the text box, toggling off
the editor allows for change the size of the text box and also displays two new editors, Shrink

146
Text List

Limit and Narrow Limit.

When Autogrow is off, the text box grows vertically showing a brown box extension. It does not
grow horizontally and if a word doesn’t fit in, it is sent to the next line (Fig. 46).

If you use the Justify modes, then the text box will grow up, down or both as you write text.
Setting for example Text Justify Vert to Center makes the box grow up and down at the same
time.

The Shrink Limit editor is the value from where the text reduces itself to fit in the box. In the Fig.
47 [1,2 and 3] the text gets reduced until it fits inside the text box. The text box (the white one)
doesn’t change.

The Narrow Limit editor is the value from where the text ‘narrows’ itself to fit in the box. Both
Shrink and Narrow editors doesn’t change the text with any value. If the text is not going to fit in
the text box, them the sliders don’t do a thing. Also if you have carriage returns with several lines,
nothing will happen when using Narrow Limit.

147
Text List

Another feature in the Text list is that you can use a Path for the text to follow. This path can be a
3D Curve or a Trajectory. Both 3D elements have lots of useful tools that can help you make better
animationsor just help you in putting your texts in an special way (Fig. 49).

Using the Type selector you choose between Curve3D or Trajectory. Both can prove useful
depending on what you want to do. Curves3D offer you much more power and flexibility than
Trajectories and in the future will replace them. To learn more about this two eStudio capabilities
check the Curves3D and Trajectory list Chapters.

Once you have selected a Curve3D or a Trajectory you can edit it going to the appropiate list. This
two elements can require that you enlarge the curve, change its orientation, change text size,
modify speed, velocity, etc.

We have added Bullets and indentation cappabilities to the Text list. Adding tabs to the text adds
an indentation for the first line, but the next lines will start at the beginning of the text box (with
the default justify mode).

Bullets work different, if you add a bullet, all the lines of your text will be indented (see Fig. 50).
Bullets are configurable from the Modes/Misc/Bullets tab, you can also use a bullets font (like
windings.ttf) and you can change color of the bullets.

Pressing the tab key in the String editor or in the text in the GFX Window (using the text
manipulator, see Text editing in 3D in this chapter) adds indentation to the first line of text.

Typing the control code \i<> in the String editor or in the text in the GFX Window (using the text
manipulator, see Text editing in this chapter) adds indentation to all the text and also adds a Bullet.

148
Text List

After typing the control code you can add extra ‘tabs’ will pass to the next bullet predefined
character as is specified in the Modes/Misc/Bullets tab.

Selections work as in any text editing package, but here as with every editor in eStudio you can
also make binds (See the Bind list chapter) or use them in a Python script (See the Maps list
chapter).

The Cursor integer editor sets the position of the cursor in the text. To be able to see it you must
check the Visible toggle in the same tab or select the text in the GFX Window.

The Selection x and y editors hold the scope of the selection. The default values, x = 0 and y = -1,
stand for ‘no selection’. If you want to change it from the editors or from a script, first you must
first change the y = -1 value.

In the same tab we can find seven buttons (Fig. 51). This buttons add indentations, kerning, makes
the selection (or the text) blink, underscores it or gives it color. You can also use them from folders
(see the Folder list chapter).

149
Text List

The Performance tab has only one editor, Display List, this editor converts the text to display list
mode. This mode optimizes text by encapsulating it into the display list and making all the needed
calculations one time. This mode has its own limitations because it speeds the render of the text but
the text cannot change because any change done to it will make a new calculation. Why should you
use it? when you have text that are not going to change, like overlay static texts.

This mode is also used in Primitives and Geometries. There is also another transfer mode named
VBO but it is not available for texts. Please check the Primitives list and Geometry list chapters
for more info on this subject.

When we spoke before of the text effects creation subject, we explained the In/Out effect concepts
and intentionally left apart the Replace tab. A replacing text uses the In or/and the Out effect to
change to another text.

We can select a In effect and an Out effect for a text and create two events that change the
content of the String editor, asigning letters to those events (See the Event list). Then we can
enable the Replace effect and fire it by changing the focus to the GFX Window and pressing the
keys asigned for the events (Fig. 52). One text will replace the other using the selected text effects.
Please refer to the text tutorials for complete examples on how to do this.

You can also test the replace effect using the Run button editor. This button simulates the replace
just with a click.

There is a Presets editor in the Replace tab, this presets are different from the ones in the In/Out
effects and if you select one of this, the replace system will change the editors in the In and Out
effects tabs to do the effects.

The Overlap editor sets when the second text replaces the first. If you set it to zero, the replacing
text will wait until the first has finished its Out effect before starting its In effect.

The Duration editor shows the time required for the replacement effect and can be used as always
for binds or use from python scripts.

150
Text List

The number of replace effects that can be achieved using combinations of all the In/Out effects is
outstanding (Fig. 53). Probably the predefined effects will be enough in most cases, but feel free to
experiment with the settings.

The Path tab in Effects/In Effect/Path (or its Out equivalent) allows to change the position of the
text in the start and end effects acording to a predefined path. You can alter the direction as well as
choose to play the effect only in XZ plane.

To see this we recomended to toggle on the Visible toggle in the Modes tab and set the Fade
Mode editor in the Effects/Modes tab to Off.

A curve is specified with two directions, for start/end modes. This directions are specified in
spherical coordinates, Azimuth (h), Elevation (p) and Radius (R). There are three pre-defined
start/end modes, Dir, Random and RandomFlat. In the first, you can specify the directions using
the Dir editor, the Random one only allows you to specify only the radius of the sphere, and the
RandomFlat the radius of the circle.

The following pictures will explain a bit better the radius concept (Fig. 54).

151
Text List

This finishes the Text list explanation. Following is the complete editors list with a brief explanation
of what they do. Please check the text tutorials section in the Tutorials Manual to learn more about
this useful list.

TEXT_FONT Selector editor This editor allows to create a new Font for the
text or select an existing one.
TEXT_STRING Unicode editor Text string of the Text object. It can load or
save a text file and show it in two unicode
formats. It is located under the String tab.
TEXT_HOR_BLOCKJUSTIFY Option editor Allows to choose the kind of horizontal justify
of the text box, Left, Center or Right.
It is located under the Box tab. This tab is new
from version 9.

152
Text List

TEXT_VER_BLOCKJUSTIFY Option editor Allows to choose the kind of horizontal justify


of the text box, LineTop, LineBottom, BoxTop,
BoxCenter or BoxBottom. See the Text box
notions section in this list manual pages.
It is located under the Box tab.
TEXT_HOR_JUSTIFY Option editor Allows to choose the kind of horizontal justify
of the text, Left, Center or Right.
It is located under the Box tab.
TEXT_VER_JUSTIFY Option editor Allows to choose the kind of horizontal justify
of the text, Top, Center or Bottom, if Autogrow
is checked then this editor is disabled.
It is located under the Box tab.
TEXT_BLOCK_AUTOGROW Toggle editor Sets the text box size to be the same of that of
the text. If unchequed, the editors Over, Shrink
Limit and Narrow Limit appear.
It is located under the Box tab.
TEXT_BLOCK_VISIBLE Toggle editor Displays the Text box in the GFX Window.
It is located under the Box tab.
TEXT_BLOCK_OVER Integer editor When Autogrow is unchequed, this editor warns
us if the text does not fit inside the text box. If
the value is zero it fits, if it is one then it is out
of the box.
It is located under the Box tab.
TEXT_BLOCK_SIZE Integer editor Manually sets the text box size. It depends on
Autogrow.
It is located under the Box tab.
TEXT_BLOCK_HOTPOINT Float2 editor The Hotpoint is a text box reference point that
by default is fixed to the first line baseline. It
depends on the justify type.

For example we may want to create a text that


has to be always at the same distance of an
object, then the Hot point serves us as a
reference to know in every moment where
must be the text.

It is located under the Box tab.


TEXT_SHRINK_LIMIT Float editor Limit from where the text begins to reduce size
to fit in the box. Appears when you uncheck
the Autogrow toggle editor.
It is located under the Box tab.
TEXT_NARROW_LIMIT Float editor Limit from where the text begins to narrow to
fit in the box. Appears when you uncheck the
Autogrow toggle editor.
It is located under the Box tab.
TEXT_SIZE Float editor Size of the Text.
It is located under the Modes/Spacing tab.
TEXT_LEADING Float editor Separation between lines. Depends on
Autogrow.
It is located under the Modes/Spacing tab.
TEXT_TAB_SIZE Float editor This editor sets the tab size.
It is located under the Modes/Spacing tab.

153
Text List

TEXT_SNAPTO_UNITGRID Toggle editor Forces each character to start at the beginning


of a pixel and also makes that a font unit
equals a eStudio unit, this way if the font cell
size (the em) is 46, the character will have 46
eStudio units (huge!).

With this tool if we write a character with a size


of 46 in photoshop in a 720 x 576 canvas, we
can have exactly the same result pressing the
Pixel button in the Pipes list under the tab
Mouse\Camera Framing. Disables the Size
editor.

It is located under the Box tab.


TEXT_TRACKING Float editor Sets the separation between letters.
It is located under the Modes/Spacing tab.
TEXT_FIXED_SPACING Toggle editor Forces the separation between letters uniform
inside the box.
It is located under the Modes/Spacing tab.
TEXT_USEFONTKERNING Toggle editor There are 3 kerning types. One of them can be
defined inside the ttf file, the second, by means
of a user defined kerning table in the Fonts
list (Kerning Table) and the third using \k
control codes.

If this editor is untoggled, both the ttf file


kerning and the table one get disabled. This
speeds up text rendering as they require
calculus between each pair of letters each time
render is done. With \k we choose that kerning
and there is no need to recalculate anything.

It is located under the Modes/Spacing tab.


TEXT_COLOR_ENABLED Toggle editor Enables text color change. Displays
TEXT_COLOR editor.
It is located under the Modes/Color tab.
TEXT_COLOR Color editor Allows to change colors and alfa of the text.
It is located under the Modes/Color tab.
TEXT_PATH_TYPE Option editor Selects the path type for the text to follow,
Curve3D o Trajectory.
It is located under the Modes/Path tab.
TEXT_PATH_VIS Toggle editor Displays the boxes of each letter whith the
used path, Curve3D or Trajectory.
It is located under the Modes/Path tab.
TEXT_PATH_CURVE3D Curve selector editor Creates a new Curve3D or selects an existing
one.
It is located under the Modes/Path tab.
TEXT_PATH_TRAJ Trajectory selector editor Creates a new Trajectory or selects an existing
one.
It is located under the Modes/Path tab.
TEXT_PATH_ORIGIN Float editor Sets the origin of the text to the desired path
position.
It is located under the Modes/Path tab.

154
Text List

TEXT_PATH_RESOLUTION Float editor This modifies the resolution of the text box
made with the path, but not the Trayectory or
the Curve3D.
It is located under the Modes/Path tab.
TEXT_TRAVEL_MODE Option editor Selects the Traveller mode, Normal, Space or
Paragraph.
It is located under the Modes/Traveller tab.
TEXT_TRAVEL_LIMITS Option editor Selects how the text will start and finish the
travel with respect to the text box. Enable the
View Clip Area and be sure that you can see
the two boxes, the red one and the green one.
StartIn - EndIn
The text starts inside the red box and ends the
same way.
StartIn - EndOut
The text starts inside the red box and ends out
of the red box.
StartOut - EndIn
The text starts out of the red box and ends
inside it.
StartOut - EndOut
The text starts out of the red box and ends the
same way.
It is located under the Modes/Traveller tab.
TEXT_TRAVEL_SPEED Float editor Changes the speed of the travel.
It is located under the Modes/Traveller tab.
TEXT_TRAVEL_DURATION Float editor The time that cost to the travel to finish with
the used text.
It is located under the Modes/Traveller tab.
TEXT_WIN_VIS Toggle editor Visualizes the Clip Box Area. The red box is
where the text appears (the text box). The
green box is the lenght of the text.
It is located under the Modes/Traveller tab.
TEXT_TRAVEL_RUN Button editor Starts the travelling.
It is located under the Modes/Traveller tab.
TEXT_TRAVEL_TOSTART Button editor Sends the Travel to the start position.
It is located under the Modes/Traveller tab.
TEXT_TRAVEL_TOEND Button editor Sends the Travel to the end position.
It is located under the Modes/Traveller tab.
TEXT_SPACE_TRAVEL Float editor Changes the speed of the travel.
It is located under the Modes/Traveller tab.
TEXT_WINFADE_LABEL Label editor Just for layout purposes.
It is located under the Modes/Traveller tab.
TEXT_WINFADE_LEFT Float editor Fades text travelling at the left end of the box.
It is located under the Modes/Traveller tab.
TEXT_WINFADE_RIGHT Float editor Fades text travelling at the right end of the
box.
It is located under the Modes/Traveller tab.
TEXT_TRAVEL_LOOP Toggle editor Enables text travelling loop. Loops with the
same text or with the text in the Next String
editor.
It is located under the Modes/Traveller tab.

155
Text List

TEXT_STRING_NEXT_UPDATE Button editor When in loop mode, you can append the text
contained in the Next String text editor using
this button. After pressing it the loop is done
with the updated text.
It is located under the Modes/Traveller tab.
TEXT_STRING_NEXT_UPDATED Integer Alerts when the text is about to get updated.
editor You can bind this editor to do something or use
it from a python script.
It is located under the Modes/Traveller tab.
TEXT_STRING_NEXT Unicode editor The text that will replace the actual text string
when it finishes the travelling.
It is located under the Modes/Traveller tab.
TEXT_TRAVEL_LOOP_GAP Float editor It becomes the 'gap' between the actual string
and the updater string. Putting at least a value
of 1.0 in this editor allows for separation
between the two texts.
It is located under the Modes/Traveller tab.
TEXT_TRAVEL_PREEND_ALARM Integer This serves as an alert to know when the text is
editor going to finish the travel. You could create a
python script to check this value and do an
update with a new text.
It is located under the Modes/Traveller tab.
TEXT_PARAGS_DURATION Float editor In Paragraph mode, is the time needed to finish
the travelling. It depends on how much frames
are asigned to each paragraph.
It is located under the Modes/Traveller tab.
TEXT_PARAGS_TRAVEL Float editor This editor controls the travelling.
It is located under the Modes/Traveller tab.

TEXT_BULLETS String editor To add bullets before the text. In this editor
you can write the characters to use as bullets.
It is located under the Modes/Misc/Bullets
tab.
TEXT_BULLETFONT_ENABLED Toggle editor Enables font selection for bullets. There are
special fonts that contain special bullets
characters.
It is located under the Modes/Misc/Bullets
tab.
TEXT_BULLETFONT Font Selector editor Hidden if Bullet font Enabled is not checked. To
create a new bullet font or select an existing
one.
It is located under the Modes/Misc/Bullets
tab.
TEXT_BULLETCOLOR_ENABLED Toggle Enables color for bullets.
editor It is located under the Modes/Misc/Bullets
tab.
TEXT_BULLETCOLOR ColorWheel editor Hidden if Bullet color Enabled is not checked.
To change the bullet colors.
It is located under the Modes/Misc/Bullets
tab.
TEXT_BULLETFONT_ENABLED Toggle editor Enables choosing a font for the bullets.

156
Text List

TEXT_3DCURSOR Float editor Signals the current cursor position in the text.
To see it you can check the Visible editor in the
same tab.
It is located under the Modes/Misc/Selection
tab.
TEXT_3DSELECTION Float2 editor The selection of the text goes from x cursor
position to y cursor position.
It is located under the Modes/Misc/Selection
tab.
TEXT_3DVISIBLE Toggle editor Toggles cursor/selection visibility in the GFX
Window.
It is located under the Modes/Misc/Selection
tab.
TEXT_CTRL_INDENT_PLUS Button editor Adds an indentation to the text. Each time is
pressed adds a new indentation putting as
prefix what you have in the Bullets editor (If
any, if not just adds an indentation).
It is located under the Modes/Misc/Selection
tab.
TEXT_CTRL_INDENT_MINUS Button editor Removes an indentation of the text.
It is located under the Modes/Misc/Selection
tab.
TEXT_CTRL_KERNEL_PLUS Button editor Adds kerning between letters of the text. The
cursor must be between them.
It is located under the Modes/Misc/Selection
tab.
TEXT_CTRL_KERNEL_MINUS Button editor Adds kerning between letters of the text. The
cursor must be between them.
It is located under the Modes/Misc/Selection
tab.
TEXT_CTRL_BLINK Button editor Makes the text blink. It creates control codes.
See the Control codes section.
It is located under the Modes/Misc/Selection
tab.
TEXT_CTRL_UNDER Button editor Underlines the selected text. It creates control
codes. See the Control codes section.
It is located under the Modes/Misc/Selection
tab.
TEXT_DISPLAYLIST Toggle editor Converts the text to Display List format for
performance issues. See the Advanced text
editing section in this list.
It is located under the
Modes/Misc/Performance tab.
TEXT_FX_RUN Button editor Plays the effect assigned to the text. By default
there is an effect preassigned.
It is located under the Effects tab.
TEXT_FX_GOIN Button editor Plays the in effect assigned to the text. See the
Text effects section.
It is located under the Effects tab.

157
Text List

TEXT_CTRL_COLOR Button editor Changes color of the text. It creates control


codes. See the Control codes section.
It is located under the Modes/Misc/Selection
tab.
TEXT_FX_GOOUT Button editor Plays the out effect assigned to the text. See
the Text effects section.
It is located under the Effects tab.
TEXT_FX_TOSTART Button editor Puts the text effect in its start position. See the
Text effects section.
It is located under the Effects tab.
TEXT_FX_TOCENTER Button editor Puts the text effect in its center position. See
the Text effects section.
It is located under the Effects tab.
TEXT_FX_TOEND Button editor Puts the text effect in its end position. See the
Text effects section.
It is located under the Effects tab.
TEXT_FX_PRESETS_IN Cascade editor Selects an effect from different categories to
apply it to the text. There are 5 categories:

Scale: The parameters modified in this


category affect the scale of the text. Several
editors are modified but the overall visual
effect is a scale one.

Move: The effects in this category modify the


transform matrix, modes editors and the speed
curve.

Turn: The effects in this category modify the


transform matrix, modes editors and the speed
curve.

Kerning: The overall visual effect is a


separation between letters.

Translate: The effects in this category modify


the transform matrix, modes editors, the speed
curve and the path editors.

There is also a Create option to save a user


defined text effect as a preset. The name of the
text in the text list will be the name of the
saved preset.
It is located under the Effects/In Effect tab.
TEXT_FX_MIRROR Button editor If toggled on, the selected in effect is also
applied to the text out effect. If toggled off, a
new Out Effect tab appears allowing you to
select a different effect for the text when it
leaves the scene.

The editor internal names in the Out Effect tab


are the same as in the In Effect tab but
changing the IN suffix to OUT.
It is located under the Effects/In Effect tab.

158
Text List

TEXT_FX_PERLINE_IN Toggle editor If selected the effect is done on the whole line.
If not, character by character. For an example,
write a line of text and select the
Translate/Snake preset. Play it with and
without this toggle to understand the
difference.
It is located under the Effects/In
Effect/Modes tab.
TEXT_FX_DURATION_IN Float editor Time required to finish the effect. Not editable.
You can use it from scripts or maps.
It is located under the Effects/In
Effect/Modes tab.
TEXT_FX_CHARTIME_IN Float editor ndividual time required to draw the effect on
each character of the text.
It is located under the Effects/In
Effect/Modes tab.
TEXT_FX_OVERLAP_IN Float editor This editor controls when the effect starts for
each character. If set to 0 the effect in a
character doesn't start until the previous one
has finished. If is set to 1 the effect starst at
the same time in all the characters.
It is located under the Effects/In
Effect/Modes tab.
TEXT_FX_FADEMODE_IN Option editor When an effect plays, the text characters can
fade when doing the In/Out effect. With this
editor you can control the speed of this fading.
It is located under the Effects/In
Effect/Modes tab.
TEXT_FX_ORDER_IN Option editor The effect can start from different positions of
the text:

FromStart: Starts from the left of the text.

FromEnd: Starts from the right of the text.

FromCenter: Starts from the middle of the


text and extends to both sides, left and right.

ToCenter: Starts from left and right at the


same time and goes to the center of the text.

Random: The effect affects each character


randomly.

It is located under the Effects/In


Effect/Modes tab.

159
Text List

TEXT_FX_XFORMMODE_IN Option editor The Transform Matrix can be applied Globally


(Global) or at character level (PerChar). To
better see the diference go to the text object
Transformation tab in the Object list and set a
Displace of 4, 0, 0 and an Euler of 0, 0, 0.
Then, back in the Text list change the In Effect
Transform Matrix to an Euler of 0, 0, -30 and a
Displace of -1, 1, 3. Also in the Modes tab set
Fade Mode to Off.

Now press the ToStart button on top of the


Effects tab. If the PerChar mode is selected
every letter will be rotated -30 degrees, if it is
Global, it will be the full text box what will be
rotated -30 degrees. Play the effect now to see
how the text effect goes from that position to
the center (0, 0, 0) position.

This In/Out effect transformation is relative to


the actual position of the text.

In Global mode, a Kerning editor appears.


This editor is located under the Effects/In
Effect/Transformation tab.
TEXT_FX_KERNING_IN Float editor Changes the kerning (separation between
every two characters) in the text for the In
Effect. Only appears if in Global Mode.
The editor is located under the Effects/In
Effect/Transformation tab.
TEXT_FX_SCA_IN Float3 editor The Transform Scale Matrix. This
transformation matrix is relative to the actual
3D position of the text.
The editor is located under the Effects/In
Effect/Transformation tab.
TEXT_FX_HPR_IN Float3 editor The Transform Euler Matrix. This
transformation matrix is relative to the actual
3D position of the text.
The editor is located under the Effects/In
Effect/Transformation tab.
TEXT_FX_POS_IN Float3 editor The Transform Displace Matrix. This
transformation matrix is relative to the actual
3D position of the text.
The editor is located under the Effects/In
Effect/Transformation tab.
TEXT_FX_SPEEDCURVE_PRESTS_IN Option Selects one of the speed curve presets for the
editor effect. Check the Effects creation section to see
graphs of each option.

Linear: the text accelerates in linear mode.


This is represented by a straight line.

AccelDeccel: the text accelerates from stop


position, then it takes linear speed and at the
end deccelerates until stops.

Decay1: the text accelerates in an exponential


way and when it reaches the end it performs an

160
Text List

elastic rebound.

Decay2: the text accelerates taking some


anticipation and at the end does a rebound.

Decay3: the text starts and its acceleration


grows more and more until it does a rebound.

It is located under the Effects/In


Effect/Speed Curve tab.
TEXT_FX_DECAYSTART_IN Float editor Controls the moment when the rebound/spring
starts.
It is located under the Effects/In
Effect/Speed Curve tab.
TEXT_FX_DECAYAMP_IN Float editor Controls the rebound/spring amplitude.
It is located under the Effects/In
Effect/Speed Curve tab.
TEXT_FX_STARTSLOPE_IN Float editor Controls the slope of the curve. This allows for
anticipation.
It is located under the Effects/In
Effect/Speed Curve tab.
TEXT_FX_PATHMODE_START_IN Option The Path tab allows to change the position of
editor the text in the start effect and end effect
acording to a predefined path. You can alter
the direction as well as choose to play the
effect only in XZ plane. To see the effects we
recomended to toggle on the Visible toggle in
the Modes tab and set the Fade Mode editor in
the Effects/Modes tab to Off.

A curve is specified with 2 directions, for


start/end modes.

The TEXT_FX_PATHMODE_START_IN editor


allows to select a predefined path for the text
to follow.

Off: No path is used.

Dir: A direction is specified in spherical


coordinates, azimuth (h), elevation (p) and
radius (R).

Random: A random value is added to each


letter individually.

RandomFlat: A random value is added to each


letter individually but the effect is restricted to
the XZ plane.

It is located under the Effects/In Effect/Path


tab.
TEXT_FX_DIRSTART_IN Float3 editor Modifies the hpR for the Path start effect.
It is located under the Effects/In Effect/Path
tab.

161
Text List

TEXT_FX_PATHMODE_END_IN Option editor Allows to select a predefined path for the text
to follow.

Off: No path is used.

Dir: A direction is specified in spherical


coordinates, azimuth (h), elevation (p) and
radius (R).

Random: A random value is added to each


letter individually.

RandomFlat: A random value is added to each


letter individually but the effect is restricted to
the XZ plane.

It is located under the Effects/In Effect/Path


tab.
TEXT_FX_DIREND_IN Float3 editor Modifies the hpR for the Path end effect.
It is located under the Effects/In Effect/Path
tab.
TEXT_FX_COLOR_ENABLED_IN Toggle Allows for extra color blend. For example you
editor can create effects like the Matrix movie text
effect.
It is located under the Effects/In
Effect/Color tab.
TEXT_FX_COLOR_EVOLUTION_IN Float Selects the amount of color blending for the
editor effect.
It is located under the Effects/In
Effect/Color tab.
TEXT_FX_COLOR_IN Color editor Selects the blending color for the effect.
It is located under the Effects/In
Effect/Color tab.
TEXT_FX_PRESETS_REPLACE Cascade editor A replace effect can be used to change one text
to a different one. You can combine it with
other settings in the text list.
You can create a script to change between 2
different texts or use the Run button to
simulate the effect with just one text.

Selects a preset for text replacement.


Predefined options are GoDown, FastTurn,
SizeUp, RandomTurn, CubeTurn, FarWind,
HorizTurn, RandomWind, Wave.
It is located under the Effects/Replace tab.
TEXT_FX_REPLACE_ENABLE Toggle editor To toggle on/off the replacement. There is a
need for this editor because if the effect was
always enabled every change to the text would
fire the replacement.
It is located under the Effects/Replace tab.
TEXT_FX_REPLACE_RUN Button editor Plays the replace effect using the same test as
the replacement.
It is located under the Effects/Replace tab.

162
Text List

TEXT_FX_REPLACE_OVERLAP Float editor To set how much the replacement texts overlap
with each other.
It is located under the Effects/Replace tab.
TEXT_FX_REPLACE_DURATION Float editor This editor displays info about how much time
will take the replacement.
It is located under the Effects/Replace tab.
TEXT_FEEDER_MODE Option editor Selects the type of text feeding. It can be.

Off. The text is selected from the String text


editor.

Autoconsume. The text is selected from the


Feeder List and is deleted after is displayed.

Fixed. The text is selected from the Feeder List


and after using it is preserved.
TEXT_FEEDER_NUM_ITEMS Integer editor Informs about the number of items in the
Feeder List. It can be used for binding
purposes.
TEXT_FEEDER_APPEND_STRING String To add strings to the ticker.
editor
TEXT_FEEDER_NEXT Integer editor Shows the index of the next string that will be
displayed.
TEXT_FEEDER_LIST String editor Acts as an automatic feeding mechanism,
providing a easy way to define a secuence of
texts to show sequentially, and allows to edit,
add or remove strings while the ticker is
running.

163
Font List

Font List
Description
Editors

The Font List holds the configuration for text object fonts.
Fonts supported are .ttf, .otf. .pfa and .pfb. By default in the Irix and Linux platforms the font
library is located in the system directory /usr/lib/X11/fonts/Type1 and have the .pfa extension.

Graphical full font view


It is possible to view a 2D representation of the full content of the font, and the current selected
chars to check if all the needed characters are present and loaded.

Font Presets
Capability to store your own font list configurations in ready to use presets.

3D shadow
It is possible to add a 3D shadow to a font, allowing for total control over its properties, position,
contrast and also color (this allows for emulating glows).

167
Font List

It is called 3D shadow because it is an independent 3D object from the letters compared to


textured fonts that contain the shadow in the same text texture.

Mipmaps
It is possible to use mipmaps in fonts, and also apply a bias to the mipmap. With this you can
emulate out of focus fonts.

CellCrop feature
Usually the emSize of a font is fixed by the biggest character existing in the font. Sometimes the
biggest characters are not used in your texts. In this situation, it is possible to improve the quality
of the font increasing its emSize. This is done cropping the unused area manually or by means of an
'Autocrop' utility. It is possible to check the effect of the crop in the graphical font view.

Font resolution
When the font is being generated curves are converted to segments. A font parameter allows to
control the amount and length of them. Keep in mind that text object geometry, apart from
Textured fonts, can have a complex geometry and may use a lot of processing power to render.

In the following picture, the top text has a font resolution of 1 and the bottom one has a resolution
of 0.

Font texture filtering


For those fonts using textures the filtering technique can be specified. See the texture List for a
description of the filters.

Font kerning table


Some font files have inside them a kerning table. In this table there is information about what is the
correct distance between every pair of chars. eStudio detects when a font file has this feature and
uses it. If the file has no kerning table it is possible to deifne one manualy.

168
Font List

Font types
Several font appearance types are available, Textured, Outlined, Filled and Extruded. The most
used is Textured because it draws faster and provides a lot of practical controls about its shape. The
most sophisticated is Extruded, allowing you to create totally 3D shaped chars, with lots of control
over its material, shininess, reflections, etc.

Textured fonts are bitmaps used as a textures when drawing the text. Thus, text letters are
made of simple planar rectangular polygons the size of the letter and with the appropriate texture
coordinates.

In machines with hardware texturing support, texts using Textured fonts are the fastest way to
draw text objects. The limitation is that if the text object is going to appear very close to the
camera it may be noticed the lack of resolution of the texture, anyway, the texture resolution can
also be selected from several options.

For textured fonts the texture of the font material is not honored because the internal
generated texture has to be used instead.

Textured font features


Cellsize control (from 8 to 256). This is the size in pixels of the square where the character is
drawn. Several labels provide information about the emSize of the char. The cellsize is bigger
because we need space to draw the shadows, borders, antialias area and also the texture memory
needed to store the full font.

Several options allow to define and control, body, emboss, border and shadow properties. With
this features is possible to define high quality fonts with an optimum performance.

Preview feature. If the Textured font has a big CellSize, and also shadow, emboss, etc, it will need
several seconds to regenerate each time a parameter is modified (only while regeneration, after
that, the performance is the same). To make more confortable the definition of this kind of font,
there is a preview option where a window shows a character. This way it is possible to check the
look of the font without the need to regenerate all the font. The changes are applied to the font
when this window is closed. Typing over the Preview window is possible to change the sample
char.

169
Font List

Outlined fonts are wire frame representations of the letters. In this kind of fonts (and also in the
outlined and extruded) it is possible to control the resolution of the shape (this affects the render
speed) and to assign it a material. The capability of asigning a eStudio material to a font is a very
powerful feature because the properties of materials are also very powerful and flexible.

Filled fonts represent letters by triangular meshes of polygons.

Extruded fonts are made by extruding the Filled fonts. Both, the front and lateral sides of the
letters can be specified diferent materials. It is possible to define the extrusion shape by means of
a curve.

A control over the smoothness allows to select when a corner must be represented as soft or as a
sharp corner.

170
Font List

Back Side enabling flag.

Separate materials can be applied to the front and the sides.

The extrusion is defined using Curves3D. A threshold value specifies if the tangent is continuous
between extrusion levels.

Char Table
Fonts usually have a big set of letters, usually you use a few of them in your texts. Loading them
and converting to the different font types can be overwhelming for the system, it may affect
realtime performance. To avoid this only a subset of them is loaded when you create a new font.

Char tables are used to improve memory management and speed in font regeneration. They can be
Ascii, Latin1, All, or also Master String to specify the characters needed, and Autoload for
analisis of the used text and automatic regeneration of the font. When the font char table is in
Autoload or MasterString, two new toggles are available, All Ascii and All Latin1, making easier the
selection/deselection of this sets of characters.

The default mode is Ascii. This mode loads the most used characters in many languages.

171
Font List

To load all the available characters in a font you can set this mode editor to All. We say available
because sometimes the font files have less characters defined in it that what the font says when
the program loads this font. For these reason sometimes you will put this mode and see that not all
the characters could be loaded.

Latin-1 mode contains the most used characters that european people use. This set contains
letters for spanish language and german language among others.

MasterString allows you to enter aditional characters via ascii or unicode tags. For example for
ascii characters \xxx where x are decimal numbers or for unicode characters \u XXXX where X
are hexadecimal numbers.

Autoload allows you to enter text directly in the text string editor. If the character is not loaded,
this mode loads it. This mode can be dangerous for realtime performance considerations because
the simulation can suffer if there are toomuch characters to be readed and converted.

FONT_FILE File editor Selects the .ttf, .otf. .pfa or .pfb font type.
FONT_FRONT_MAT Selector editor Selects the material for the front side of the
font.
FONT_CURVE_RESOLUTION Float editor Controls the segmentation resolution of the
curve to segments transformation that
happens when the font is generated.
FONT_TEXTUREDSHADOW_BLUR Option editor Selects the degree of blurring applied to the
shadow.
FONT_TEXTUREDSHADOW_OFFSET_X Float Sets the horizontal displacement offset of
editor the shadow from the letter.
FONT_TEXTUREDSHADOW_OFFSET_Y Float Sets the vertical displacement offset of the
editor shadow from the letter.
FONT_EXTRUDED_BACK_SIDE Toggle editor Specifies if the extruded font should
generate also the back side of the text.
FONT_EXTRUDED_SMOOTH_THRESHOLD Float Sets the angle limit for the tangent to be
editor continuous between bevel levels.
FONT_EXTRUDED_MAT Selector editor Selects the material used for the extrusion
bevel.

172
Font List

FONT_EXTRUDED_SHAPE_SETTO Optionmenu Sets the shape of the extrusion bevel.


editor
FONT_3DSHADOW_ENABLED Toggle editor Enables or Disables the generation of a 3D
shadow.
FONT_3DSHADOW_BLUR Option editor Selects the degree of blurring applied to the
shadow.
FONT_3DSHADOW_CONTRAST Float editor Sets the contrast of the generated shadow.
FONT_3DSHADOW_OFFSET_X Float editor Sets the horizontal displacement offset of
the shadow.
FONT_3DSHADOW_OFFSET_Y Float editor Sets the vertical displacement offset of the
shadow.
FONT_3DSHADOW_OFFSET_Z Float editor Sets the distance from the text to the
shadow.
FONT_FILTER_MIPMAP Toggle editor Selects if mipmap should be generated for
the texture.
FONT_FILTER_MIN Option editor Selects the minimization filtering mode.
FONT_FILTER_MAG Option editor Selects the magnification filtering mode.
FONT_CHARTABLE Option editor Selects the char sets to load. It can be: All,
Ascii, Latin-1, MasterString and
Autoload. See above for an explanation on
this options.
FONT_SHOW Toggle editor Displays a window with all the characters in
the font.
FONT_CHAR_CELLSIZE Integer editor The characters are drawn in a box (a cell),
and this editor controls the size of this cell.
The bigger the cell, the better the quality of
the text.
FONT_3DSHADOW_CELLSIZE Float editor The cell size of the text shadow.
FONT_3DSHADOW_COLOR Color editor To change the shadow color.
FONT_EXTRUDED_SHAPE Table editor The data for the extrusion of the text shape.
FONT_CODESSTRING String editor To enter aditional characters via ascii or
unicode tags.
FONT_ALLASCII Toggle editor Sets the Ascii char table.
FONT_ALLLATIN1 Toggle editor Sets the Latin-1 char table.
FONT_NCHARS_LABEL Label editor Displays information about the number of
characters that are loaded from the font.
Selecting an option from the Char Table
editor and pressing the Show toggle
displays a char table window with all the
characters available. The characters loaded
are surrounded by a blue box.
FONT_TYPE Option editor To select the font type between Textured,
Outline, Filled and Extruded.
FONT_PRESETS Cascade editor Allows to select predefined font
configuration presets and also storeuser
defined ones.

173
Font List

FONT_TEXTURED_PREVIEW Toggle editor Opens a window where you can see the
changes you make to a textured font
without generating the changes for all the
characters used.
FONT_TEXTURED_BODY_LUMINANCE Float Changes the luminance of the body of the
editor font.
FONT_TEXTURED_BODY_ALPHA Float editor Changes transparency of the body of the
font.
FONT_TEXTURED_EMBOSS_ENABLE Toggle Enables the emboss property of textured
editor texts.
FONT_TEXTURED_EMBOSS_ANGLE Integer This editor controls the angle needed to
editor create the emboss.
FONT_TEXTURED_EMBOSS_SIZE Integer editor The size of the emboss effect.
FONT_TEXTURED_EMBOSS_SOFTEN Integer This editor softens the emboss effects to
editor make it subtle.
FONT_TEXTURED_EMBOSS_HLALPHA Float Highlights the alpha component of the
editor emboss effect.
FONT_TEXTURED_EMBOSS_SHALPHA Float Controls the shadow component of the
editor emboss effect.
FONT_TEXTURED_BORDER_ENABLE Toggle Enables the border property of textured
editor texts.
FONT_TEXTURED_BORDER_SIZE Integer editor Changes the size of the border of the font.
FONT_TEXTURED_BORDER_LUMINANCE Float Changes the luminance of the border of the
editor font.
FONT_TEXTURED_BORDER_ALPHA Float editor Changes transparency of the border of the
font.
FONT_TEXTURED_SHADOW_ENABLE Toggle Enables the shadow property of textured
editor texts.
FONT_TEXTURED_SHADOW_BLUR Option Blurs the shadow effect. You can choose
editor between several blur options, from more
blurred to more sharpened.
FONT_TEXTURED_SHADOW_OFFSETX Float Displaces the shadow effect in x.
editor
FONT_TEXTURED_SHADOW_OFFSETY Float Displaces the shadow effect in y.
editor
FONT_TEXTURED_SHADOW_ALPHA Float Controls the transparency of the shadow
editor effect.
FONT_MIPMAP Option editor Allows to select a mipmap mode for fonts
filtering. Options are MipMapOff,
MipMapAuto and MipMapSelect.
FONT_MIPMAP_BIAS Float editor Allows to select a Bias for the font.
FONT_CELLCROP Float editor Usually the emSize of a font is fixed by the
biggest character existing in the font.
Sometimes the biggest characters are not
used in your texts. In this situation, it is
possible to improve the quality of the font
increasing its emSize. It is possible to check
the effect of the crop in the graphical font
view.

174
Font List

FONT_CELLCROP_AUTO Button editor Autocrops the characters.


FONT_KERNTABLE_STR String editor Allows to specify a kerning table or load and
save a table.
FONT_KERNTABLE_PRINT Button editor Prints the kerning table in the command
window. If the font does not contain one it
prints the following message: Printing font
kerning pairs (0).
FONT_SHAPE_PRESETS Cascade editor Choose between different bevel profiles for
the extrusion.
FONT_EXTRUDED_PATH Curve3D selector Selects a curve3D to make the extrusion.
editor

175
Model Lists
Fontfix List
Fontfix List

Fontfix List
Description
Editors

Fontfix allows to redefine font characters to user image files. This technique allows to mix text and
pictures easily without the need of generating different objects for each one. It is very useful for
tickers.

The user specifies the following parameters:

The character going to be redefined.

The image file that replaces the character.

The font where the modification will take place.

The relative size of the character.

The relative position of the character hot point.

The offset from the character hot point to the next character hot point.

FONTFIX_CODE String editor Specifies the character that is redefined. The


character can be given either as the
character itself or as an ASCII value by
preceding it with a backslash.
FONTFIX_FILE File editor Selects the image file that redefines the
character.
FONTFIX_FONT Selector editor Selects the font where to apply the
modification.

179
Fontfix List

FONTFIX_SIZE Float2 editor Specifies the size of the character. A one by


one size means the standard font character
size.
FONTFIX_HOT Float2 editor Specifies the coordinates of the character hot
point measured from the bottom left corner.
FONTFIX_OFFSET_NEXT Float2 editor Specifies the distance from the character hot
point to the next character hot point.
FONTFIX_PIVOT Selector editor Specifies a pivot to modify or animate the
sustitution.
FONTFIX_TYPE Option editor Selects a 2D Image or a 3D Geometry.
FONTFIX_3DGEO Selector editor Selects the geometry to use.
FONTFIX_3DGEO_SIZE Float editor Selects the size of the geometry object.
FONTFIX_3DOBJ Selector editor Selects an object to use.

180
Particle List

Particle List
Description
Editors

Particles implement the dynamic movement of physical points interacting with external forces. This
capability as well as the capability to generate on the fly another children particles, make them
suitable to simulate a variety of natural phenomena.

Particles are rendered by rendering small and simple objects in every particle position.

Particles have a lot of parameters that configure their behaviour. Different approaches can be used
to manage all these parameters:

Set and use one of the default configurations.

Set one of the default configurations as a starting point from where to generate another
configurations.

Start from scratch and generate a new particles configuration.

The particles calculation always start from a single original particle. The particle List menu can
be thought as the menu for the configuration of this single particle. The following parameters

183
Particle List

configure it:

The Position, Direction and Speed for the instant when the particle is born.

The Type of the particle (See the particles type List).

The flows that will affect this particle and all its descendants (See the flows List).

The regions that will constraint this particle and all its descendants (See the regions List).

The material that will be used for this particle and all its descendants (See the material
List). (The colors of the particles ares specified with independence of this material color).

The sound that will be played when this particle is fired (See the sounds List).

The alpha Limit distance from where every particle further will be rendered with no Alpha
channel and closer with Alpha channel.

The frameRate optional value to force the particles time evaluation increment to be taken
from the real time clock and not the frame rate of the simulation.

Additionally, a Fire Object can be specified, meaning that one particle should be fired and
attached from vertices of the geometry of the object.

PARTICLE_FIRE Button editor Starts the life of the particle.


PARTICLE_RESET Button editor Stops the life of the particle and all its
descendants and stops any particles playing
sound.
PARTICLE_KILL Button editor Stops the life of the particle but not of its
descendants.
PARTICLE_DEFAULT Option editor Sets a default particle configuration.
PARTICLE_POSITION Float3 editor Sets the original position of the particle.
PARTICLE_DIRECTION Float3 editor Sets the original direction of the particle.
PARTICLE_SPEED Float editor Sets the original speed of the particle.
PARTI_SPRITE Toggle editor Specifies if every particle geometry when is
being rendered should face the point of view
as a billboard.
PARTI_TPARTI Selector editor Selects the particle type.
PARTI_FLOWS LSelector editor Selects the flows that will affect the particle
and descendants.
PARTI_REGIONS LSelector editor Selects the regions that will affect the
particle and descendants.
PARTI_MAT Selector editor Selects the material that will affect the
particle and descendants.
PARTI_SOUND Selector editor Selects the sound to play when firing the
particle.

184
Particle List

PARTICLE_OBJ_SKIP Integer editor Selects a value to use as a divisor when using


the vertices of the fire object.
PARTI_OBJ_FIRE Selector editor Selects the object from which to use the
vertex as positions from where to launch
particles.
PARTICLE_PRELIFE_CONNECT Toggle editor Connects the particles in the simulation.
PARTICLE_ALPHA_DISTANCE Float editor If different than zero specifies a value at which
particles closer than it should render Alpha
and particles farther than that should not.
PARTICLE_SCALE Float editor Allows to scale the whole particle, preserving
its position.
PARTICLE_MATRIX Matrix editor Holds the transformation of the Particle. This
editor can be used for binding purposes.

185
Particle Type List

Particle Type list


Description
Editors

A particle system is always generated starting from a single original particle which is capable of
generating another particles. The sequence of creation can be seen in the next picture.

According to this, particles properties can be divided into three groups:

Properties of the first generated particle such as position, direction, etc.

Properties which are common to all the particles that are generated from the first one such as
flows, constraints, etc.

Properties which are specific to every single generated particle (included the first one).

The first and the second group of properties are listed in the particles List, which can be thought
as the menu for original particles.

189
Particle Type List

The third group of properties are specific particles properties and are listed in the Particle Types
list.

Particle types define the life time behaviour of properties such as size, color, how many particles
per frame the particle generates, etc.

Particle types properties are classified in the following groups:

Every particle has a position, direction and speed that determine its location in space. These
parameters are set when the particle is born and depend on the parent parameters. Usually they
are then updated every frame by applying simple dynamic equations, but they can be forced to
remain static (plus a random factor).

For example, a fountain needs to have its original particle attached if we do not want it to change
location.

Either or both the Position or Direction can be attached.

Evolution parameters govern the changes that affect the particle from frame to frame.

Gravity XYZ editor sets the gravity acceleration. By default it's set to (0, 0, -9,8) to simulate the
gravitational acceleration of the earth. The Gravity Ran is a random value that is added to the
gravity value.

Time End. This is the particle's life.

Random. This is a random value to avoid having the same life in every particle.

Time Fade In. This value is applied to every particle to soften the appearance.

190
Particle Type List

Time Fade Out. This value is applied to every particle to soften the disappearance.

Friction. To decrease the particle's speed due to friction. Zero means no friction.

Viscosity. Another way to control the speed of the particle.

Size. This parameter changes the scale of the particle.

Stretch. A scale in the direction of movement.

Flare power. Controls the speed of the blending of the particle from the center to the
borders.

Flare. This changes the way a particle is rendered, making it transparent at the outside.

Flare Additive. Adds the color of the background to the particle flare color.

Color. Here you can make a gradient of colors to render the particle along his life.

Generation properties control how and how many children particles are generated by the particle.

Density. Sets the amount of particles per frame the particle generates.

Speed. The speed of the parent particle is multiplied by this value.

Speed Random. A random value added to the previous speed value.

Spread. A volume is provided to occupy a random position around the parent.

Particle Type. Selects the particle type for the generated particles.

The Prelife tab allows the user to generate effects like rays, rendering in one frame the number of
particles specified by Steps. It does it by precalculating the 'step' next particles to the one being
rendered.

In the following figure you can see what will be rendered in the first three frames, with a step of
five. In the first frame the first five particles will be rendered, then in the next frame particles
from second to six and so on.

191
Particle Type List

Life is the life time and the Random it's a random value added to the life parameter.

This option is provided to allow particles to explode. Exploding consists of instantaneously


generating a number of particles.

Time Margin. Time in seconds to explode before death.

Particles. The number of particles to generate in the explosion.

Speed. Speed for the generated particles.

Speed Random. This value is added to the previous speed value.

Particle Type. The particle type of the particles generated in the explosion.

Explosion object. The particles explode with the shape of this object.

Sound. The sound of the particles.

Geometry is used to calculate the interaction of 3D shapes with particles.

Objects

192
Particle Type List

Molecules

Vertices

TPARTI_FREEZE Option editor Selects the attach type of the particle:


None. None is attached.
Pos. Position is attached.
Dir. Direction is attached.
Pos&Dir. Both the Position and the
Direction are attached.
TPARTI_ATTACH_PTORAN Float3 editor Random value added to the attached Position.
TPARTI_ATTACH_DIRRAN Float3 editor Random value added to the attached Direction.
TPARTI_ATTACH_SPEEDRAN Float editor Random value added to the attached Direction
speed.
TPARTI_GRAVITY Float3 editor This is an external acceleration that is always
applied to the particle. The default value is
(0,0,-9.8) to simulate the gravitational
acceleration of the Earth, but the strength and
direction of this force can be set to other values
to achieve different effects.

193
Particle Type List

TPARTI_GRAVITY_RAN Float3 editor A random value added to the TPARTI_GRAVITY


value.
TPARTI_TFINAL Float editor This is the amount of seconds that the particle
will live from the moment it is born.
TPARTI_TFINALRAN Float editor A random value added to the TPARTI_FINAL
value when the particle is born to avoid
having every generated particle living exactly
the same amount of time.
TPARTI_TFADEIN Float editor An scale from zero to one can be applied to the
particle after birth to soften the appearance.
The editor sets the time in seconds the
transition takes.
TPARTI_TFADEOUT Float editor An scale from one to zero can be applied to the
particle before death to soften the
disappearance. The editor sets the time in
seconds the transition takes.
TPARTI_KFRICTION Float editor An object moving in a flow decreases its
speed due to friction. The amount of speed that
the object decreases is exponential to its
actual speed. To control this effect the Friction
parameter is provided so that a value of zero
means no friction (the decreasing factor equals
exp(-speed * Friction)).
TPARTI_VISCOSITY Float editor Viscosity provides another way to control the
reduction of speed of the particle, in this case
the amount decreased equals the actual speed
multiplied by the Viscosity parameter. A
Viscosity of zero disables the effect.
TPARTI_SIZE Float editor Particles are rendered by rendering a simple
object in the actual location of the particle.
This parameter controls the scale that is
applied to the object before rendering.
TPARTI_STRETCH Float editor A scale can be applied to the particle in the
direction of movement. The Stretch value is
multiplied by the actual speed to obtain the
scale factor. For example, this is useful
simulate rain drops.
TPARTI_FLARE_POWER Float editor The Flare Power is an exponential parameter
that controls how fast the blending occurs from
the center to the borders of the circle of the
flare.
TPARTI_FLARE Toggle editor Usually a small circle is used as the rendering
object for particles and the circle is filled with
a flat color. In Flare mode the circle is
rendered as a flare, being transparent in the
outside and opaque in the center.
TPARTI_COLOR Gradient editor Selects the list of colors that the particle is
being rendered during his life.
TPARTI_PRELIFE_STEPS Integer editor Brainstorm eStudio renders in one frame the
following number of particles to the calculated
one especified by step.

194
Particle Type List

TPARTI_PRELIFE_LIFE Float editor Selects the amount of time it will last the
render of the particles.
TPARTI_PRELIFE_LIFERAN Float editor Adds a random value to TPARTI_PRELIFE_LIFE.
TPARTI_NGENERA Integer editor Sets the amount of particles per frame the
particle generates.
TPARTI_KSVEL Float editor When new particles are generated they inherit
the position, direction and speed of the parent
at the birth instant. However, the child birth
velocity is modified to be this Speed value
multiplied by the velocity of the parent.
TPARTI_VELMARGIN Float editor A Random value to be added every frame to
the TPARTI_KSVEL parameter.
TPARTI_SPREAD_MODE Float editor The generated particles inherit the position of
the parent. However, the child birth position
can be modified to occupy a random position
inside a volume around the parent. The
following surrounding volumes are provided:
Point
New particles are generated in the current
position of the parent.
Sphere
New particles are generated in a sphere
around the current position of the parent.
Cylinder
New particles are generated in a cylinder
around the current position of the parent.
Box
New particles are generated in a box
around the current position of the parent.
TPARTI_SPREAD_RADIUS Float editor The radius of the sphere when the editor
TPARTI_SPREAD_MODE is in Sphere mode.
TPARTI_SPREAD_CYL_AXIS Option editor The axis of the cylinder when the editor
TPARTI_SPREAD_MODE is in Cylinder mode.
TPARTI_SPREAD_CYL_LEN Float editor The length of the cylinder when the editor
TPARTI_SPREAD_MODE is in Cylinder mode.
TPARTI_SPREAD_CYL_RAD Float editor The radius of the cylinder when the editor
TPARTI_SPREAD_MODE is in Cylinder mode.
TPARTI_SPREAD_BOX Float3 editor The dimensions of the box when the editor
TPARTI_SPREAD_MODE is in Box mode.
TPARTI_GEN_TYPE Selector editor Selects the particle type for the generated
particles. The program does not check for
recursivity because it may be a useful option,
so, care should be taken not to generate
unwanted recursivities.
TPARTI_TEXPLOSION Float editor Sets the time in seconds before the death of
the particle when it has to explode.
TPARTI_NBALLS Integer editor Sets the number of particles that have to be
generated on explosion.

195
Particle Type List

TPARTI_BALLS_VELINI Float editor The particles generated on explosions inherit


the position, direction and speed of the parent
at the birth instant. But in this case a random
velocity of length Speed is added to the
particle birth velocity.
TPARTI_BALLS_VELRAN Float editor Random value to be added to the editor
TPARTI_BALLS_VELINI.
TPARTI_EXP_TYPE Selector editor Selects the particle type for the generated
particles on explosion.
TPARTI_EXP_OBJ Selector editor If an object is selected, as many particles as
vertices are in the object are generated on
explosion.
The coordinates of each vertex are added to
the initial velocity of the corresponding
generated particle. This option is useful to
have an explosion having the shape of a 3D
object.
TPARTI_SOUND Selector editor The sound to be played on explosion.
TPARTI_GEOLIST_OBJS Selector editor Selects an object.
TPARTI_MOLECULES Selector editor Selects the molecules to be used by the
particle.
A molecule is a list of atoms, and each atom
is a collection of physical properties attached to
a point.
When a list of molecules is specified every
generated particle randomly picks up one of
the molecules to govern its movement due to
the interaction with external forces (usually
flows and constraints).
The location, orientation and physical
properties of the atoms inside the molecule
are used to calculate the resulting force of the
external forces on the molecule.
In the current version of eStudio molecules
are only used from the particles type menu (a
sample can be found in the default
configuration of rain or snow), but this
organization will allow in future releases of
eStudio to specify through them the dynamic
properties of objects.
TPARTI_GEO_VERTICES Integer editor Sets the amount of vertices of the polygon
used to render the particle.
TPARTI_FLARE_ADD Toggle editor Adds the background color to the color of the
flare of the particle.
TPARTI_PRELIFE_STEP_LEN Float editor Lenght of the step.

196
Photo List

Photo List
Description
Editors

Photos are dynamically generated objects. When you have a complex scene, and you go realtime,
the performance can suffer from this. Photos allow to substitute the scene with a Skybox. The
skybox is a cube with textures mapped onto the faces of the cube. This textures are created by
the photo list from the original scene. When the photo is 'taken' the original scene is culled and the
photo replaces it. You can even delete the scene geometry if you want.

When a photo is taken, the cube is positioned and the textures are created so that it corresponds
exactly to the perspective of the selected scene as it is seen from the point of view. Simultaneously
the scene is culled.

Visually nothing seems to have changed in the GFX Window.

199
Photo List

The Texture Resolution option editor allows you to select between different resolutions for the
generated textures. Depending on your graphics hardware the process will be faster, slower or
impossible.

For each face of the cube you can make eStudio divide the face in fragments. Each fragment's size
will be of the selected resolution. If you select 16 fragments and set a Texture Resolution of
1024, you will have the texture of that face divided in 16 fragments of 1024 each.

Some graphics cards don't allow for antialiasing but the photo list can generate software antialias.
The photo list also allow you to choose between different samples.

The skybox cube can use from 1 to 6 faces of the cube. If you are sure that the camera isn't going
to pan or tilt in some direction then you can use only the number of faces that suit your needs.

When the photo is done, all objects included in it update the list of objects inside the Source
Objects editor inside the Objects tab. You can remove objects from here to make them remain 3D
or you can put here the objects that you want to be in the photo before making it.

The Textures tab holds the information for the generated textures. If you create textures in this
tab before creating the photo, they will be overwritten by the photo list. If you have pregenerated
textures from another program you can generate the photo and then edit the generated textures
and change it to your textures.

The Camera Data tab holds the camera Point of View and Orientation info, so if you save the
database, this info is also saved.

PHOTO_TOGGLE Toggle editor Creates the photo and culls the scene at the
same time.
PHOTO_RES Option editor Changes the resolution of the generated
textures. This resolution can be from 256 to
4096 pixels but this selection depends on the
cappabilities of your graphic card.
PHOTO_AASAMPLES Option editor Selects the number of samples for software
antialiasing. When drawing objects, lines go
through pixels creating discontinuities in the
render. This is the effect commonly known as
aliasing. The result is a jagged effect in the
objects drawn. What this editor does is test a
number of points inside a pixel (with some
math functions) and coloring that pixel
depending on the colors near it.
PHOTO_FRONT_FACES Option editor Sets the number of fragments to divide the
front face of the skybox to use.
PHOTO_CELL_FACES Toggle editor Sets the number of fragments to divide the top
face of the skybox to use.
PHOTO_DIST Float editor By default the camera position is the origin for
the generated cube. This is the distance from
there to the faces of the cube.

200
Photo List

PHOTO_PV Float3 editor The Point of View for the camera. This editors
will be filled with data when the photo is
generated.
PHOTO_HPR Float3 editor The Orientation of the camera. This editors
will be filled with data when the photo is
generated.
PHOTO_OBJS Selector editor List of objects included in the photo.
PHOTO_TEXTURES Texture selector editor The textures generated by the photo for the
skybox cube faces.
PHOTO_ALPHA Toggle editor Captures also the alpha channel in the
textures.
PHOTO_BACK_FACES Option editor Sets the number of fragments to divide the
back face of the skybox to use.
PHOTO_LEFT_FACES Option editor Sets the number of fragments to divide the left
face of the skybox to use.
PHOTO_RIGHT_FACES Option editor Sets the number of fragments to divide the
right face of the skybox to use.
PHOTO_FLOOR_FACES Option editor Sets the number of fragments to divide the
bottom face of the skybox to use.
PHOTO_SAVETEXTURES Button editor Saves the textures as rgb files in a temp
folder.
PHOTO_PV Float3 editor The Point of View of the camera when the
photo was done.
PHOTO_HPR Float3 editor The Orientation of the camera when the photo
was done.
PHOTO_OBJS Selector editor Selects the objects to appear in the photo. Only
root objects can be selected. The first time the
photo is created all the objects in the scene are
selected.

201
Drawing List

Drawing List
Description
Editors

Drawings are a type of objects that are dynamically generated by following the movement of a
pointer in 3D space.

This capability allows the user to have people drawing in 3D in a virtual set by moving the pointer in
3D space or in a 2D tablet.

It also allows to create dynamically flexible tubes by having the pointer travelling along the path of
a trajectory.

Drawings have two parameters:

The pencil to be used for drawing (See the pencil List).

The pivot pointer where to attach the pencil.

The Pointer Pivot will probably be binded later to the position of a 3D tracking sensor or a 2D
tablet or mouse.

The whole drawn object can be cleared at any moment.

Drawing can be turned ON and OFF. When drawing is turned OFF it is possible to move the
Pointer Pivot without drawing. When drawing is turned ON it starts drawing again from the actual
position. It is usefull to bind this mode to a mouse or stylus button so that drawing is only active
when the button is pressed.

205
Drawing List

DRAWING_PENCIL Selector editor Selects the pencil to be used for drawing.


DRAWING_PIVOT Selector editor Selects the pivot to use as a pointer.
PENCIL_ACTIVE_ON Button editor Activates drawing.
PENCIL_ACTIVE_OFF Button editor Deactivates drawing.
PENCIL_ACTIVE Toggle editor Enables or disables drawing
DRAWING_CLEAR Button editor Clears the generated object.
DRAWING_FSTART Float editor Start point of the drawing.
DRAWING_FEND Float editor End point of the drawing.
DRAWING_CLOSE Toggle editor It closes the object joining the initial and final
points.
DRAWING_FILL Toggle editor It creates a surface filling the inside of the
object.
DRAWING_SMOOTH Toggle editor The drawing is rendered with a uniform
shading.
DRAWING_FSTART Float editor The starting point of the drawing.
DRAWING_FEND Float editor The end point of the drawing.
DRAWING_FRAC_RUN Button editor Draws the object sequentially.
DRAWING_FRAC_RUNREV Button editor Draws the object sequentially from the end
point to the start one.
DRAWING_FRAC_RUNFWD Button editor Draws the object sequentially from the start
point to the end one.
DRAWING_FRAC_TOEND Button editor Draws the complete object by reaching the
end position.
DRAWING_FRAC_TOSTART Button editor Puts the pointer in the starting position.
DRAWING_FRAC_INC Float editor Increment of points in the animation.
DRAWING_HISTORY Table editor All the points that make the trajectory.
DRAWING_MATFILL Material selector editor Selects the material to use in the fill.
DRAWING_MAX_SEGMENTS Toggle editor Defines the maximum number of segments to
be drawn. After the limit is reached, the
drawing erases from the starting point forward.

206
Pipe List

Pipe List
Description
Editors

Some machines allow for several pipes configuration. Each pipe can be though as an independient
graphic computer in the same machine.

We assume that each pipe is rendering only one simulation. That is, each pipe is rendering in real
time the 3D data according to the actual position of one of the cameras. This way, if you own a two
pipes machine you can have two camera simulations being rendered in parallel.

The result is the same as if you own two independient computers, any way, it is possible for a mono
pipe machine to have several real cameras connected to it and select anyone of them at any
moment emulating a several pipes system.

209
Pipe List

The pipes List has been designed to allow for this kind of configuration.

Each pipe references a camera:

A camera is the mathematical description of the real camera from where to calculate the
simulation. (See the camera List) Each camera can be associated to a robotic system.

This allows to switch in real time the camera being used by the pipe.

Another problems arise relative to the instantaneous and synchronized change of the connections of
the video equipment. Dynamic Libraries are used to control the external equipment and the
rendering delay have to be considered in the switching commanding routines.

In the modes tab you can change several parameters related to the pipe window. In the Type
option editor (PIPE_TYPE) you can choose between Perspective and Orthogonal to change the
view.

The Mouse Action option editor allows you to change the perspective parameters changing the
mouse mode.

Also you can set a number of toggle editors to enable/disable the pipe, hide/show it, show the
alpha channel, the depth channel, and see a reference grid in overlay mode.

With the Title editor you can also change the text in the top bar of the pipe window.

In this tab you can change the position and size of the pipe window. Also you can put the pipe in
a folder and set other parameters like choose the default Video Size or Full Screen mode.

When a pipe is created, a camera and a scene is attached to it. In the PIPE_SCENE LSelector
editor you can select different scenes for each pipe.

To select orthogonal views. You can choose between several views. Also you can select an object
to center the view on it.

210
Pipe List

A text can be shown in the pipe window in overlay mode, especifying the position of the text, the
text itself and the time until it disappears from the pipe window. You can press (while the focus is
in the GFX Window, click on it to ensure this) the Crtl key to see a text appear on the GFX
Window on overlay mode and also in the editor at the same time.

There are three modes for the mouse:

System
You can see in the editing disabled editors which mouse button you clicked as well as the
mouse coordinates as you move it over the pipe window.
Free2D
Selecting this mouse type, the pipe is locked and a mouse arrow icon appears on it. You can
change the editors to move the icon over the pipe and set the toggle editors to show a click
with any of the mouse buttons.
Free3D
The same as the above one but in 3D.

211
Pipe List

PIPE_TYPE Option editor Specifies the type of the representation for the
view.

Perspective: In this representation, the


apparent scale of an object decreases
according to its distance from the viewer. It is
more realistic as this is what happens in the
real world.

Orthogonal: An orthogonal view or projection


eliminates the effect of distance from a
viewpoint.

Orthogonal viewing is contrasted with


perspective viewing in that orthogonal
sometimes makes object edition easier, if the
orthogonal view is aligned with any of the main
axis can be useful as you can edit objects as if
they were in 2D.
PIPE_SCREEN Option editor Only useful with multipipe machines. A tipical
situation is a machine with three pipes and with
this editor you select what eStudio pipe
corresponds with what machine pipe.
PIPE_MOUSE_MODE Option editor Selects the mouse mode, this mode can be a
camera manipulation mode, a navigation mode,
a select objects mode, picking modes, etc.
When you select a mode, a different icon
appears for each mode near the mouse arrow.
This icon can be displayed pressing with the left
mouse button in the GFX Window.

EULERHPR: This mode sets the Head, Pitch


and Roll camera manipulation mode. See the
Camera list for more info on this mode. You
can change between this mode and EULERPTZ
doing a doble click with the left mouse button
in the GFX Window.

EULERPTZ: This mode sets the Pan, Tilt and


Zoom camera manipulation mode. See the
Camera list for more info on this mode.

ALIGNEDXYZ: This mode moves the camera


always looking at the point of interest.

Press in the GFX Window with the right


mouse button and select View Mouse Point
of Interest. This reveals on screen the Point of
Interest.

Pressing with the left mouse button in the GFX


Window and moving the mouse horizontally
moves in the X axis. Moving vertically moves in
the Y axis and pressing left and middle (or
wheel) when moving vertically moves in the Z
axis.

Pressing the <alt> key and doing the same

212
Pipe List

above combinations moves the camera and the


Point of Interest.

ALIGNED: Moves the Point of interest. This


mode is meant to be used with PIPE_TYPE set
to Orthogonal. Remember that <alt-x>, <alt-
y> and <alt-z> set different Orthogonal views,
YZ, XZ and XY respectively.

DRIVE: This mode moves both the Point of


Interest and the Camera position to emulate
driving, Moving horizontally turns the view and
moving vertically accelerates.

FRAMEREC: Frames the view acording to a


rectangle drawn in the GFX Window.

FRAMEOBJ: Frames the view centered in an


object that lies inside a rectangle drawn in the
GFX Window.

CENTEROBJ: Centers the picked object in the


GFX Window.

PICK: Displays the Graphic Manipulator of the


object clicked. If the object is a text then the
Text Manipulator appears.

DRAG: This option sets the mouse action in


drag mode. This allows for example to drag
object properties from the GFX Window to a
Folder.

INFO: This mouse mode shows information


about the objects, textures and other eStudio
items in the GFX Window.

PICKCOLOR: Doing a click with the left mouse


button in any area of the GFX Window brings
the color in that point of the screen to the Color
Dialog in the Desktop Interface.

SELECTREC: Dragging with the mouse in the


GFX Window creates a rectangle. You can
specify a python code in the
PIPE_SELECT_SCRIPT_CLICKDOWN and
CLICKUP editors to perform the action you
want when you click down and when you
release the mouse when creating the rectangle.

NAVIGATOR: Selects the eStudio Navigator


mouse mode. Using this mode you can create
any kind of First Person navigation, from
walking to flying, using vehicles and checking
collisions. Also there are utilities in this mode
that provide a basic set of dynamics.

213
Pipe List

PIPE_PASSIVE_PICK Toggle editor When you assign click actions like 'On Enter' or
'On Leave', eStudio has to calculate
intersections with all the objects in the scene,
all the time, while you are moving the mouse
over the screen, even without clicking (which
can be time consuming if the scene is
complex). The 'Passive pick' mode of pipe
enables such calculation.

This mode is automatically set when you select


a click action that requires that. If you untoggle
the mode then you will disable only those
actions.

If you want to disable the 'Click down' or 'Click


up' actions then you should toggle off the
Active editor in the binds that are created when
you assign those actions.
PIPE_MANAGED Toggle editor If toggled off stops drawing a pipe and also
hides the window.
PIPE_ENABLED Toggle editor Freezes (disables) the drawing of a pipe and
also disables picking, but the logic of the
database continues, timers, events and
productions continue. When it is toggled off, a
new Render button editor appears so you can
update the view and see what is happening.
PIPE_POP Button editor Pops the pipe. If there are several pipes
displays the pipe you select.
PIPE_GRID_VIEW Toggle editor Displays a grid in the left and bottom borders
of the GFX Window as a graphic aid when
working in orthogonal views.
PIPE_AUTOREPEAT_KEY Toggle editor Controls repetition on any keystroke when
pressing and holding a key in the GFX Window.
PIPE_ALPHA_CHANNEL Toggle editor Displays the Alpha Channel in the selected
pipe. Other pipes are not affected unless you
toggle on this editor with them selected.

The Alpha Channel editor in the Globallists


interface affects all the pipes available.
PIPE_DEPTH_CHANNEL Toggle editor Sets a plane with a white to black gradient
perpendicular to the view that makes objects
appear white if they are near and gradually
change to black as distance increases. This
editor causes other three to appear.

This capability is added because the resulting


pictures can be blurred with some hardware.
PIPE_DEPTH_NEAR Float editor The Near plane signals where objects should
be white for the depth trick.
PIPE_DEPTH_FAR Float editor The Far plane signals where objects should be
blackfor the depth trick.

214
Pipe List

PIPE_DEPTH_CHECK Toggle editor This toggle sets a chequered pattern in the


depth plane, so if you see it you must adjust
the Near and Far planes until you see just a
white square between the two planes.
PIPE_TITLE String editor This string is what appears in the top bar of the
selected pipe. By default it contains the
following string:

$__VERSIONTIT $__VERSION, [$__MP], as


$USERNAME, $__DBSLIST $__NAME

that sets the text that you can see on your


pipe.
PIPE_CULL_VIEW Toggle editor This editor works in combination with the
PIPE_CULLVIEW_FOV and allows to check if
culling is working fine. See the example in the
pages previous to this editors list.
PIPE_CULL_SORT Toggle editor Orders objects by material.
PIPE_CULL_GSET Toggle editor Better culling but slower.
PIPE_CULLVIEW_FOV Float editor Changes the size of the culling window so you
can see objects culled when they are outside of
it. PIPE_CULL_VIEW must be toggled on to
see the effect.
PIPE_ORIGIN Float2 editor Sets the origin of the pipe. The x and y editors
are the x and y coordinates of the top left
origin of the window (without the window
borders).
PIPE_SIZE Float2 editor Sets the pipe size.
PIPE_ADJUST_VIDEO_SIZE Button editor Sets the size of the pipe to video size.
PIPE_ADJUST_SCREEN_SIZE Button editor Sets the size of the pipe to full screen size.
PIPE_BORDERS Toggle editor Shows the borders of the pipe window.
PIPE_XPM_ENABLE Toggle editor Enables the camera XPM pixmap.
PIPE_FRAME_VIEW Button editor Perspective view.
PIPE_FRAME_FRONT Button editor Front orthogonal view.
PIPE_FRAME_BACK Button editor Back orthogonal view.
PIPE_FRAME_LEFT Button editor Left orthogonal view.
PIPE_FRAME_RIGHT Button editor Right orthogonal view.
PIPE_FRAME_BOTTOM Button editor Bottom orthogonal view.
PIPE_FRAME_TOP Button editor Top orthogonal view.
PIPE_OVERLAY_ORIGIN Float2 editor Sets the position in the pipe window for the
overlay text to appear.
PIPE_OVERLAY_LIFE Float editor Sets the how much it lasts on the pipe window
the overlay text.
PIPE_OVERLAY_STRING String editor Selects the string to appear in the overlay
text.
PIPE_FREE_MOUSE_TYPE Option editor Selects one of three modes, system, free2d
and free3d.

215
Pipe List

PIPE_FREE_MOUSE_POS2D Float2 editor Shows the mouse coordinates as it moves in


the pipe window.
PIPE_FREE_MOUSE_VISIBLE Toggle editor Shows/Hides the mouse icon.
PIPE_FREE_MOUSE_SIZE Float editor Sets the size of the mouse icon.
PIPE_FREE_MOUSE_LEFT Toggle editor Shows in red color the left mouse button when
it's pressed.
PIPE_FREE_MOUSE_MIDDLE Toggle editor Shows in green color the middle mouse button
when it's pressed.
PIPE_FREE_MOUSE_RIGHT Toggle editor Shows in blue color the right mouse button
when it's pressed.
PIPE_FREE_MOUSE_POS3D Float3 editor Sets the 3D coordinates of the mouse icon.
PIPE_STATS_ACTIVE Toggle editor Disables the stats in the selected pipe. It is not
the same as selecting the Off option in the
Globalists statistics editor because the
Globallists editor affects all the available pipes
and the Stats toggle just the selected one.
PIPE_NAV_MOTION_CTRL Float editor The motion in the navigator mouse mode.
If equals 1, forward motion, if equals -1
backward motion. If equals 0, stop motion.
There is some inertia in the movement.
PIPE_NAV_HEADING_CTRL Float editor The heading in the navigator mouse mode.
If equals 1, to the left motion, if equals -1 to
the right motion. If equals 0, stop motion.
There is some inertia in the movement.
PIPE_NAV_PITCH_CTRL Float editor The pitch in the navigator mouse mode.
If equals 1, up motion, if equals -1 down
motion. If equals 0, stop motion. There is some
inertia in the movement.
PIPE_NAV_MOTION_MAX_SPEED Float The maximum speed of the motion.
editor
PIPE_NAV_MOTION_INERTIA Float editor The inertia of the motion.
PIPE_NAV_ANGULAR_MAX_SPEED Float The maximum speed of the heading and
editor pitch.
PIPE_NAV_ANGULAR_INERTIA Float editor The inertia of the heading and pitch.
PIPE_NAV_COLLIDENAB Toggle editor The collision detection. If it's enabled the
camera will fall unless there's a object under
it. You can select the object to collide with.
PIPE_NAV_CAMERAHEIGHT Float editor The camera height.
PIPE_SELECT_SCRIPT String editor The Python code to execute after the
selection has finished.
PIPE_SELECT_SCRIPT_RUN Button editor To execute the Python code associated to the
selection.
PIPE_SELECT_RECT_MODE Option editor The axis to intersect the selection with.
PIPE_FREE_SIZE Toggle editor Allows to change the size of the pipe. If toogled
off, the editors Size Min and Size Max appear.
PIPE_SIZEMIN Float2 editor Sets the minimum size for the pipe window
when Free editor is disabled.

216
Pipe List

PIPE_SIZEMAX Float2 editor Sets the maximum size for the pipe window
when Free editor is disabled.
PIPE_ONFOLDER Selector editor Puts the pipe in a folder.
PIPE_FRAME_OBJ Selector editor To select an object to center the view on.
PIPE_XPM_CODE Selector editor The pixmap for the mouse mode icon.
PIPE_XPM_PASSIVEDRAW Toggle editor The pixmap for the mouse mode icon is
displayed all the time if set to on. Otherwise
only appears when clicking with the mouse.
PIPE_CAMERA Camera selector editor Selects a camera. What you see in the pipe is
what is seen through that selected camera.
PIPE_RENDER Button editor Refreshes the pipe each time is pressed.
PIPE_FOCUS Button editor Changes the focus to the GFX Window.
PIPE_PICK_SCRIPT_CLICKDOWN Python The code specified in this editor is executed
editor when you pick an object.
PIPE_SELECT_RECT_MODE Option editor Checks intersection of the selection rectangle.
Options are, X, Y, Z, Plane, Object
PIPE_SELECT_FIXEDSIZEMODE Toggle If toggled on, the selection rectangle has a
editor fixed size.
PIPE_SELECT_RECT_FIXEDSIZE Float2 Size in x and y coordinates for the fixed
editor selection rectangle.
PIPE_SELECT_SCRIPT_CLICKDOWN Python Code to be executed when pressing down the
editor mouse button to create the selection rectangle.
PIPE_SELECT_SCRIPT_CLICKUP Python Code to be executed when releasing the mouse
editor button to create the selection rectangle.
PIPE_SELECT_SCRIPT_CLICKDOWN_RUN This button executes the Clickdown python
Button editor script of the selection rectangle.
PIPE_SELECT_SCRIPT_CLICKUP_RUN This button executes the Clickup python script
Button editor of the selection rectangle.
PIPE_MOUSE_PV Float3 editor The Point of View of the mouse camera
attached to the pipe.
PIPE_MOUSE_PI Float3 editor The Point of Interest of the mouse camera
attached to the pipe.
PIPE_MOUSE_FOVV Float editor Field of View vertical of the mouse camera.
PIPE_MOUSE_FOVH Float editor Field of View horizontal of the mouse camera.
PIPE_MOUSE_MAT Matrix editor Camera matrix for binding purposes.
PIPE_FRAME_TRANSITION Float editor The transition time used to frame objects using
any of the camera framing buttons.
PIPE_FRAME_PUSH Button editor Allows to insert in a stack camera settings. Is
similar to recording camera settings in
snapshots. This snapshots can be poped out of
the stack.
PIPE_FRAME_POP Button editor Allows to extract from the stack camera
settings.
PIPE_FRAME_NEXT Button editor Changes to the next camera setting in the
stack.
PIPE_FRAME_VIEW Button editor Frames the view until all objects are visible.

217
Pipe List

PIPE_FRAME_FRONT Button editor Frames and looks at the objects with the
camera set in the negative Y axis pointing to
the center of the objects bounding box.
PIPE_FRAME_BACK Button editor Frames and looks at the objects with the
camera set in the positive Y axis pointing to the
center of the objects bounding box.
PIPE_FRAME_LEFT Button editor Frames and looks at the objects with the
camera set in the positive X axis pointing to the
center of the objects bounding box.
PIPE_FRAME_RIGHT Button editor Frames and looks at the objects with the
camera set in the negative X axis pointing to
the center of the objects bounding box.
PIPE_FRAME_BOTTOM Button editor Frames and looks at the objects with the
camera set in the negative Z axis pointing to
the center of the objects bounding box.
PIPE_FRAME_TOP Button editor Frames and looks at the objects with the
camera set in the positive Z axis pointing to the
center of the objects bounding box.
PIPE_FRAME_PIXEL Button editor Frames and looks at the objects with the
camera set in the negative Y axis pointing to
the center of the objects bounding box. The
camera stands at a certain distance to make
the object in the camera as if it had a 1 pixel x
1 pixel size.
PIPE_FRAME_OBJ Object Selector editor Allows to select individual objects to be framed,
so not all the scene is framed.
PIPE_FRAME_FOVMODE Toggle editor This toggle allows to frame objects changing
FOV. If it is off then the frame is made moving
the camera.
PIPE_STEREO_MODE Option editor Selects the stereo mode. If you don't select one
stereo mode here, you cannot use the editors
in the Stereo tab in the Camera list. To see
the stereo in the GFX Window, at least you
have to show the axis.

218
Cameras List

Cameras List
Description
Editors

A camera contains the parameters needed to calculate a perspective.

The following are the keywords used to reference these parameters:

The Point of View refers to the position in space from where the perspective is calculated. It is
the equivalent of the position of a photographic camera in real life. (This may be affected by
the offset parameter).

The Point of Interest refers to the position in space that the camera is looking to. It is the
equivalent of what you are looking to when aiming a photographic camera.

The Viewing angles refer to the direction of the line joining the Point of View with the Point
of Interest.
Note that we could move the Point of Interest through this line and still have exactly the
same perspective.

The Head, Pitch and Radius identify the position of the camera relative to the Point of
Interest.

The Head angle identifies the horizontal rotation of the X axis.

The Pitch angle identifies the vertical rotation of the rotated X axis.

The Radius identifies the distance from the Point of Interest to the Point of View.

The Pan, Tilt and Roll angles identify the direction of the Viewing direction relative to the
Point of View.

The Pan angle identifies the horizontal rotation.

The Tilt angle identifies the vertical rotation.

The Roll angle identifies the rotation along the Viewing direction.

221
Cameras List

The Field of View or Zoom angle identifies the aperture of the lens of the camera.
Both, the horizontal and the vertical Field of View can be changed independently or they can
be linked so that modifiying the vertical Field of View automatically modifies the horizontal
Field of View to match an aspect ration of one.

The Focal Displacement specifies a distance from the Point of View to the Point of Interest
to displace the real position of the camera. This is used for calibrating the displacement of the
focal point due to changes in the Field of View.

Distance to Interest is the distance between the Point of View and the Point of Interest
This value does not affect the appeareance of the perspective but is usefull to be able to modify
it because when driving the perspective with the mouse the Point of View rotates on an
sphere whose center is the Point of Interest.

Z near and Z far specify the distances for the Z clipping planes. Every geometry is always
clipped against these planes which are located perpendicular to the viewing direction and at the
Z near and Z far distances.

For every camera there exists a Simulation camera (which is the actual one being used in the
simulation) and a Reset camera stored in memory.

The Simulation camera can be set to the Reset camera by pressing the Reset Button editor in
the camera List menu or from the global screen popup menu. Also when eStudio is started the
Reset camera is loaded into the Simulation camera. When you save a database, all the values of
the camera are saved and when you reload the database, the camera remains the same. There is
an exception to this and is that the mouse camera is not saved. If you want the camera to be auto-
saved you have to create your own camera.

The Reset camera can be set to the Simulation camera by pressing the Simulation camera to
Reset camera Button editor.

Notice that when saving the eStudio configuration only the Reset camera is saved (not the
Simulation camera).

The camera parameters control the perspective of the simulation.

If we want the perspective to be controlled by an external robotic or tracking system, by the mouse,
or a trajectory, we have to bind these parameters to the corresponding functions.

By default a camera called mouse is generated with the binds to the functions that generate a
camera position from the mouse movement.

Binds can be recorded into curves.

It is thus possible to configurate the binded parameters for recording one by one to obtain a
collection of curves with the recorded values.

222
Cameras List

The camera interface offers the possibility of simplifying and automatizing this process. When using
this option a timer for recording and a curve for each one of the parameters to record has to be
specified. Recording takes place when the Record button is pressed. The recorded values can be
played back by pressing the Play button.

Distorsion can be added to the cameras to simulate a spherical deformation.

You can configure this effect by changing the following parameters in the Distorsion submenu:

The Distorsion editor allows the user to apply the desired quantity of spherical deformation to the
camera.

The Stretch editor is a fix to avoid a margin from appearing in the screen.

The Resolution editor allows you to increment or decrement the size of the deformation grid in
increments.

223
Cameras List

CAM_RESET Button editor This action will copy the Reset parameters of
the perspective into the simulation parameters.
CAM_VIEW Option editor It has three options, Off, Simulation and
Reset.

Off is the default camera setting.

Simulation makes visible the camera graphic


manipulator.

Reset shows where the camera will go when


the Reset button is pressed.
CAM_INTEREST_MODE Toggle editor When activated the orientation of the camera
is controlled by the point of interest instead
of the orientation euler angles.
CAM_PV Float3 editor Specifies the Point of View of the camera.
CAM_HPR Float3 editor Specifies the euler Viewing Angles of the
perspective.
CAM_PM Float3 editor Specifies the Point of Interest of the
perspective. Some times it is more convenient
to use this editor rather than the Viewing
Angles.
CAM_FOVV Float editor Specifies the vertical field of view of the
perspective.
CAM_FOVH Float editor Specifies the horizontal field of view of the
perspective.
CAM_HVLINK Option editor Specifies the Linked mode between the vertical
and horizontal field of view:
FovLinkOff. No link is stablished between
them and both can be specified
independently.
FovLink4x3. The horizontal field of view is
forced to take a value such that the resulting
perspective has an aspect ratio of 4 x 3.
FovLinkCustom. The horizontal field of
view is forced to take a value such that the
resulting perspective has a user defined
aspect ratio.
CAM_HVLINK_CUSTOM Float editor Specifies the user defined aspect ratio in case
the Linked mode is set to FovLinkCustom.
CAM_OFFSET_LEN Float2 editor Specifies the horizontal and vertical offset in
pixels from the center of the perspective to
displace the center of the virtual lens. This
value is used to have the virtual camera match
the same center of the lens of a real camera.
See the calibration procedures.

224
Cameras List

CAM_OFFSET_ROT Float3 editor Specifies a vector offset meaning the


coordinates of the focal point from the center of
rotation of the Viewing angles. This is used to
simulate the behaviour of a real camera
mounting head where the center of rotation for
pan and tilt does not correspond usually with
the position of the lens focal point.
This offset is also visualized in the graphic
representation of the camera when it is made
visible.
Note that when this value is used the Point of
View is not any more the same point as the
focal point.
CAM_OFFSET_ROTANGLE Float3 editor Specifies a vector offset meaning the euler
angle offsets from those specified by the
Viewing angles.
It is used to have several cameras simulating
the panoramic view on multiple screens.
CAM_ZCPV Float editor Specifies the distance that the focal point has
to move along the viewing direction. This
parameter is used when there is a calibration of
this distance depending on the Field of View.
CAM_STEREO_APERTURE Float editor Specifies the aperture of the cameras when
simulating stereoscopic view.
CAM_PV_RESET Float3 editor Specifies the Reset Point of View. This value
is used to set the simulation parameter of the
camera when the camera Reset Button is
pressed or on start up.
CAM_PM_RESET Float3 editor Specifies the Reset Point of Interest. This
value is used to set the simulation parameter of
the camera when the camera Reset Button is
pressed or on start up.
CAM_FOVV_RESET Float editor Specifies the Reset Vertical Field of View.
This value is used to set the simulation
parameter of the camera when the camera
Reset Button is pressed or on start up.
CAM_FOVH_RESET Float editor Specifies the Reset Horizontal Field of View.
This value is used to set the simulation
parameter of the camera when the camera
Reset Button is pressed or on start up.
CAM_ZNEAR Float editor Specifies the Z Near distance of the view
clipping planes.
CAM_ZFAR Float editor Specifies the Z Far distance of the view
clipping planes.
CAM_SIMTORESET Button editor This action copies the simulation parameters
of the camera into the Reset parameters.
CAM_MOUSEBINDS Button editor Creates mouse binds for the camera.
CAM_FREEBINDS Button editor Free the editor binds.
CAM_DELAY_RESET Selector editor Specifies a delay of up to a video field to be
applied to all the current bindings on the
camera parameters. This value is used to fine
adjust the video delay calibration.

225
Cameras List

CAM_GRID_ENABLED Toggle editor Allows the distorsion effect to be set.


CAM_GRID_VIEW Toggle editor To see the distorsion grid on screen.
CAM_GRID_DISTORSION Selector editor Increments the maginitude of the distorsion.
CAM_GRID_HSTRETCH Float editor Fix to avoid a margin to appear in the screen.
CAM_GRID_RESOLUTION Integer2 editor Increments or decrements the resolution of
the grid.
CAM_MATRIX Matrix editor This editor contains the camera matrix with the
same values that are inside the Point of View
editors and the Viewing Angles. This editor
can be used to make binds.
CAM_GLOBAL_RESET Button editor Resets the Global Euler and Displace Offsets.
CAM_GLOBAL_MOUSEBINDS Button editor This editor binds the Global editors to the
mouse. This way you can, free the mouse
camera binds. Bind the Global editors, move
the camera to visually add an offset, free the
global binds and create binds again for the
mouse camera. After that you will move the
camera with the offset you choosed.
CAM_GLOBAL_MOUSEBINDSXY Button This binds all the Global editors except the
editor pitch and the roll and zoom. This way you can't
move the camera up and down.
CAM_GLOBAL_FREEBINDS Button editor This frees the Global binds.
CAM_GLOBAL_EULER Float3 editor This editor allows to add an additional offset for
the camera, that can have tracking.
CAM_GLOBAL_DISPLACE Float3 editor This editor allows to add an additional offset for
the camera, that can have tracking.
CAM_FOCAL_POINT Float3 editor Contains the real values (without offsets) of the
camera Point of View for binding purposes.
CAM_FOCAL_HPR Float3 editor Contains the real values (without offsets) of the
camera Viewing Angles for binding purposes.
CAM_FOCAL_PI Float3 editor Contains the real values (without offsets) of the
camera Point of Interest for binding
purposes.
CAM_ZVIEW Float editor Having a camera in simulation mode, this
editor controls the size of the frustrum.
CAM_VIEW_EDITABLE Toggle editor Toggles visivility of the camera graphic
manipulator.
CAM_STEREO_PARALLAX Float editor Sets the distance between the two stereo eyes
in the proyectors.
CAM_STEREO_OFFSET Float2 editor Allows to fine adjust the offset between the
eyes.
CAM_CAVE_FACE Option editor Selects one of the 6 faces of the cave to adjust
the frustrum. Options are Front, Back, Left,
Right, Bottom and Top.
CAM_CAVE_WIDTH Float editor Allows to set the width of one of the faces of
the cave.
CAM_CAVE_HEIGHT Float editor Allows to set the heigth of one of the faces of
the cave.

226
Cameras List

CAM_CAVE_EYE_XYZ Float3 editor Sets the position of the person in the cave. The
user of the cave has tracking sensors that
transmit the position to change the frustrum
accordingly.
CAM_CAVE_EYE_HPR Float3 editor Sets the orientation of the person in the cave.
The user of the cave has tracking sensors that
transmit the orientation to change the frustrum
accordingly.
CAM_HPR_RESET Float3 editor Specifies the Reset Viewing Angles. This
value is used to set the simulation parameter of
the camera when the camera Reset Button is
pressed or on start up.

227
Light List

Light List
Description
Editors

The Light List contains the configuration for all the 3D geometry data that is rendered in the
simulation. The Light List holds the configuration for all the lights that can illuminate 3D objects.

Lights are necessary as a part of the rendering process when materials are modulated by the
illumination.

By default three lights are generated and located in predefined positions. OpenGL has an eight
lights limitation, but this can be solved in eStudio as you will see later.

The effect of a light over a rendered polygon is mainly determined by the light's position and
orientation in space. Light's position and orientation can be visualized by making visible the Light
Graphic Manipulator. This graphic manipulator differs from the standard pivot graphic manipulator
because it shows some special radial lines and in the case of the Spot light, a light cone (See Fig.2)

231
Light List

Lights can be enabled or disabled. This feature is useful when trying to see what is the effect of a
particular light over the geometry. Each light has an intensity parameter to regulate its influence
relative to the other lights and each light has its own contribution to the ambient intensity.

The color of the light can be thought as an independent regulation of the intensity of each
component Red, Green and Blue of the light.

The following types of lights are implemented:

Infinite (or Directional)


The light illuminates from the infinite and only its illuminating direction is important.
The direction is the vector from its position to the origin.
This kind of illumination is the fastest because less calculations are needed to be done.

Local
The light has a position in space and illuminates in all directions.

Spot
The light has a position in space and illuminates in one specific direction. There is a cone
angle that regulates the margin of the angle that is illuminated and an attenuattion factor that
regulates how fast the light decreases as the direction approaches the limit of the cone.

Summary of the Lights List

-Notion of light.
Light components.
Positional and directional lights.
Light Attenuation.
-Types of Lights in eStudio
Infinite
Local
Spot
-Lights List editors table.

232
Light List

eStudio approximates the light as a 4 independent components.


When a light is enabled, the color of a vertex depends on its color and also on the following color
components of the light:

Diffuse: Is the light that comes from one direction, and hits directly a surface. The diffuse color of
a vertex depends on its position (like all the component's colors) and its orientation in relation to
the light source.

Ambient: When a light ray hit a surface, it is equally scattered in all directions. After a lot of
bouncing onto surfaces, the light seems to come from anywhere. The ambient component
corresponds to this physical phenomenon. In eStudio, lights Ambient editor is set to 0 by default.

Specular: Specular light comes from a particular direction and tends to bounce off the surface in a
preferred direction. Shiny metal or plastic has a high specular component. You can think of
specularity as shininess.

Emission: Simulates light originating from an object. Some objects like lamps or leds can emit
light. Emission is used to create this kind of objects.
This following picture shows the effect of the ambient and diffuse light components.

233
Light List

A positional light source is located at (x, y, z). The source emits light from that particular location
towards all directions. It is used to simulate for example a lamp, or a bulb.

A directional one haven't got any location. The source emits light from an infinite location and the
rays are all parallel and have the direction (x, y, z). A directional light is not subject to attenuation
since it is at an infinite distance. It is used to simulate for example, the sun.

In the real world, the intensity of a light decreases as distance from the light increases. Objects that
are far from the light source appear darker and objects that are near the light source appear
brighter. This effect is known as light attenuation.

234
Light List

In nature, light attenuates at an inverse square rate. That is, its intensity diminishes in proportion
to the square of the distance from the light source. Attenuation can be even greater when light is
dispersed by the atmosphere, especially when there are dust particles, or fog or clouds.

Brainstorm eStudio has three light types, Infinite, Local and Spot. All of them have editors that
set properties, like position, intensity or attenuation.

When you start eStudio there is already a three light setup created for you. The three lights are of
infinite type and are hidden unless you select them and toggle on the Visible toggle editor (See Fig.
6).

This Visible editor is one of the three toggles that are available whatever the light type you choose,
the other two are Enable and Select.

If you want to see the effect of the three lights one by one, do the following, go to the object list
and create a new object element. Having the type of the object as ‘Nothing’, press in the down
arrow icon at the right of the selector and load a geometry, for example from the Performer folder,
the cow.obj will do the job (See Fig. 7).

235
Light List

When the cow appears in the GFX Window, do a multiple selection in the lights list, select the
three lights and toggle off the Enable editor. This disables the three lights. Now you can’t see the
cow because no light is active. Enable the lights one by one to see how they affect the object.

This way, the Enable toggle turns on or off the light, but there’s another toggle, Select, that allows
to select which lights are used to illuminate the scene graph.

This toggle is not the same as the Enable one because an unselected light can still be used as an
active local light of an object.

Note that independent objects (from the list of objects) can also use their own local lights, thus, the
'selected' lights in the list of lights can be seen as if they were the local lights of a theoretical object
that was the root parent of the whole scene graph. And from that point of view that mode should
not be a light property but a property of the root parent object.

And because of that, when an object selects his local list of lights (from the list of objects) then the
light 'Select' mode of each light is meaningless.

Also note that the list of lights can contain any amount of items and also objects can select as local
lights any amount of them, but the hardware imposes a limit (usually eight) for the maximum
number of lights allowed to illuminate simultaneously.

236
Light List

This type of light is a directional one and illuminates from the infinite. The direction of the
illumination is the vector that goes from its position to the origin. As a directional light is infinitely
far away, it is nonsense to attenuate its intensity as distance changes. This avoids lots of calculation
making this kind of light the fastest of the pack (See Fig. 9).

Infinite lights have two tabs with all the necessary editors to modify all the light’s properties. In
the Coordinates tab you can edit the Position, the Ambient and the Intensity of the light.

The Euler rotation angles editors are disabled by default in this kind of light because the direction of
the light is defined by its position and the origin.

The Color tab allows to change the light color properties using the well-known color editor.

This light has a position in space and illuminates in all directions. It has a new tab that contains the
editors needed to control attenuation. As we told before, light intensity depends on the distance to
the light. eStudio offers two attenuation posibilities, Constant and Quadratic (See Fig. 11).

The Constant float editor attenuates light in a linear fashion. As you can see in Fig. 12 the light

237
Light List

attenuates and reaches the three objects.

The Quadratic float editor attenuates light in a quadratic (inverse square rate) fashion. In the real
world this is how attenuation happens. It requires more calculation that the Constant attenuation
but it is more detailed. In Fig. 13, objects are more attenuated with distance than in the linear
approach.

The light has a position in space and illuminates in one specific direction. There is a cone angle that
regulates the margin of the angle that is illuminated and an attenuattion factor that regulates how
fast the light decreases as the direction approaches the limits of the cone. Note that no light is
emitted beyond the edges of the cone (See Fig. 14).

238
Light List

This kind of light has two attenuation mechanisms, the first one is the same as the Local light and is
related to the distance to the light. The second one is created inside the cone, the light is
attenuated near the edges of the cone and more bright in its center.

In Fig. 15 there are two examples where a spot light illuminates a surface primitive with 200x200
resolution units. In the first picture a low attenuation value is used making the cone illumination
brighter even at the edge. The second picture shows a bigger attenuation resulting in a small cone.

The Cone Delta editor makes a blur in the outline of the cone. To see the effect, the material of the
object where the cone is projected must have the shading model set to phong. A value of zero
makes no blur. See the following pictures.

Cone Delta set to zero Cone Delta set to 0,4

239
Light List

LIGHT_TYPE Option editor This editor allows to select the light type from the
following:

Infinite: (or Directional)


The light illuminates from the infinite and only its
illuminating direction is important.
The direction is the vector from its position to the
origin.
This kind of illumination is the fastest because less
calculations are needed to be done.
This kind of light has no attenuation.

Local: The light has a position in space and


illuminates in all directions. It has attenuation only by
distance.

Spot: The light has a position in space and


illuminates in one specific direction. There is a cone
angle that regulates the margin of the angle that is
illuminated and an attenuattion factor that regulates
how fast the light decreases as the direction
approaches the limit of the cone.
It also has attenuation by distance.
LIGHT_ACTIVE Toggle editor Turns on/off the light.
LIGTH_SELECT Toggle editor Allows to select which lights are used to illuminate
the scene graph. This mode is not the same as the
LIGHT_ACTIVE mode because an unselected light
can still be used as an active local light of an object.

Note that independient objects (from the list of


objects) can also use their own local lights, thus, the
'Selected' lights in the list of lights can be seen as if
they were the local lights of a theoretical object that
was the root parent of the whole scene graph. And
from that point of view that mode should not be a
light property but a property of the root parent
object.

And because of that, when an object selects his local


list of lights (from the list of objects) then the light
'Select' mode of each light is meaningless.

Also note that the list of lights can contain any


amount of items and also objects can select as local
lights any amount of them, but the hardware
imposes a limit (usually eight) for the maximum
number of lights allowed to illuminate
simultaneously.
LIGHT_VISIBLE Toggle editor When toggled on, a light graphic manipulator is
displayed in the GFX Window.

240
Light List

LIGTH_POS Float3 editor Sets the light position.


LIGHT_HPR Float3 editor Sets the light orientation. In the Infinite and Local it
is enabled because in the first the direction is
obtained from the light position to origin direction
and in the Local, the light is emitted in all directions.
LIGHTAMBINT Float editor Contribution of the light to the global ambient
illumination. By default all the three default lights has
ambient light set to zero.
LIGHTINT Float editor Sets the intensity of the light. Zero means no
intensity.
LIGHTATTEN Float editor This editor controls the attenuation of the cone of a
Spot light. This attenuation depends on the angle of
the cone.
LIGHTCONE Float editor Controls the aperture of the light cone of a Spot
light. It ranges from 0 to 90 degrees.
LIGHT_COLOR Color editor Changes the light color parameters, hue, saturation,
alpha...
LIGHT_DIST_ATTEN_CONST Float The intensity of light decreases as distance from the
editor light increases. OpenGL attenuates a light source by
multiplying the contribution of that source by an
attenuation factor. This editor changes attenuation in
a constant way.
LIGHT_DIST_ATTEN_QUAD Float The intensity of light decreases as distance from the
editor light increases. OpenGL attenuates a light source by
multiplying the contribution of that source by an
attenuation factor. This editor changes attenuation in
a quadratic way.
LIGHTCONE_DELTA Float editor Creates a blur in the cone of a spot light. The
materials of the objects affected by the light must
have the shading set to phong.

241
Material List

Material List
Description
Editors

Materials specify how the polygons making the 3D objects have to be rendered.

Brainstorm eStudio does not render the object polygons by itself, instead, it makes the
corresponding calls to the M3 Scenegraph Library, which in turn has the hardware of the machine
doing the job. Thus, the different properties of materials as well as the possibilities and limitations
of the mechanism of the rendering process are usually in the hardware side.

The following discussion will try to clarify what are the different properties interactions and what are
the results that can be achieved.

The final result of the rendering process if to fill the area the polygon covers in the frame buffer
with colors composed of Alpha, Red, Green and Blue components. The Alpha component does
not mean a visible color and is commonly used for video masking purposes. Let us call final color to
this pixel value that finally arrives to the frame buffer. It is important to note that in case of
rendering semi-transparent pixels it is the Alpha value in the final color the one holding the
transparency level.

The main property of a material is its color. Colors are composed of four components: Alpha,
Red, Green and Blue. There are two possible sources for this parameter:

The material color property. This property is set by the user by using the material menu
interface.

The color associated to each vertex of the geometry of the object. This property is intrinsic
to the object definition and is part of the geometry of the object. Not every 3D object has this
color per vertex information specified in its geometry. Some File geometries have this
information intrinsic in the file format and only Built geometries can generate or modify this
information.

If the polygon has no color per vertex information then the material color is used. If the
geometry does have color per vertex information then the user decides which color source to

245
Material List

use by setting or clearing the Vertex Color mode of the material.

Once the source color has been obtained then it may be modulated by the illumination generated
by the active lights.

Let us call illuminated color to the result of the previous process (source color + illumination).

The second most important property of a material is its texturing mode.

If the material is not textured, then the illuminated color is the final color. The user decides if
the material has to be textured by setting its Mapping mode.

If the material has to be textured then we have another interacting color: the texture color,
which is the pixel value coming from the applied texture. We could choose between to forget the
illuminated color, and have the texture color as the final color, but in this case, the object,
though textured, would not be illuminated in the resulting picture.

The decision to choose between the illuminated color or the texture color or making a
combination between them is taken by the user selecting the TEnv Mode property of the material.

Let us define the following abbreviations:

RGBAilu stands for the RGBA components of the illuminated color.


RGBAtex stands for the RGBA components of the textured color.
RGBAfin stands for the RGBA components of the final color.

The following equations describe mathematically what is to happen in the mixing process:

If TEnv Mode equals Decal:

If the texture has 3 or 4 components: Afin = Ailu

If the texture has 3 components: RGBfin = RGBtex

If the texture has 4 components: RGBfin = RGBilu*(1-Atex)+RGBtex*Atex

If TEnv Mode equals Modulate:

If the texture has 3 or 4 components: RGBfin = RGBilu*RGBtex

If the texture has 3 components: Afin = Ailu

If the texture has 4 components: Afin = Ailu*Atex

These equations mean the following:

When in Decal mode:

The Alpha value in the final color is always the Alpha value in the original source color.

If the texture has 3 components the RGB in the final color will be exactly the RGB in the
texture color.

If the texture has 4 components the RGB in the final color will be the RGB in the
illuminated color modulated with the RGB in the texture color by the Alpha value in the
texture color.

When in Modulate mode:

The Alpha value in the final color may be the Alpha value in the illuminated color if the

246
Material List

texture has 3 components. In addition, it could be the Alpha value in the illuminated color
multiplied by the Alpha value of the texture color, if the texture has 4 components.

The RGB in the final color will always be the RGB in the illuminated color multiplied by the
RGB in the texture color.

The following considerations apply:

In Decal mode, the Alpha value arriving to the frame buffer has nothing to do with the
Alpha value of the texture. The only way to have not illuminated textures and its Alpha
value arriving to the frame buffer is to use Modulate mode and white color for the material.
This is the case when you want not illuminated textures act as a mask according to its Alpha
component.

When a light illuminates a surface there is usually a zone of high reflection where the
surface acts similarly to a glass reflecting the light. This zone is called a highlight and is
usually the same color as the light (not the color of the surface). The process we have
described above multiplies the texture components by the illuminated color. That means
that even if there was a highlight in the illuminated color, it is going to be filtered and lost
in a big part by this modulation. This problem is because illumination should have been
applied to the texture color and not just a modulation with the illuminated color. The only
way to have highlights over texture is to use the MultiPass mode of objects.

Only one texture is applied in this process. The only way to have a textured material
reflecting also another texture is to use MultiPass.

Transparency is not applied unless the TraEnable mode is set, even if an Alpha value is
arriving to the frame buffer.

We understand that the whole pixel rendering process is cumbersome, and many times the
way to achieve a result is by experimenting with the different flags and modes of the
materials, but there is not much eStudio can do about it.

The Alpha frame buffer plane ouputs a video signal called the Alpha channel, this signal is
commonly used for video masking purposes. We would like the Alpha plane to be independent of
the Red, Green and Blue planes and use it only for our video masking issues but the hardware
imposes a limitation: it uses the Alpha component for its own masking purposes, that is, semi-
transparent pixels are rendered by using the Alpha component of the final color as the
transparency level. This means that if a pixel has to be transparent the final pixel Alpha
component will be that transparency level which may conflict with our needs of Alpha channel for
that pixel.

Brainstorm eStudio provides some solutions to this problem:

If the material is not going to use transparency we have no problem and the Alpha channel
should be regulated by using the Alpha material color component.

If the material is going to use transparency:

If we do not want Alpha channel then we have to disable writing in the Alpha plane by
setting the Alpha Frame Mask property.

If we want Alpha channel we should use the Alpha channel object property.

Materials may reference five different textures:

Surface texture

247
Material List

Textures that applied as painted paper to the surface of the polygons. They are usually
applied according to the texture parameters of the object geometry definition, though they
can also be applied projecting the texture in the direction of any of the coordinate axis.

Blend texture
Makes a blend between the surface texture and this one.

Specular texture
This texture adds a multipass specular texture to the surface one.

Luminance texture
Adds a luminance texture to simulate illumination.

Reflection texture
Textures that are applied simulating an environment that is reflected in the surface of the
polygons.

The Surface texture can be applied in four modes:

MapOff. No mapping is used.

MapUV. Standard UV mapping is used.

MapRefCube. Cube mapping is used.

MapProjected.

MapRefSph.

The Surface mode can only be applied if the object has texture coordinates defined in the
geometry. In this case, the texture will be applied according to this coordinates.

The Reflection texture is applied by projecting the texture simulating the reflection of light.

Brainstorm eStudio renders materials in four shading models. The models available are Flat,
Gouraud, Phong and BumpMap.

The Flat shading model applies a flat illumination. The illumination is calculated for a single point
and applied to the whole surface.

The Gouraud shading model calculates the illumination for every vertex of the polygon and then

248
Material List

the polygon pixels inside are interpolated.

The Phong shading calculates the illumination the same way as Gouraud but per pixel and also
calculates specular reflection.

The BumpMap shading simulates the bumps or wrinkles in a surface without the
geometry modifications to the model.

249
Material List

eStudio draws everything by using a helper library, OpenGL. This library can draw lines, polygons,
textures and can also perform lighting calculation, 3D projection and more. Every OpenGL sentence
is programmed to do exactly one well defined thing. Enabling or disabling textures, configuring the
viewport, drawing lines with a specific color... all this can be done by calling OpenGL instructions.
But in many situations is not easy to draw what you want by using only OpenGL. You need to adapt
the fixed algorithms programmed inside OpenGL to extend the drawing process. For example,
when OpenGL calcules the light it uses a special algorithm, Gouraud, to do that thing. If you want
to draw using another lighting model you can't. The solution to this problem is modify the fixed
programs that are stored inside the OpenGL pipeline. To modify those programs you can use a
special language, the OpenGL Shading Language, and the new programs you install and use are
called Shaders.

MAT_COLOR Float4 editor Sets the material Red, Green, Blue and
Alpha color components.
The Alpha component is useful when using the
video output of the alpha channel of the
frame buffer for video masking purposes. This
parameter will not always be honored, this will
happen in the following cases:
The transparency mode is on with the
TraEnable mode (the level of
transparency will become the alpha
channel value).
The material has a four component
texture applied to it. (the fourth
component of the texture will become
the alpha channel value) and the
TraEnable mode is on.
The object has color information in
vertices, the material has the
VertexColor mode active, and does not
texture a four component texture.
The final Alpha value will become the
alpha component of the applied colors.
Any way, it is always possible to force Alpha
setting or clearing for the whole object by
using the Alpha channel object property. See
also the Alpha plane discussion.
MAT_TRANSP Float editor Regulates the transparency for the material
(The TraEnable mode should be enabled for
this parameter to take effect). Transparency
is achieved by blending incoming pixels to the
frame buffer with the previous ones. Thus, the
rendering order is relevant for the final result.
MAT_REF Float editor Regulates the amount of reflected light from
the material.
MAT_SHIN Float editor This parameter regulates the brightness of
the material. Highlights become more
concentrated when this parameter increases.

250
Material List

MAT_ALPHALIM Float editor Sets the reference value used by the


AlphaFunc mode.
MAT_REFPAS_COLOR Float4 editor This parameter is only used when in Multipass
mode. It regulates the proportion of reflected
texture.
MAT_TRAENABLE Toggle editor Enables or disables material transparency.
MAT_VERTEXCOL Toggle editor When active selects the source for the
material color to be the vertex color
information in the geometry definition of the
object.
MAT_FOG_ENABLE Toggle editor Enables or disables Fog. Fog parameters are
global and are set from the modes List.
MAT_LIGHT_TWOSIDES Toggle editor When this mode is on the backside of the
polygons will be illuminated with the inverted
normal.
MAT_RMASK Toggle editor When OFF the Red frame buffer plane is
disabled for writing.
MAT_GMASK Toggle editor When OFF the Green frame buffer plane is
disabled for writing.
MAT_BMASK Toggle editor When OFF the Blue frame buffer plane is
disabled for writing.
MAT_AMASK Toggle editor When OFF the Alpha frame buffer plane is
disabled for writing. See the Alpha plane
discussion.
MAT_ZMASK Toggle editor When OFF the Z buffer frame buffer plane is
disabled for writing.
If this plane is masked then the polygon will
not hide any polygons rendered after it even if
they are farther.
See the Zfunc material mode.
MAT_CULLFACE Option editor Selects which polygons using this material
should be culled:
CullFaceOff.
None should be culled. Usually used to
render transparent object that allow to
see even backwards pointing polygons.
CullFaceFront.
Cull those polygons pointing towards the
camera. Usually used for objects that
have their geometry inverted due to a
negative scale and are probably being
used to simulate reflections.
CullFaceBack.
Cull those polygons pointing backwards
to the camera. This is the default mode
and it avoids having polygons that are
never seen going through the graphics
pipeline.
CullFaceBoth.
Cull all polygons. Used to disable
rendering polygons using this material.

251
Material List

MAT_SHADE_MODEL Option editor Selects a material shading model:


Off.
Do not illuminate the polygon.
Flat.
Applies a flat illumination. The
illumination is calculated for a single point
and applied to the whole surface.
Gouraud.
Calculates the illumination for every
vertex of the polygon and then inside
polygon pixels are interpolated.
Phong.
Calculates the illumination the same way
as Gouraud but also calculates specular

reflection.
BumpMap.
This shading model simulates the bumps
or wrinkles in a surface without the
geometry modifications to the model.

MAT_TRA_MODE Option editor Selects from different ways of achieving


transparency. Some of them may show better
performance at the expense of less quality in
some machines.
BlendAlpha
Use a blending function method of
transparency. The function used to
compute it is:
(Alpha * object color) + (1 - Alpha) *
background color.
MS Alpha
Use a multisampling mode of
transparency when multisampling is
available and enabled. Source alpha
values will be converted to 1.0 (full
opacity)before writing to the frame buffer.
When using multisampling, every pixel is
divided in parts and every part has an
independent calculus process, then the
result of every part is added and
averaged to get the result for that pixel.
In this cases some discretized levels of
transparency can be achieved by taking
any of this parts from the already existing
values in the frame buffer. This is much
faster than blending but it only supports a
small number of transparency levels.
For example, if there are four samples per
pixel then only 0%, 25%, 50%, 75% or
100% levels of transparency are
selectable. Only enabled in machines with
antialiasing hardware.
Additive
Uses the following blending function:
(Alpha * object color) + (Alpha *

252
Material List

background color)
MAT_ALPHA_MODE Option editor Alpha Func is typically used for textures with
alpha that simulate trees and other
complicated geometry having many holes.
The Alpha Func options allow to select what
pixels have to be skipped or rendered
according to a logical comparison. The pixel
alpha value is compared with the AlphaLimit
parameter and the decision to draw or skip this
pixel is taken according to the Alpha Func
mode:
Off
Disable this functionality
Never
Never draw
Less
Only draw the pixel if source Alpha
values are lower than AlphaLimit
Equal
Only draw the pixel if source Alpha
values are equal to AlphaLimit
LEqual
Only draw the pixel if source Alpha
values are lower or equal to AlphaLimit
Greater
Only draw the pixel if source Alpha
values are greater than AlphaLimit
NotEqual
Only draw the pixel if source Alpha
values are not equal to AlphaLimit
GEqual
Only draw the pixel if source Alpha
values are greater or equal to
AlphaLimit
Always
Always draw.
This mode of transparency is much faster
than normal transparency but has less
antialiasing quality.
MAT_Z_MODE Option editor When polygons are rendered they fill the Z-
buffer plane with the distance of each pixel to
the camera. This way it is possible to compare
and mask rendering of the following rendered
polygons in case their pixels are farther from
the camera than previous rendered polygons.
If you mask this plane then the polygon will
not hide any polygons rendered after it even if
they are farther.
ZFunc specifies the function used to compare
each incoming pixel z value with the z value
present in the Z-buffer plane. For example, if
Zfunc is Less and the incoming pixel z value is
less than the z value in the Z-buffer bit
planes, the comparison passes.
The available modes are:
Off
Disable Z-buffer.

253
Material List

Never
The Z-buffer function never passes.
Less
The Z-buffer function passes if the
incoming pixel z value is less than the z
value stored in the Z-buffer bit planes.
Equal
The Z-buffer function passes if the
incoming pixel z value is equal to the z
value stored in the Z-buffer bit planes.
LEqual
The Z-buffer function passes if the
incoming pixel z value is less than or
equal to the z value stored in the Z-
buffer bit planes. (This is the default
value.)
Greater
The Z-buffer function passes if the
incoming pixel z value is greater than the
z value stored in the Z-buffer bitplanes.
NotEqual
The Z-buffer function passes if the
incoming pixel z value is not equal to the
z value stored in the Z-buffer bitplanes
GEqual
The Z-buffer function passes if the
incoming pixel z value is greater than or
equal to the z value stored in the Z-
buffer bitplanes.
Always
The Z-buffer function always passes.
MAT_TENV_MODE Option editor Selects Decal or Modulate for applied
textures to the material. See the Pixel
rendering process.
MAT_SELSURF Selector editor Selects the surface texture.
MAT_TEXSUP_MODE Option editor Selects the mapping mode for the Surface
texture of the material.
MAT_SELREF Selector editor Selects the reflection texture.
MAT_TEXREF_MODE Option editor Selects the mapping mode for Reflection
texture of the material.
MAT_OFFSET_TEX Float3 editor Sets the offset value to displace the texture.
MAT_SCALE_TEX Float3 editor Sets the value to scale the texture.
MAT_TEX_ROTATION Float editor Sets a rotation texture angle.
MAT_SHADER_SURFACE Selector editor Selects the surface shader to be used by the
material in prender calculations.
MAT_SHADER_SURFACE_PAR String editor Sets the surface shader parameters used by
the material in prender calculations.
MAT_SHADER_DISPLACEMENT Selector editor Selects the displacement shader to be used
by the material in prender calculations.
MAT_SHADER_DISPLACEMENT_PAR String Sets the displacement shader parameters
editor used by the material in prender calculations.

254
Material List

MAT_SELBUMP Selector editor Selects the bump texture to be used by the


material in prender calculations.
MAT_TEXBUMP_MODE Option editor Enables or disables using the bump texture of
the material in prender calculations.
MAT_MATERIAL_INHERIT Toggle editor For compatibility purposes.
MAT_WIREFRAME Toggle editor Makes the material wireframe mode. This can
be helpful if you want to have an object with
both shaded and wireframe mode (duplicating
the object). Or to have some objects in
wireframe and others not.
MAT_LINEWIDTH Float editor Changes the width of the wireframe.
MAT_RMASK Toggle editor Shows the RGBA Red component of the
material.
MAT_GMASK Toggle editor Shows the RGBA Green component of the
material.
MAT_BMASK Toggle editor Shows the RGBA Blue component of the
material.
MAT_AMASK Toggle editor Shows the RGBA Alpha component of the
material.
MAT_STENCIL_FUNC Option editor This editor allows objects to be drawn in the
stencil buffer. Options are off, write and test.
Two objects are required to see the effect. One
must be in write mode and the other in test
mode and both must share the same
MAT_STENCIL_REF.
MAT_STENCIL_REF Integer editor Sets the plane of the stencil buffer to draw the
objects.
MAT_TEXLUMINANCE Texture selector editor Chooses a texture to be used as a luminance
for the material.
MAT_TEXLUMINANCE_FACTOR Float editor This editor sets how much the luminance
texture affects in the material.
MAT_MPASSSPEC Toggle editor Enables texture multipass.
MAT_TEXSPECULAR Texture editor Selects a texture to use as a specular material.
MAT_TEXBLEND Texture editor Selects a texture to blend with the surface
texture.
MAT_TEXBLEND_FACTOR Float editor Amount of blending.
MAT_TEXALPHA Texture editor Selects a texture to use as an alpha.
MAT_TEXBUMP Texture editor Selects a texture to use as a bump map. The
bump map is calculated from a normal map.
MAT_BUMPINESS Float editor Sets the amount of bumpiness in the material.
A value of 0 means no bump mapping.
MAT_BUMPINESS_INVERT Toggle editor Inverts the normal map to change the height.
MAT_SHADER_ENABLED Toggle editor Enables shaders capability.
MAT_SHADER_TEX04 Texture selector editor Selects a texture for this stage to be used from
a shader.
MAT_SHADER_TEX05 Texture selector editor Selects a texture for this stage to be used from
a shader.

255
Material List

MAT_SHADER_TEX06 Texture selector editor Selects a texture for this stage to be used from
a shader.
MAT_SHADER_TEX07 Texture selector editor Selects a texture for this stage to be used from
a shader.
MAT_COLOR_HSV Float3 editor Allows to specify colors using the Hue,
Saturation, Value format.

256
Texture List

Texture List
Description
Editors

Textures are referenced by materials when a picture has to be mapped in the surface of 3D
objects and hold properties about how the texture has to be applied.

The following texture types are implemented:

TexFile
The texture is an image file in RGB/RGBA, TIFF, TGA, JPEG, XPM, BW format in disk.

TexVideo
The texture is the live video input to the computer.
Textures can be configured to behave as Video textures. In this case the current video
input to the computer is taken as the picture that the texture has to apply. This is
extensively used when displaying screens with live video information.

TexProjector
The texture is an animated sequence of images (See the projector List).
When the texture references a projector then the projector pictures are used as the
pictures to apply. The visual effect is the same as the Video texture mode but in this case,
the changing pictures are taken from the projector.

TexFramebuffer
The texture is internally built from the actual frame buffer. The texture can be updated
continuosly (for every frame) or at specific events.

TexGradient
The texture is internally built and can generate useful textures.

Tex3D
The hardware can manage a list of textures and navigate between them to form a 3D
texture. Examples
of use are medical images. You can have slices of a brain and form with them a 3D texture
using a polygon instead of complex geometry.

259
Texture List

TexCubeMap
Cube mapping is a techique that uses six two-dimensional images to form a texture cube
centered at the origin. Cube maps can be used to simulate reflections, refractions and to
define sky-boxes.

The 6 images that defines a cubemap can be generated placing a camera (real or virtual) in a
point and taking six squared snapshotw with a 90 degrees fov. Orientating the camera along
the positive and negative axis. It´s adecuate to assign to each snapshot names codified with
suffix _XPos, _XNeg, etc. (like sample sky_XPos.rgb,sky_XNeg.rgb,sky_YPos.rgb,sky_YNeg.rgb,
sky_ZPos.rgb and sky_ZNeg.rgb), this helps in the process of loading all the cubemap images.

260
Texture List

To use a cube map its necessary to have a material with the "MAT_TEXSUP_MODE" editor
set to "MapRefCube", and this material must be using a texture of type "TexCubeMap".

The editors (TEX_CUBEMAP_XPOS, TEX_CUBEMAP_YPOS ...) select the image


corresponding to each face of the cube. When you select the Xpos image, it check if the other
files ended in _YNeg, etc exist, and load it automatically.

The Show editor in this kind of texture is special, showing all the faces of the cube, that must
be viewed as a continuous view.

TexMovie
Movies are encoded using special codecs that can be quite different one from each other. This
codecs are programmed by different people and it can be a nightmare to find the correct
Thereare several webpages from where codecs can be downloaded. The most famous is
www.divx.com where you can get the latest divx codecs.

261
Texture List

The problems with codecs arise when you take a eStudio database that uses movie files that
use one codec and open it in a different computer. If the computer does not have the same
codecs installed, the movies will not play and everything can be ruined.
The solution is knowing what codecs are the movies using and taking them with you to the
other computer or using eStudio own m2v internal codec.
The only thing you need to use our codec is rename the movie filename extension to .m2v
and our internal codec will be used instead. There is one limitation, the codec does not
support audio at this moment. It is a big one but often movies without sound are used in
eStudio as moving textures. Another advantage (besides portability) is that seeking time is
instantaneous. Apart to that you can use movies in AVI, MPG or Quicktime format.

TexMemMovie
The texture is an image file in AVI, MPG or Quicktime format in disk that is read to the
graphic card main memory as an array of picture frames. The problem with this format is that
you can fill the memory available very easily.

Textures can be created and configurated by the user or can be automatically generated when
loading 3D objects, in this case the properties of that textures can also be later modified by the
user.
If a texture is created but no picture is specified for it then the default internal picture is used. This
picture is made of four pixels of interleaved black and white colors.

Texture pictures are mapped in the 3D objects according to the texture coordinates of the objects
definition. This mapping can be altered by using the Scale, Origin and Rotation properties of the
texture. Also the Autorepeat mode can be set to determine what happens when the texture
coordinates wrap around the zero to one margin. Note that also the material referencing the
texture can apply a texture transformation (Scale, Origin and Rotation) that is composed with
the texture values.

Texture pictures are read from disk and hold in memory as long as the texture is referenced. The
amount of bits (16 or 32 that each pixel occupies in memory) can be specified according to the
needed quality and the available memory by selecting the HighRes mode.

When a texture picture becomes too small or too big when projected in the screen it may produce
visual distractions that may be corrected by using some special filters. The MipMap technique saves
in memory different filtered versions of the picture ready to be used according to the size of the
projected texture in the screen. In addition, magnification and minification filters can be specified.

Texture pictures resolution have to be always power of two dimensions. (That is, 1, 2, 4 ,8, 16, 32,
64, 128, 256, 512, .etc.) If they are not they will be automatically resized when the image is loaded
from disk.
The Power mode allows to resize the texture to half or fourth of the loaded resolution. This option
is useful to save texture memory and check the quality of the resized textures. Also a Null mode
allows to totally discard the picture and use the default undefined texture.

262
Texture List

Resizing textures when loading them take some procesing time that can be avoided by saving the
resized texture in disk and use it for the next times the texture has to be loaded. The Flatten
actions performs this operation. The filename for the stored texture is appended the pw2
extension.

When 3D painting is active an external 2D painting program (gimp) is run in parallel with eStudio.
When 3D painting starts, a common memory zone is created to be shared between both programs
where changes to picture are communicated, when 3D painting quits the shared memory is
released.

The texture image selected in the texture List is the one being used between both programs.

The communication through the shared memory is bidirectional:

Gimp to eStudio
All the changes done to the picture by using gimp are instantaneously reflected in the
eStudio texture.

eStudio to Gimp
All the changes done to the picture by eStudio are reflected in gimp. In particular, eStudio
allows to 3D paint on the texture by having gimp pencil painting in some picture coordinates
calculated by eStudio .
3D painting is entered when gimp is active and the Alt key is pressed, then moving the
mouse pointer on the selected texture in the GFX Window.

This option is only implemented on IRIX platforms.

The communication between eStudio and gimp is done through a standard gimp plugin and this
imposes several limitations and (in the current version of the communication) some care should be
taken in the following points:

3D painting should be started and quit by eStudio. If gimp quits by himself eStudio does not
know about it and may crash.

gimp should change only the contents of the picture but never open another image for it or

263
Texture List

changing its resolution. These changes should be made by eStudio by selecting another
textures or by changing the resolution using the Built texture options.
In particular, adding or removing an alpha channel to the picture should be done using the
TEX_BUILT_RES_Z Option editor.

The modified image should be saved by eStudio by pressing the TEX_BUILT_SAVE Button
editor, and can be reloaded using the TEX_BUILT_LOAD Button editor.
While 3D painting is active the picture is continuosly being transfered to and from memory
and this may affect eStudio simulation performance (mainly for big pictures). Thus, 3D
painting should be quit as soon as 3D painting has finished.

The generated system shared memories can be checked using the unix commands:

ipcs -m. List the current shared memories.


ipcrm -m line. Removes a shared memory.

A script ipcrmall which removes all shared memories is provided in /usr/Brainstorm/bin

TEX_TYPE Option editor Selects the texture type.


TEX_SHOW Toggle editor When active an extra window is opened
showing the selected texture image. You can
press some keys while the focus is on this
window. Pressing the r, b, g keys shows the
red, blue and green channel, pressing the c key
shows the color channel and pressing the space
key shows the complete channel. Behind the
pictures you can see a square pattern that can
be toggled by pressing the t key to be able to
see textures with lighter colors.
TEX_BUILT_3DPAINT Toggle editor When toggled ON/OFF starts or quits 3D
painting.
TEX_BUILT_RES_X Option editor Changes the horizontal resolution in a texture
of TexBuilt type.
TEX_BUILT_RES_Y Option editor Changes the vertical resolution in a texture of
TexBuilt type.
TEX_BUILT_RES_Z Option editor Changes the number of bits per pixel in a
texture of TexBuilt type.
TEX_FILE File editor Selects the file in a texture of TexFile type.
TEX_VIDEO_INPUT Option editor Selects the video source in a texture of
TexVideo type. Only Infinite reality systems
with more than one DIVO video board can
have more than one video input.
TEX_PROJECTOR Selector editor Selects the projector in a texture of
Projector type.
VTEX_PROJOFF Integer editor Specifies an offset to be applied to the
projector in a texture of Projector type.

264
Texture List

TEX_FB_DYN Toggle editor When active selects the continuosly updating


mode in a texture of TexFrameBuffer.
Continuosly updating this texture is usually
too time consuming to be used in real time.
TEX_FB_MODE Toggle editor Selects one of two techniques in a texture of
TexFrameBuffer type. Used internally for
debugging.
TEX_FB_GET Button editor When pressed updates a texture of
TexFrameBuffer type.
TEX_BUILT_FILE File editor Selects the file from where to load and save a
texture of TexBuilt type.
TEX_BUILT_LOAD Button editor Loads the file defined in TEX_BUILT_FILE for
a texture of TexBuilt type.
TEX_BUILT_SAVE Button editor Saves the current Built texture image in the
file defined in TEX_BUILT_FILE.
TEX_PATTERN Option editor Selects the pattern to use in a texture of
TexPattern type.
TEX_DEG_GRAD Gradient editor Selects the gradient of colors in a texture of
TexPattern Gradient type.
TEX_DEG_TYPE Option editor Selects the gradient type in a texture of
TexPattern Gradient type.
Linear. The gradient of colors is linearly
distributed.
Radial. The gradient of colors is distributed
radially.
TEX_DEG_REPEAT Option editor Selects the repetition type in a texture of
TexPattern Gradient type.
None. The gradient is not repeated.
ShawTooth Wave. The gradient is repeated
as it is.
Triangular Wave. The gradient is repeated by
inverting the previous one.
TEX_DEG_SIZE Float editor Sets the size of the calculated gradient in a
texture of TexPattern Gradient type.
Modifying this value increases the gradient
repetition.
TEX_DEG_POSX Float editor Sets the horizontal origin of the gradient in a
texture of TexPattern Gradient type.
TEX_DEG_POSY Float editor Sets the vertical origin of the gradient in a
texture of TexPattern Gradient type.
TEX_DEG_ROT Float editor Sets the rotation of the gradient in a texture
of TexPattern Gradient type.
TEX_FLARE_TYPE Option editor Sets the flare type of a texture of TexPattern
Flare type. The different patterns that usually
make a flare are available:
Composite, Glow, Disc, Hole, Ring
TEX_FLARE_COLOR_SINGLE Color editor Sets the color for the Glow, Disc, Hole and
Ring flare types.
TEX_FLARE_COLOR_CENTER Color editor Sets the color for the center of the Composite
flare.

265
Texture List

TEX_FLARE_COLOR_GLOW Color editor Sets the color for the glow of the Composite
flare.
TEX_FLARE_COLOR_INNER Color editor Sets the color for the inner of the Composite
flare.
TEX_FLARE_COLOR_OUTER Color editor Sets the color for the outter of the Composite
flare.
TEX_FLARE_COLOR_HALO Color editor Sets the color for the halo of the Composite
flare.
TEX_FLARE_ALPHA_SINGLE Float editor Sets the alpha for the Glow, Disc, Hole and
Ring flare types.
TEX_FLARE_ALPHA_CENTER Float editor Sets the alpha for the center of the
Composite flare.
TEX_FLARE_ALPHA_GLOW Float editor Sets the alpha for the glow of the Composite
flare.
TEX_FLARE_ALPHA_INNER Float editor Sets the alpha for the inner of the Composite
flare.
TEX_FLARE_ALPHA_OUTER Float editor Sets the alpha for the outter of the
Composite flare.
TEX_FLARE_ALPHA_HALO Float editor Sets the alpha for the halo of the Composite
flare.
TEX_FLARE_SIZE_SINGLE Float editor Sets the size for the Glow, Disc, Hole and
Ring flare types.
TEX_FLARE_SIZE_CENTER Float editor Sets the size for the center of the Composite
flare.
TEX_FLARE_SIZE_GLOW Float editor Sets the size for the glow of the Composite
flare.
TEX_FLARE_SIZE_INNER Float editor Sets the size for the inner of the Composite
flare.
TEX_FLARE_SIZE_OUTER Float editor Sets the size for the outter of the Composite
flare.
TEX_FLARE_SIZE_HALO Float editor Sets the size for the halo of the Composite
flare.
TEX_FLARE_SIZE_BRIGHTNESS Float editor Sets the flare brightness.
TEX_FLARE_SIZE_SATURATION Float editor Sets the flare saturation.
TEX_FILES3D LFile editor Selects the list of files of a texture of Tex3D
type.
TEX_MIPMAP Option editor Selects the texture MipMap mode, the
following modes are implemented:

MipMapOff
No MipMap filtering is applied
MipMapAuto
MipMap filtering is automatically applied
MipMapSelect
MipMap filtering is applied according to the Bias
parameter controlled by the user.This option
can be useful to simulate out of focus textures.

266
Texture List

TEX_HIGHRES Toggle editor Sets the amount of bits (16 or 32 that each
pixel occupies in memory) according to the
needed quality and the available memory by
selecting the HighRes mode.
TEX_LOD_BIAS Float editor Sets the parameter that controls the texture
to use when MipMap mode is Select.
TEX_MINFILTER Option editor Selects the minification filter.
TEX_MAGFILTER Option editor Selects the magnification filter.
TEX_OFFSET Float3 editor Sets the offset to apply to the texture.
TEX_SCALE Float3 editor Sets the scale to apply to the texture.
VTEX_ROTATION Float editor Sets the rotation to apply to the texture.
TEX_REPEAT Toggle editor Specifies if texture has to be repeated or
clamped when applied.
TEX_POWER Option editor Allows to resize the texture to half or fourth
(PowerHalf / PowerFourth) of the file
resolution. This option is useful to save
texture memory and check the quality of the
resized textures. Also a PowerNull mode
allows to totally discard the picture and use the
default undefined texture. PowerWhole uses
the whole texture.
TEX_FLATTEN Button editor This action saves the resized texture to disk so
that it will not need for resizing the next time
the texture is loaded from disk.
TEX_TILE_MODE Toggle editor When active the texture will be modified to
have tileable borders. This is usefull when the
texture is going to be repeated and the
repetition should become less noticeable.
TEX_TILE_MARGIN Integer editor Sets the margin of the picture that should be
used when calculating the tileable texture.
TEX_LOAD_CLIP_X1 Float editor Sets the initial horizontal value that should be
clipped from the texture image when loaded
from disk.
TEX_LOAD_CLIP_Y1 Float editor Sets the initial vertical value that should be
clipped from the texture image when loaded
from disk.
TEX_LOAD_CLIP_X2 Float editor Sets the final horizontal value that should be
clipped from the texture image when loaded
from disk.
TEX_LOAD_CLIP_Y2 Float editor Sets the final vertical value that should be
clipped from the texture image when loaded
from disk.
TEX_LOAD_BRIGHTNESS_R Float editor Set a brightness factor for every component to
be applied to the texture image when loaded
from disk.
TEX_LOAD_BRIGHTNESS_G Float editor Set a brightness factor for every component to
be applied to the texture image when loaded
from disk.

267
Texture List

TEX_LOAD_BRIGHTNESS_B Float editor Set a brightness factor for every component to


be applied to the texture image when loaded
from disk.
TEX_LOAD_BRIGHTNESS_A Float editor Set a brightness factor for every component to
be applied to the texture image when loaded
from disk.
TEX_LOAD_SATURATION_R Float editor Set a saturation factor for every component to
be applied to the texture image when loaded
from disk.
TEX_LOAD_SATURATION_G Float editor Set a saturation factor for every component to
be applied to the texture image when loaded
from disk.
TEX_LOAD_SATURATION_B Float editor Set a saturation factor for every component to
be applied to the texture image when loaded
from disk.
TEX_LOAD_SATURATION_A Float editor Set a saturation factor for every component to
be applied to the texture image when loaded
from disk.
TEX_BUILT_CAPTURE Button editor Captures the contents of the GFX Window.
TEX_CENTER Float3 editor Changes the center of the texture rotation.
VTEX_ROTATION Float editor To rotate the texture.
TEX_REPEAT Toggle editor Repeats the texture.
TEX_ISOLATE Button editor Saves the texture in the local database path.
TEX_TO_JPEG Button editor Converts and saves the texture to Jpeg
format.
TEX_TILE_MODE Toggle editor To enable tiles.
TEX_MOVIE_FILE Option editor To select a movie file to load from disk.
TEX_MOVIE_PAUSE Button editor Pause the movie reproduction.
TEX_MOVIE_RUNREV Button editor Runs reverse the movie.
TEX_MOVIE_RUNFWD Button editor Runs Forward the movie reproduction.
TEX_MOVIE_TOEND Button editor The reproduction head goes to the end of the
movie.
TEX_MOVIE_TOSTART Button editor The reproduction head goes to the start of the
movie.
TEX_MOVIE_STEPREV Button editor Allows for step by step reverse reproduction.
TEX_MOVIE_STEPFWD Button editor Allows for step by step fordward reproduction.
TEX_MOVIE_LOOP Toggle editor Loop the movie reproduction.
TEX_MOVIE_POS Float editor To go to a movie position.
TEX_DEG_PRESETS Preset editor Selects one of the default presets for gradients.
TEX_DEG_POWEXP Float editor Uses an exponential function to change the
gradient appearance.
TEX_CUBEMAP_XPOS Selector editor Select the image corresponding to the XPOS
face of the cube.
TEX_CUBEMAP_XNEG Selector editor Select the image corresponding to the XNEG
face of the cube.

268
Texture List

TEX_CUBEMAP_YPOS Selector editor Select the image corresponding to the YPOS


face of the cube.
TEX_CUBEMAP_YNEG Selector editor Select the image corresponding to the YNEG
face of the cube.
TEX_CUBEMAP_ZPOS Selector editor Select the image corresponding to the ZPOS
face of the cube.
TEX_CUBEMAP_ZNEG Selector editor Select the image corresponding to the ZNEG
face of the cube.

269
Projector List

Projector List
Description
Editors

Projectors group sequences of pictures to be used as animated movies when assigned to the
projector property of a texture.

The sequence of pictures is stored in memory, accessed, and displayed later one at a time to
achieve the animated effect. Many pictures are needed to achieve only a few seconds of animation
that is why projectors are usually made of small pictures and they do not last very much.

The resolution of each individual picture should be power of two dimensions.

The pixel depth for the stored pictures can be reduced or kept as the original value according to the
user consideration by using the HighRes mode.

Pictures can be stored in memory in two places:

In texture memory.
In main memory.

Texture memory is usually much smaller than main memory, for example, texture memory is
limited to 16 Mb in Reality engine or 64 Mb in Infinity Reality systems, while main memory is user
customizable and may be something like 512 Mb or more. (Though some systems like O2 make no
difference between texture and main memory).

Texture pictures always have to be in texture memory when being used, that is, when they are
actually being mapped in polygons, but they can also reside in main memory so they can be
quickly fetched, loaded into texture memory for use, and then discarded again from texture
memory to make room for another pictures.

Projectors can be configured to have all pictures in texture memory or can be told to load and
discard pictures from main memory.

Projectors show the animated sequences driven by a timer evolution. No matter what the number
of pictures in the projector is, they are shown from beginning to end when the timer evolves from
its initial to final position.

273
Projector List

That means that if the number of pictures in the projector is different from the timer's length or
the timer evolution is not linear, then some pictures may be skipped or some of them may stay in
the movie for more than one frame.

To solve this situation the timer can be told to have the same length as the projector number of
pictures and set the timer Linearity property to 100 percent by using the Adjust Length button.

PROJ_TIMER Selector editor Selects the projector timer.


PROJ_ADJUSTLENGTH Button editor This action sets the timer length to the number
of pictures in the projector.
PROJ_SUBTEX Toggle editor Sets the mode of operation to load pictures from
main memory to texture memory and then
discard.
PROJ_HIGHRES Toggle editor Sets to high or low resolution pixel depth for the
stored pictures.
PROJ_FILES LFile editor Specifies the list of files to be loaded from disk.
PROJ_POWER Option editor Selects the type of reduction applied to the
textures.
PROJ_FLATTEN Button editor Converts the textures to rgb format.
PROJ_TILE_MARGIN Float editor To control the tiling of the projector.
PROJ_LOAD_CLIP_X1 Float editor X1 Coordinate to clip the texture to load.
PROJ_LOAD_CLIP_Y1 Float editor Y1 Coordinate to clip the texture to load.
PROJ_LOAD_CLIP_X2 Float editor X2 Coordinate to clip the texture to load.
PROJ_LOAD_CLIP_Y2 Float editor Y2 Coordinate to clip the texture to load.
PROJ_LOAD_BRIGHTNESS_R Float editor Changes the brightness red component of the
loaded textures.
PROJ_LOAD_BRIGHTNESS_G Float editor Changes the brightness green component of the
loaded textures.
PROJ_LOAD_BRIGHTNESS_B Float editor Changes the brightness blue component of the
loaded textures.
PROJ_LOAD_BRIGHTNESS_A Float editor Changes the brightness alpha component of the
loaded textures.
PROJ_LOAD_SATURATION_R Float editor Changes the saturation red component of the
loaded textures.
PROJ_LOAD_SATURATION_G Float editor Changes the saturation green component of the
loaded textures.
PROJ_LOAD_SATURATION_B Float editor Changes the saturation blue component of the
loaded textures.
PROJ_LOAD_SATURATION_A Float editor Changes the saturation alpha component of the
loaded textures.

274
Sound List

Sound List
Description
Editors

Sounds can be played from inside eStudio. They are usually played at the same time another
eStudio event happens, likes objects moving, etc.

The Sound List

Sounds are read from the files that store them at the same time they are played by holding in
memory only a small buffer with the actual sound data being played.

A timer can be used to launch a sound. By default only the initial state of the timer is used, that
is, once launched the timer, evolution is not related to the sound being played. Any way, the
evolution of the sound can also be accommodated to the evolution of the timer, though this mode
is useful only for editing purposes and it should never be used in production situations because the
quality of the sound is lower and also it imposes a penalty in eStudio performance.

Sounds can also be played without any timer by sending its Play action to the List of Events. In
fact, this is the most common way of launching sounds.

277
Sound List

The initial and final position of the sound can be specified to clip some parts of it.

The volume of the sound can also be customized. However, due to IRIS Sound Libraries, this
volume will only affect the headphones output of the computer, not the line out.

eStudio has the capability of creating 3D positional sound using help from OpenAL library
(www.openal.org). Objects can be set as emitters for sound by binding their displacement editor
OBJ_DISPLACEMENT to the Sound list SOUND_POSITION float3 editor. This way when you
move the object you can hear the sound vary as it moves.

Also, the object can be in some place without moving and be the camera the one that moves, so we
can set a camera to be the one that 'listens'. This can be done from the Modes list, in the
Preferences/Value Modes tab, in the Sound Listener editor that allows to select a camera that is
attached to a pipe.

To be able to use this capability, one dll (Openal32.dll) should be installed in your system. If you
installed eStudio using the Brainstorm installer the dll will be already installed and if not you can
get it from OpenAL webpage. In that page you can find an installer that puts the dll in the correct
place in your hard disk.

SOUND_FILE File editor Selects the audio file for the sound. In Iris it
should be in .aifc format and in Windows it can
be in .aifc format mp3 or wav format. In
windows the same libraries that media player
uses are used in eStudio so nearly all sound
formats that windows reads should be read by
eStudio.
SOUND_PLAY Button editor Plays the sound.
SOUND_STOP Button editor Stops the sound.

278
Sound List

SOUND_LENGHT Float editor How much it lasts the sound.


SOUND_TABLE Selector editor Selects the curve to convert the sound to a
table.
SOUND_VOLUME_LINKED Toggle editor When active the left and right volume controls
will change linked.
SOUND_FINI Float editor Sets the start position (normalized zero to one)
of the sound.
SOUND_FEND Float editor Sets the final position (normalized zero to one) of
the sound.
SOUND_LVOLUME Float editor Sets the volume for the left channel of the
sound. (Only headphones).
SOUND_RVOLUME Float editor Sets the volume for the right channel of the
sound. (Only headphones).
SOUND_TABLE_TIMER Selector editor Selects the timer to convert the sound to a
table.
SOUND_TABLE_SAMPLES Float editor How many frames per second for the conversion.
SOUND_TOTABLE Button editor Converts the sound to a table.
SOUND_PRELOAD Button editor The first time a sound is opened, it is sent to
windows cache memory for play. To avoid de-
syncronization when playing sounds there is this
editor that when pressed makes the opening of
the sound file.
SOUND_LOOPTIMES Integer editor To repeat the reproduction of the sound.
SOUND_IS_ACTIVE Toggle editor This editor is on when the sound is playing. For
binding purposes.
SOUND_VOLUME Float editor Controls the volume of the sound.
SOUND_BALANCE Float editor Controls the balance of the sound. A value of -1
means left speaker, a value of 1 means right
speaker.
SOUND_SPEED Float editor Controls the speed of the reproduction.
SOUND_POSITION Float3 editor In 3D positional sounds objects are the sound
emitters. The position of an object can be binded
to this editor so the sound is played from the
object.

279
Pencil List

Pencil List
Description
Editors

The pencil List holds different configurations used from the drawing List. It specifies the
geometry aspect of the drawing.

283
Pencil List

PENCIL_MODE Option editor Selects the pencil mode.

PENCIL_ORIENTA Option editor Selects the orientation mode for the generated
sections.
Four different drawing modes can be selected:
AutoOrienta
XOrienta
YOrienta
ZOrienta

PENCIL_OBJS Selector editor Selects an object to draw with.

PENCIL_MAT Selector editor Selects the material for the generated


polygons.
DRAW_VERTEX Integer editor Sets the amount of vertices in one section for
Strip drawing mode.

DRAW_RADIUS Float editor Sets the radius of the section in Strip drawing
mode. This value combined with the scale
factor of the Pointer Pivot regulates the size of
the corresponding drawn geometry.
DRAW_DLIMIT Float editor Sets the distance from section to section in
Strip drawing mode, the distance from Axis to
Axis in Axis drawing mode or the distance
from object to object in Object drawing
mode.

PENCIL_COLOR_ON Toggle editor Enables the drawing with the color especified
in the PENCIL_COLOR editor.
PENCIL_COLOR Float3 editor Selects the color for the drawing.
DRAW_RAND_ANGLE Float3 editor Draws the object at random angles.
PENCIL_OBJ Selector editor Selects an object to draw.

284
Flow List

Flow List
Description
Editors
Tutorial

Flows are used to simulate force fields that interact with particles.

The following flow types are implemented:

Uniform
The flow has a uniform Direction in the whole space.

Source
The flow direction is radial from Point and decreases with the distance to Point.

287
Flow List

Dipole
The flow is constructed by adding two sources of negative and positive intensity separated by
a Distance.

Vortex
The flow rotates around Direction with center in Point and decreases with the distance to the
axis.

288
Flow List

Lineal Source
The flow is radial from the line with Direction passing through Point and decreases with the
distance to the axis.

Flat Source
The flow has a uniform Direction and decreases with the distance to Point.

289
Flow List

Turbulence
The flow direction coordinates are given a sinusoidal function of the position coordinates.

It is enough to understand the concepts above to work with flows, but if you are interested here
are the mathematical descriptions:

Uniform
Flow(P) = Intensity * Direction

Source
V = P - Point
Flow(P) = Intensity * V / (V * V)

Vortex
V = Direction ^ (P - Point)
Flow(P) = Intensity * V / (V * V)

Lineal Source
V = (Direction ^ (P - Point)) ^ Direction
Flow(P) = Intensity * V / (V * V)

290
Flow List

Flat Source
V = Direction * (P - Point)
Flow(P) = Intensity * Direction / (V * V)

Where:
P means a point in space
V1 * V2 means the dot product of vectors
V1 ^ V2 means the cross product of vectors

All the flows with the Visible mode toggled ON are added together and the resulting flow is
visualizated.
A representation of the shape of the flow can be made visible by drawing lines that follow the force
field. This is accomplished in the following way:

Flow lines are rendered by selecting a point in space and drawing a line starting from that point and
measuring the strength of the flow multiplied by the visualizing scale parameter. The process is
then repeated taking as new origin the end of the previous line. The steps parameter regulates the
number of times this process is repeated.

The number and position of points that generate flow lines is specified by a tridimensional grid
whose origin, length and resolution is user configurable.

Some work is always needed to customize the visualization parameters of the flow by modifying
the scales, resolution and region of space where the flow has to be visualized.

FLOW_TYPE Option editor Selects the flow type.

FLOW_VIEW Toggle editor Sets the visible mode of the flow.

FLOW_ACTIVE Toggle editor Enables or disables the flow.

FLOW_INTENSITY Float editor Intensity of the flow.

291
Flow List

FLOW_PTO Float3 editor Specifies a point in space used to determine


the position of some flow types.

FLOW_DIR Float3 editor Specifies a direction in space used to determine


the orientation of some flow types.
FLOW_DIPOLEDIST Float editor Distance that separates the two sources of a
dipole flow.

FLOW_TURBULENCE_PHASE Float3 editor Phase of the angle in every coordinate for the
Turbulence flow.
FLOW_TURBULENCE_SPEED Float3 editor Speed of the angle in every coordinate for the
Turbulence flow.

FLOW_VIEW_SCALE Float editor When the flow is being visualized sets the
scale for visualizing.
FLOW_VIEW_STEPS Integer editor When the flow is being visualized sets the
number of steps for every visualized flow line.

FLOW_NVISIBLE Float3 editor When the flow is being visualized sets the
number of flow lines for every axis.
FLOW_MINVISIBLE Float3 editor When the flow is being visualized sets the
minimum corner of the visualized box region.

FLOW_LENVISIBLE Float3 editor When the flow is being visualized sets the
length of the visualized box region.

292
Atom List

Atom List
Description
Editors

Atoms are symbolic representations of the dynamic properties of objects. When dynamic
calculations are performed on a 3D object a simplified representation of the object in terms of
atoms is used instead of the 3D object itself.

Atoms are only used as containers for values. How these properties are used for calculations is up
to the List that references the atoms.

The following properties are related to an atom:

Pivot
The 3D position and orientation of the atom (See the Pivot List).

Area
The area of the object concentrated in the point.

Mass
The mass concentrated in the point.

Radius
The radius for the occupied volume.

Normal
The module of the perpendicular direction to the Area.

Tangent
The module of the tangent direction to the Area.

295
Atom List

Atoms are referenced by molecules to form more complex dynamic structures.

ATOM_PIVOT Selector editor Edits the pivot to use for positioning and
orientation.
ATOM_AREA Float editor Edits the atom area.
ATOM_MASS Float editor Edits the atom mass.
ATOM_RADIUS Float editor Edits the atom radius.
ATOM_KNORMAL Float editor Edits the atom normal module.

ATOM_KTANGENT Float editor Edits the atom tangent module.

296
Molecule List

Molecule List
Description
Editors

Molecules are used to form group of atoms.

When dynamics are being calculated on objects it is too complex to base the calculation on every
face of the geometry. Thus a simpler representation of the object as a collection of points in space
(atoms) is used instead.

At the moment molecules have no other property but a list of atoms.

MOL_ATOMS LSelector editor Selects the list of atoms that form the
molecule.

299
Shader List

Shader List
Description
Editors

eStudio draws everything by using a helper library, OpenGL. This library can draw lines, polygons,
textures and can also perform lighting calculation, 3D projection and more. Every OpenGL sentence
is programmed to do exactly one well defined thing. Enabling or disabling textures, configuring the
viewport, drawing lines with a specific color... all this can be done by calling OpenGL instructions.
But in many situations is not easy to draw what you want by using only OpenGL. You need to adapt
the fixed algorithms programmed inside OpenGL to extend the drawing process. For example,
when OpenGL calcules the light it uses a special algorithm, Gouraud, to do that thing. If you want
to draw using another lighting model you can't. The solution to this problem is modify the fixed
programs that are stored inside the OpenGL pipeline. To modify those programs you can use a
special language, the OpenGL Shading Language, and the new programs you install and use are
called Shaders.

In the current release of eStudio there are some issues with Shaders you must know:

Multipass with Shaders is currently not natively supported, but we are researching procedures to
do that by using the scene-graph generic capabilities.

1D Textures are not supported.

Resources like Render-To-Texture for shaders are not supported yet.

To establish an active shader in eStudio you must write code for the Vertex shader and for the
Fragment shader:

Vertex Shader Code is used for tasks such as vertex positioning transformation using the
modelview and projection matrices, normal transformation and if required its normalization, texture
coordinate generation and transformation and per vertex color and lighting computation.

Fragment Shader Code is responsible for operations like computing colors and texture coordinates
per pixel, texture application, fog computation and computing normals if you want lighting per pixel.

303
Shader List

In addition to this GLSL Shaders with IPF v10 readme, we recommend you to read other documents
that contain information pertinent to specific issues developing shaders. The following list contains
the names of related readme documents and their locations on the web.

Content Name File Name Location


OpenGL - The Industry index.htm http://www.opengl.org
Standard for High
Performance Graphics
OpenGL 2.0 Specification opengl_current_version.htm http://www.opengl.org/documentation/opengl_current_version.html
ShaderTech - GPU index.html http://www.shadertech.com
Programming
NVidia FX Composer fx_composer_home.html http://developer.nvidia.com/object/fx_composer_home.html
ATI Developer: index.html http://www.ati.com/developer/rendermonkey
RenderMonkey ToolSuite

To work with shaders you must provide the necessary resources by using eStudio. The shader
resources could be, in short:

Vertices, Normals and Texture Coordinates


Textures (2D, 3D, CubeMaps)
Light Parameters (Position, Type, Color, ...)
Special "Uniform" Parameters

Every resource must be defined using editors in eStudio. For example, to load a texture you must
provide a image file into the MAT_SELSURF editor.

Resource Editors Semantic


Vertices, Matrix transforms, None. Vertices are send Vertices are the 3D positions that defines the polygons for
Normals, ... automatically by eStudio. a 3D model in the space.

Vertex Program:
gl_Position -> Vertex Position
gl_TexCoord[N] -> Texture Coordinate (Unit N)
gl_Normal -> Normal Vector
gl_ModelViewMatrix -> Transform from model to view
gl_ProjectionMatrix -> Transform to project 3D to 2D
Textures MAT_SELSURF, unit 0 Textures are loaded from disk image files and are used for
MAT_SHADER_TEX04, unit 4 things like texturing, store normals and customized data
MAT_SHADER_TEX05, unit 5 for special effect shaders. When you want to use a texture
MAT_SHADER_TEX06, unit 6 you must load a image file from an editor and then set up
MAT_SHADER_TEX07, unit 7 the correct value for the unit into the uniform parameter

Fragment Program:
uniform sampler2D tex = 0; -> Texture in MAT_SELSURF
...
vec4 color = texture2D(tex, gl_TexCoord[0]);
Light Parameters None. Light parameters are Light parameters can be getted like any other predefined
send automatically by IPF. uniform.

Fragment Program:
gl_LightSource[0].position -> Light0 position
gl_LightSource[0].ambient -> Light0 ambient color
Special Uniform Parameters IPF creates new extra editors Any special value you want to pass to your shader, like
within the extra toggle and bump mapping height, animation, etc.
connects the editor value
with the uniform parameter

304
Shader List

A uniform parameter is a global variable that may change per primitive. Typically this variables are
parameters that the user can set to parametrize the operation and funcionality of either the vertex
shaders or fragment shaders. For the shaders this is a read only variable.

eStudio creates new editors for every uniform parameter you add to your shaders. In the following
example we will create a shader with a uniform parameter that draws the geometry with a custom
color.

Create a new object primitive (for example a DataBar) and add it a new material.
From this material create a new shader and copy the following code to the vertex tab.

void main()
{
gl_Position = ftransform();
}

Copy the following code to the fragment tab

uniform vec4 color;


void main()
{
gl_FragColor = color;
}

Press the compile button and select the "extra" toggle to see the extra editors created for your
shader

You will see a special editor labeled "color" like this:

If you want you can change the editor type by selecting it from the popup menu. To do that press
the right mouse button on the color label and select Control -> Editor Extra -> Float Type ->
FloatRGBA. You can then select the color you want and see the results on the 3D view.

305
Shader List

For every uniform you write in the code (Vertex or Fragment) you will see a new editor into the
extra toggle when you press the compile button.

If you intend to use texture inside your Shaders, you must do the following steps:

Select the textures using eStudio editors like MAT_SELSURF or the ones located on the Shader
list.
Create uniform parameters of type sampler2D, sampler3D or samplerCube.

When you do that and compile your shader you will see extra editors for the textures and you can
select only a positive integer number for its value. This integer value is the unit number where your
texture is loaded. The unit numbers are:

306
Shader List

0 for MAT_SELFSURF
4 for MAT_SHADER_TEX04
5 for MAT_SHADER_TEX05
6 for MAT_SHADER_TEX06
7 for MAT_SHADER_TEX07

This MAT_SHADER_TEXT0x editors are what we call stages and allow you to load extra textures
besides the ones in the Material list Textures tab.

The following example shows how to create a shader to create a Plane where a video is rendered
and mixed with another video.

Create a plane with a material.

Create a new texture on the MAT_SELSURF of type TexMovie, select a .avi file a start that
movie. You will see the movie rendered on the plane.

Create a new Shader for the selected material.

Create a new texture on the MAT_SHADER_TEX04, set type movie and select another .avi file.
You will not see the second movie.

Copy the following code to the Vertex tab.

void main()
{
gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0;
gl_Position = ftransform();
}

Copy the following code to the fragment tab.

uniform sampler2D tex1;


uniform sampler2D tex2;
void main()
{
vec4 color1 = texture2D(tex1, gl_TexCoord[0]);
vec4 color2 = texture2D(tex2, gl_TexCoord[0]);
gl_FragColor = color1 + color2;
}

307
Shader List

Press the compile button.

Set the following values in the extra editors.

You will see the two movies mixed in the same plane. The ecuation of mixing is adding the first
color (from the first movie) with the second color (the second movie).

308
Shader List

Blob Shader Phong Shader

Renderman Toy Shader Simple Bump Shader

Refraction Lighting Shader Procedural Bump Shader

309
Shader List

Parallax Mapping Shader Moon Shader

MandelBrot Shader Fur Shader

Earth Clouds Shader Bump Earth Shader

310
Shader List

SHADER_PRESETS Preset editor Selects one of the predefined presets. By default,


only Phong and BumpMapping are available. As
always with this editor, you can create your own
presets. They will be saved with the name that
the shader has in the list.
SHADER_VERTEX_CODE String editor In this editor you can write the code for the
Vertex code of the shader.
SHADER_FRAGMENT_CODE String editor In this editor you can write the code for the
Fragment code of the shader.
SHADER_COMPILE Button editor Pressing this button compiles the shader. If the
SHADER_ENABLED editor in the material list is
checked on, then the shader will be applied.
Errors in the compilation are reported in the
command window.

311
Timer list

Timer list
Description
Editors

Timers structure the time execution and evolution of eStudio events. Whenever a list element
includes parameters that will have to evolve in time the list element may reference a timer. Then,
the evolution of these parameters will be driven by the evolution of the timer.

Timer evolution Timer modes and states Timer actions Timer interferences

Timer evolution

When the timer evolves in time, all of the list elements that reference this timer are updated
according to the timer state.

The main characteristic of a timer is its length in time, that is, the time it takes from the initial to

315
Timer list

the final state.

When the timer evolves from one state to the other, a fraction from zero to one is computed
according to the elapsed time compared to the total time length. This fraction can be filtered so that
it may, for example, start and end slowly (with zero velocity). The Time Linearity parameter
decides how smooth the evolution has to be in these extreme positions.

In addition, the timer may evolve according to some function curves.

Timers can also run at discretized steps to simulate for example the movement of a clock.

Timer modes and states

Timers can be in two notifying states:

If it is not notifying any list element of its state.

If it is notifying all of the list elements that reference him the actual state.

Timers can also be in four evolving states:

Stopped in the initial state.


Evolving from the initial state to the final state.
Stopped in the final state.
Evolving from the final state to the initial state.

According to this, timers can be configured in four modes:

Whenever it reaches the initial or final state automatically change direction.

316
Timer list

Whenever it reaches the initial or final state automatically jump to the other state.

Whenever it reaches the initial or final state become stopped and dead in the corresponding state.

Whenever it reaches the initial or final state become stopped and live in the corresponding state.

Notice that when the timer is not stopped it is always live.

The reason for the distinction between stopped dead and stopped live is that timers are sometimes
used not only to drive an evolution but also to set a state of a list element. In these cases you may
want the timer to continue active (setting the state) even if the timer is stopped.

A typical case is when the timer is used in a channel that include bind mappings in some of its
parameters. Because this timer will filter the execution of the channel, we may want to have the
channel always active even if the timer has expired because the mappings are in fact still alive.

Timer actions

The user can take the following actions on a timer:

Run Forward Start running the timer from the initial state to the final state
Run Reverse Start running the timer from the final state to the initial state
Run Run the timer in the oposite direction it was already running
Pause Stop/Restart the timer evolution
To Start Take the timer to the initial state and stop it dead
To End Take the timer to the final state and stop it dead

Timer interferences

The user can specify that a timer should, by himself, take timer actions on another timers at
specific positions of its evolution.

These are the key positions when the timer can take these actions:

In the initial state running forward.


In the initial state running backwards.
In the final state running forward.
In the final state running backwards.
In the flag position running forward.
In the flag position running backwards.

317
Timer list

The flag position is a specified percent value of the total length of the timer.

Any of the timer actions can be taken in any of these key positions and the action will be taken for
the list of specified timers.

Using this actions the user can generate complex interrelations of transformations and parameter
changes. Databases generated using timer interferences can get difficult to understand. This is
why they should be used with care and only if needed.

Timers evolution can be graphically visualized on the screen by representing them as small vertical
lines varying its position horizontally in time. The name of the timer is placed on the left of the line
and the color is painted white if the timer is dead and green when it is alive.

In the two above images you can see three timers, timer1 has been assigned a Run action that
makes timer2 move, timer3 runs independently of the two other timers.

318
Timer list

TIMER_TYPE Option editor Sets the way the timer will play. Options are,
Loop Swing, Loop Cycle, No Loop Die, No
loop Live.
TIMER_STARTTOEND Button editor Sends the timer to the end position.
TIMER_ENDTOSTART Button editor Sends the timer to the start position.
TIMER_ALL_ENDTOSTART Button editor Sends the all the timers to the start position.
TIMER_RUN Button editor Runs the timer in both directions, it is a toggle
button so every time you press changes
direction.
TIMER_PAUSE Button editor Pauses the timer.
TIMER_RUNFWD Button editor Runs Forward the timer.
TIMER_RUNREV Button editor Runs Reverse the timer.
TIMER_TOSTART Button editor Sends the timer To Start.
TIMER_TOEND Button editor Sends the timer To End.
TIMER_LENGHT Float editor Modifies the length in seconds of the timer.
Toggle on the Edit Timecode editor in the list of
modes and the content of this editor will be
displayed in frames.
TIMER_ACTIVE Integer editor For binding purposes, this editor tells you when
the selected timer is active.
TIMER_VISIBLE Toggle editor A graphical representation of the timer is made
visible on the GFX Window.
TIMER_ALLSTART Button editor Execute TIMER_TOSTART for all the timers.
TIMER_HIDE_ALL Button editor Sets the TIMER_VISIBLE flag to OFF for all the
timers.
TIMER_VIEW_ALL Button editor Sets the TIMER_VISIBLE flag to ON for all the
timers.
TIM_GOTO Float editor Sets the timer frame position.
TIM_FLAG Float editor Sets the fraction of the evolution from zero to
one where the flag position is located.
TIMER_LINEARITY Float editor Sets the percent of linearity of the evolution of
the timer.
TIMER_CURVE Selector editor Selects the curve1D to be used as the evolution
of the timer.
Specifying a function curve disables the Time
Linearity parameter and allow a customization
of these action by letting the user design the
actual curve that will be used by the timer
evolution.
TIM_STEP Integer editor Sets the amount of frames to skip when making
the timer run at discretized steps. A value of zero
disables this capability.
TIMER_TIMES_LOOP Integer editor Sets the amount of times the timer should loop
when in loop mode.
TIMER_TIMERS_ONSTARTFWD LSelector Selects the list of timers on which the timer
editor action OnStartFwd will be taken.
TIMER_ACTION_ONSTARTFWD Option Selects the timer action to be taken by the
editor interference OnStartFwd.

319
Timer list

TIMER_TIMERS_ONSTARTREV LSelector Selects the list of timers on which the timer


editor action OnStartRev will be taken.
TIMER_ACTION_ONSTARTREV Option Selects the timer action to be taken by the
editor interference OnStartRev.
TIMER_TIMERS_ONFLAGFWD LSelector Selects the list of timers on which the timer
editor action OnFlagFwd will be taken.
TIMER_ACTION_ONFLAGFWD Option Selects the timer action to be taken by the
editor interference OnFlagFwd.
TIMER_TIMERS_ONFLAGREV LSelector Selects the list of timers on which the timer
editor action OnFlagRev will be taken.
TIMER_ACTION_ONFLAGREV Option editor Selects the timer action to be taken by the
interference OnFlagRev.
TIMER_TIMERS_ONENDFWD LSelector Selects the list of timers on which the timer
editor action OnEndFwd will be taken.
TIMER_ACTION_ONENDFWD Option editor Selects the timer action to be taken by the
interference OnEndFwd.
TIMER_TIMERS_ONENDREV LSelector Selects the list of timers on which the timer
editor action OnEndRev will be taken.
TIMER_ACTION_ONENDREV Option editor Selects the timer action to be taken by the
interference OnEndRev.

320
Pivot List

Pivot List
Description
Editors
Tutorial

Pivots are data structures holding 3D transformation information that is usually applied to objects.

An object is composed of arrays of XYZ coordinates, also called points or vectors. Each point is a
group of three numbers specifying a position in space. When a transformation is applied to an
object, it modifies its array of points.

A vector is also a group of three numbers. It can refer to a position in space or to a direction in
space (the direction from the origin to the specified coordinates).

The following kinds of transformations are relevant for our discussion:

Displacement
A Displacement transformation consists of a vector whose XYZ components are added to the
transformed points.

Scale
A Scale transformation consists of a vector whose XYZ components multiply the transformed
points.

323
Pivot List

Rotation
A Rotation transformation consists of a vector specifying a direction in space and a rotation
angle to be applied in this direction.

Euler
An Euler transformation consists of a vector of Head, Pitch and Roll components that
transform the points by the Euler transformation. The Euler transformation is obtained in the
following way:

Rotating the Y axis the Head angle with rotation axis on Z.

Let us call X^ and Y^ the result of rotating the X and Y original axis in this way.

Rotating the Y^ axis the Pitch angle with rotation axis on X^.

Rotating the Roll angle on the Y^ axis.

A pivot is a composition of the following transformations:

1. Offset displacement transformation.


2. Scale transformation.
3. Rotation Axis rotation transformation.
4. Euler orientation transformation.
5. Position displacement transformation.

These transformations are applied in the same order as they appear in this list.

1. The pivot is first displaced by the XYZ components of the Offset transformation.
2. Then it is scaled in the XYZ directions of the coordinate axis by the values in the Scale
transformation.
3. Then it is rotated in space acording to the Rotation length with rotation axis on Rotation
Axis.
4. Then it is oriented in space by using the Euler transformation.
5. Finally, the object is displaced by the XYZ components of the Position transformation.

The reason for this scheme is the following:

The Scale, Euler and Rotation Axis transformations are applied with the origin as the center of
the transformation, that is, the object will scale from the origin and the rotations will occur with the
origin as the center of rotation. In case you wish to scale or rotate the object with another center
then you apply first the Offset transformation to move your center of rotation to the origin, then
you apply the scale and rotations and finally you move the object to the desired location with the
Position transformation.

Note that the Euler transformation is always refered to the Y axis as the origin for the
transformation. This issue becomes specially significant when composing rotations (See
Composition of Pivots).

These transformations are independent of 3D objects and are used by referencing them later
whenever a transformation is needed.

324
Pivot List

Pivots are some times grouped later to form Trajectories. That is the reason why pivots also hold
a Velocity field, which specifies the path tangent and speed for the trajectory in this pivot.
Though it is objectionable that this field should be part of the pivot information because it is not
used when using the pivot out of trajectories it is hold here for simplicity considerations.

Pivots composition are the resulting transformation of applying several Pivot transformations
sequentially.

An example of this case is the object transformation which can be a combination of:

1. Object Pivot Flatten transformation


2. Object Pivot transformation
3. Channel Trajectory transformation

Each transformation is applied on top of the previous one.

Note that the combination of any Rotation transformation with an Euler transformation can be
misleading due to the fact that the Euler transformation is always refered to the Y axis as the origin
for the transformation no matter what have been the previous transformations.

This also happens in a single Pivot transformation when combining a Rotation Axis transformation
with the Euler transformation.

The camera of the simulation has its own three axis of coordinates as shown in the figure.

The Y axis points forward, the X axis to the right and the Z axis up of the camera. These axis are
always attached to the camera no matter where the camera moves or orientates.

A pivot in Eye space mode has its transformation refered to this coordinates. This means that a
pivot with a position transformation of (0,0,0) is always attached to the camera position.
A pivot with a position transformation of (0,y,0) will always be in front of the camera at a y
distance.

This feature is useful to position objects relative to the camera. For example, a scroll of text, the
logo of a TV station or window screens.

The definition of Eye space has an inherent problem when it is used to locate objects in fixed
positions of the TV screen: The object location changes when the Field of View changes.

This problem makes this capability unusable for this purpose unless we force the camera man to use
a fixed Field of View when this kind of pivots are used.

The solution we have implemented for this problem is the WinScale mode of the Eye space.

325
Pivot List

When in WinScale mode another transformation is concatenated to the default Eye space that
applies a peculiar scale (that depends on the Field of View) to the pivot so that the object always
appears in the same location no matter the Field of View of the camera.

Also an X or Z position coordinate of one moves the pivot to the borders of the GFX Window. The Y
coordinate has almost no apparent effect and the only way to reduce the size of the object in the
screen is to use the Scale parameters.

PIV_RESET Button editor Resets all of the values of the pivot to the default
state.
PIV_VISIBLE Toggle editor Sets the Visibility mode of the pivot graphic
manipulator.
VOFF Float3 editor Selects the coordinates for the Offset
transformation.
PIVOT_SCA Float3 editor Selects the coordinates for the Scale
transformation.
VROTD Float3 editor Selects the coordinates for the Rotation Axis
direction transformation.
FROTA Float editor Selects the angle for the rotation of the Rotation
Axis transformation.
PIVOT_EUL Float3 editor Selects the coordinates for the Euler
transformation.
PIVOT_DIS Float3 editor Selects the coordinates for the Position
transformation.
VVEL Float3 editor Selects the coordinates for the Velocity
parameter when using this pivot as a member of
a trajectory.
FVEL Float3 editor Selects the speed parameter when using this
pivot as a member of a trajectory.
PIV_EYE_PIPE Selector editor Selects the Eyespace pipe.
PIV_WINSCALE Toggle editor Selects the WinScale mode. It is only sensitive
when in EyeSpace mode.
PIV_UNIFORM_SCALE Toggle editor To do a uniform scale to the pivot.
PIV_CHAIN_TO_PARENT Toggle editor Chains the pivot to the pivot parent.
PIV_CENTER Float3 editor Coordinates of the center of the eccentric pivot
type.
PIV_TYPE Option editor The type of the pivot. Options are Basic,
Eccentric and Composed.

Basic pivots have the classical transformation


matrix, Scale, Euler and Displace.

Eccentric pivots have a rotation center vector.

Composed pivots also allow to set an offset.

326
Trajectory List

Trajectory list
Description
Editors

Trajectories specify a path in 3D space by referencing an array of Pivots and interpolating among
them. Each pivot can be edited and manipulated as explained in the Pivot List.

Each pivot is a control point of the path defining a position in space, a velocity (tangent to the
curve at this point) and a roll angle.

Trajectories are independent of 3D objects and are used by referencing them later whenever a 3D
transformation over time is needed, usually to describe the movement of objects by specifying a
path that the object has to follow.

329
Trajectory List

Whenever a trajectory is referenced, an interpolation parameter going from zero to one is


supplied, usually in the form of a timer that selects the interpolation factor. Note that timers
always evolve internally in the zero to one margin independently of its length parameter.

By default, each pivot making the trajectory is evenly spaced in time. For example, if the
trajectory is made up of three pivots, the middle one will be the interpolated position when the
interpolating parameter is 0.5.

A trajectory offers three interpolation modes:

Linear
Bezier Position
Bezier Orientate

Linear
In Linear mode the trajectory transformation is generated by interpolating linearly the pivot
parameters between the pivots making the trajectory. The Velocity and Speed fields of the
pivot are not used.

Note that though the interpolation mode is linear the evolution in time is governed by the specified
timer and this evolution may not be linear in time.

The most important characteristic of Linear trajectories is that the displacement of the object
from one pivot to the next follows a rectilinear line. Though the object may be rotating or scaling
at the same time.

The most common displacement transformations used in practical cases like screens going up and
down, rotating objects, etc are achieved by using Linear interpolated trajectories.

Bezier Position
In Bezier Position mode, the trajectory transformation is also generated by interpolating linearly
the pivot parameters between the pivots making the trajectory. In this case, the displacement of
the resulting transformation is replaced by the 3D bezier curve obtained by using the Velocity and
Speed parameters of each pivot.

330
Trajectory List

It is important to note that the only difference between Linear and Bezier position is that the
displacement of the object from one pivot to the next will not follow a rectilinear line but the
bezier curve.

Bezier Orientated

Bezier Orientated mode behaves as Bezier Position but the orientation of the bezier curve is
also applied to the resulting transformation. That means that the object will also be orientated with
the path of the trajectory.

Notice that this orientation is applied on top of the interpolated pivot transformation

TRAY_PATH Option editor Selects the type of interpolation between pivots.


TRAY_VISIBLE Toggle editor When enabled a graphic representation of the
trajectory is shown in the GFX Window.
TRAY_PIVOTS LSelector editor Selects the list of pivots making the trajectory.
TRAY_UNIFORM Toggle editor A trajectory can have segments of different
distances between pivots and you want the
object to travel along the trajectory in a
uniform way. This toggle ensures this.
TRAY_COLOR Color editor To change the color of the trajectory graphic
representation in the GFX Window.

331
Curve1D List

Curve1D List
Description
Editors
Tutorial

Curves1D have been designed to allow the user to specify correspondences between parameters
such:
L = function(T)
as a one component to one component application, that is, the input T value is a single number
usually meaning evolution in time and function returns an output value (Lenght) which is also a
single number.
The shape of the function can be specified in four different modes:

Linear
A linear transformation is applied (y = x).

Table
The shape of the transformation is specified through independient points and the shape is
linearly interpolated between them.

Bezier
A Bezier function is used to calculate the output of the function.
The curve is configurated by manipulating control points in a bezier curve.

Nurb
A Nurb function is used to calculate the output of the function.
The curve is configurated by manipulating control points in a Nurb.

The function is only defined inside the limits determined by the TMin and TMax parameters.
Outside this margin the transformation may extrapolate or clip the values according to the Clip
mode.

To accomodate the transformation, the following offsets and scales are applied:

335
Curve1D List

L = OffsetL+ ScaleL * function(ScaleT *T + OffsetT)

The OffsetL and ScaleL parameters are usually used to map the function output from a zero
to one interval to another.

The OffsetT and ScaleT parameters are rarely used, but they are needed some times to scale
and offset the input parameter (for example, when the curve1D is used for calibration
purposes).

By default, the Offset values are zero and the Scale values are one.

When the function is not Linear (that is, Table, Bezier or Nurb) another internally generated table
is generated for performance reasons. Due to the fixed length of this internal table exists a small
error when there are abrupt changes in the curve shape transformation.

When editing a function in Table, Bezier or Nurb mode several control points allow to define the
shape of the function:

New control points are generated when pressing the middle mouse button.

Clicking and dragging with the left mouse button allows to select and move the control points
and its manipulators.

Pressing the control key and clicking with the left mouse button allows to pan the graphic
display window.

The Control-shift Z key zoom in the graphic display window (shift Z zooms out).

Pressing shift and clicking with the left mouse button in the control points allows to select
several of them at the same time.

A popup menu is displayed when pressing the right mouse button on the graphic area with the
following options:

Type. To choose the curve type.

Delete Point. Deletes a selected point.

Zoom. Zooms in/out/auto. Auto makes the curve fit in the window.

Flat controls. Resets the anchors of the selected point of the curve.

To Bezier. Converts the Table or Nurbs version of the curve to Bezier.

To Linear. When in Table, Bezier or Nurbs mode will convert the curve to linear.

Show error. Displays in dashed lines a curve showing the internally generated table that
approximates the real one.

336
Curve1D List

The coordinates of the control points can be visualized and edited in the CURVE1D_TABLE_DATA
LSelector editor.

A crosshair (a crossing horizontal and vertical line) can be displayed on top of the graphic of the
function.

A pair of value editors allow to set the coordinates of the crosshair to any position (This allows to
bind these coordinates to an external function).

It is also possible to have these coordinates automatically set to the internally last accessed values
of the curve.

This way the crosshair can be used to visualize the evolution on the curve of the accessed values.

A functionality has been added to the CrossHair to allow curves to be used for calibration
purposes:

When the curve mode is set to Table and the CrossHair Mode is set to the last accessed horizontal
value, that is, the position of the vertical line of the crosshair represents the last accesed horizontal
value, changing the horizontal line (the VCross value) of the crosshair a new control point is created
attached to the crosshair position. This procedure allows to generate Tables where every new point
added is manually calibrated.

When in Grid mode the coordinates of the control points are forced to be multiple of the grid value
when the are modified.

CURVE1D_MODE Option editor Selects the Linear, Table, Bezier or Nurbs


mode.
CURVE1D_OFFSETY Float editor Sets the OffsetL value used in the equation: L
= OffsetL + ScaleL * function(ScaleT * T +
OffsetT)
It is used to add an offset to the output value.
CURVE1D_SCALEY Float editor Sets the ScaleL value used in the equation: L =
OffsetL + ScaleL * function(ScaleT * T +
OffsetT)
It is used to scale the output value.
CURVE1D_OFFSETX Float editor Sets the OffsetT value used in the equation: L
= OffsetL + ScaleL * function(ScaleT * T +
OffsetT)
It is used to add an offset to the input value.
CURVE1D_SCALEX Float editor Sets the OffsetT value used in the equation: L
= OffsetL + ScaleL * function(ScaleT * T +
OffsetT)
It is used to scale the input value.

337
Curve1D List

CURVE1D_TABLE_DATA LFloat editor This editor allows to visualize and modify the
numerical values of the control points when in
Table mode.
CURVE1D_CURVE_DATA LFloat editor This editor allows to visualize and modify the
numerical values of the control points when in
Bezier or Nurbs mode.
CURVE1D_CROSS_MODE Option editor Selects one of the following modes:
CrossOff
The crosshair is not painted.
CrossFree
The crosshair is painted. Its coordinates
are selected via the CURVE1D_HCROSS
and CURVE1D_VCROSS Float editors.
CrossAccessH
The crosshair is painted. The crosshair
HCross coordinate is internally binded to
the last accessed value of the curve. The
VCross Float editor can be used to
generate new Table control points when
the curve is in Table mode.
CrossAccessHV
The crosshair is painted. The crosshair
HCross and VCross coordinates are
internally binded to the last accessed
values of the curve.
CURVE1D_HCROSS Float editor Sets the horizontal coordinate of the crosshair.
CURVE1D_VCROSS Float editor Sets the vertical coordinate of the crosshair.
When the crosshair mode is in CrossAccessH
and the curve is Table mode it will generate a
new control point.
CURVE1D_TO_TMIN Button editor Sets the internally last accesed Time value to
the CURVE1D_TMIN parameter.
CURVE1D_TO_TMAX Button editor Sets the internally last accesed Time value to
the CURVE1D_TMAX parameter.
CURVE1D_INIT_MARGINS Button editor When enabled it continuously calculates and
stores internally the minimum and maximum
values of the HCross Value editor. Whenset to
OFF it sets the CURVE1D_TMIN and
CURVE1D_TMAX Float editors to be the
minimum and maximum calculated values.
CURVE1D_TMIN Float editor Specifies the Time clipping minimum value.
CURVE1D_TMAX Float editor Specifies the Time clipping maximum value.
CURVE1D_CLIPMODE Option editor The Time values outside the margins
(CURVE1D_TMIN and CURVE1D_TMAX) can be
clipped or extrapolated according to this editor
state.
CURVE1D_SMOOTH_TAN Toggle editor To smooth the curve tangents.
CURVE1D_TOBEZIER_PTOS Float editor Max number of points that the bezier
converted curve will have.
CURVE1D_CLIP_MODE Option editor How to clip the curve out of the start and end
points that define the it.
CURVE1D_WIN_MIN Float2 editor The minimum values of the graph window.

338
Curve1D List

CURVE1D_WIN_MAX Float2 editor The maximum values of the graph window.


CURVE1D_WIN_FRAME Button editor Fits the curve in the graph window.
CURVE1D_WIN_FRAME_PROP Button editor Fits the curve in the graph window but
proportional to the size of the window.
CURVE1D_CODE String editor Allows to define mathematically the curve.
CURVE1D_CODE_DEFAULT Menuoption Chooses between some predefined curves.
editor
CURVE1D_CODE_TO_TABLE Button editor Converts the defined code to table mode.
CURVE1D_CODE_XNORM Toggle editor Normalizes to the TMax value in the Horizontal
range frame.

339
Curve3D List

Curve3D List
Description
Editors

Brainstorm eStudio has several animation tools that make life easier to users. From Timers to
Curves1D, from Pivots to Trajectories, there have always been different ways to create
animations with the software.

In version 8 we added Productions to the eStudio arsenal. This new tool allowed for flexible but
powerful animation capabilities. And there were also Curves3D.

In eStudio versions 9 and 10 both Productions and Curves3D have been revamped and are better
than ever. Productions use Curves3D intensively and have gained handling capabilities and are
extremely flexible and easy to use.

A Curve3D is a math defined curve that has control points to modify it. This curve can be used by
objects as a path for animations.

343
Curve3D List

You can add control points to the curve to have more control over it. You can increase resolution
and have different types of control points.

There are four curve types, for different uses.


The Curve3D also has a new Graphic Manipulator that allows to edit the curve in 3D in the GFX
Window.

The Curve3D list shares with all the eStudio lists the look and the interface. You can access the list
from different places, from the GFX Window Curve3D popup menu selecting properties, from the
GlobalLists interface pressing the appropriate icon or from another list using the appropriate
editors (see the manual pages titled eStudio Interface Description)

344
Curve3D List

The Curve3D list contains all the elements common to all the lists and allows to create new list
items, delete, duplicate, etc.

The list has different editors depending on the curve mode. This can be Linear, Table, Bezier or
Nurb. In this list we will deeply explain all the features of this updated list. Please also check the
Curve3D tutorials in the Tutorials manual.

Summary of the Curve3D List


- Curve3D concepts
Curve Modes
Data
Curve Orientation
- Curve3D editing
Graph editing
Selected points
3D editing
Collapsed axis
Curve modes 2
- Curve3D list editors table

As we have said before, a Curve3D is a mathematically defined. Curves3D specify the shape of a
line in 3D space and can be seen from two different points of view:

1. As a 3D shape. The curve3D specifies a line in space that is used to provide a shape to be used
for modelling (i.e. as used from extruded primitives).

2. As a path in space. The curve3D specifies a path in space that is used to animate an object. (as
used from bindings or itemkeys). In this case an extra parameter is needed (usually varying from
zero to one) that allows to travel through the curve as the parameter changes.

There are four different curve3D modes. The first one, Linear, doesn’t have a Graph editor to see it
displayed as the other three. A Linear curve can be defined with just two parameters, it is similar to
a Curve1D but in 3D space.

The shape of the curve can be specified in four different modes:

Linear
A linear transformation is applied (y = x).

Table
The shape of the transformation is specified through independient points and the shape is linearly
interpolated between them.

Bezier
A Bezier function is used to calculate the output of the function.
The curve is configurated by manipulating control points in a bezier curve.

Nurb
A Nurb function is used to calculate the output of the function.
The curve is configurated by manipulating control points in a Nurb.

In the following pictures you can see the same curve created with different modes (See Fig. 1).

345
Curve3D List

The curve can be offseted and scaled as a whole by using the Offset and Scale editors. Note that
the curve shown in the 2D editors and through the 3D manipulator is not affected by these values.

We are going to imagine a 2D curve defined by Offset and Scale values. If we have an offset value
of zero and an scale value of one, the curve will be defined as seen in figure 2.

346
Curve3D List

As you can see the curve passes through the [0, 0] coordinate because there is no offset and
through the [1,1] coordinate because there is a scale value of 1. Now, we are going to change the
offset value to 0.5, this changes the place were the curve passes as can be seen in figure 3.

Now, imagine the same in 3D, the Scale value is used to define the direction of the curve in 3D
space. In the following picture (Fig. 4) we have two different Linear Curves3D. The wireframe
cubes are draw just for reference.

347
Curve3D List

A curve in Table, Bezier or Nurb mode is defined by a list of control points. Each control point is
composed of the following information:

PosX, PosY, PosZ: The position in 3D space of the control point.

InX, InY, InZ: The position in 3D space of the 'In' bezier handle of the control point.

OutX, OutY, OutZ: The position in 3D space of the 'Out' bezier handle of the control point.

Hand: The type of bezier handle as an index [0,1,2,3] for:

[Corner, Smooth, Bezier, BezierCorner]

The meaning of the handle type is as follows:

Corner handles break the tangency on both sides of the control point and the direction is defined
by the neightbors control points.

Smooth handles are automatic and are not displayed because they are calculated internally for
smoothness.

Bezier handles are the standard bezier controllers for each side of the control point. The direction
is shared for both sides.

BezierCorner behaves as 'Bezier' but now the direction is independently controlled in each side of
the control point.

You can select the handle type in the popup menu that appears after pressing in a control point with
the right mouse button (See Fig. 5).

Head, Pitch, Roll: The Euler orientation values at the control point.

ScaX, ScaY, ScaZ: The Scale values at the control point.

348
Curve3D List

When the curve is used as a 3D Path for animating objects the curve has to provide also orientation
and scale information that would not be included in the path as only a list of positions, that is why
for each control point it is also stored an orientation and a scale value. Those values are smoothly
interpolated between keyframes.

An extra parameter 'HPR Tension' is used to control the smoothness of the interpolation in the
control points. Note that this parameter only appears after unchecking the Uniform toggle (See Fig.
6).

The Orientation values at each control point can be typed manually or drag & dropped by using the
production timeline capabilities.

The control point orientation values can also be calculated automatically by setting the
'AutoOrientation' mode. This mode has the following options:

Off
Disabled. In this mode the current orientation values assigned to the control points are used.

XNeg, XPos, YNeg, YPos, ZNeg, ZPos


In this mode the orientation for the initial position of the curve is the transformation that rotates
one of the axis according to the selected AutoOrientation mode to the initial direction of the curve.
For the rest of the curve the transformation obtained by composing the previous one with the one
obtained by rotating the previous segment direction to the next segment direction (All rotation
transformations are calculated using quaternions).

Dir
In this case the transformation is calculated independently for each point of the curve by using the
euler orientation of the direction of the current segment direction.

349
Curve3D List

Note that in this case the orientation of vertical directions is not defined and the object can suddenly
twist in such intervals.

Graph editing
The curve3D can be visualized and edited as a 2D representation of the projection of the curve3D in
planes X,Y or Z:

- Projecting in the X plane gives Y as horizontal axis and Z as vertical axis.

- Projecting in the Y plane gives X as horizontal axis and Z as vertical axis.

- Projecting in the Z plane gives X as horizontal axis and Y as vertical axis.

The projecting plane can be selected from the popup menu in the graph representation.

Selected points
When editing a function in Table, Bezier or Nurb mode several control points allow to define the
shape of the function:

New control points are generated when pressing the middle mouse button.

Clicking and dragging with the left mouse button allows to select and move the control points and
its manipulators.

Pressing the <ctrl> key and clicking with the left mouse button allows to pan the graphic display
window.

The <ctrl> + <shift> + Z key zooms in the graphic display window (<shift> + Z zooms out).

Pressing <shift> and clicking with the left mouse button in the control points allows to select
several of them at the same time.

Pressing the V key frames the curve in the graphic display window.

The curve3D can also be visualized and edited in a 3D representation in the GFX Window. The
functionality of 2D editing is also available in 3D but the pipe has to be in Pick mode (that is,
pressing the <ctrl> key while operating).

The View3D flag allows to visualize the 3D representation of the curve. The curve is visualized by
displaying a semi-transparent box containing a red line that shows the 3D path. On each of the
sides of the box a 2D projection of the path is drawn showing the control points that can be
manipulated when in Pick mode. Note that only the area covered by the faces of the box is active
for picking.

Pressing <ctrl> + <tab> in the GFX Window while in View3D mode allows to switch the

350
Curve3D List

visualization mode from:

1. Standard: A box representing in each face the projection of the 3D curve in that plane (Fig 8).

2. Path: A 3D line is displayed and a pivot manipulator displayed in the selected vertex. The pivot
manipulator can be switched between vertices by pressing the <tab> key (Fig 9).

3. 3D Manipulator: The whole curve3D can be displaced/rotated/scaled with the same


functionality as the object 3D manipulators (Fig 10).

The following modes can be used to customize the way the 3D curve is visualized:

Path
Selects if the red line showing the path in the interior of the box should be visualized.

Grid
Selects if the grid in each of the projection planes should be visible.

PlaneX, PlaneY, PlaneZ


Selects if the faces of the box pointing in the respective axis should be visible.

The bounding box of the 3D path is used to create the manipulator box, but such box can have a
collapsed (zero) dimension in X, Y or Z if all the control points of the curve lay in the same axis or a
plane.

351
Curve3D List

The View Collapse value is used to avoid collapsed dimensions of the box and means the percent
of the maximum axis length of the box that the minimum axis length will be assigned. If you scale
the manipulator box it scales at max to this value.

Loop
In this mode the last point of the curve is joined with the first one to form a loop.

Uniform
When a curve3D is accessed as a path for animation a parameter is used to travel through the
curve.

- If the 'Uniform' flag is enabled then the parameter travelled distance is proportional to the length
of the travelled path of curve. So, if the parameter is at half of its evolution the curve is accessed at
half of its total length.

- If the 'Uniform' flag is disabled then the curve is accessed proportional to the index of the control
points. So, if the parameter is at half of its evolution then the curve is accessed at the central
control point, no matter what is the distance between control points.

This value specifies the amount of segments that are created between each two control points when
a curve of type Bezier or Nurb is discretized in straight lines.

When a curve3D is accessed as a path for animation a parameter is used to travel through the
curve. If no CurveTL is used then if the parameter changes uniformly the curve3D should be
travelled with uniform speed (assuming the 'Uniform' flag is enabled).

The curveTL allows to control the speed of the evolution for each instant. If a curveTL is specified
then the parameter is filtered by the curveTL and then used.

When a CurveTL is used it can be totally independent (LockTL off) or forced to have exactly the
same number of control points as the curve3D (LockTL on).

When LockTL is enabled the curveTL control points can only be modified in time (horizontal axis)
because the height of each control point is forced to be the normalized distance from each control
point of the curve3D to the first one. This way it is ensured that the curveTL control points
correspond to the instants when the curve3D control points are accessed.

352
Curve3D List

CURVE3D_MODE Option editor This editor allows you to select the Curve3D
mode from four possibilities:

Linear: This Curve3D is a straight line. By


default it goes from 0 to 1.

Table: The Curve3D is defined by a lineal


segment sucession.

Bezier: A bezier curve is defined by four


points. Two are endpoints. (x0,y0) is the origin
endpoint. (x3,y3) is the destination endpoint.
The points (x1,y1) and (x2,y2) are control
points.

Nurb: (Non uniformal rational Betaspline) In


this curve, the control points form a control
polygon that aproximates the curve inside it.
The control points are outside the curve.

You can add new points to the curve using the


middle mouse button. Using the right mouse
button reveals a popup menu with several
options. The Linear Curve3D doesn’t have a
graph editor.
CURVE3D_PRESETS Cascade editor Allows to select from four predefined curves, all
four are bezier ones. The curves take the shape
of a Circle, Snake, Strap or HalfStrap.

When you select or create a preset, the


Presets menu option in the popup menu is
enabled and allows you to delete presets.
Remember that the popup menu appears when
you press with the right mouse button in a
curve item in any list.

You can also save your own presets using the


Create menu option.
CURVE3D_OFFSETY Float3 editor Allows to displace the curve. By default its
value is [0,0,0] and this ensures that the curve
passes through it.

It is located under the Offset and Scale tab.


CURVE3D_CURVETL Curve1d selector editor Allows to select a Curve1D as a TL curve. This
curve controls the evolution of the Curve3D in
time. In a locked TL curve the control points
match with the Curve3D ones.

It is located under the TL tab.

353
Curve3D List

CURVE3D_LOCKTL Toggle editor When LockTL is enabled the curveTL control


points can only be modified in time (horizontal
axis) because the height of each control point
is forced to be the normalized distance from
each control point of the curve3D to the first
one. This way it is ensured that the curveTL
control points correspond to the instants when
the curve3D control points are accessed.
CURVE3D_UNIF Toggle editor The curve has small perpendicular subdivisions
that are used for animation purposes. This
editor makes all that subdivisions the same
distance (between them) in all the curve,
makes the subdivisions uniform.

It is located under the Modes tab.


CURVE3D_BEZIER_LOOP Toggle editor Closes the curve. If you have an open curve,
this toggle connects the loose ends of the
curve.

It is located under the Modes tab and only for


Table and Bezier types.
CURVE3D_SPLINE_MODE Option editor When in Nurb mode offers three options:
Normal. The curve is not defined in the
first and last intervals.
End. The curve is defined from the first
control point to the last (The program
internally asumes the needed extra
symetric control points for the spline to
be mathematically defined).
Loop. The curve starts and finish in the
same control point.
CURVE3D_KCOLLAPSE Float editor The bounding box of the 3D path is used to
create the manipulator box, but such box can
have a collapsed (zero) dimension in X, Y or Z
if all the control points of the curve lay in the
same axis or a plane.

The View Collapse value is used to avoid


collapsed dimensions of the box and means the
percent of the maximum axis length of the box
that the minimum axis length will be assigned.
CURVE3D_VIEW_GRID Toggle editor Displays a grid in the curve3D manipulator in
the GFX Window.
CURVE3D_VIEW_PLANEX Toggle editor Displays the projection of the curve3D in the X
plane.
CURVE3D_VIEW_PLANEY Toggle editor Displays the projection of the curve3D in the Y
plane.
CURVE3D_VIEW_PLANEZ Toggle editor Displays the projection of the curve3D in the Z
plane.
CURVE3D_VIEW_PATH Toggle editor A 3D line is displayed and a pivot manipulator
displayed in the selected vertex. The pivot
manipulator can be switched between vertices
by pressing the <tab> key.

354
Curve3D List

CURVE3D_VISIBLE Toggle editor The View3D flag allows to visualize the 3D


representation of the curve in the GFX
Window.
CURVE3D_SCALEY Float3 editor Scale of the curve.
CURVE3D_AUTO_ORIENTATE Option editor The control point orientation values can also be
calculated automatically by setting the
'AutoOrientation' mode. This mode has the
following options:

Off
Disabled. In this mode the current orientation
values assigned to the control points are used.

XNeg, XPos, YNeg, YPos, ZNeg, ZPos


In this mode the orientation for the initial
position of the curve is the transformation that
rotates one of the axis according to the
selected AutoOrientation mode to the initial
direction of the curve. For the rest of the curve
the transformation obtained by composing the
previous one with the one obtained by rotating
the previous segment direction to the next
segment direction (All rotation transformations
are calculated using quaternions).

Dir
In this case the transformation is calculated
independently for each point of the curve by
using the euler orientation of the direction of
the current segment direction. Note that in this
case the orientation of vertical directions is not
defined and the object can suddenly twist in
such intervals.
CURVE3D_CURVE_RES Float editor Specifies the amount of segments that each
bezier interval should be divided in when
converted to the internal table.
CURVE3D_SPLINE_MODE Option editor When in Nurb mode offers three options:

Normal. The curve is not defined in the first


and last intervals.

End. The curve is defined from the first control


point to the last (The program internally
asumes the needed extra symetric control
points for the spline to be mathematically
defined).

Loop. The curve starts and finish in the same


control point.
CURVE3D_VERTEX_DATA Table editor This editor allows to visualize and modify the
numerical values of the control points when in
Table mode.

355
Curve3D List

CURVE3D_LINEAR_SCA Float3 editor Linear curves are defined from 0 to 1, using


this transformation makes the definition from 0
to the specified transformation values. This
editor is the Scale component of that
transformation. You can create a Bind to an
object transformation.
CURVE3D_LINEAR_EUL Float3 editor Linear curves are defined from 0 to 1, using
this transformation makes the definition from 0
to the specified transformation values. This
editor is the Euler component of that
transformation. You can create a Bind to an
object transformation.
CURVE3D_LINEAR_DIS Float3 editor Linear curves are defined from 0 to 1, using
this transformation makes the definition from 0
to the specified transformation values. This
editor is the Displacement component of that
transformation. You can create a Bind to an
object transformation.
CURVE3D_CLIP_MODE Option editor When a Curve3D is locked by a Curve1D TL,
the TL can be unlocked, if you do this, you can
change the last point of the curve and make it
grow past the value of one. This editor decides
what to do with the curve at that point.

Flat makes the curve a flat line from that point


to infinitum.

Continue makes the curve continue using the


ramp of the actual curve.

Cycle makes a cycle from that point to the


beginning.

Swing makes a loop.


CURVE3D_COLOR Color editor Allows to change the color of the Curve3D
representation in the GFX Window.
CURVE3D_HPR_TENSION Float editor To show this editor the Uniform toggle editor
should be toggled off. Allows to control the
linearity of the interpolation of the orientation
(HPR values) between the control points of a
curve3D. One means linear interpolation and
zero smooth interpolation.

356
Event list

Event list
Description
Editors
Tutorial

The event list maintains a list of user programmed events ready to be fired in a sequential order or
randomly at the touch of a key.

The event list is so heavily used that apart from its list window it has its own space in the interface
in the bottom of the GFX Window. We call this window also the auxiliar list of events and the
events are displayed there in a more compact fashion line by line and can be selected and run
directly.

All of the editors of every eStudio list are susceptible of sending its action to the list of events. See
the editor popup menu.

Every event can be seen as a Python statement that is interpreted and executed when firing the
event.

Events generated from the editor popup menu or drag and dropped to the list of events consist of a
statement of type itemset(...) (See the Working with editors section).

359
Event list

Events can be assigned a delay meaning that they will be fired the delayed amount of time after the
execution is launched.

There are two modes of executing the events:

Sequential mode
All the events from the selected one to the next one in Flowstop mode are executed when:

Pressing the enter key on the GFX Window.

Pressing the Run Button editor of the event list.

In this case, every event has a flow mode to control the flow:

GoOn
Execute the event after the delay but let the flow goes on (to the next event).

Wait
Execute the event after the delay and stop the flow until then.

Stop
Do not execute the event and stop the flow.

Idle
As GoOn but this event is disabled from execution.

Key mode
By typing a key that will execute all of the events with the typed key assigned as the event
key. The flowmodes are not operative in this case.

The auxiliar list of events can display a popup menu from where to select the most common event
options without the need to use the corresponding editor. Also note that the Copy and Paste buttons
in this menu are not totally equivalent to those found in the list menu because when pasting from
this popup a new event is created and then the copied event is pasted on it.

360
Event list

When events are fired by key, the user typed key is compared against all event keys to decide
which of them to fire. Usually the event key consists of one only character but it can consist also of
several characters (when the list of events has so many events that the keyboard keys should not
be enough to program all of them). In this case, if several events share the same root of the string,
all of them will be fired as the string is being typed and it coincides with any event key.

Note that an event fired in key mode can in fact start sequential mode by firing the Run button of
another event.

Remember that for the keyboard to be active for firing events, the keyboard focus has to be in the
GFX Window. The focus can be sent there by clicking with the mouse in that window.

The flow can be reset at any time, meaning that the flow is stopped and every event launched with
a delay that has not expired yet is aborted from execution. In fact, clicking in any event in the
auxiliar list of events will reset the flow.

Programing the list of events

When the list of events is run in sequential mode it becomes a kind of programing language, where
every line of the list is an action to be executed.

Expanding this concept the list of events also admits a simple version of programing branches like
gotos, calls and conditionals. Every event has a branch mode. Once the event has been executed
the branch mode selects which one is the next event to execute:

The next event to execute is the following one in the list of events.

The user selects another event as the next one.


When the following event in Return branch mode is found the sequential execution will return
again to the next event that made the Call.

Like Call but the decision whether to branch or not is taken according to a map value (See
the map list) being different from zero.

Execute as next event the following to the last one that made a Call.

Another event is selected as the next one.

Like Goto but the decision whether to branch or not is taken according to a map value (See
the map list) being different from zero.

A global mode (IPFMODE_EVENT_ECHO) enters a debug mode where every event execution
prints a trace. This mode can be set in the modes list by checking the events echo toggle editor.

Events to Productions
Events lists can now be converted to productions using the popup menu from the event list. Just
select the To Production submenu to create a new production from the events of the event list.

361
Event list

EVENT_TYPE Option editor Selects the type of the branch. Options are
Sequential, Call, Return, Goto, IfCall and
IfGoto. See above for explanation.
EVENT_FLOW Option editor Selects the flow mode of the event. Options are
FlowIdle, FlowGoOn, FlowWait and
FlowStop.
EVENT_RESET Button editor The sequential execution of events is aborted.
EVENT_RUN Button editor Runs the list of events in sequential mode
starting from the selected one. Note that this
action can also be sent to the list of events.
EVENT_DELAY Float editor Execution delay of the event in seconds.
EVENT_KEY String editor This string is compared with the user typed
string to decide if the event should be fired.
EVENT_IFMAP_CASE Option editor Selects the type of comparison.
EVENT_CODE String editor Python statement that executes the event.
Usually of the form itemset(...), but it can be
any valid Python statement.
EVENT_FIND_STRING String editor Specifies the string used by
EVENT_FIND_PREVIOUS and
EVENT_FIND_NEXT editors.
EVENT_FIND_PREVIOUS Button editor Looks for the previous event that contains in its
code or event name, the string specified in
EVENT_FIND_STRING. If it is found it becomes
the selected one.
EVENT_FIND_NEXT Button editor Looks for the next event that contains in its
code or event name the string specified in
EVENT_FIND_STRING. If it is found it becomes
the selected one.
EVENT_IFMAP_MAP Selector editor Selects another map to compare the first one
with.
EVENT_CALL Selector editor Selects the event to branch in events of branch
mode Call, IfCall, Goto and IfGoto.
EVENT_TRANSITION Float editor Transition time between events.
EVENT_KEYRELEASE Toggle editor To fire the transition after a keypress.
EVENT_IFMAP Selector editor Selects the map used to decide branching in
events of branch mode IfCall or IfGoto.
EVENT_FIELD Toggle editor For syncronization with frames. This toggle
makes the event to execute at the beginning of
a frame.

362
Event list

EVENT_LOCKED Button editor The meaning of this editor.

"o": No event execution. But it may have


Call/Goto etc.

"X": The event is internally held in binary


format and will be executed by the X
(interface) thread.

"APP": The event is internally held in binary


format and will be executed by the APP
(application) thread.

"Python": The event can not be held in binary


format and will be executed by the X thread
through the python interpreter.
EVENT_REMOTE_ENABLE Toggle editor To enable remote events.
EVENT_REMOTE_IPFS Remote selector The list of remote machines.
editor
EVENT_FLOW_STATE Option editor Disabled. It tells you what flow type is being
used. For binding purposes. An itemget returns
the flow used.
EVENT_RESET Button editor Resets the events list. It does the same as
when you click in the events list.

363
Production List

Production List
Description
Editors

In the past eStudio provided several methods for creating animations, channels, timers,
trajectories, events, curves and binds have been used over the years. Some of them have been
removed from the software, the channels for example, and others have evolutioned considerably.

Productions were introduced in version 7 and have gone through major changes from that version
to version 10 where keyframe animation can be achieved.

Of all the tools that Brainstorm offers, both events and productions are ways of sequencing
animations. Both sequence the rest of utilities, curves, timers, etc, in an easy to work with
interface.

A Production is a list of timelines. This


timelines are created by drag & drop of eStudio
elements in the production window.

For example you can create a sphere and drag it


to the initial position of the timeline from the
GFX Window, and then scale it and drag the
scaled sphere again but to a different position.
The production list will create events, curves,
interpolating the content of the two positions,
that you can edit to suit your animation needs.

Productions allow the user to create, edit and


evaluate a collection of events. An event of the
production always consists of an itemset(), an
itemgo() or an itemkey(). See the Brainstorm
API apendix for itemset description.

Thus, it is important to understand that the only thing that happens when a production is run is to
simply evaluate instantaneously all the contained events with their respectives delays and
transitions in the same way that a python script could do it.

367
Production List

The list editors are distributed along a toolbar and four main tabs, Graph, Modes, Selection and
RunDown list. The toolbar contains buttons like play, stop. go to start, and other tools like zoom,
pan view, etc.

The Modes tab contains editors that allow for different ways of executing a production and editors
to choose what can be recorded.

The Selection tab contains the editor to do all sort of selection manipulation like copy & paste and
the RunDown list tab has a editor to manually edit each parameter of the item dragged to the
production.

A functionality of productions is to record all the events that are being applied to a group (or all) of
the editors of the program so that the same sequence of events can be repeated later by running
the production.

A list of 'Recordable editors' can be supplied by the user to limit recording to the selected editors.

Note that only the changing values are recorded, that is, only when there is a change then an event
is recorded for that instant and for those intervals that there is no change nothing is recorded.

368
Production List

A production is not a timeline in a traditional sense because it does not define every state of the
timeline: it is simply a collection of events to be fired over a period of time.

Running a 'ToStart' action on a production runs all the events at the zero position, thus, a 'ToStart'
action does not necesarilly set a value for all the events involved in the production unless it contain
events that set that state at time zero.

A 'Start State' flag allows to force a 'well defined' start position by evaluating all the first events in
the timeline that set any action after zero also when a 'ToStart' is run.

The 'RunDown List' is a table containing in every row one of the production events ordered by
delay. The columns are labeled as 'Item, Editor, Value, Transition, Time, Delay' and contain the
parameters of the itemset(), itemgo() or itemkey() that correspond to every event.

The last parameter ('Delay') is the time difference with the previous event and is only displayed for
editing purposes.

Each cell of the table (with the exception of those in the 'Editor' column) can be edited by double
clicking on it. The width and height of rows and columns can be modified by dragging with the
mouse on the separator segments between each row or column titles.

New events can also be inserted in the table by drag and dropping to the table from any editor of
the interface.

Productions offer a 'time-line' graphical interface for the creation and editing of the events. The
timeline interface is organized as a list of horizontal rows where events are grouped in a hierarchy
configured as list->items->editors. Thus every row displays all the events that are applied to an
editor of an item of a list. When the row has children and is collapsed then all the events for the
children are displayed.

On the right top side of the interface a horizontal ruler displays the time line in seconds and events
are represented in each row by 'flags' located in the instants where they occur.

369
Production List

A selection of events is specified by multiple selecting different lines in the list on the left side and
dragging the mouse over a continuous interval of time on the right side.

Selections can be moved by click and drag in the selected coloured interval area and can be
expanded or shrinked by click and drag in the arrows on both sides of the selected area.

Events are inserted in the timeline by drag and drop from the desired editor to the desired time
position.

Events can also be drag and dropped from 3D manipulators from the GFX Window. In that case a
transition of 1 second is automatically assumed in the generated event.

370
Production List

If the dropped editor is numerical and the 'AutoCurve' mode is enabled then instead of creating
independent events the program automatically creates a curve (itemkey()) and sets the event value
as a keyframe of the curve in the selected timeline instant.

If there already exists a curve in the production editing the dropped event then the event value is
inserted as key frame of the curve disregard of the 'AutoCurve' mode.

If there already exist a curve keyframe editing the dropped event in the dropped position then the
existing keyframe is updated to the new value. Note that when dropping to an existing keyframe the
dropped position is 'magneted' to the existing keyframe to avoid creating two very close key
frames.

To avoid having to drop exactly to existing keyframes to modify them you can select the 'Record
on keyframe' mode. In this mode the changes applied to an editor either through the interface or
3D manipulators in the GFX Window are automatically recorded (or updated) in the timeline as
keyframes in the selected timeline position.

It is possible to edit the events by double clicking on the event or by editing through the popup
menu.

If there is no selection and the selected row corresponds to an editor then double clicking on a flag

371
Production List

opens a window editing the value of the event.

If the event is an itemkey() then the curve3D is made visible in the GFX Window and the curveTL
associated to the curve3D is displayed inserted in the timeline.

A popup menu appears when clicking with the right mouse button over the timeline area. The
options displayed in the menu depend if the popup is opened over a single event or over a selection.

If the popup is opened over a single event the 'Edit Data' cascade menu is offered:

Item: Edits the event item.

Value: Edits the event value.

Time: Edits the instant of the event in the timeline.

Transition: Edits the event transition.

Curve->Curve3D: Allows to select the Curve3D of the event.

Curve->Curve1D: Allows to select the Curve1D of the event.

Curve->CurveTL: Allows to select the CurveTL of the Curve3D of the event.

Properties: Edits the Curve of the event.

Graph: The curve3D is made visible in the GFX Window and the curveTL associated to the
curve3D is displayed inserted in the timeline. (The same action as double clicking on the
event).

372
Production List

If the popup is opened over a selection of events the 'Edit Selection' cascade menu is offered:

Copy: Copies the selected events in an internal buffer.

Paste: Pastes the previously selected events in the selected timeline position. Note that you
can copy/paste from one production to another.

Cut: Deletes the selected events and displaces all posterior events the length the of the
deleted selection.

Clear: Deletes the selected events.

LineUp: Those events that have a duration (timers, sounds, movies, etc.) are repositioned
so that they start immediately after the previous one finishes.

To Curve: The selected events with numerical editors are replaced by an itemkey() grouping
them as keyframes of a curve.

Duplicate: This option is only offered when the menu is displayed over a row corresponding
to an item of the list. It allows to duplicate all the events including the selected item.

To Components: It splits the event into several events each one editing one of the
components. It is only displayed for those events that admit being splited into components (i.e.
an XYZ vector editor can be splited into three events editing the components).

The following options are always displayed in the popup menu:

Transition: Sets the transition of the selected events.

PreTransition: Sets the transition of the selected events as a PreTransition. An event whose
transition is set as PreTransition is equivalent to run the event the PreTransition time in
advance.

Show RunDownList: Opens a window displaying the RunDown list by tearing-off the editor
from the production list.

Unfold: Only displayed when the selected row is closed. It opens the row in the same ways
as pressing the little '+' sign displayed on the list.

373
Production List

The shortcuts (list dictionary keys) belonging to the production list are also effective from the
timeline. The following shortcuts are implemented by default:

<bs> Deletes the current selection.


<del> Deletes the current selection.
<ctrl><del> Cuts the current selection.
<ctrl>a Selects all.
<ctrl>c Copies the selection.
<ctrl>l Selects the current line.
<ctrl>r Redo.
<ctrl>v Paste
<ctrl>z Undo.
<down> Runs ToStart on the production.
<home> Runs ToStart on the production.
<end> Runs ToEnd on the production.
<right> Jumps to the next event or keyframe.
<tab> Jumps to the next event or keyframe.
<left> Jumps to the previous event or keyframe.
<shift><tab> Jumps to the previous event or keyframe.
<up> Pauses the production.

PRODUCTION_PLAY_NOBINDS Button editor Runs the production but simultaneously


disables any bind evaluation. This mode is
useful when playing a production that can
interfere with existing active binds (i.e
recording and playing the mouse camera
movement).
PRODUCTION_RECORDABLE_EDITORS Specifies the list of editors that are selected for
Toggle editor recording.

If no editor is specified in this list it is assumed


that all the editors are selected.
PRODUCTION_RECORDABLE_PRESETS Automatically sets the Recordable editors to
Cascade editor some predefined presets.
PRODUCTION_RECORD Button editor Enables/Disables recording mode.
PRODUCTION_RECORD_KEYFRAME Button When this mode is enabled and the curve3D of
editor an itemkey() is being edited then all changes to
the edited value are automatically inserted as a
new keyframe in the selected timeline position
or if a keyframe already exists in that position
then its value is updated.

374
Production List

PRODUCTION_AUTOCURVE Button editor This mode is useful to automatically create


keyframes of a curve instead of independent
events when dragging them to the timeline.

If this mode is disabled then all events drag


and dropped to the timeline are inserted as
independent events.

If the mode is enabled then all events drag and


dropped to the timeline corresponding to
numerical editors are automatically converted
to keyframes of a curve of an itemkey()
grouping all events affecting the same editor.
PRODUCTION_PLAY_REV Button editor Plays the production in reverse mode.
PRODUCTION_PLAYSEL Button editor Runs the selected segment of the production.
PRODUCTION_RECORD Button editor Enables/Disables recording mode.
PRODUCTION_STOP Button editor Stops the production by discarding all pending
production events.
PRODUCTION_PAUSE Button editor Pauses or Plays the production according to the
previous state.
PRODUCTION_PLAY Button editor Runs the production.
PRODUCTION_LOOP_MODE Button editor When this mode is enabled and a production is
played, when it reaches its final position it is
restarted.
PRODUCTION_FRAMEVIEW Button editor Resets the zoom to the default value.
PRODUCTION_TOSTART Button editor Resets the production to the start position.
PRODUCTION_NEXT Button editor Jumps to the next event or keyframe position
PRODUCTION_TOEND Button editor Resets the production in the final position.
PRODUCTION_PREV Button editor Jumps to the previous event or keyframe
position.
PRODUCTION_AUTOLINEUP Toggle editor Those events that have a duration (timers,
sounds, movies, etc.) are repositioned so that
they start immediately after the previous one
finishes.
PRODUCTION_BREAKATEND Toggle editor Stops all events when reaching the final one of
the production. This option is needed because
some events can be fired in loop mode and
thus would continue to run when this mode is
not set.
PRODUCTION_SET_START_STATE Toggle When a ToStart action is run this mode forces
editor the evaluation of the first event or state of all
different events in the production.

See above the 'Production start state'


discussion.

375
Production List

PRODUCTION_EDITMODE Button editor Specifies the mouse Editing mode:

Select:
Click and dragging selects events.

Pan:
Click and dragging with the mouse pans the
view. Pressing <ctrl> while click and drag also
enter Pan mode.

Zoom:
Click and <shift> click in the ruler band zooms
in/out. Also the mouse wheel allows to zooms
in/out.
PRODUCTION_ISPAUSED Toggle editor This is an insentive value that informs if the
production is paused.
PRODUCTION_ISPLAYING Toggle editor This is an insentive value that informs if the
production is playing.
PRODUCTION_GOTO Float editor Sets the position of the production to the
specified time. It forces the inmediate
evaluation of all previous events until the
specified instant.
PRODUCTION_DURATION Float editor This is an insentive value that informs if the
duration of the production.
PRODUCTION_LLCODE Float editor Displays the 'RunDown List' table containing in
every row one of the production events ordered
by delay.
PRODUCTION_LLSTRING_WIDTHS Float This is a hidden editor that is used to save the
editor production's width of each row and column of
the RunDown list.
PRODUCTION_LLSTRING_HEIGTHS Float This is a hidden editor that is used to save the
editor production's height of each row and column of
the RunDown list.
PRODUCTION_SELECTION_START Float Sets the Start time position of the selection.
editor
PRODUCTION_SELECTION_END Float editor Sets the End time position of the selection.
PRODUCTION_SELECTION_ALL Button Sets the Start and End time position of the
editor selection to cover the whole production. Also
selects all the lines in the timeline.
PRODUCTION_SELECTION_LINE Button Sets the Start and End time position of the
editor selection to cover the whole selected line of the
timeline of the production.
PRODUCTION_SELECTION_CLEAR Button Removes any existing selection.
editor
PRODUCTION_SELECTION_DELETE Button Deletes all events included in the current
editor selection.
PRODUCTION_SELECTION_CUT Button Cuts all events included in the current
editor selection. Cutting means deleting all the
selected events and displacing to the origin all
the posterior events towards the origin an
interval equal to the deleted segment.

376
Production List

PRODUCTION_SELECTION_COPY Button Saves in an internal buffer a copy of the


editor selected events.
PRODUCTION_SELECTION_PASTE Button Pastes in the selected instant the previously
editor saved copied buffer.

377
Bind List

Bind List
Description
Editors

Brainstorm eStudio has a very important capability that allows for making valuable actions. This
capability is the binds.

Binds allow you to link editors so they can change when the other changes.

For example, we can create a timer and a curve oscillating between 0 and 360 degrees and bind

381
Bind List

both elements to one of the object rotation editors. When we play the timer, the object will rotate
doing a circle.

By default there are several binds that link the mouse to the point of view, zoom and other camera
parámeters that allow us to rotate view, zoom in and out, pan, tilt, etc.

Brainstorm eStudio has to check every frame for the binds active, but imagine for a moment that
you have hundreds of binds, the simulation would be very slow if the program had to check every
bind every frame. To avoid this, eStudio maintains a list with the binds that are being used at the
time (are alive) so it only has to check this list at each frame. An example of this type of bind is a
bind to a timer, when the timer starts, the bind is added to the list. How do you know that a bind
is alive? In the above notice a small grey heart; this shows you that the bind is alive.

When you start eStudio there are already several existing binds. Attached to the mouse are the
Point of View, the Field of View, and the Head, Pitch, Radius of the camera. This allows you to
Pan the view in the GFX Window or do zooms among other things. While looking at the binds,
notice to the right of the Relative toggle, the grey heart appears meaning that the binds are alive
and active.

BIND_ACTIVE Toggle editor Enables/Disables the bind.


BIND_RELATIVE Toggle editor To maintain a relative distance in the bind.
BIND_PAD_ZEROS Toggle editor Add zeros at the left. (for text binds)
BIND_INSERT_DOTS Toggle editor Puts the unit's dots. (for text binds)
BIND_INSERT_SIGN Toggle editor Adds sign. (for text binds)
BIND_WIDTH Float editor To avoid curve increment displacement on the
text, it changes digit width. (for text binds)
BIND_PRECISION Float editor Change the values precision. (for text binds)
BIND_DECCHAR String editor Chooses character for the decimal units. (for
text binds)
BIND_PREFIX String editor Adds a prefix to the text. (for text binds)
BIND_POSTFIX String editor Adds a sufix to the text. (for text binds)
BIND_FUNCTION_ITEM Selector editor Selects an eStudio list item that modifies the
bind. It depends on what you use for the bind,
it can be a map, or a dll or an object for
example.
BIND_ITEM_MODIFIED Selector editor Selects an eStudio list item that is modified for
the bind. It depends on what you use for the
bind, it can be a map, or a dll or an object for
example.
BIND_CURVE_X Selector editor If the bind contains a curve1D, is reflected
here. If the bind is made to a float editor, only
this editor appears, but if the bind is done to a
float3, the Y and Z curve1D selectors appear
also.
BIND_CURVE_Y Selector editor If the bind contains a curve1D, is reflected
here.

382
Bind List

BIND_CURVE_Z Selector editor If the bind contains a curve1D, is reflected


here.
BIND_CURVE_W Selector editor If the bind contains a curve1D, is reflected
here.
BIND_CURVE_RECORD Selector editor Selects a curve to record the bind evolution.
BIND_DELAY Float editor Sets a delay for the bind.
BIND_DIFFERENCES Option editor Uses the difference between a frame and the
previous one to modify the value of the bind.
Options are:

Position: in this option, Posy = x, the value is


the same.

Velocity: Vy = xframe - xpreviousframe.

Acceleration: Ay = Vframe - Vpreviousframe.

Change: changes when the editor changes


value.

Filter: Filtery = (xframe - xpreviousframe) * k


where the k value is that of the Weight editor
BIND_DIFFERENCES_FRAMES Float editor Selects the number of frames to make the
difference.
BIND_LABEL_ALIVE Label editor To know if a bind is alive.
BIND_ACTIVATE Option editor What happens when a bind is inactive and we
activate it? It should be set to zero? It should
use the current value? This editor is related for
example, with tracking issues.

Absolute uses the bind value as is.

Accumulate calculates the difference between


the current value and for example the position
of a sensor.

Increment doesn't use the current value, just


sets the bind value to zero.
BIND_TIMER Timer selector editor This editor selects the timer for the bind.
BIND_FRACTION Float editor This editor controls the timer. If the timer is
running, this editor is useless but if not, you
can see the evolution from here.
BIND_DIFFERENCES_KFILTER Float editor Sets the weight for the Filter differential mode.
BIND_MODIFIER_INDEX_ROW Float editor When the bind is from a LLSTRING editor to
another, this editor shows the row of the table
that modifies the bind.
BIND_MODIFIER_INDEX_COL Float editor When the bind is from a LLSTRING editor to
another, this editor shows the column of the
table that modifies the bind.
BIND_MODIFIED_INDEX_ROW Float editor When the bind is from a LLSTRING editor to
another, this editor shows the row of the table
that is modified by the bind.

383
Bind List

BIND_MODIFIED_INDEX_COL Float editor When the bind is from a LLSTRING editor to


another, this editor shows the column of the
table that is modified by the bind.
BIND_DESCEND_MODE Toggle editor Enables descendance in the binds from the
parent to its children.
BIND_DESCEND_RECURSIVE Toggle editor The bind is applied to one parents children and
if the children have children themselves is
applied also to them and so on.
BIND_DESCEND_ORDER Option editor This editor sets the order of the descend binds
to be applied.

FromStart. The binds are applied from the


first children to the last one.

FromEnd. The binds are applied from the last


children to the first.

FromCenter. The binds are applied from the


central children to the beginning and end.

ToCenter. The binds are applied from the


beginning and end to the center children.

Random. Binds are applied randomly.


BIND_DESCEND_OVERLAP Float editor Controls if the binds are applied with
overlapping. Zero means no overlap.
BIND_DESCEND_MODE Toggle editor Enables descendance in the binds from the
parent to its children.
BIND_DESCEND_RECURSIVE Toggle editor The bind is applied to one parents children and
if the children have children themselves is
applied also to them and so on.

384
Region List

Region List
Description
Editors

Regions are used to define portions of space. They are mainly used by conditions (See the
condition List) to evaluate to a logical state (True or False) according to the relative position of a
point and region or from particles (See the particles List) to specify constraints to the particles.
Five types of regions are implemented:
Plane
A Point and a Direction specify the portion of space (Half of the whole space).
Box
A couple of vertices (minimum and maximum) specify a rectangular 3D box.
Cylinder
A Center, Direction and Radius specify a cylinder.
Sphere
A Center and a Radius specify a sphere.
Zone
A region in space limited by four clipping planes given by the Y directions of four pivots.

Every region divide the space in two parts. The Side mode sets the selected part (or the
boundary):

Inside
The part of space pointed by the inverse of the normal vectors of the surfaces that limit the
region.

Outside
The part of space pointed by the normal vectors of the surfaces that limit the region.

387
Region List

Boundary
The boundaries of the region.

REGION_TYPE Option editor Selects the region type. This can be, Plane,
Box, Cylinder, Sphere and Zone.
REGION_SIDE Option editor Selects the region side. Options are Inside,
Outside and Boundary.
REGION_ATTRACTION Float editor The amount of attraction of the region.
REGION_BOUNCINESS Float editor The amount of bounciness of the region.
REGION_PLANE_PTO Float3 editor For plane type regions sets a point of the
plane.
REGION_PLANE_DIR Float3 editor For plane type regions sets the direction of the
plane.
REGION_BOX_MIN Float3 editor For box type regions sets the lower corner of
the box.
REGION_BOX_MAX Float3 editor For box type regions sets the higher corner of
the box.
REGION_CYLINDER_CEN Float3 editor For cylinder type regions sets a point in the
axis of the cylinder.
REGION_CYLINDER_DIR Float3 editor For cylinder type regions sets the direction of
the axis of the cylinder.
REGION_CYLINDER_RAD Float editor For cylinder type regions sets the radius of the
cylinder.
REGION_SPHERE_CEN Float3 editor For sphere type regions sets the center of the
sphere.
REGION_SPHERE_RAD Float3 editor For sphere type regions sets the radius of the
sphere.
REGION_PIVOT1 Selector editor For zone type regions selects one of the
pivots whose Y direction specifies a clipping
plane making the zone.

REGION_PIVOT2 Selector editor For zone type regions selects one of the
pivots whose Y direction specifies a clipping
plane making the zone.

REGION_PIVOT3 Selector editor For zone type regions selects one of the
pivots whose Y direction specifies a clipping
plane making the zone.

REGION_PIVOT4 Selector editor For zone type regions selects one of the
pivots whose Y direction specifies a clipping
plane making the zone.

388
Intersection list

Intersection List
Description
Editors

Intersections allow eStudio to check if objects intersect with others.

ISECT_TYPE Option editor Selects the intersection type.

Object. Calculates the intersection with an


object.
Distance. Calculates the distance between two
points.
Plane. Calculates the intersection between a
plane and a point.
ISECT_MODE Option editor Selects the intersection mode.

Points. Calculates the intersection with a line


defined between two points.
Direction. Calculates the intersection with a
line defined with a point and a direction.
ISECT_ACTIVE Toggle editor Enables/Disables the intersection check.
ISECT_VISIBLE Toggle editor Displays a graphical representation in the GFX
Window.

391
Intersection list

ISECT_LEVEL Option editor Intersection levels:

AllFaces. Checks all faces of the object to


intersect with when the intersection type is
Object.
FrontFaces. Only checks the front faces of the
object to intersect with when the intersection
type is Object.
BackFaces. Only checks the back faces of the
object to intersect with when the intersection
type is Object.
BoundBox. A bounding box is used to check if
the object intersects when the intersection
type is Object.
BoundSphere. A bounding sphere is used to
check if the object intersects when the
intersection type is Object.
ISECT_OBJ Selector editor Selects the object to check intersection with.
If none is selected, the intersection checks all
the objects in the GFX Window.
ISECT_PT1 Float3 editor The intersection can be checked with a line
defined with a point and a direction or defined
with to points. This is one of these points.
ISECT_DIR Float3 editor A direction to define a intersection line.
ISECT_LEN Float editor Lenght of the line defined by a point and a
direction.
ISECT_PICK Selector editor Disabled. This editor reflects the object that is
selected for intersection when it's intersected.
ISECT_TREE LSelector editor An object can be intersected many times or
several objects can be intersected by an
intersection line. This tree editor holds the
information of each object intersection.
ISECT_TREE_PTO Table editor Holds the information about the exact
intersection points with the object.
ISECT_TREE_NOR Table editor Holds the information about the normals in the
intersection points with the object.
ISECT_PT2 Float3 editor The second point to define an intersection
line.
ISECT_PLANE_PTO Float3 editor A point to define a plane for intersections.
ISECT_PLANE_DIR Float3 editor A direction to define a plane for intersections.

392
Condition List

Condition List
Description
Editors

Conditions are almost only used for binding purposes. They evaluate to a logical state (True or
False) according to the relative position of a point and region in space. For example, whenever a
point is inside a box or sphere, the condition it is evaluated to True, if not it is evaluated to
False.

Thus, conditions specify a check point and reference a region (See the region List).

As an example, conditions are used from the Alpha Channel Option editor of the object List. The
use of conditions from this Option editor allows the user to set or remove the alpha channel of
the object, (and thus set or remove the video mask) according, for example, to the position of the
camera in the studio, in this case the point parameter is bound to the camera position or to a 3D
tracking sensor.

All the generated conditions are evaluated at the beginning of each frame and should be kept as
few as possible.

COND_PTO Float3 editor Sets the check point to be used in the


condition test.
COND_REGION Selector editor Selects the region that specifies the volume
to be used in the condition test.
COND_ALARM_STEP Integer editor If set to something different than zero
specifies that the action that triggers the
condition (from whoever is using the
condition, for example a bind to a Button
editor) should reevaluate repeatedly after this
amount of frames while the condition is True.
COND_STATE Integer editor This editor is internally set and is unsensitive
for the user. It reflects the actual state of the
condition.

395
Frame by frame List

Frame by Frame List


Description
Editors

This List allows the user to record animations to disk.

Animations can be recorded as a movie file, as independent pictures or sent to the GFX Window.

To be able to save an animation you have to create a production. (see the tutorial of the
production list).

In the Render to editor we can choose the output for the animation, (Display, Pictures or Movie)
the Resolution in x and y of the destination files (also you can press the From GFX button editor to
get the GFX Window resolution and Antialias. Also we can do a fields render, toggling on the
toggle editor Fields.

399
Frame by frame List

BYFRAME_RUNFRAMES Float editor Specifies the number of frames to run.


BYFRAME_RUN Button editor Runs the animation.
BYFRAME_STOP Button editor Stops the animation.
BYFRAME_PRODUCTION Selector editor Selects a production to be saved in the movie.
BYFRAME_STORE Option editor Sets the mode of saving the animation, to
Display, to Pictures or to a Movie.
BYFRAME_FIELDS Toggle editor Specifies if the animation should be recorded
by fields or frames.
BYFRAME_MOVIEPLAY Button editor In case the animation was saved as a movie,
this button will run the operating system movie
viewer to play it.
BYFRAME_FILENAME String editor To specify the file name for the animation.
BYFRAME_RENDERER_RES Float2 editor Specifies the resolution for the postrender
pictures.
BYFRAME_RES_GFX Button editor Takes the resolution from the GFX Window.
BYFRAME_AALIAS Option editor Specifies the antialiasing.
BYFRAME_LINE_BLOCKS Float2 editor Bluemoon parameter to specify how much
lines to display on screen.
BYFRAME_MOVIECOMPRESS toggle editor Toggles movie compression.
BYFRAME_ALPHA toggle editor Allows to save the movie with alpha channel.

400
Folder List

Folder List
Description
Editors

Folders are interface windows used to generate custom interfaces.

The widgets inside a folder are called icons. (See the icon List).

A folder simply contains a list of icons and specifies some parameters of the window:

Position, size and margins of the window.

Hiding or showing the window.

Displaying a title.

Displaying a background image.

Brainstorm eStudio generates on start up a special folder:

The Desktop Interface. This is a special interface that allows to do a lot of things in the
program without having to use the lists. From this interface you can acces the other special
folder, the GlobalLists interface folder.

403
Folder List

The GlobalLists interface folder containing the editor icons that hide or show every List window
interface and the undo and redo editor icons and a selection of editor icons allowing to modify
frequently used modes.

When you open the folder list you can see that the GlobalLists folder is in there. Pressing the
New button creates new folders that are ready to be filled with icons.

404
Folder List

FOLDER_SHOW Toggle editor Hides or shows the selected folder window.


FOLDER_SAVE_MODE Toggle editor Enables or disables saving the folder.
FOLDER_AUTOREPEAT_KEY Integer2 editor To enable/disable repetition of key events when
you hold pressed a key.
FOLDER_TITLE String editor String to be set in the folder window title.
FOLDER_ICON LSelector editor To select an icon that is the parent of all the
icons that the folder contains.
FOLDER_POSITION Integer2 editor Coordinates of the folder window relatives to
the main GFX Window.
FOLDER_MARGIN Integer2 editor Margin between the window and the icons
inside.
FOLDER_MAT_BACK3D Selector editor To attach a material to the folder.
FOLDER_PIPE Selector editor To attach the folder to the GFX Window.
FOLDER_REDRAW_PASSIVE Toggle editor For realtime considerations. To increase
performance the redraw of the folders can be
deactivated.
FOLDER_POP Button editor If the folder is behind other windows pops it.
FOLDER_PUSH Button editor Pushes the folder behind other windows.
FOLDER_SIZE Integer2 editor The dimensions of the folder. By default is
disabled. To enable it and change the
dimensions you must check the
FOLDER_FREE_POSITIONS toggle editor.
FOLDER_FREE_POSITIONS Toggle editor To enable the FOLDER_SIZE editor.
FOLDER_MAX_SIZE Integer2 editor The maximum dimensions of the folder.
FOLDER_RESIZE_CODE String editor To enter a code to be executed when the
folder is resized. A example of use can be a
folder with a lot of icons that you want them
to stay at some places when resizing.
FOLDER_RUN_RESIZE_CODE Button editor To execute the folder resize code.
FOLDER_LOCK_LAYOUT Toggle editor Blocks the folder to avoid moving or deleting
icons accidentally.

405
Icon List

Icon List
Description
Editors

Icons are the elements that are inside a Folder (see the Folder list). Icons can be generated by
drag and drop of any List editor to a folder window or by using the New button in the standard List
interface.

The Icon list, by default, contains several icons. In the following picture you can see a group called
GlobalLists that contains icons for the GlobalLists Folder.

Inside this GlobalLists icon, there is another group with childs that are icon groups as well. Each of
this childs corresponds to a different tab in the GlobalLists Folder.

409
Icon List

This tabs are the Model tab, the Render tab, the Animation tab, the Events tab, the Plugins tab
and the Modes tab. See Fig. 2 to see this tabs.

The Plugins tab only appears if there is a plugin loaded into eStudio. In the above picture can be
seen that this group does not contain any icons.

If you continue expanding groups, you will see the icons corresponding to each list in a tab. Try it
for example with the Events list. (See Fig. 4)

At first look it may seem as if the eStudio icons where just pixmaps like the one's used in operating
systems like Windows or Apple, but in eStudio icons can contain, among other things, code to be
executed when the icon is pressed or a drag & drop is made, they can contain pixmaps for different
states (release, over and press), even remote icons can be created to be executed from other
machines remotely.

In the following pages you will learn all the capabilities of icons that, when combined with folders,
provide one of the most useful features of Brainstorm eStudio.

410
Icon List

Summary of the Icon List


-Icon Types.
IconCode.
IconEditor.
IconProduction.
IconFrame.
IconTab.
IconList.
IconCascade.
IconOption.
IconRadio.
-Icon Tabs.
Modes. Code. Geometry. Pixmap. Separator. Remote.
-Icon list editors table.

eStudio provides nine icon types that combined with folders allow you to create advanced user
interfaces for your projects. Nearly any editor in eStudio can be drag & dropped to a folder to create
an icon. You can see in the following picture several of this icons, from check buttons to button
tabs, color editors or tables (Fig. 5).

The first of the icon types available is the IconCode. This icon is a button with a Python code that is
evaluated when the button is pressed (Figs. 6 and 7).

411
Icon List

A replica of any editor of a list allowing to modify the same parameter as the editor but from a
Folder instead of the corresponding list menu. In Fig. 8 you can see an Option editor and a String
editor.

You will learn later in the text what can be acomplished with this icon category, but just for you to
know, the icons in Fig. 8 are related and if you change the content of the String editor you can
change the label of the Option one.

The icon changes to a Production and the production timeline for that icon appears.

You can easily create a production from a folder icon selecting this category from the popup menu
that opens if you press and hold on the icon with the right mouse button.

412
Icon List

The icon changes to a container to help you organize your icons (Fig. 11).

This icon category allows to organize the icons in tabs (Fig 12).

The icon changes into a list of icons (Fig. 13).

413
Icon List

The icon changes into a cascade menu (Fig. 14).

The icon changes into an option editor (Fig. 15).

The icon changes to radio type (Fig 16).

Combining this nine icon categories with eStudio drag & drop capabilities and with python coding,
any user interface can be created to control your databases.

There are lots of properties for the icons. The editors that set them are organized in tabs as in all
the lists in the Brainstorm standard interface.

414
Icon List

The Modes tab contains general editors related with selection, visibility and other behaviors of the
icons. The Code tab contains all code that can be executed in different states of the icons. The
Geometry tab editors are related with the look and position of the icons. The Pixmap tab allows to
select different pictures for icon states like mouse over or pressed. Separator allows for better
organization of the icons in a folder by using line separators and the Remote tab allows to use
remote icons from other machines in a network.

The first editor in this tab, the toggle editor Managed, sets the visibility of the icon. In the process
of creating a user interface you can make your interface completely different using this editor to
hide/show groups of icons.

Next editor is Sensitive. This toggle controls interactivity with the icon. Having it enabled makes
the icon change when you pass the mouse over it to reveal that the focus is on it. As an example
see the following pictures. There is a folder with an icon of IconFrame type that contains three
icons that are childs of the first, in the pictures you can also see the hierarchy in the Icon list (Fig.
18).

Disabling the Sensitive editor in the parent icon (the IconFrame one) will disable sensitiviness in all
three childs, and disabling any of the child only will have effect on that child. Note that you can
forget that you disabled the parent and try to change the child Sensitive editor without having any
response so keep always an eye on this.

The Active Box editor creates a thin gray dotted rectangle around the text of an icon when you click
it. This rectangle remains until you click another icon so it can help you know what was the last icon
used.

The Real time update toggle allows to select if you want the icon to be updated or not. When you

415
Icon List

work in realtime, there are a lot of factors that can slow performance. If the editors of this icons
have binds that change the values every frame, then they will be redrawn in every frame. If this
cost is acceptable depends on what you need, if the database is too complex you may need all the
horsepower for it.

There are four editors that appear depending on the icon type, this editors are Key (string editor),
On key release (toggle), Selected (integer editor) and Select Edit (toggle editor).

The Key editor and the On Key release editors allows to specify a key to launch the icon action
and if you want it to happen when you press or release the key.

Another editor in this tab is the Select Edit toggle. At first this editor does not appear in the list, it
only appears if the icon is of type IconList, IconCascade, IconOption or IconRadio. To better
understand this editor we will show with an example. We have created a folder with an IconList icon
(see Fig 20) and added three elements to the list. This elements are String editors created in the
Maps list.

If you press with the right mouse button in any of the elements, and try to change it to IconEditor
type, no change will occur but if you toggle on the Select Edit editor, a button appears in the
bottom part of the folder (See Fig. 21) this button is different for each list element.

If you click now in the list elements with the right mouse button and select the IconEditor type, then
the editor appears as is, not as a button (See Fig. 22).

416
Icon List

Now you have a list of icons that can execute a python code when selected and also the icons can
be edited and changed to different texts. For example you can prepare a list of people for a credit
list and when you click each list item, the text appears on the GFX Window.

Note that when you change content in the String field, the actual editor also changes (See Fig. 23).

The Selected integer editor shows what list element is selected (starting with number zero), this
can be used to control the list element in python code or for binding purposes. This editor appears
selecting the following icon types: IconTab, IconList, IconCascade, IconOption and IconRadio.

The editors in this tab depend on the icon type selected. Each one have different necessities for
code so there are more or less sub-tabs inside the Code tab depending on it.

417
Icon List

Each sub-tab executes one code:


Button:
When you click the icon, this code is executed.

The Run button editor executes also the code. The Transition float editor allows itemset code to
execute with a transition. We can see this with another example.

We have created a sphere object primitive in the coordinates origin and we want to use a button to
displace the sphere to another position, so we can create an icon and type the following code in the
Code editor:

If you press the Run button in the Button tab you will see the sphere change to the (0,8,0)
position. Now, choose a transition (1 sec is fine) and change the itemset so that the sphere travels
to (0,0,0) and press the Run button again. The sphere goes smoothly from one position to the
other.

This transition does not affect any code that you type in the pink field, it must be a code that
modifyes anything suitable to accept a transition, if you print a number in the command window
simply it will not work (the transition).

Note that you can type the itemset code in the pink field or you can drag the sphere object
Displace label editor in the Object list Transformation tab to the field with the middle mouse
button pressed (or the wheel if you have a mouse with it) and the code will appear. To learn more
about this check The Brainstorm Interface manual pages.

418
Icon List

You will notice also a button editor not clickable that can display four different pictures:

No code has been typed yet.

This picture means that the code typed is Python code.

The code typed is executed by the ‘X’ process, usually interface handling code.

The code typed is executed by the ‘APP’ process, usually code that executes in
realtime.

Click Down:
Pressing down without releasing executes the code typed in this tab.

Click Up:
Releasing the mouse button after clicking executes the code typed in this tab.

We can do an exercise to test this three code windows. We are going to write a code that writes the
name of the code window that is executing. In the Button code tab, write the following:

print ‘Button’

in the Click Down code tab write:

print ‘Click Down Code’

and in the Click Up code tab write:

print ‘Click Up Code’

This code prints in the command window a message, depending on the state of the icon. When you
click and after releasing the message ‘Click Down’ appears, when you release the mouse button,
two messages appear, one for the execution of the Button and the other for the click up code.

Drag:
When you drag and drop an editor in a python code window, the itemset that changes that editor is
written in python code. Whatever you write in the Drag Code editor, is sent to the python window
when you drag to it.

As an example to this, create a folder with an icon and write in the Drag code window whatever you
want, we are going to write the following:

Now, open the python window and drag to it any editor of any list, when you drop you see in the
python window the itemset that the editor executes (See Fig. 27).

419
Icon List

But if instead of drag and drop of eStudio editors, the drag is done from the icon in your folder, in
the python window we will se the code that you wrote in the Drag Code editor of the icon.

Drop:
When you drag something to the icon, this code is executed.

In this tab there are editors that can be thought as ‘cosmetic’ controls. The editors allow to change
the color of the icon, the font size for the label and the title, the position in the folder, the horizontal
and vertical margins from the sides of the folder as well as margins inside the icon, the shadow as
well as specify a tooltip to help people know what your icons do.

Icons in your folders can be even more personalized. Pixmaps can be added to make your interfaces
look as you want.

In Fig. 29 you can see a folder that contains IconCascade icons (the File, Windows... menus),
IconTabs icons with pixmaps for the Release, Over and Press states (the Edit, Prim, Straps...
tabs), IconCode icons with pixmaps for the three states again (the primitives icons) and the
Iconcode icons for the toolbar.

Setting this pixmaps is very easy, you just have to prepare them in your favourite 2D drawing
application, save them in an appropiate format, jpg, rgb, ...) and load them from the three selectors
in the three Release, Over and Press tabs.

You can also use the Capture button to assign a pixmap to the icon generated from the GFX

420
Icon List

Window, in this case there is a default size for the icon pixmap that is 100x100 but can be changed
to a size that suits you before capturing.

The editors in this tab are used to format a bit the layout of the folder and organize icons in
different rows.

Enabling the Visible toggle allows you to see a line separator between icons. Once it is enabled the
Margin editor allows you to increment the separation between icons. The NewLine toggle adds a
new row and the icons after it will be in a different row. You must select the icon that you want to
be the last in a row and check its NewLine editor. When there is a newline, the Margin editor
modifies vertical separation.

Imagine that you have a three computer setup and that you want something to happen in the three
at the same time, what should you do? use three people perfectly coordinated to press the icon that
fires the action at the same moment? eStudio provides with remote icons to solve this situation.

eStudio can communicate with other machines using the Remote Ipf list. In that list you can
establish a connection that we can use from the Icon list.

In the previously exposed situation we would load the same database in the three machines, use
one of them as the master, and connect from that machine to the other two. When this is done, at
the moment you press your icon, the itemset is sent to the other machines and executed at the
same time.

Imagine now that you have the same setup, with three computers and the same databases, but in
one of the machines, you want the code contained in an icon to be different and still be fired at the
same time, then you can enable the As Icon toggle editor and then what is send via network is the
click action and not the itemset.

ICON_TYPE Option editor Selects between the following icon types:

IconCode: This icon is a button that contains


Python code that is executed when pressed.

IconEditor: This takes the look of the eStudio


editor that represents.

IconProduction: When you choose this


option, a new production is created and the
play of that production associated to the icon.

421
Icon List

IconFrame: This icon creates a frame with a


group of icons. The children are the icons inside
the frame.

IconTab: The same as the IconFrame but this


takes the look of a tab. The children are the
different tabs.

IconList: This option creates a list with a


group of icons. The children are the options in
the list.

IconCascade: This option creates a cascade


menu with a group of icons. The parent is the
name of the menu and the children the menu
options.

IconOption: This icon type creates an option


editor with a group of icons. The parent is the
name of the option editor and the children the
options to select.

IconRadio: This icon type takes a group of


icons and creates a collection of radio buttons
with them.
ICON_MANAGED Toggle editor Shows / hides the icon if it is inside a folder.
ICON_SENSITIVE Toggle editor Enables / disables the icon.
ICON_ACTIVEBOX Toggle editor Displays a box around the text of the last used
icon. Moving the mouse over the icons in a
folder reveals the last used one.
ICON_UPDATE Toggle editor When you drag an editor to a folder, an icon is
created, if you set this icon to editor mode, the
values of the editor are the same in the folder
icon, so if the editor has a bind that changes
values, this changes are reflected in the folder
icon. This makes the folder to be redrawn at
each frame, and performance can be reduced.
This toggle avoids this.
ICON_ACCELERATOR String editor Allows to specify a key to launch the icon
action. The focus must be on the GFX Window
to detect the keypress. The icon must be of
IconCode type.
ICON_KEYRELEASE Toggle editor The action that the selected key in the Key
editor fires is done when the key is released.
The icon must be of IconCode type.
ICON_SELECT_EDIT Toggle editor Allows to display icons in IconEditor form. The
icon must be of one of the following types,
IconList, IconCascade, IconOption or
IconRadio. This editor only appears if you
select one of this icon types.
ICON_SELECT_INDEX Integer editor Contains the number of the selected icon for
control purposes via binds or code. Appears
only for icons of IconList, IconCascade,
IconOption or IconRadio type.

422
Icon List

ICON_CODE String editor This editor contains the python code executed
when a button is pressed. You can drag editors
to the pink area to avoid writing the itemset
code of the editor.
ICON_RUN_CODE Button editor This button executes the content of the Code
editor. It is the same as pressing or selecting
the icon in the folder.
ICON_TRANSITION Float editor Sets a transition for the icon. This transition
only affects to some itemset actions. For
example if the icon executes a code that
modifies an object’s position, this position
change is done within the specified transition.
To learn more about ‘itemsets’ and other
eStudio commands check the Brainstorm
Application Interface manual pages.
ICON_LOCKED Button editor This button graphically reminds you what
eStudio process executes the code inside the
Code editor, App, X or Python.
ICON_LIST_ITEM Icon selector editor When you make an icon that has an
itemset(item, editor, value) as code you can
convert it to type IconEditor. This Reference
icon selector editor contains the icon
referenced in the folder.
ICON_CHANGE_CODE Text editor When you make an icon that has an
itemset(item, editor, value) as code you can
convert it to type IconEditor and then you
have an 'Editor changed' python code editor
where you can put a code that will only be
called when the editor changes for that
specified item.

This is a way (trick) to have a callback


associated to an editor and single object.
ICON_PRODUCTION Production selector When you make an icon of type
editor IconProduction, a production is created and
this selector allows to change the production or
select a new one.
ICON_CLICK_DOWN_CODE Text editor When you make an icon you can specify a code
that all the icons inside the frame or tab will
execute. This way you don’t have to repeat the
code in each icon’s Code editor. This code
executes when you press down the mouse
button.
ICON_CLICK_UP_CODE Text editor When you make an icon you can specify a code
that all the icons inside the frame will execute.
This way if you have a common code for all
icons inside this icon, then you don’t have to
rewrite the code in each icon’s Code editor.
This code executes when you release the
mouse button.

423
Icon List

ICON_DRAG_CODE Text editor When you drag and drop an editor in a python
code window, the itemset that changes that
editor is written in the python code. Whatever
you write in the Drag Code editor, is sent to
the python window when you drag to it.
ICON_DROP_CODE Text editor When you drag something to the icon, this
code is executed.
ICON_DROPPED_CODE Text editor This editor contains the code that was dropped
to the icon. You can do an itemget of this editor
from the Drop Code editor to know what was
dropped and do something else.
ICON_COLOR Option editor Allows to change the color of the icon selecting
from a list of predefined colors.
ICON_FONT_CODE Option editor Allows to choose between four different font
sizes for the icon label, Tiny, Small, Medium
and Big. By default is set to Medium.
ICON_TITLE String editor Sets a title text for the icon. It appears above
it. By default there is no title.
ICON_LABEL String editor Sets the label of the icon. By default is set to
the name of the icon.
ICON_TIP String editor Sets a tooltip for the icon. Left the mouse over
the icon and the tooltip appears. This can help
users a lot to understand or remember what
icons in an interface do.
ICON_WIDTH Integer2 editor Increments/decrements the width of the icon.
ICON_MARGIN Integer2 editor Increments/decrements the distance from the
sides of the icon to the label of the icon.
ICON_POSITION Integer2 editor If the Free editor in the Folder list
(FOLDER_FREE_POSITIONS) is toggled on,
this editor appears in the Icon list, allowing to
change the position of the icon in the folder.
ICON_SPACING Integer editor If two icons (or more) are inside a parent, the
parent has a spacing editor that controls the
separation between child icons.
ICON_SHADOW_SIZE Toggle editor Adds a shadow to the icons that gives them
depth. This is best seen in buttons.
ICON_ROWS Integer editor When the icon is of IconEditor type and is a
text editor, this changes the number of rows in
the text field.
ICON_COLS Integer editor When the icon is of IconEditor type and is a
text editor, this changes the width (in chars) of
the text field.
ICON_TABMARGIN Integer2 editor Changes the horizontal and vertical margins for
the tabs of an IconTab.

424
Icon List

ICON_PIXMAP_TYPE Option editor Chooses the pixmap type for the release state.
It can be of two formats:

File: allows to specify a file from storage.


Formats can be rgb, jpg, tga, tiff.

XPM: allows to write xpm code to generate the


icon pixmap.
ICON_CAPTURE Button editor Pressing this button captures the GFX Window
and assigns the generated pixmap to the icon.
The size of the pixmap comes defined by the
ICON_SIZE editor.
ICON_LOAD_FILE File selector editor Contains the pixmap for the icon in the release
state. An icon can have one of three states:

Release: The icon look by default.

Over: The icon look when the mouse is over it.

Press: The icon look when pressed.

Pixmaps can be selected using this editor to


change its appearance.
ICON_SIZE Integer2 editor Sets the x and y size for the pixmap captured
when using the Capture (ICON_CAPTURE)
Button editor.
ICON_XPM_DEFAULTS Presets editor Selects from a list of XPM presets.
ICON_XPM_CODE Text editor In this text field you can write the XPM code.
To know more about XPM files you can select
one of the presets and look at the code or use
applications like GIMP that allow to save in
that format.
ICON_PIXMAP_TYPE_OVER Option editor Chooses the pixmap type for the over state. It
can be of two formats:

File: allows to specify a file from storage.


Formats can be rgb, jpg, tga, tiff.

XPM: allows to write xpm code to generate the


icon pixmap.
ICON_CAPTURE_OVER Button editor Pressing this button captures the GFX Window
and assigns the generated pixmap to the icon.
The size of the pixmap comes defined by the
ICON_SIZE editor.
ICON_LOAD_FILE_OVER File Selector editor Contains the pixmap for the icon in the over
state. An icon can have one of three states:

Release: The icon look by default.

Over: The icon look when the mouse is over it.

Press: The icon look when pressed.

Pixmaps can be selected using this editor to


change its appearance.
ICON_XPM_DEFAULTS_OVER Presets editor Selects from a list of XPM presets.

425
Icon List

ICON_XPM_CODE_OVER Text editor In this text field you can write the XPM code.
To know more about XPM files you can select
one of the presets and look at the code or use
applications like GIMP that allow to save in
that format.
ICON_PIXMAP_TYPE_PRESS Option editor Chooses the pixmap type for the press state.
It can be of two formats:

File: allows to specify a file from storage.


Formats can be rgb, jpg, tga, tiff.

XPM: allows to write xpm code to generate the


icon pixmap.
ICON_CAPTURE_PRESS Button editor Pressing this button captures the GFX Window
and assigns the generated pixmap to the icon.
The size of the pixmap comes defined by the
ICON_SIZE editor.
ICON_LOAD_FILE_PRESS File Selector Contains the pixmap for the icon in the press
editor state. An icon can have one of three states:

Release: The icon look by default.

Over: The icon look when the mouse is over it.

Press: The icon look when pressed.

Pixmaps can be selected using this editor to


change its appearance.
ICON_XPM_DEFAULTS_PRESS Presets editor Selects from a list of XPM presets.
ICON_XPM_CODE_PRESS Text editor In this text field you can write the XPM code.
To know more about XPM files you can select
one of the presets and look at the code or use
applications like GIMP that allow to save in
that format.
ICON_SEP_NEWLINE Toggle editor Adds a carrier return after the icon, so the next
icon begins in a newline.
ICON_SEP_VIEW Toggle editor Displays a grey line to represent the Newline
between editors.
ICON_SEP_MARGIN Integer editor Disabled by default, this editor modifies a
property of the separator, the margin. If the
Visible toggle is chequed, this editor is enabled
allowing you to change the horizontal distance
between the separator and the next icon. If a
NewLine is also added, then the modified
distance is the vertical one.
ICON_REMOTE_ENABLE Toggle editor Enables the remote connection with the remote
ipf machines specified in the
ICON_REMOTE_IPFS editor.

When a connection is available, you can send


via network the code that the icon executes to
another machine that has the same database
with the same icon. This way you can fire the
same icons in different machines at the same
time.

426
Icon List

ICON_REMOTE_ASICON Toggle editor When this toggle is enabled what is remotely


sent is not the code that the icon executes but
the itemset that generates the click of the icon.
This way you make a click on the icon of the
remote machine that can have a different code
in it.
ICON_REMOTE_IPFS Remote ipf selector Creates or selects new remote ipf connections
editor for remote icon sending.
ICON_EDITOR_CHANGE_CODE Code editor When the icon is of type 'editor' the code
written here executes after the editor changes.
ICON_RUN_CHANGE_CODE Button editor To execute the code in the
ICON_EDITOR_CHANGE_CODE

427
Map List

Map List
Description
Editors
Tutorial

Maps are Brainstorm eStudio internal memory positions that can store values of type Integer,
Float, Vector (three floats) or Strings. They are mainly used as binding functions for binding
purposes, but they can also be used to comunicate these values between eStudio and other
processes, plugins or the eStudio interpreter (Python) (See the Brainstorm eStudio Python
reference).

Maps can exist independently from Python but their functionality is greatly extended when they
exist linked to Python variables or expressions, because they can be simultaneously accessed or
modified from eStudio and from Python scripts.

Every map has a Python name assigned to it. This name is the name of the Python variable that
should be used from Python scripts to access the map memory position.

Since the first versions of eStudio every Python name is generated by default with the ipf. prefix,
that is, if the map name is map1, the Python name is generated as ipf.map1. The fact that this
prefix exists makes eStudio life much easier because eStudio always knows exactly when the
ipf.map1 variable has been accessed or modified from a Python script.

Brainstorm eStudio still allows Python names not to have the ipf. prefix only for compatibility
reasons but the prefix should be mantained in every new created map and it is recomended to add
it to old map Python names.

Maps can also be expressions, meaning that they have assigned a string of Python code and their
eStudio map memory position store the result of evaluating that code. eStudio does not evaluate
the expression every frame, instead it is only evaluated when there is a need for it because
something has changed in eStudio.

The code can be a simple statement like '3+4' or can be related to other maps like 'ipf.map1 +
ipf.map2'.

This means that whenever a map variable changes it is possible that some other map expressions

431
Map List

that depend on it may also have to be reevaluated to reflect the change.

Brainstorm eStudio does not know what map expressions depend on what other maps, thus, to
avoid eStudio reevaluating all the map expressions whenever any map changes you can set which
maps are referenced from this one.

Map expressions have yet another special flag indicating if they should be evaluated at eStudio
loading configuration time when they are created. This flag can be important in case the code they
evaluate have dependences or imply initializations, Python function definitions, or other tasks that
should only be run once.

When the map is a Python expression it is the responsability of the user to manually set the
appropiate returning type of the map, otherwise, when the expression is evaluated an error
message will be displayed complaining about the mismatching types.

Note that the value of the maps can be set via the corresponding editors of the interface but these
editors can also be bound to any eStudio binding function.

OLD DOCUMENTATION
The following paragraphs are old documentation that only applies for old maps not using the ipf.
prefix in Python names. We only keep it for compatibility reasons and you do not need to read it
unless you do not use the ipf. prefix (which is not recomended because next eStudio releases may
assume always the ipf. prefix)

Because Python is an external software used by eStudio, the comunication between eStudio
and Python occurs at a very high level plane, in fact, the only conexion that exists between
the two of them is that:

Brainstorm eStudio can execute Python commands in the form of strings and get return
values.

Python can be extended to execute eStudio functions via extended python commands.

In no other way eStudio knows about Python memory locations, management, etc, but
eStudio always knows when a Python command has been executed because it is eStudio who
runs the Python commands:

The way eStudio updates a map into a Python variable is by executing a


Python command of the form "map = value".

432
Map List

The way eStudio updates a map from Python is by executing a Python command of the
form 'map' and the return value is the updated value.

Keeping updated both variables states can be a time consuming process for eStudio when a
Python expression is executed:

It is easy for eStudio to know when a map value has changed internally and then update it to
Python but there is no easy way to know from eStudio what variables of Python have
changed when a Python expression has been executed.

Thus eStudio has to be forced to update "every" map variable from Python, making the
process of executing a python expression potentially expensive time consuming process.

To avoid the extra processing time that these circunstamces could imply every map has the
following modes that are user configurable:

ToPython mode
Meaning if whenever this map changes internally in eStudio the corresponding variable in
Python will be created or updated by executing a Python command of the form "map =
value".

FromPython mode
Meaning if whenever "every" map has to be updated from Python (because a Python
expression has been executed) this map does or does not need to be updated (because
the user knows in advance that there is no need for it) and save that processing time.

An Expression mode allows the map to be the result of evaluating a Python expression, for
example adding two numbers, etc. This kind of maps may depend on the value of another
maps or can also change the values of another maps, thus an additional mode is provided:

Evaluate All mode meaning if the fact of updating this map to Python or evaluating its
expression implies that every other map has to be updated from Python (unless they
have the FromPython flag OFF).

By default the FromPython and EvaluateAll modes are ON and the user does not have to
worry about his Python reflected maps (ToPython mode ON) being always updated, but they
are provided to allow performance improvements in special situations.

MAP_TYPE Option editor Selects the type of the map:


Void
The map does not return any value. It is
just an expression with no return value.
Integer
The map is an integer number
Float
The map is a floating point number
Float3
The map is an structure of three Floats
String
The map is a string or file.
LlString
The map is a table editor.

433
Map List

EXP_EXE Button editor Evaluates the expression code and in case of


type different from Void prints the result.
MAP_EVAL_ON_LOAD Toggle editor Should the map be evaluated at eStudio
loading configuration time when it is created?
MAP_INT_PAR Integer editor Sets the value of the map when it is of Integer
type
MAP_FLOAT_PAR Float editor Sets the value of the map when it is of Float
type
MAP_VECTOR_PAR Float3 editor Sets the value of the map when it is of Float3
type
MAP_STRING_PAR String editor Sets the value of the map when it is of String
type
MAP_CODE String editor When the map is of expression type specifies
the corresponding expression code.
MAP_EXP_TYPE Option editor Chooses the expression type. According to the
type of the map you can select different
expression types.
MAP_FLOAT_RANGE_ENABLED Toggle editor Enables a range in the editor.
MAP_INT_TYPE Option editor Selects if the integer type is a Number, a
Toggle or an Option.
MAP_INT_TOGGLE_PAR Toggle editor Toggle editor.
MAP_INT_TOGGLE_CHANGE Button editor This editor is like the previous one but it has
the form of a button and works exactly as the
toggle one.
MAP_INT_OPTIONS LSelector editor To add new options.
MAP_STR_TYPE Option editor Chooses between a string or a file menu. The
file can be teared off.
MAP_FILE_TEAR Option editor Toggle to tear the file menu.
MAP_PRINT Button editor Prints on the command window the evaluation
of the python code. It can be used for debug.
MAP_FILE_PATTERN String editor Used to make the file editor recognize just the
files with the extension defined here.
MAP_FIND_STRING String editor To find a string in the maps. You could have a
lot of maps. With this editor you can find
something quickly.
MAP_FIND_PREVIOUS Button editor To find the next map that contains the desired
string.
MAP_FIND_NEXT Button editor To find the previous map that contains the
desired string.
MAP_REFMAPS LSelector editor If a map references other maps and depends
on the result of this maps, this editor allows
you to select and evaluate them.
MAP_REMOTE_IPFS LSelector editor Selects a remote eStudio in another machine.
MAP_STRING_FILE Selector editor Opens a file selector to open a file.
MAP_FLOAT_OP1 Float editor Float to make operations like Add, Substract,
Multiply, etc.

434
Map List

MAP_FLOAT_OP2 Float editor Float to make operations like Add, Substract,


Multiply, etc.
MAP_VECTOR_OP1 Float3 editor Vector to make operations like Add, Cross
Product, etc.
MAP_VECTOR_OP2 Float3 editor Vector to make operations like Add, Cross
Product, etc.
MAP_VECTOR_OP3 Float3 editor Vector to make operations like Add, Cross
Product, etc.
MAP_VAR_RUN_CODE Toggle editor Displays a string code editor to type code to be
executed with the map.
MAP_CURSOR_LINE Integer editor Informs about the line of code where the cursor
is.
MAP_LLSTRING_PAR Table editor A table editor with rows and cols. The contents
of each [row,col] cell is a string.
MAP_LLSTRING_ROWS Integer editor Table row index.
MAP_LLSTRING_COLS Integer editor Table col index.
MAP_LLSTRING_FILE File selector editor Selects a CSV (comma separated values) file to
load.
MAP_LLSTRING_SAVE Button editor Saves as a CSV file the content of the
MAP_LLSTRING_PAR editor.
MAP_LLSTRING_LOAD Button editor Loads a CSV file and fills the
MAP_LLSTRING_PAR editor with its contents.
MAP_LLSTRING_SEPCHAR String editor The char to use as a separator for the values.
When saving this character will be between
values.

435
Dynamic Library List (dll) List

Dynamic Library List (dll) List


Description
Editors

The Dynamic Library List (Dynamic Linked Library abbreviated as Dll) is used to load plugins.
Plugins are Dynamic Libraries: files with extensions .so for UNIX or extensions .dll for
Windows that can be loaded at runtime into the main Brainstorm application. They provide the
way to expand eStudio capabilities in several ways:

To control external devices such as robotic systems, mixers, studio lights or user equipment in
general.

Read into eStudio the information sent by external devices such as sensorized tracking
systems or any kind of user information generation system.

Expand the number of available binding functions to user created compiled code.

These files are loaded by using the Dynamic library list (dll list) by simply making a new element in
the list and selecting the corresponding dynamic library file.

For dynamic libraries to be useful there must be a way to communicate information between the
library and eStudio.

Brainstorm eStudio provides three ways to exchange this information:

Through the Dynamic library communication function.

Through Dynamic library symbols.

Through the standard API editem() commands.

The dynamic library can also create its own interfaces by creating its own Brainstorm lists or by
using its own user interface libraries.

Immediately after the dynamic library file is selected and loaded a routine with the same name as
the file (without the extension) is searched in the dynamic library. If it is found it is assumed to be
of the form:

439
Dynamic Library List (dll) List

int communicationfun(int nfun, void ** data)

where 'communicationfun' is the name of the file without extension.

Note that it is also a valid behaviour that the communication function does not exit. If it exists, this
routine is called in three stages:

INITIALIZATION
communicationfun is automaticalled called with:

nfun = EDITEM_LIST_INIT, and * data == NULL

The plugin then does all its initialization work and should set *data to a value different than
NULL.

In case the program is running in multiple CPUS and multithread, communicationfun can
then be called up to two times more (from the App thread and the Draw thread) with nfun =
EDITEM_LIST_INIT and with *data being the value that was initialized in the first call. (This
behaviour is more a reminiscency from previous versions of Brainstorm working with forks
instead of threads and needed a way to share memory).
The fact that *data is different from NULL can be used by the plugin to distinguish from the
first and next times the routine is being called for initialization.

RUNTIME
communicationfun is automaticalled called every frame by the APP thread with:

nfun = EDITEM_LIST_APP, and * data == NULL

If the value returned by communicationfun() is zero then the communicationfun routine will not
be called any more by the APP thread.

EXITING
communicationfun is automaticalled called on exit with:

nfun = EDITEM_LIST_QUIT, and * data == NULL.

The Dynamic library symbols list can be used to access routines of the plugin that accept and
return parameters.

Currently only one parameter to the function and one parameter being returned is implemented.

Parameters can be only of type void, int, float, float3 and string.

Thus routines of the following type are admited:

myReturnParameter myroutine(myParameter) {}

for example:

float getmyvalue(int n) { return n*4; }

Once a dynamic library symbol is created for the routine then the symbol can be used for
binding purposes to drive any program interface parameter.

Note that if the plugin is written in C++ those routines have to be embraced with the extern "C" {}
directives to be accesed by name by the symbol.

This kind of communication is extensively used to create drivers for external tracking devices like

440
Dynamic Library List (dll) List

camera tracking in Virtual Sets or Virtual Reality tracking devices. In those cases the camera or
position of 3D objects are bound to the Dynamic library symbols returning the tracked data.

In these cases also communicationfun is used to initialize ports and data.

The plugin can access or set any program parameter by using the API interface functions.

A couple of files are provided with the declarations of symbols and macros:

editem.h
vtipos.h

The API interface is made of very few routines due to Brainstorm editors design. (If you are not
familiar yet with Brainstorm Lists you should read the description about the 'Lists' in the manual
pages).

In theory only two routines should be needed to access or control any parameter of the program:

void editemSet(const char * itemName, ...);

void * editemGet(const char * itemName, const char * editorName);

which correspond exactly to their counterparts:

itemset(const char * itemName, ...);

itemget(const char * itemName, const char * editorName);

used from the Python interpreter language in configuration files.

But some other API routines are provided for easier usability.

Interacting with the program parameters with itemsets()


The plugin can set and get values from the program by using the standards:

editemSet(itemName, editorName, value) to set an editor value and:

ptr = editemGet(itemName, editorName) to find out an editor value.

But using strings as identifiers for items and editors can be too expensive for real time. That is why
the following versions of the routines:

editemSetBell(itemPtr, editorPtr, value)

ptr = editemGetBell(itemPtr, editorPtr)

using pointers instead of strings are provided.

To find the pointer of an item the following routine can be used:

cbell * bell = editemToBell(listName, itemName)

(note we call cbell * to such pointers)

Creating new elements with itemNew()


In theory itemNew() should not be needed because you can create a new element of a list with an
itemset, for example:

newelement = itemset("", "OBJ_NEW")

441
Dynamic Library List (dll) List

would create a new element in the list of objects, and then call:

itemset(newelement, editorName, value)

for every editor parameter we want to set.

But using:

newElement = itemnew(listName, itemName, editorName1, value1, editorName2, value2,


NULL)

is a better way because:

It provides a way to specify the name of the element (itemName)

Note that itemName already exists it is overwritten.

Note that if itemName is "" a new non existing name is assigned.

All internal callbacks associated to every independent itemset that should be needed are avoided
because the whole element is initializated after reading the whole itemnew().

The plugin can also create its own lists by simply making the corresponding itemnews() in the list
of lists, the list of editors and list of trees.

This capability is explained in the provided examples.

CAUTION
When sending parameters to routines with variable number of arguments like

editemNew(), editemSet(), editemGet(),

care has to be taken to send exactly the types and number that are expected or the program will
easily crash or corrupt memory. The following examples ilustrate common mistakes:

Do not forget to append the NULL paremeter at the end:

This is a common mistake because in the Python syntax it is not needed.

Wrong:

editemNew("mat", "", "MAT_COLOR", v4(0.0992528, 0.0848328, 1.0, 1.0))

Right:

editemNew("mat", "", "MAT_COLOR", v4(0.0992528, 0.0848328, 1.0, 1.0), NULL);

Do not send other types than the expected. This is specially tricky for the family of integer
and float structures (float2, integer2, float3, etc.). In Python syntax we always send
vector() structures but in C they have to be correctly formed as integer or float structures. The
only way you have to know if an editor accepts an integer or float structure is to look at its list
in the interface and check what kind of values accepts.

Asuming i3(x,y,z) constructs an integer3 and v3(x,y,z) constructs a float3

Wrong:

editemNew("prim", "", "PRIM_CYL_RESXYZ", v3(11, 1, 1), NULL);

Right:

442
Dynamic Library List (dll) List

editemNew("prim", "", "PRIM_CYL_RESXYZ", i3(11, 1, 1), NULL);

Do not send float or integer type when double is expected. This is also very tricky. Routines
with variable number of arguments in C will only work with double values, so do not send
integer or float:

Wrong: (this sends an integer)

editemNew("prim", "", "PRIM_CYL_RADIUS_END" , 0, NULL);

Also Wrong: (this sends an float)

editemNew("prim", "", "PRIM_CYL_RADIUS_END" , 0.0f, NULL);

Right: (this really sends a double)

editemNew("prim", "", "PRIM_CYL_RADIUS_END" , 0.0,, NULL);

DLL_LIB_FILE File editor Selects the dll file.

443
Dynamic Library Symbols (dllsym) List

Dynamic Library Symbols (dllsym) List


Description
Editors

The Dynamic Library Symbols List allows functions defined in loaded Dynamic Libraries to be
registered and then used for binding purposes.

Under the name symbols we mean all that user defined functions. Each symbol holds the name for
one of the functions of a library.

Brainstorm eStudio can not know what is the type of the return value or what are the parameters
type that the function accepts by only specifying the name of the function. Thus the user has to help
and has to manually specify those types for the symbol.

Only the following types are allowed for the parameter and the return type:

Void
No return value or parameter

Float
A float being returned or taking as a parameter

Vector
A structure of three floats (x,y,z) returned or taking as a parameter.

String
A char * string returned or taking as a parameter.

By using Dll symbols the user can create his own functions returning customized values and use
these functions to drive eStudio parameters by binding them. Examples are objects moving in some
custom fashion or eStudio parameters changing to accommodate to external events.

There are only two ways to execute Dll symbols:

By pressing (or binding) the Execute function Button editor

By using the symbol as a bind function (See the bind List)

447
Dynamic Library Symbols (dllsym) List

The most common way to use symbols is to use as a bind function. On the other side, bind
functions usually provide a timer parameter to drive the evolution of the function.

Symbols allow this timer parameter to be sent as a second parameter to the library function, thus
allowing the user to create functions that return values according to the evolution of an eStudio
timer.

DLLSYM_LIB Selector editor Selects the Dynamic Library declaring the


symbol.
DLLSYM_SYMBOL String editor Specifies the name of the symbol. It
automatically becomes blue when the typed
name is found in the Library.
DLLSYM_RETTYPE Option editor Selects the type returned by the function.
DLLSYM_PARTYPE Option editor Selects the type of the parameter of the
function.
DLL_INTEGER_PAR Integer editor Specifies the parameter for integer parameter
functions.
DLL_FLOAT_PAR Float editor Specifies the parameter for float parameter
functions.
DLL_VECTOR_PAR Float3 editor Specifies the parameter for vector parameter
functions.
DLL_STRING_PAR String editor Specifies the parameter for string parameter
functions.
DLLSYM_PARTIMER Toggle editor Sets the mode for the function to receive as a
second parameter the timer fraction when the
symbol is being used as a bind function.
DLL_EXE Button editor Executes the function and prints the result.
DLL_VECTOR_RETURN Float3 editor The vector value returned by the function.
DLL_STRING_RETURN String editor The string returned by the function.
DLLSYM_ACTIVE Toggle editor Toggles if the symbol is active.
DLL_FLOAT_RETURN Float editor The float value returned by the function.
DLL_INTEGER_RETURN Integer editor The integer value returned by the function.

448
Custom List

Custom List
Description
Editors

A database configuration consists of a list of files that are read sequentially. (See the section List
configuration files). Using the custom List the user can add to this list his own particular files.

A custom file can be directed to be read before or after the standard List configuration files.

User custom files can be used to define for example Python interpreter routines. You can define
your own Python files and classes to be loaded before or after the program starts. This is
acomplished by choosing your custom file, selecting a method (PreLoad or PostLoad) and saving
your database configuration. The next time you load this database, the custom file will be there.

When you save a database you can have files referenced in the database that reside in other
directories than the default one. When you want to take this database to another computer, this
files are not saved with the database. For this reason exists the save isolated mode (see the
database list), that makes a copy of all the files referenced in the database in the saved files. But
if you have a custom file referenced in the custom list it may not be saved. For this reason there
exists the Disabled mode that ensures that the referenced files are saved with the database.

451
Custom List

CUSTOM_FILE File editor Selects the custom file.


CUSTOM_TYPE Option editor Selects the custom file type. Options are
Disabled, PreLoad and PostLoad. See above.
CUSTOM_LOAD Button editor Loads the selected file.
CUSTOM_ZIP Button editor A tool to zip (pyz) the file you are going to
load. The next time it will load the ziped file.
CUSTOM_ENCRYPT Button editor A tool to encrypt (pye) the file you are going to
load. The next time it will load the encrypted
file.

452
Undo List

Undo List
Description
Editors

The Undo list maintains a list of the recently executed eStudio actions. This allows you to return to
return to a previous program situation or fix errors. The Undo list holds a number of undo
elements. You can't go past this number. When you reach the end of the list then no more undos
are available. When you hear a beep when doing undo the Undo list has reached its end.

You can undo and redo from the GlobalLists interface or pressing control-z (to undo) or control-r
(to redo)

Each time you do a new action in eStudio a new item is added to the list.

455
Undo List

Notice that there are actions that can't be undoed because of the transformations needed in
memory.

UNDO_CODE Lselector editor To add new undo/redo elements.

456
X- Ref List

X-Ref list
Description
Editors

The Xref list is used to store references to items of another lists.

It also keeps a string with the name of a python variable that will always be updated to contain the
name of the referenced item.

That is, when the Xref list is loaded with a database, or the user renames the item that the Xref
references, the python variable is updated automatically to contain the new item name.

There are several reasons for the user to use the Xref list:

1- To avoid that the referenced item could be deleted. The flag 'HardReference' allows the Xref to be
deleted automatically when the referenced item tries to be deleted.

2- To store a reference that can be queried later and find out the current name of the item. Note
that the name of an item can be changed by the user or when modifiying the hierarchy or can also

459
X- Ref List

change when merging databases.

3- To reference the name of a python variable that will always contain the name of the referenced
item and thus can be safely used in python scripts without being concerned about the current real
name of the item.

Note that the user should never set the same python name for two Xrefs because it would generate
an inconsistency. The interface complains in such case. The 'Find' button will find a new python
name for a variable that does not exist in any other xref and also does not exist in python as a
variable.

Note that pressing the control key while drag and dropping from an editor to a text window the
generated itemset() will contain as name of the item a python variable automatically referenced by
a new Xref.

Create a databar in the list of objects. The name by default is 'obj1', the name is not important at
this point so left it or change it. Go to the list of maps and create two maps. Name them 'setXRef'
and changeObject. See the following picture.

In the text editor in the 'setXRef' map write the python code as seen in the following picture.

This creates a new element in the XRef list and assigns it to the object 'obj' that you created before.

460
X- Ref List

In the second map, 'changeObject' write the python code seen in the next picture.

This code defines a variable named 'name' and uses the xref created in the other map. The second
line executes an itemset using the variable name that 'xreferences' the obj1 and modifies the scale
of the databar. Changing the name of the obj1 databar in the object list does not affect this script.
It will work whatever the name of the object is.

XREF_ITEM Xref selector editor Holds the referenced list item. Pressing with the
right mouse button in the small rectangular icon
of this editor shows a popup menu that allows
you to select the list of the item to reference.
XREF_PYNAME Text editor Holds the python name for the xref.

461
List of lists

List of lists
Description
Editors

As its name indicates, this list contains all the eStudio lists and the information in them, editors, key
shortcuts, in fact its list elements are lists. The same way as you create objects or events or
productions, this list allows you to create lists, or delete or duplicate them.

The list is organized in five tabs:

Modes:
This tab includes editors to change the look of the list. Every list has a left part (where items are
located) and a right part (where icons, references, comments or online editors are displayed). The
capability to locate items by pressing the initial letter of its name is also set from here. Save list
capability and recursive reference deletion are set in this tab.

A reference to the editors tree and a list of online editors (if enabled) is also displayed here in the
Editors tree and Editors online tabs.

465
List of lists

Views:
This tab contains editors to hide parts of the lists interface, like the buttons, or the top modes bar.

Items:
Information about the items in the selected list, the name of the selected item and the index
number of it.

Sets:
Information about how to save sets.

By default when you save sets, a default save mode is selected here. There are three options:

SaveReference: this mode saves the set with references to geometries, textures, sounds, etc.

SaveIsolated: this mode saves making copies of all the referenced files in the folder where the set
is saved.

SaveInline: this mode saves all the referenced files in the same text file using a uutmp encoding
technique.

Keys:
Shortcut keys are now assigned 'per List' (in the list of lists). Each list can have a python dictionary
that contains the python code corresponding to each key. The name of the dictionary is
'xxxxKeyDict' where xxxx stands for the list name. When pressing a key in the header of the list
then the key is searched in the dictionary and if it exists its python code is executed. This way the
user can assign behaviours to pressing keys in the header of the lists. For example framing an
object when pressing a key in the object list header.

Note that pressing keys in the headers already had a functionality: searching for names. This
functionality still is preserved and thus keys can have two mixed functionalities. To avoid it, keys
defined in the dictionary should have a keyboard modifier like <alt> or <ctrl> or the search
capability of the list can be disabled also from the list of lists 'Modes' tab. The graphic editors of a
list can inherit the shortcut keys, in particular the GFX Window inherits the shortcut keys
behaviour from the pipe List dictionary.

See the appendix Shortcuts for more info about shortcuts.

LIST_RIGHT_MODE Option editor Sets the right part interface mode. A list must
be selected and then modes choosed. Modes
are RightNothing, RightReferences,
RightFaceSmall, RightFaceBig,
RightComment and RightOnlineEd.

RightNothing: Extends the items window to


fill the horizontal size of the list interface.

RightReferences: Displays at the right, the


references between items of other lists (or the
same list). For example the binds that an
object has.

RightFaceSmall: Displays the list items as

466
List of lists

small icons at the right part of the list.

RightFaceBig: Displays the list items as big


icons at the right part of the list.

RightComment: Displays a pink area at the


right part of the list to write comments.

RightOnlineEd: Displays a green area where


you can drag editors from the selected list and
they appear in editor format.
LIST_SEARCH_ENABLED Toggle editor When enabled, you can search for a list item by
pressing the first letter of the name of the
item.
LIST_SAVE_ENABLED Toggle editor Allows the list to be saved.
LIST_DEL_REFS Toggle editor When deleting elements, if this editor is
toggled, references are recursively deleted.
LIST_TREE Selector editor References the editors tree (if exists).
LIST_ONLINE_EDITORS Editor selector When the right view of a list is in
editor RightOnlineEd mode, then this editor list
references all that editors.
LIST_LEFT_WIDTH Integer editor Selects the size of the left part of the selected
list interface.
LIST_SHOW Toggle editor Displays the selected list.
LIST_HORIZONTAL Toggle editor Changes the list format to horizontal.
LIST_TEARED Toggle editor Separates the list items area in a different
window.
LIST_GEO_TITLE Toggle editor Hides/Shows the border and the title of the list
window.
LIST_GEO_ILUSTRA Toggle editor Hides/Shows the graphic header of the selected
list.
LIST_GEO_TEAR Toggle editor Displays the tear line that shows where to click
to make the tear window separate.
LIST_GEO_MODES Toggle editor Hides/Shows the top modes bar that includes
the Dbs icons, the up & down arrows and the
Tree and the Right mode icons.
LIST_GEO_UPDOWN Toggle editor Hides/Shows the up & down arrows.
LIST_GEO_DBS Toggle editor Hides/Shows the Dbs icons.
LIST_GEO_BIGSMALL Toggle editor Hides/Shows the arrows at the top right that
allow to enlarge/reduce the list items area.
LIST_GEO_TREE Toggle editor Hides/Shows the Tree icon.
LIST_GEO_RIGHTMODE Toggle editor Hides/Shows the Right mode icon.
LIST_GEO_INDEX Toggle editor Hides/Shows the index pair numbers that
display in the first number the selected item of
the list and the second number the total of
items that the list contains.
LIST_GEO_REFS Toggle editor Hides the right reference area.

467
List of lists

LIST_GEO_HEADER Toggle editor Hides/Shows the header that consists on the


top modes bar, the item area and the right
modes area.
LIST_GEO_NEW Toggle editor Hides/Shows the New button.
LIST_GEO_DEL Toggle editor Hides/Shows the Del button.
LIST_GEO_DUP Toggle editor Hides/Shows the Dup button.
LIST_GEO_CLEAN Toggle editor Hides/Shows the Clean button.
LIST_GEO_COPYPASTE Toggle editor Hides/Shows the Copy and Paste buttons.
LIST_GEO_PANNER Toggle editor Hides/Shows the Panner line.
LIST_GEO_BUTTONS Toggle editor Hides/Shows the complete button area.
LIST_SHOW_PROPERTIES Toggle editor Displays properties if they are hidden. To test
toggle off the LIST_GEO_HEADER editor and
press this button.
LIST_LEFT_COLOR Option editor Changes the color of the left list items area.
LIST_FRAME_COLOR Option editor Changes the color of the frame that contains
the list items area and the right modes area.
LIST_POSITION Integer editor When you tear a list, you can also include this
header in a folder. This is the position of this
list in the folder. See the LIST_ONFOLDER
editor.
LIST_ONFOLDER Folder selector editor Inserts a list inside a folder.
LIST_TEARED_POS Integer editor The position of the header of a list inside a
folder. See the LIST_TEARED_ONFOLDER
editor.
LIST_TEARED_SIZE Integer editor The size of the header of a list inside a folder.
See the LIST_TEARED_ONFOLDER editor.
LIST_TEARED_ONFOLDER Folder selector Inserts a header inside a folder.
editor
LIST_LIST Integer editor The list of list items of the selected list.
LIST_NAME_SELECTED String editor The name of the list element selected in the
LIST_LIST editor with the prefix of the
database where it has been created.
LIST_SELECTED Integer editor The index number of the selected element in
the LIST_LIST.
LIST_SET_SAVE_MODE Option editor When saving sets, this editor allows to select
the default save mode. Options are
SaveIsolate, SaveReference and
SaveInline.
LIST_SET_APPEND_DATE Toggle editor When a set is saved, it appends the system
data to the filename.
LIST_SET_OVERWRITE Toggle editor If set it overwrites an existing set by default.
LIST_SET_WRITE_RECURSIVE Toggle editor Saves the set with references.
LIST_SET_SAVEREFSUP Toggle editor Saves binds with references. Binds are on top
of elements so when you save a set it looks up
in the hierarchy to also save the binds.
LIST_SET_LOAD Button editor Loads the set specified in the LIST_SET_FILE
editor.

468
List of lists

LIST_SET_UPDATE Button editor Updates the set with the set file that is on disk.
LIST_SET_FILE File selector editor Specifies a set to load or update.
LIST_KEYS_DICT String editor Contains a dictionary of key shortcuts for the
selected list.
LIST_KEYS_VALUE String editor Contains for each key, the python code to be
executed.
LIST_KEYS_NEW Button editor Creates a new key in the dictionary.
LIST_KEYS_DEL Button editor Deletes a key in the dictionary.
LIST_KEYS_ALT Toggle editor The key is created with the <Alt> key modifier
key.
LIST_KEYS_CTRL Toggle editor The key is created with the <Ctrl> key
modifier key.
LIST_KEYS_CHAR String editor The key to be pressed for the shortcut.
LIST_KEYS_LOAD Button editor Loads a dictionary stored in disk.
LIST_KEYS_SAVE Button editor Saves a dictionary to disk.
LIST_TYPE Option editor Sets the type of the list.

Internal. The list is created internally.

Dll. The list is created by loading a dll.

New. The list has been created using the New


button in the List list.
LIST_KEYS_CHAR String editor The key to be pressed for the shortcut.
LIST_KEYS_LOAD Button editor Loads a dictionary stored in disk.
LIST_KEYS_SAVE Button editor Saves a dictionary to disk.

469
Edtree List

Editor List
Description
Editors

The Editor list contains a list of all the editors inside Brainstorm eStudio. Editors in the software
can be created in two ways:

When eStudio is started, the lists are automatically populated with editors to be able to change
the properties of each list elements.

Using the Extra toggle editor in any list to create user defined editors.

No matter how editors are created, they have properties to be changed like, if it is an Extra editor,
or if it is editable, the list where it belongs or the type of the editor just to have a few examples.

Depending on the Type of the editor more editors and tabs appear in the list. Some of them to

473
Edtree List

modify the position or look in the list, others to execute special python codes.

EDITOR_TYPE Option editor Selects the editor type from a list, it can have
the look of any of the editors that normally
populate the lists, buttons, toggles, float3, etc.
EDITOR_SHOW Button editor Opens the list associated with the button to
show it.
EDITOR_SAVE_ENABLED Toggle editor Saves the content of the editor when the
database is saved.
EDITOR_EXTRA Toggle editor Indicates if the editor item is an Extra editor.
Disabled, just for information.
EDITOR_STATIC Toggle editor If you create two objects in the Object list, you
can set different values for the same editor in
each object. But there are editors, like the
DBS_LIST_FILE in the Dbs list that sets a
loader for saving, that when you put a value in
there, this value is the same for all the
databases in that list. This are called Static
editors.
EDITOR_EDITABLE Toggle editor Enables/Disables the editor for edition.
EDITOR_MANAGED Toggle editor Show/Hide the editor in the list where appears.
EDITOR_INLIST List selector editor An editor belongs always to a list, this editor
shows the list where the editor is.
EDITOR_LABEL String editor Contains the label of the editor.
EDITOR_LABEL_WIDTH Integer editor Sets the width of the label associated to the
editor.
EDITOR_TEXT_COLUMNS Integer editor Sets the number of digits in editors of type
float or integer.
EDITOR_SCROLLROWS Integer editor Sets the number of lines of the String editors.
EDITOR_EDCOPY Button editor With an editor selected you can do a Ctrl-c to
copy its contents to later paste. Pressing this
editor does the same.
EDITOR_EDPASTE Button editor With an editor selected you can do a Ctrl-c to
copy its contents to later paste using Ctrl-v,
this editor does the same as Ctrl-v.
EDITOR_EDPASTE_COMMAND String editor Holds the contents to paste to another editor.
EDITOR_PYCODE_ITEM String editor This holds the item of the list that is changing
and can be checked in the Pre Code and Post
Code editors.
EDITOR_PYPRECODE String editor This is a user callback to execute before an
editor is changed. If you query the editor, the
value is the one before the change.
EDITOR_PYCODE String editor This is a user callback to execute after an
editor is changed. If you query the editor, the
value is the one after the change.

474
Edtree List

EDITOR_OPTIONS LString editor Sets the labels of the options when the editor is
of type Option, OptionMenu or OptionRadio.
EDITOR_OPTIONS_XPM String editor Holds a pixmap for the options.

475
Edtree List

Edtree List
Description
Editors

The Edtree list holds the layout information for each list. By default this list contains only items for 3
lists, the Text list, the Modes list and the Edtree itself. This lists need elements when eStudio starts
and they need a layout.

As you open new lists, they appear in the Edtree list. The layout is organised with the help of Bar,
Tab, Column and Row elements. Bars act as separators, and Columns and Rows hold the editors.
All this elements can be unmanaged or disabled for edition.

479
Edtree List

EDTREE_TYPE Option editor Selects the type of the layout element, it can
be Bars, Rows, Columns, Tabs and Editors.
EDTREE_MANAGED Toggle editor Shows/Removes the selected layout element
from the interface.
EDTREE_SENSITIVE Toggle editor Enables/Disables the layout element.
EDTREE_LABEL String editor Sets the label for a Column layout element.
EDTREE_SELECTED Integer editor Shows the tab element selected.
EDTREE_EDITOR Editor selector editor Enables/Disables the editor for edition.
EDITOR_MANAGED Toggle editor Show/Hide the editor in the list where appears.

480
Remote eStudio List

Remote eStudio List


Description
Editors

The Remote eStudio List stores for every element the name of a machine where another eStudio is
running and has to be communicated through tcp/ip with this one.

Choosing the Socket option, commands can be sent over a network and choosing File option,
commands or data can be stored in a file. An application of this can be recording the camera
positions in a file and then use it from maya or max. Another application can be record the results
of a map in a file.

The Machine editor allows to type the name of a machine or its IP address. If the name is known
by the system this name can be from a local network or from the internet. If not, a IP address
should be specified.

By default a Tcp port is pre-assigned but this can also be changed.

The communication with each one of them can be opened and closed.

483
Remote eStudio List

This list is used by the remote event List.

RIPF_OPEN Button editor Opens the communication with the selected


machine.
RIPF_CLOSE Button editor Closes the communication with the selected
machine.
RIPF_RESTART Button editor Restarts the communication.
RIPF_STATUS Toggle editor Tells if the communication is established.
RIPF_MACHINE String editor Contains the name of the machine with the
remote eStudio.
RIPF_CODE String editor Code to be executed in other machine.
RIPF_RUN_CODE Button editor Executes the code.
RIPF_SEND_CODE Button editor Sends the code to other machine.
RIPF_TYPE Option editor Selects the RIPF type. It can be Socket or
File. The Socket option sends commands over
a network and the File option, allows to store
commands in a file.
RIPF_APPEND_DATE Toggle editor Appends the system date to the filename.
RIPF_PORT Integer editor Chooses a port to send the commands by.
RIPF_CODE_ACK Code editor Code to be run when the remote machine
acknowledges.
RIPF_RUN_CODE_ACK Button editor Allows to run the code in RIPF_CODE_ACK
locally.
This editors allow to receive an acknowledge
after the code (RIPF_CODE) sent to be
executed in a remote machine (by pressing
RIPF_RUN_CODE) has been executed.

The way it works internally is by appending to


the RIPF_CODE an extra code:

'ritemset(localmachine,
"RIPF_RUN_CODE_ACK")'

before sending it to the remote machine, thus,


after the remote machine executes
RIPF_CODE it automatically presses in our
local machine the button
RIPF_RUN_CODE_ACK, which executes the
RIPF_CODE_ACK code.
RIPF_ENABLED Toggle editor Allows to disable the comunication with the
remote machine. If disabled, the icons in
remote mode are not sent to the remote
machine.
RIPF_FILE File selector editor Sents to a file instead of a socket.

484

You might also like