Manual Estudio10
Manual Estudio10
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.
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.
3
Brainstorm eStudio Lists concept
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.
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:
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.
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:
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.
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.
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.
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.
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 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.
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.
17
Interface description
The Selector editor selects a reference from a List element to another List element.
It is composed of the following elements:
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
19
Interface description
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 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.
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
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.
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.
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.
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.
● 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
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
● 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.
● 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.
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:
■ If the parameter is not binded it generates the event that sets the current value
into the parameter.
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.
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
● 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.
When the mouse pointer goes over an object with right mouse button pressed a list of the form:
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
When the mouse pointer goes over an pivot graphic manipulator with the right mouse button
pressed a line of the form:
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.
When the mouse pointer goes over an pivot graphic manipulator with right mouse button
pressed a line of the form:
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.
When the mouse pointer goes over an pivot graphic manipulator belonging to a trajectory with
right mouse button pressed a line of the form:
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.
● 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.
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.
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).
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.
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.
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 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.
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.
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
38
Database list
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
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.
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.
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.
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
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
51
Modes List
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
55
Modes List
56
Modes List
57
Modes List
58
Modes List
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).
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.)
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.
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.
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 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.
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
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
78
Object List
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:
80
Object List
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.
81
Object List
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:
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.
Vertices
Normals
Texture vertices
Colors
Faces
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
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.
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.
91
Geometry List
92
Geometry List
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:
96
Primitives List
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.
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
- 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:
- 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:
- 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
Materials:
Two different materials can be selected for the extruded volume:
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.
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.
105
Primitives List
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
107
Primitives List
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.
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
112
Primitives List
113
Primitives List
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).
- 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.
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
- Pole Type, there are three options available for the 'shape' of the transparency change:
- The Half editor makes the calculations to be done on half of the space.
- 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.
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.
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.
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.
121
Engine List
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.
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:
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:
Example:
144
Text List
Each color component is defined with an integer which ranges between 0 and 255.
Example:
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:
\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.
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
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
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:
Example:
This\g<2.4>is an example
Other Codes
String interpretation:
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
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
153
Text List
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
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:
159
Text List
160
Text List
elastic rebound.
161
Text List
TEXT_FX_PATHMODE_END_IN Option editor Allows to select a predefined path for the text
to follow.
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.
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.
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
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.
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.
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.
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
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
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
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 offset from the character hot point to the next character hot point.
179
Fontfix List
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 one of the default configurations as a starting point from where to generate another
configurations.
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 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.
184
Particle List
185
Particle Type List
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.
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.
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.
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.
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.
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.
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.
Particle Type. The particle type of the particles generated in the explosion.
Explosion object. The particles explode with the shape of this object.
Objects
192
Particle Type List
Molecules
Vertices
193
Particle Type List
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
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.
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.
The Pointer Pivot will probably be binded later to the position of a 3D tracking sensor or a 2D
tablet or mouse.
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
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.
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.
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.
212
Pipe List
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.
214
Pipe List
215
Pipe List
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
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 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 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).
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.
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.
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.
224
Cameras List
225
Cameras List
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.
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.
-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
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
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.
239
Light List
LIGHT_TYPE Option editor This editor allows to select the light type from the
following:
240
Light List
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
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).
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.
The following equations describe mathematically what is to happen in the mixing process:
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.
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.
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.
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 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.
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.
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 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
251
Material List
reflection.
BumpMap.
This shading model simulates the bumps
or wrinkles in a surface without the
geometry modifications to the model.
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
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.
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 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.
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.
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:
264
Texture List
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
268
Texture List
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 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.
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.
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.
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
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_ORIENTA Option editor Selects the orientation mode for the generated
sections.
Four different drawing modes can be selected:
AutoOrienta
XOrienta
YOrienta
ZOrienta
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.
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.
291
Flow List
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.
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
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.
296
Molecule List
Molecule List
Description
Editors
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.
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.
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.
To work with shaders you must provide the necessary resources by using eStudio. The shader
resources could be, in short:
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.
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();
}
Press the compile button and select the "extra" toggle to see the extra editors created for your
shader
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 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 texture on the MAT_SHADER_TEX04, set type movie and select another .avi file.
You will not see the second movie.
void main()
{
gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0;
gl_Position = ftransform();
}
307
Shader List
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
309
Shader List
310
Shader List
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
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.
Timers can also run at discretized steps to simulate for example the movement of a clock.
If it is notifying all of the list elements that reference him the actual state.
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.
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
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:
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
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).
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:
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^.
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 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:
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.
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
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.
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
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
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:
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 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.
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
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.
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.
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.
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:
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.
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.
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.
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:
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
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).
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.
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:
353
Curve3D List
354
Curve3D List
Off
Disabled. In this mode the current orientation
values assigned to the control points are used.
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:
355
Curve3D List
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.
Sequential mode
All the events from the selected one to the next one in Flowstop mode are executed when:
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.
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.
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.
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
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.
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
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:
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:
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.
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).
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:
374
Production List
375
Production List
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
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.
382
Bind List
383
Bind List
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
391
Intersection list
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.
395
Frame by frame List
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
400
Folder List
Folder List
Description
Editors
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:
Displaying a title.
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
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
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).
413
Icon List
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
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:
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’
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.
421
Icon List
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.
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:
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:
426
Icon List
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
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:
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.
433
Map List
434
Map List
435
Dynamic Library List (dll) List
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.
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
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:
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:
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:
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.
myReturnParameter myroutine(myParameter) {}
for example:
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.
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:
But some other API routines are provided for easier usability.
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:
441
Dynamic Library List (dll) List
would create a new element in the list of objects, and then call:
But using:
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.
CAUTION
When sending parameters to routines with variable number of arguments like
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:
Wrong:
Right:
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.
Wrong:
Right:
442
Dynamic Library List (dll) List
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:
443
Dynamic Library Symbols (dllsym) List
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.
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.
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
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.
456
X- Ref List
X-Ref list
Description
Editors
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
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.
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.
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.
466
List of lists
467
List of lists
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.
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
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.
The communication with each one of them can be opened and closed.
483
Remote eStudio List
'ritemset(localmachine,
"RIPF_RUN_CODE_ACK")'
484