<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.secondlife.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Blubb+Dixon</id>
	<title>Second Life Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.secondlife.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Blubb+Dixon"/>
	<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/wiki/Special:Contributions/Blubb_Dixon"/>
	<updated>2026-07-25T18:32:53Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Geometry_and_Physics_VAG&amp;diff=40820</id>
		<title>Geometry and Physics VAG</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Geometry_and_Physics_VAG&amp;diff=40820"/>
		<updated>2007-11-18T09:46:53Z</updated>

		<summary type="html">&lt;p&gt;Blubb Dixon: /* Purpose */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;: (this is an initial draft so scope and focus are still fairly open.  Please add comments to the [[Talk:Geometry and Physics VAG]] if you have slightly different viewpoints so we can try to converge on a common view. This discussion could also expose other similar VAG that are needed in this area --[[User:Burhop Piccard|Burhop Piccard]] 18:38, 16 October 2007 (PDT) )&lt;br /&gt;
&lt;br /&gt;
=Purpose=&lt;br /&gt;
&lt;br /&gt;
The Geometry and Physics Viewpoint Advocacy Group exists to provide input for architectural design that is focused on the (virtual) physical modeling of objects.  &lt;br /&gt;
&lt;br /&gt;
See the [[Architecture Working Group]] and the [[Viewpoint Advocacy Groups]] for more information.&lt;br /&gt;
&lt;br /&gt;
=List of concerns addressed by this viewpoint=&lt;br /&gt;
&lt;br /&gt;
Areas of concern addressed by the viewpoint include:&lt;br /&gt;
* Describing the physical shape of the object.&lt;br /&gt;
* Describing the physical and material properties of the object (mass, color, material, surface texture).&lt;br /&gt;
* Efficient comunication of Geometric and physical properties.&lt;br /&gt;
* Use of open standards that allow for predictable sharing of data with various systems and tools&lt;br /&gt;
** Creation of data using various 3D modeling tools (i.e. Maya, Sketchup, 3D CAD, etc.) &lt;br /&gt;
** Reading of data by other software (other VW&#039;s, design and modeling tools, physics engines).&lt;br /&gt;
&lt;br /&gt;
=Areas not addressed by this viewpoint=&lt;br /&gt;
&lt;br /&gt;
* Display is not addressed by the viewpoint.  This is expected to be a fairly complex topic posibly involving differnet viewers and display technologies. Another VAG is needed for this.&lt;br /&gt;
&lt;br /&gt;
* Specific technologies and applications are not specifically part of this viewpoint. That is, this view is one of open archtecture capable of working with multiple applications and tools.&lt;br /&gt;
&lt;br /&gt;
=Source of Viewpoint=&lt;br /&gt;
&lt;br /&gt;
=Use Cases=&lt;br /&gt;
&lt;br /&gt;
See the [[Architecture Working Group Glossary]] and [[usecase templates]] for more information on creating usecases. One liners are fine (and better than nothing) but more detail will result in a better understanding and a better architecture.&lt;br /&gt;
&lt;br /&gt;
* Direct Creation in Second Life&lt;br /&gt;
** Direct Creation from Maya&lt;br /&gt;
** Direct Creation from Blender&lt;br /&gt;
** Direct Creation from Surface based modelers (please split for specific tools)&lt;br /&gt;
** Direct Creation from Solid Modelers (3D Mechanical CAD - please split for specific tools)&lt;br /&gt;
** Direct Creation from User built External Tools (i.e. such as showed up with Sculpted Prims)&lt;br /&gt;
** Direct Creation with User build in-world tools&lt;br /&gt;
&lt;br /&gt;
* Geometry Import - File Format&lt;br /&gt;
** Import from Collada&lt;br /&gt;
** Import from OBJ&lt;br /&gt;
** Import from JT&lt;br /&gt;
** Import from 3DM&lt;br /&gt;
&lt;br /&gt;
* Direct Geometry data transfer between Virtual Worlds&lt;br /&gt;
** Geometric asset exchange with other AWG based Asset Servers&lt;br /&gt;
** Geometric asset exchange with MPK20 (Sun)&lt;br /&gt;
** Geometric asset exchange with (who else wants to exchange data with SL? WOW? Metaverse? )&lt;br /&gt;
&lt;br /&gt;
* Viewer scalability use cases&lt;br /&gt;
** High Fidelity graphics with High Power Computer&lt;br /&gt;
** Low Fidelity graphics with Low Power CPU (i.e. Cell phone)&lt;br /&gt;
** Viewer on low bandwidth computer&lt;br /&gt;
** Viewer accessing region with large amount of geometric data&lt;br /&gt;
&lt;br /&gt;
* Physics Use Cases&lt;br /&gt;
** Mars (or other planet) virtual world/region support&lt;br /&gt;
** Underwater virtual world/region support&lt;br /&gt;
** Space (no gravity) based virtual world/region support&lt;br /&gt;
** non-unidirectional gravity for the whole sim, eg &#039;floor is the inside of a sphere&#039;&lt;br /&gt;
&lt;br /&gt;
=Related JIRA Issues=&lt;br /&gt;
&lt;br /&gt;
The following JIRA issues are known problems that this VAG would like to see resolved in any future architecture.  The purpose of this list it to avoid problems that exist in the curent architecture. The more typical JIRAs that are more short term in nature or can be resolved by simple code or design change should not be listed here.&lt;br /&gt;
&lt;br /&gt;
* {{JIRA|SVC-73}} Request for subtractive prims and holes&lt;br /&gt;
* {{JIRA|VWR-858}} Ability to import 3DM files&lt;br /&gt;
* {{JIRA|VWR-1110}} Ability to Import .OBJ Files&lt;br /&gt;
* {{JIRA|VWR-1387}} Ability to import .JT files&lt;br /&gt;
* {{JIRA|VWR-2527}} Ability to Import .DXF Files&lt;br /&gt;
* {{JIRA|SVC-814}} New prim type: Geometric prim&lt;br /&gt;
* {{JIRA|VWR-2547}} new prim type: ropes&lt;br /&gt;
&lt;br /&gt;
=Organization=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Joining ==&lt;br /&gt;
&lt;br /&gt;
Anyone with an interest in this Viewpoint is welcome to join. You should join the [[AW_Groupies]] group in Second Life.&lt;br /&gt;
&lt;br /&gt;
== In world meetings ==&lt;br /&gt;
&lt;br /&gt;
We meet once a week in-world and more if people are available.&lt;br /&gt;
&lt;br /&gt;
Also members are active on the wiki and in the SLDEV mailing list.&lt;br /&gt;
&lt;br /&gt;
Meetings are scheduled via the &amp;quot;[http://www.google.com/calendar/embed?src=pdd5mpktklo89bgmfgi076mcc4%40group.calendar.google.com SL AW Groupies&amp;quot; google calendar]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Meeting Agendas===&lt;br /&gt;
&lt;br /&gt;
* TBD&lt;br /&gt;
&lt;br /&gt;
===Chat Logs===&lt;br /&gt;
&lt;br /&gt;
* TBD&lt;br /&gt;
&lt;br /&gt;
== Modeling Techniques used to express viewpoint ==&lt;br /&gt;
&lt;br /&gt;
None decided.&lt;br /&gt;
&lt;br /&gt;
=Architecture (Geometry View)= &lt;br /&gt;
&lt;br /&gt;
See here for the [[Geometry Based Architecture View]]&lt;br /&gt;
&lt;br /&gt;
=External Links=&lt;br /&gt;
* Geometry&lt;br /&gt;
** [http://people.scs.fsu.edu/~burkardt/txt/obj_format.txt Obj format]&lt;br /&gt;
** [http://www.khronos.org/collada/ Collada]&lt;br /&gt;
** [http://www.jtopen.com/ JT Open]&lt;br /&gt;
** Constructive Solid Geometry (CSG) http://gts.sourceforge.net/ http://www.cgal.org/ http://opencsg.org/&lt;br /&gt;
** Universal 3D Standard (U3D) http://www.intel.com/technology/systems/u3d/ http://www.ecma-international.org/publications/standards/Ecma-363.htm&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Physics &lt;br /&gt;
** [http://www.havok.com/ Havok]&lt;br /&gt;
** [http://www.ageia.com/ PhysX Ageia]&lt;br /&gt;
&lt;br /&gt;
=Members (Stakeholders)=&lt;br /&gt;
&lt;br /&gt;
:[[User: Burhop Piccard|Burhop Piccard]] - Founder&lt;br /&gt;
:[[User: Morgaine Dinova|Morgaine Dinova]] - Analyst (scalability aspects)&lt;br /&gt;
:[[User: Wyn Galbraith|Wyn Galbraith]] - Builder &amp;amp; Prim Torturer &lt;br /&gt;
:[[User: Hypatia Callisto|Hypatia Callisto]] - 3d Artist&lt;br /&gt;
:[[User: JeanRicard Broek|JeanRicard Broek]] - Licenced Architect, GIS, SL Builder&lt;br /&gt;
&lt;br /&gt;
[[Category: AW Groupies]]&lt;/div&gt;</summary>
		<author><name>Blubb Dixon</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlEmail&amp;diff=40315</id>
		<title>LlEmail</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlEmail&amp;diff=40315"/>
		<updated>2007-11-14T01:47:47Z</updated>

		<summary type="html">&lt;p&gt;Blubb Dixon: sp&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|func_id=119|func_sleep=20.0|func_energy=10.0&lt;br /&gt;
|sort=Email|func=llEmail&lt;br /&gt;
|p1_type=string|p1_name=address&lt;br /&gt;
|p2_type=string|p2_name=subject&lt;br /&gt;
|p3_type=string|p3_name=message&lt;br /&gt;
|func_footnote&lt;br /&gt;
|func_desc=Sends an email to &#039;&#039;&#039;address&#039;&#039;&#039; with &#039;&#039;&#039;subject&#039;&#039;&#039; and &#039;&#039;&#039;message&#039;&#039;&#039;.&lt;br /&gt;
|return_text&lt;br /&gt;
|spec=The &#039;&#039;&#039;message&#039;&#039;&#039; is prefixed with information about the prim sending the email.&lt;br /&gt;
{{{!}}{{Prettytable}}&lt;br /&gt;
{{!}}-{{Hl2}}&lt;br /&gt;
!Template&lt;br /&gt;
!Example&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}&amp;lt;pre&amp;gt;&lt;br /&gt;
Object-Name: *prim*&lt;br /&gt;
Region: *simname* (*simpos.x*, *simpos.y*)&lt;br /&gt;
Local-Position: (*primpos.x*, *primpos.y*, *primpos.z*)&lt;br /&gt;
&lt;br /&gt;
*message*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{!}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Object-Name: Object&lt;br /&gt;
Region: Gibson (254976, 256000)&lt;br /&gt;
Local-Position: (117, 129, 50)&lt;br /&gt;
&lt;br /&gt;
The real message starts here.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{!}}}&lt;br /&gt;
|caveats=* There is a limit to the number of email messages an object can send in a given amount of time. &lt;br /&gt;
|constants&lt;br /&gt;
|examples=&amp;lt;pre&amp;gt;&lt;br /&gt;
string email = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry() &lt;br /&gt;
    {&lt;br /&gt;
        if(email == &amp;quot;&amp;quot;)&lt;br /&gt;
            email = (string)llGetKey()+&amp;quot;@lsl.secondlife.com&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        //Send an email to a normal email account&lt;br /&gt;
        llEmail( email, &amp;quot;Look it&#039;s an email subject line!&amp;quot;, &amp;quot;Testing 1 2 3&amp;quot; );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    touch_start( integer num_detected )&lt;br /&gt;
    {&lt;br /&gt;
        //Send an email to the person who touched the prim&lt;br /&gt;
        llEmail( email, &amp;quot;No touching!&amp;quot;, &amp;quot;I was defiled by: &amp;quot; + llDetectedName(0)+&amp;quot;\nKey: &amp;quot;+(string)llDetectedKey(0) );&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|helpers=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
email( string time, string address, string subj, string message, integer num_left )&lt;br /&gt;
{&lt;br /&gt;
    if(llGetSubString(address, -19, -1) == &amp;quot;@lsl.secondlife.com&amp;quot;)//trim the header&lt;br /&gt;
        message = llDeleteSubString(message, 0, llSubStringIndex(message, &amp;quot;\n\n&amp;quot;) + 1);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|also_functions=*{{LSLG|llGetNextEmail}}&lt;br /&gt;
*{{LSLG|llMessageLinked}}&lt;br /&gt;
|also_events=*{{LSLG|email}}&lt;br /&gt;
*{{LSLG|link message}}&lt;br /&gt;
|also_tests=*[[llEmail]]&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes=* Because of the long delay on this function, it is often called from a second script triggered by {{LSLG|link message}}.&lt;br /&gt;
* If you are sending email within Second Life, remember that the address is &#039;&#039;[key]&#039;&#039;@lsl.secondlife.com&lt;br /&gt;
** Which means if the key returned by [[llGetKey]] is &amp;quot;a2e76fcd-9360-4f6d-a924-000000000003&amp;quot;, then its email address is &amp;quot;a2e76fcd-9360-4f6d-a924-000000000003@lsl.secondlife.com&amp;quot;.&lt;br /&gt;
|permission&lt;br /&gt;
|negative_index&lt;br /&gt;
|cat1=Communications&lt;br /&gt;
|cat2=Email&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}{{OSWikiFeatureNav}}&lt;br /&gt;
=== Feature Design Document ===&lt;br /&gt;
(none)&lt;br /&gt;
&lt;br /&gt;
=== Functional Spec ===&lt;br /&gt;
(none)&lt;br /&gt;
&lt;br /&gt;
=== Test scripts ===&lt;br /&gt;
[https://osiris.lindenlab.com/mediawiki/index.php/Email_Test internal test]&lt;br /&gt;
&lt;br /&gt;
=== Discussion for future improvements ===&lt;br /&gt;
(none)&lt;br /&gt;
&lt;br /&gt;
=== Relationship to other features ===&lt;br /&gt;
&amp;lt;b&amp;gt; List of features that need to be tested when this feature changes, and why. &amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[IM to email]] - verify IM -&amp;gt; email still works.&lt;br /&gt;
&lt;br /&gt;
[[Postcards]] - Postcards use email out?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== User Guides ===&lt;br /&gt;
[http://lslwiki.net/lslwiki/wakka.php?wakka=llemail llEmail on LSLwiki.net]&lt;/div&gt;</summary>
		<author><name>Blubb Dixon</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Linden_Vehicle_Tutorial&amp;diff=40066</id>
		<title>Linden Vehicle Tutorial</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Linden_Vehicle_Tutorial&amp;diff=40066"/>
		<updated>2007-11-11T12:46:54Z</updated>

		<summary type="html">&lt;p&gt;Blubb Dixon: /* Reference Frame */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Header}}&lt;br /&gt;
&lt;br /&gt;
== Vehicles ==&lt;br /&gt;
&lt;br /&gt;
Vehicles are a new feature now available for use through LSL. This chapter will cover the basics of how vehicles&lt;br /&gt;
work, the terms used when describing vehicles, and a more thorough examination of the api available.&lt;br /&gt;
&lt;br /&gt;
There are several ways to make scripted objects move themselves around. One way is to turn the object into a&lt;br /&gt;
&amp;quot;vehicle&amp;quot;. This feature is versatile enough to make things that slide, hover, fly, and float. Some of the behaviors&lt;br /&gt;
that can be enabled are:&lt;br /&gt;
&lt;br /&gt;
*deflection of linear and angular velocity to preferred axis of motion&lt;br /&gt;
*asymmetric linear and angular friction&lt;br /&gt;
*hovering over terrain/water or at a global height&lt;br /&gt;
*banking on turns&lt;br /&gt;
*linear and angular motor for push and turning&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
Each scripted object can have one vehicle behavior that is configurable through the[[llSetVehicleType]],&lt;br /&gt;
llSetVehicleFloatParam,llSetVehicleVectorParam,llSetVehicleRotationParam,llSetVehicleFlags, and&lt;br /&gt;
llRemoveVehicleFlags library calls.&lt;br /&gt;
&lt;br /&gt;
These script calls are described in more detail below, but the important thing to notice here is that the vehicle&lt;br /&gt;
behavior has several parameters that can be adjusted to change how the vehicle handles. Depending on the values&lt;br /&gt;
chosen the vehicle can veer like a boat in water, or ride like a sled on rails.&lt;br /&gt;
&lt;br /&gt;
Setting the vehicle flags allow you to make exceptions to some default behaviors. Some of these flags only have&lt;br /&gt;
an effect when certain behaviors are enabled. For example, the [[VEHICLE_FLAG_HOVER_WATER_ONLY]] will&lt;br /&gt;
make the vehicle ignore the height of the terrain, however it only makes a difference if the vehicle is hovering.&lt;br /&gt;
&lt;br /&gt;
== Warnings ==&lt;br /&gt;
&lt;br /&gt;
Vehicles are new in Second Life 1.1 and some of the details of their behavior may be changed as necessary to&lt;br /&gt;
ensure stability and user safety. In particular, many of the limits and defaults described in the appendices will&lt;br /&gt;
probably change and should not be relied upon in the long term.&lt;br /&gt;
&lt;br /&gt;
It is not recommended that you mix vehicle behavior with some of the other script calls that provide impulse and&lt;br /&gt;
forces to the object, especially[[llSetBuoyancy]],[[llSetForce]],[[llSetTorque]], and[[llSetHoverHeight]].&lt;br /&gt;
&lt;br /&gt;
While the following methods probably don’t cause any instabilities, their behavior may conflict with vehicles&lt;br /&gt;
and cause undesired and/or inconsistent results, so use[[llLookAt]],[[llRotLookAt]],[[llMoveToTarget]], and&lt;br /&gt;
[[llTargetOmega]] at your own risk.&lt;br /&gt;
&lt;br /&gt;
If you think you have found a bug relating to how vehicle’s work, one way to submit the problem is to give a&lt;br /&gt;
copy of the vehicle and script to Andrew Linden with comments or a notecard describing the problem. Please&lt;br /&gt;
name all submissions &amp;quot;Bugged Vehicle XX&amp;quot; where XX are your Second Life initials. The vehicle and script will&lt;br /&gt;
be examined at the earliest convenience.&lt;br /&gt;
&lt;br /&gt;
==  Definitions ==&lt;br /&gt;
&lt;br /&gt;
The terms &amp;quot;roll&amp;quot;, &amp;quot;pitch&amp;quot;, and &amp;quot;yaw&amp;quot; are often used to describe the modes of rotations that can happen to a&lt;br /&gt;
airplane or boat. They correspond to rotations about the local x-, y-, and z-axis respectively.&lt;br /&gt;
z-axis .&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/Tait-Bryan_angles&lt;br /&gt;
&lt;br /&gt;
The right-hand-rule, often introduced in beginning physics courses, is used to define the direction of positive&lt;br /&gt;
rotation about any axis. As an example of how to use the right hand rule, consider a positive rotation about the&lt;br /&gt;
roll axis. To help visualize how such a rotation would move the airplane, place your right thumb parallel to the&lt;br /&gt;
plane’s roll-axis such that the thumb points in the positive x-direction, then curl the four fingers into a fist. Your&lt;br /&gt;
fingers will be pointing in the direction that the plane will spin.&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/Right_hand_rule&lt;br /&gt;
&lt;br /&gt;
Many of the parameters that control a vehicle’s behavior are of the form:&lt;br /&gt;
&lt;br /&gt;
VEHICLE_&#039;&#039;&#039;BEHAVIOR&#039;&#039;&#039;_TIMESCALE&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;BEHAVIOR&#039;&#039;&#039; ’s &amp;quot;timescale&amp;quot; can usually be understood as the time for the&lt;br /&gt;
behavior to push, twist, or otherwise affect the vehicle such that the difference between what it is doing, and&lt;br /&gt;
what it is supposed to be doing, has been reduced to 1/e of what it was, where &amp;quot;e&amp;quot; is the natural exponent&lt;br /&gt;
(approximately 2.718281828). In other words, it is the timescale for exponential decay toward full compliance to&lt;br /&gt;
the desired behavior. When you want the vehicle to be very responsive use a short timescale of one second or&lt;br /&gt;
less, and if you want to disable a behavior then set the timescale to a very large number like 300 (5 minutes) or&lt;br /&gt;
more. Note, for stability reasons, there is usually a limit to how small a timescale is allowed to be, and is usually&lt;br /&gt;
on the order of a tenth of a second. Setting a timescale to zero is safe and is always equivalent to setting it to its&lt;br /&gt;
minimum. Any feature with a timescale can be effectively disabled by setting the timescale so large that it would&lt;br /&gt;
take them all day to have any effect.&lt;br /&gt;
&lt;br /&gt;
==  Setting the Vehicle Type ==&lt;br /&gt;
&lt;br /&gt;
Before any vehicle parameters can be set the vehicle behavior must first be enabled. It is enabled by calling&lt;br /&gt;
[[llSetVehicleType]] with any &#039;&#039;&#039;VEHICLE_TYPE_*&#039;&#039;&#039;, except [[VEHICLE_TYPE_NONE]] which will disable the&lt;br /&gt;
vehicle. See the {{LSLGC|Vehicle|vehicle types}} constants section for currently available types. More types will be available soon.&lt;br /&gt;
&lt;br /&gt;
Setting the vehicle type is necessary for enabling the vehicle behavior and sets all of the parameters to its default&lt;br /&gt;
values. For each vehicle type listed we provide the corresponding equivalent code in long format. Is is important&lt;br /&gt;
to realize that the defaults are not the optimal settings for any of these vehicle types and that they will definitely&lt;br /&gt;
be changed in the future. Do not rely on these values to be constant until specified.&lt;br /&gt;
&lt;br /&gt;
Should you want to make a unique or experimental vehicle you will still have to enable the vehicle behavior with&lt;br /&gt;
one of the default types first, after which you will be able to change any of the parameters or flags within the&lt;br /&gt;
allowed ranges.&lt;br /&gt;
&lt;br /&gt;
Setting the vehicle type does not automatically take controls or otherwise move the object. However should you&lt;br /&gt;
enable the vehicle behavior while the object is free to move and parked on a hill then it may start to slide away.&lt;br /&gt;
&lt;br /&gt;
We’re looking for new and better default vehicle types. If you think you’ve found a set of parameters that make a&lt;br /&gt;
better car, boat, or any other default type of vehicle then you may submit your proposed list of settings to&lt;br /&gt;
Andrew Linden via a script or notecard.&lt;br /&gt;
&lt;br /&gt;
==  Linear and Angular Deflection ==&lt;br /&gt;
&lt;br /&gt;
A common feature of real vehicles is their tendency to move along &amp;quot;preferred axes of motion&amp;quot;. That is, due to&lt;br /&gt;
their wheels, wings, shape, or method of propulsion they tend to push or redirect themselves along axes that are&lt;br /&gt;
static in the vehicle’s local frame. This general feature defines a class of vehicles and included in this category a&lt;br /&gt;
common dart is a &amp;quot;vehicle&amp;quot;: it has fins in the back such that if it were to tumble in the air it would eventually&lt;br /&gt;
align itself to move point-forward -- we’ll call this alignment effect angular deflection.&lt;br /&gt;
&lt;br /&gt;
A wheeled craft exhibits a different effect: when a skateboard is pushed in some direction it will tend to redirect&lt;br /&gt;
the resultant motion along that which it is free to roll -- we’ll call this effect linear deflection.&lt;br /&gt;
&lt;br /&gt;
So a typical Second Life vehicle is an object that exhibits linear and/or angular deflection along the &amp;quot;preferential&lt;br /&gt;
axes of motion&amp;quot;. The default preferential axes of motion are the local x- (at), y- (left), and z- (up) axes of the&lt;br /&gt;
local frame of the vehicle’s root primitive. The deflection behaviors relate to the x-axis (at): linear deflection will&lt;br /&gt;
tend to rotate its velocity until it points along it’s positive local x-axis while the angular deflection will tend to&lt;br /&gt;
reorient the vehicle such that it’s x-axis points in the direction that it is moving. The other axes are relevant to&lt;br /&gt;
vehicle behaviors that are described later, such as the vertical attractor which tries to keep a vehicle’s local z-axis&lt;br /&gt;
pointed toward the world z-axis (up). The vehicle axes can be rotated relative to the object’s actual local axes by&lt;br /&gt;
using the [[VEHICLE_REFERENCE_FRAME]] parameter, however that is an advanced feature and is covered in&lt;br /&gt;
detail in a later section of these documents.&lt;br /&gt;
&lt;br /&gt;
Depending on the vehicle it might be desirable to have lots of linear and/or angular delfection or not. The speed&lt;br /&gt;
of the deflections are controlled by setting the relevant parameters using the[[llSetVehicleFloatParam]] script call.&lt;br /&gt;
&lt;br /&gt;
Each variety of deflection has a &amp;quot;timescale&amp;quot; parameter that determines how quickly a full deflection happens.&lt;br /&gt;
&lt;br /&gt;
Basically the timescale it the time coefficient for exponential decay toward full deflection. So, a vehicle that&lt;br /&gt;
deflects quickly should have a small timescale. For instance, a typical dart might have a angular deflection&lt;br /&gt;
timescale of a couple of seconds but a linear deflection of several seconds; it will tend to reorient itself before it&lt;br /&gt;
changes direction. To set the deflection timescales of a dart you might use the lines below:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
llSetVehicleFloatParam(VEHICLE_ANGULAR_DEFLECTION_TIMESCALE, 2.0);&lt;br /&gt;
llSetVehicleFloatParam(VEHICLE_LINEAR_DEFLECTION_TIMESCALE, 6.0);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Each variety of deflection has an &amp;quot;efficiency&amp;quot; parameter that is a slider between 0.0 and 1.0. Unlike the other&lt;br /&gt;
efficiency parameter of other vehicle behaviors, the deflection efficiencies do not slide between &amp;quot;bouncy&amp;quot; and&lt;br /&gt;
&amp;quot;damped&amp;quot;, but instead slide from &amp;quot;no deflection whatsoever&amp;quot; (0.0) to &amp;quot;maximum deflection&amp;quot; (1.0). That is, they&lt;br /&gt;
behave much like the deflection timescales, however they are normalized to the range between 0.0 and 1.0.&lt;br /&gt;
&lt;br /&gt;
==  Moving the Vehicle ==&lt;br /&gt;
&lt;br /&gt;
Once enabled, a vehicle can be pushed and rotated by external forces and/or from script calls such as&lt;br /&gt;
[[llApplyImpulse]], however linear and angular motors have been built in to make motion easier and smoother.&lt;br /&gt;
Their directions can be set using the[[llSetVehicleVectorParam]] call. For example, to make the vehicle try to move&lt;br /&gt;
at 5 meters/second along its local x-axis (the default look-at direction) you would put the following line in your&lt;br /&gt;
script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, &amp;lt;5, 0, 0&amp;gt;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To prevent vehicles from moving too fast the magnitude of the linear motor is clamped to be no larger than about&lt;br /&gt;
30 meters/second. Note that this is clamped mostly because of limitations of the physics engine, and may be&lt;br /&gt;
raised later when possible.&lt;br /&gt;
&lt;br /&gt;
Setting the motor speed is not enough to enable all interesting vehicles. For example, some will want a car that&lt;br /&gt;
immediately gets up to the speed they want, while others will want a boat that slowly climbs up to its maximum&lt;br /&gt;
velocity. To control this effect you can use the [[VEHICLE_LINEAR_MOTOR_TIMESCALE]] parameter.&lt;br /&gt;
&lt;br /&gt;
Basically the &amp;quot;timescale&amp;quot; of a motor is the time constant for the vehicle to exponentially accelerate toward its full&lt;br /&gt;
speed.&lt;br /&gt;
&lt;br /&gt;
What would happen if you were to accidentally set the vehicle’s linear velocity to maximum possible speed and&lt;br /&gt;
then let go? It would run away and never stop, right? Not necessarily: an automatic &amp;quot;motor decay&amp;quot; has been built&lt;br /&gt;
in such that all motors will gradually decrease their effectiveness after being set.&lt;br /&gt;
&lt;br /&gt;
Each time the linear motor’s vector is set its &amp;quot;grip&amp;quot; immediately starts to decay exponentially with a timescale&lt;br /&gt;
determined by the [[VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE]], such that after enough time the&lt;br /&gt;
motor ceases to have any effect. This decay timescale serves two purposes. First, since it cannot be set longer&lt;br /&gt;
than 120 seconds, and is always enabled it gaurantees that a vehicle will not push itself about forever in the&lt;br /&gt;
absence of active control (from keyboard commands or some logic loop in the script). Second, it can be used to&lt;br /&gt;
push some vehicles around using a simple impulse model. That is, rather than setting the motor &amp;quot;on&amp;quot; or &amp;quot;off&amp;quot;&lt;br /&gt;
depending on whether a particular key is pressed &amp;quot;down&amp;quot; or &amp;quot;up&amp;quot; the decay timescale can be set short and the&lt;br /&gt;
motor can be set &amp;quot;on&amp;quot; whenever the key transitions from &amp;quot;up&amp;quot; to &amp;quot;down&amp;quot; and allowed to automatically decay.&lt;br /&gt;
&lt;br /&gt;
Since the motor’s effectiveness is reset whenever the motor’s vector is set, then setting it to a vector of length&lt;br /&gt;
zero is different from allowing it to decay completely. The first case will cause the vehicle to try to reach zero&lt;br /&gt;
velocity, while the second will leave the motor impotent.&lt;br /&gt;
&lt;br /&gt;
The two motor timescales have very similar names, but have different effects, so try not to get them confused.&lt;br /&gt;
&lt;br /&gt;
::[[VEHICLE_LINEAR_MOTOR_TIMESCALE]] is the time for motor to &amp;quot;win&amp;quot;, and&lt;br /&gt;
&lt;br /&gt;
::[[VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE]] is the time for the motor’s &amp;quot;effectiveness&amp;quot; to decay&lt;br /&gt;
toward zero. If you set one when you think you are changing the other you will have frustrating results. Also, if&lt;br /&gt;
the motor’s decay timescale is shorter than the regular timescale, then the effective magnitude of the motor&lt;br /&gt;
vector will be diminished.&lt;br /&gt;
&lt;br /&gt;
==  Steering the Vehicle ==&lt;br /&gt;
&lt;br /&gt;
Much like the linear motor, there is also an angular motor that is always on, and whose direction and magnitude&lt;br /&gt;
can be set. For example, to make a vehicle turn at 5 degrees/sec around its local z-axis (its up-axis) you might&lt;br /&gt;
add the following lines to its script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vector angular_velocity = &amp;lt;0, 0, 5 * PI / 180&amp;gt;;&lt;br /&gt;
llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, angular_velocity);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The magnitude of the angular motor is capped to be no more than two rotations per second (4*PI radians/sec).&lt;br /&gt;
&lt;br /&gt;
Also like the linear motor it has an efficiency parameter, [[VEHICLE_ANGULAR_MOTOR_TIMESCALE]], and a&lt;br /&gt;
motor decay parameter, [[VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE]], which is set to themaximum possible value of 120 seconds by default.&lt;br /&gt;
&lt;br /&gt;
When steering a vehicle you probably don’t want it to turn very far or for very long. One way to do it using the&lt;br /&gt;
angular motor would be to leave the decay timescale long, enable a significant amount of angular friction (to&lt;br /&gt;
quickly slow the vehicle down when the motor is turned off) then set the angular motor to a large vector on a key&lt;br /&gt;
press, and set it to zero when the key is released. Another way to do it is to set the&lt;br /&gt;
[[VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE]] to a short value and push the vehicle about with a&lt;br /&gt;
more impulsive method that sets the motor fast on a key press down (and optionally setting the motor to zero on&lt;br /&gt;
a key up) relying on the automatic exponential decay of the motor’s effectiveness rather than a constant angular&lt;br /&gt;
friction.&lt;br /&gt;
&lt;br /&gt;
Setting the angular motor to zero magnitude is different from allowing it to decay. When the motor completely&lt;br /&gt;
decays it no longer affects the motion of the vehicle, however setting it to zero will reset the &amp;quot;grip&amp;quot; of the vehicle&lt;br /&gt;
and will make the vehicle try to achieve zero angular velocity.&lt;br /&gt;
&lt;br /&gt;
For some vehicles it will be possible to use the &amp;quot;banking feature&amp;quot; to turn. &amp;quot;Banking&amp;quot; is what airplanes and&lt;br /&gt;
motorcycles do when they turn. When a banking vehicle twists about its roll-axis there is a resultant spin around&lt;br /&gt;
its yaw-axis. Banking is only available when using the &amp;quot;vertical attractor&amp;quot; which is described below.&lt;br /&gt;
&lt;br /&gt;
==  The Vertical Attractor ==&lt;br /&gt;
&lt;br /&gt;
Some vehicles, like boats, should always keep their up-side up. This can be done by enabling the &amp;quot;vertical&lt;br /&gt;
attractor&amp;quot; behavior that springs the vehicle’s local z-axis to the world z-axis (a.k.a. &amp;quot;up&amp;quot;). To take advantage of&lt;br /&gt;
this feature you would set the [[VEHICLE_VERTICAL_ATTRACTION_TIMESCALE]] to control the period of&lt;br /&gt;
the spring frequency, and then set the [[VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY]] to control the&lt;br /&gt;
damping. An efficiency of 0.0 will cause the spring to wobble around its equilibrium, while an efficiency of 1.0&lt;br /&gt;
will cause the spring to reach it’s equilibrium with exponential decay.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
llSetVehicleVectorParam(VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, 4.0);&lt;br /&gt;
llSetVehicleVectorParam(VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY, 0.5);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The vertical attractor is disabled by setting its timescale to anything larger than 300 seconds.&lt;br /&gt;
&lt;br /&gt;
Note that by default the vertical attractor will prevent the vehicle from diving and climbing. So, if you wanted to&lt;br /&gt;
make a airplane you would probably want to unlock the attractor around the pitch axis by setting the&lt;br /&gt;
[[VEHICLE_FLAG_LIMIT_ROLL_ONLY]] bit:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
llSetVehicleFlags(VEHICLE_FLAG_LIMIT_ROLL_ONLY);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  Banking ==&lt;br /&gt;
&lt;br /&gt;
The vertical attractor feature must be enabled in order for the banking behavior to function. The way banking&lt;br /&gt;
works is this: a rotation around the vehicle’s roll-axis will produce a angular velocity around the yaw-axis,&lt;br /&gt;
causing the vehicle to turn. The magnitude of the yaw effect will be proportional to the&lt;br /&gt;
&lt;br /&gt;
::[[VEHICLE_BANKING_COEF]], the angle of the roll rotation, and sometimes the vehicle’s velocity along its&lt;br /&gt;
preferred axis of motion.&lt;br /&gt;
&lt;br /&gt;
::The [[VEHICLE_BANKING_COEF]] can vary between -1 and +1. When it’s positive then any positive rotation (by&lt;br /&gt;
the right-hand rule) about the roll-axis will effect a (negative) torque around the yaw-axis, making it turn to the&lt;br /&gt;
right -- that is the vehicle will lean into the turn, which is how real airplanes and motorcycle’s work. Negating&lt;br /&gt;
the banking coefficient will make it so that the vehicle leans to the outside of the turn (not very &amp;quot;physical&amp;quot; but&lt;br /&gt;
might allow interesting vehicles so why not?).&lt;br /&gt;
&lt;br /&gt;
::The [[VEHICLE_BANKING_MIX]] is a fake (i.e. non-physical) parameter that is useful for making banking&lt;br /&gt;
vehicles do what you want rather than what the laws of physics allow. For example, consider a real motorcycle...&lt;br /&gt;
it must be moving forward in order for it to turn while banking, however video-game motorcycles are often&lt;br /&gt;
configured to turn in place when at a dead stop -- because they’re often easier to control that way using the&lt;br /&gt;
limited interface of the keyboard or game controller. The [[VEHICLE_BANKING_MIX]] enables combinations of&lt;br /&gt;
both realistic and non-realistic banking by fuctioning as a slider between a banking that is correspondingly&lt;br /&gt;
totally static (0.0) and totally dynamic (1.0). By &amp;quot;static&amp;quot; we mean that the banking effect depends only on the&lt;br /&gt;
vehicle’s rotation about its roll-axis compared to &amp;quot;dynamic&amp;quot; where the banking is also proportional to its&lt;br /&gt;
velocity along its roll-axis. Finding the best value of the &amp;quot;mixture&amp;quot; will probably require trial and error.&lt;br /&gt;
&lt;br /&gt;
The time it takes for the banking behavior to defeat a pre-existing angular velocity about the world z-axis is&lt;br /&gt;
determined by the [[VEHICLE_BANKING_TIMESCALE]]. So if you want the vehicle to bank quickly then give it&lt;br /&gt;
a banking timescale of about a second or less, otherwise you can make a sluggish vehicle by giving it a timescale&lt;br /&gt;
of several seconds.&lt;br /&gt;
&lt;br /&gt;
==  Friction Timescales ==&lt;br /&gt;
&lt;br /&gt;
[[VEHICLE_LINEAR_FRICTION_TIMESCALE]] is a vector parameter that defines the timescales for the vehicle&lt;br /&gt;
to come to a complete stop along the three local axes of the vehicle’s reference frame. The timescale along each&lt;br /&gt;
axis is independent of the others. For example, a sliding ground car would probably have very little friction along&lt;br /&gt;
its x- and z-axes (so it can easily slide forward and fall down) while there would usually significant friction along&lt;br /&gt;
its y-axis:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
llSetVehicleVectorParam(VEHICLE_LINEAR_FRICTION_TIMESCALE, &amp;lt;1000, 1000, 3&amp;gt;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Remember that a longer timescale corresponds to a weaker friction, hence to effectively disable all linear friction&lt;br /&gt;
you would set all of the timescales to large values.&lt;br /&gt;
&lt;br /&gt;
Setting the linear friction as a scalar is allowed, and has the effect of setting all of the timescales to the same&lt;br /&gt;
value. Both code snippets below are equivalent, and both make friction negligible:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// set all linear friction timescales to 1000&lt;br /&gt;
llSetVehicleVectorParam(VEHICLE_LINEAR_FRICTION_TIMESCALE, &amp;lt;1000, 1000, 1000&amp;gt;);&lt;br /&gt;
// same as above, but fewer characters&lt;br /&gt;
llSetVehicleFloatParam(VEHICLE_LINEAR_FRICTION_TIMESCALE, 1000);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
/[[VEHICLE_ANGULAR_FRICTION_TIMESCALE]] is also a vector parameter that defines the timescales for the&lt;br /&gt;
vehicle to stop rotating about the x-, y-, and z-axes, and are set and disabled in the same way as the linear friction.&lt;br /&gt;
&lt;br /&gt;
==  Buoyancy ==&lt;br /&gt;
&lt;br /&gt;
The vehicle has a built-in buoyancy feature that is independent of the[[llSetBuoyancy]] call. It is recommended that&lt;br /&gt;
the two buoyancies do not mix! To make a vehicle buoyant, set the [[VEHICLE_BUOYANCY]] parameter to&lt;br /&gt;
something between 0.0 (no buoyancy whatsoever) to 1.0 (full anti-gravity).&lt;br /&gt;
&lt;br /&gt;
The buoyancy behavior is independent of hover, however in order for hover to work without a large offset of the&lt;br /&gt;
[[VEHICLE_HOVER_HEIGHT]], the [[VEHICLE_BUOYANCY]] should be set to 1.0.&lt;br /&gt;
&lt;br /&gt;
It is not recommended that you mix vehicle buoyancy with the[[llSetBuoyancy]] script call. It would probably&lt;br /&gt;
cause the object to fly up into space.&lt;br /&gt;
&lt;br /&gt;
==  Hover ==&lt;br /&gt;
&lt;br /&gt;
The hover behavior is enabled by setting the [[VEHICLE_HOVER_TIMESCALE]] to a value less than 300&lt;br /&gt;
seconds; larger timescales totally disable it. Most vehicles will work best with short hover timescales of a few&lt;br /&gt;
seconds or less. The shorter the timescale, the faster the vehicle will slave to is target height. Note, that if the&lt;br /&gt;
values of [[VEHICLE_LINEAR_FRICTION_TIMESCALE]] may affect the speed of the hover.&lt;br /&gt;
&lt;br /&gt;
Hover is independent of buoyancy, however the [[VEHICLE_BUOYANCY]] should be set to 1.0, otherwise the&lt;br /&gt;
vehicle will not lift itself off of the ground until the [[VEHICLE_HOVER_HEIGHT]] is made large enough to&lt;br /&gt;
counter the acceleration of gravity, and the vehicle will never float all the way to its target height.&lt;br /&gt;
&lt;br /&gt;
The [[VEHICLE_HOVER_EFFICIENCY]] can be thought of as a slider between bouncy (0.0) and smoothed (1.0).&lt;br /&gt;
&lt;br /&gt;
When in the bouncy range the vehicle will tend to hover a little lower than its target height and the&lt;br /&gt;
[[VEHICLE_HOVER_TIMESCALE]] will be approximately the oscillation period of the bounce (the real period&lt;br /&gt;
will tend to be a little longer than the timescale).&lt;br /&gt;
&lt;br /&gt;
For performance reasons, until improvements are made to the Second Life physics engine the vehicles can only&lt;br /&gt;
hover over the terrain and water, so they will not be able to hover above objects made out of primitives, such as&lt;br /&gt;
bridges and houses. By default the hover behavior will float over terrain and water, however this can be changed&lt;br /&gt;
by setting some flags:&lt;br /&gt;
&lt;br /&gt;
If you wanted to make a boat you should set the [[VEHICLE_HOVER_WATER_ONLY]] flag, or if you wanted to&lt;br /&gt;
drive a hover tank under water you would use the [[VEHICLE_HOVER_TERRAIN_ONLY]] flag instead. Finally,&lt;br /&gt;
if you wanted to make a submarine or a balloon you would use the [[VEHICLE_HOVER_GLOBAL_HEIGHT]].&lt;br /&gt;
&lt;br /&gt;
Note that the flags are independent of each other and that setting two contradictory flags will have undefined&lt;br /&gt;
behavor. The flags are set using the script call[[llSetVehicleFlags()]].&lt;br /&gt;
&lt;br /&gt;
The [[VEHICLE_HOVER_HEIGHT]] determines how high the vehicle will hover over the terrain and/or water, or&lt;br /&gt;
the global height, and has a maximum value of 100 meters. Note that for hovering purposes the &amp;quot;center&amp;quot; of the&lt;br /&gt;
vehicle is its &amp;quot;center of mass&amp;quot; which is not always obvious to the untrained eye, and it changes when avatar’s sit&lt;br /&gt;
on the vehicle.&lt;br /&gt;
&lt;br /&gt;
==  Reference Frame ==&lt;br /&gt;
&lt;br /&gt;
The vehicle relies on the x- (at), y- (left), and z- (up) axes in order to figure out which way it preferres to move&lt;br /&gt;
and which end is up. By default these axes are identical to the local axes of the root primitive of the object,&lt;br /&gt;
however this means that the vehicle’s root primitive must, by default, be oriented to agree with the designed at,&lt;br /&gt;
left, and up axes of the vehicle. But, what if the vehicle object was already pre-built with the root primitive in&lt;br /&gt;
some non-trivial orientation relative to where the vehicle as a whole should move? This is where the&lt;br /&gt;
&lt;br /&gt;
[[VEHICLE_REFERENCE_FRAME]] parameter becomes useful; the vehicle’s axes can be arbitrarily reoriented&lt;br /&gt;
by setting this parameter.&lt;br /&gt;
&lt;br /&gt;
As an example, suppose you had built a rocket out of a big cylinder, a cone for the nose, and some stretched cut&lt;br /&gt;
boxes for the fins, then linked them all together with the cylinder as the root primitive. Ideally the rocket would&lt;br /&gt;
move nose-first, however the cylinder’s axis of symmetry is its local z-axis while the default &amp;quot;at-axis&amp;quot; of the&lt;br /&gt;
vehicle, the axis it will want to deflect to forward under angular deflection, is the local x-axis and points out from&lt;br /&gt;
the curved surface of the cylinder. The script code below will rotate the vehicle’s axes such that the local z-axis&lt;br /&gt;
becomes the &amp;quot;at-axis&amp;quot; and the local negative x-axis becomes the &amp;quot;up-axis&amp;quot;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// rotate the vehicle frame -PI/2 about the local y-axis (left-axis)&lt;br /&gt;
rotation rot =llEuler2Rot(0, PI/2, 0);&lt;br /&gt;
llSetVehicleRotationParam(VEHICLE_REFERENCE_FRAME, rot);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Another example of how the reference frame parameter could be used is to consider flying craft that uses the&lt;br /&gt;
vertical attractor for stability during flying but wants to use VTOL (vertical takeoff and landing). During flight&lt;br /&gt;
the craft’s dorsal axis should point up, but during landing its nose-axis should be up. To land the vehicle: while&lt;br /&gt;
the vertical attractor is in effect, rotate the existing [[VEHICLE_REFERENCE_FRAME]] by +PI/2 about the&lt;br /&gt;
left-axis, then the vehicle will pitch up such that its nose points toward the sky. The vehicle could be allowed to&lt;br /&gt;
fall to the landing pad under friction, or a decreasing hover effect.&lt;br /&gt;
&lt;br /&gt;
{{LSLC|Vehicle|Tutorial}} {{LSLC|Tutorials|Vehicle}}&lt;/div&gt;</summary>
		<author><name>Blubb Dixon</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Linden_Vehicle_Tutorial&amp;diff=40065</id>
		<title>Linden Vehicle Tutorial</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Linden_Vehicle_Tutorial&amp;diff=40065"/>
		<updated>2007-11-11T12:44:29Z</updated>

		<summary type="html">&lt;p&gt;Blubb Dixon: /* Steering the Vehicle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Header}}&lt;br /&gt;
&lt;br /&gt;
== Vehicles ==&lt;br /&gt;
&lt;br /&gt;
Vehicles are a new feature now available for use through LSL. This chapter will cover the basics of how vehicles&lt;br /&gt;
work, the terms used when describing vehicles, and a more thorough examination of the api available.&lt;br /&gt;
&lt;br /&gt;
There are several ways to make scripted objects move themselves around. One way is to turn the object into a&lt;br /&gt;
&amp;quot;vehicle&amp;quot;. This feature is versatile enough to make things that slide, hover, fly, and float. Some of the behaviors&lt;br /&gt;
that can be enabled are:&lt;br /&gt;
&lt;br /&gt;
*deflection of linear and angular velocity to preferred axis of motion&lt;br /&gt;
*asymmetric linear and angular friction&lt;br /&gt;
*hovering over terrain/water or at a global height&lt;br /&gt;
*banking on turns&lt;br /&gt;
*linear and angular motor for push and turning&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
Each scripted object can have one vehicle behavior that is configurable through the[[llSetVehicleType]],&lt;br /&gt;
llSetVehicleFloatParam,llSetVehicleVectorParam,llSetVehicleRotationParam,llSetVehicleFlags, and&lt;br /&gt;
llRemoveVehicleFlags library calls.&lt;br /&gt;
&lt;br /&gt;
These script calls are described in more detail below, but the important thing to notice here is that the vehicle&lt;br /&gt;
behavior has several parameters that can be adjusted to change how the vehicle handles. Depending on the values&lt;br /&gt;
chosen the vehicle can veer like a boat in water, or ride like a sled on rails.&lt;br /&gt;
&lt;br /&gt;
Setting the vehicle flags allow you to make exceptions to some default behaviors. Some of these flags only have&lt;br /&gt;
an effect when certain behaviors are enabled. For example, the [[VEHICLE_FLAG_HOVER_WATER_ONLY]] will&lt;br /&gt;
make the vehicle ignore the height of the terrain, however it only makes a difference if the vehicle is hovering.&lt;br /&gt;
&lt;br /&gt;
== Warnings ==&lt;br /&gt;
&lt;br /&gt;
Vehicles are new in Second Life 1.1 and some of the details of their behavior may be changed as necessary to&lt;br /&gt;
ensure stability and user safety. In particular, many of the limits and defaults described in the appendices will&lt;br /&gt;
probably change and should not be relied upon in the long term.&lt;br /&gt;
&lt;br /&gt;
It is not recommended that you mix vehicle behavior with some of the other script calls that provide impulse and&lt;br /&gt;
forces to the object, especially[[llSetBuoyancy]],[[llSetForce]],[[llSetTorque]], and[[llSetHoverHeight]].&lt;br /&gt;
&lt;br /&gt;
While the following methods probably don’t cause any instabilities, their behavior may conflict with vehicles&lt;br /&gt;
and cause undesired and/or inconsistent results, so use[[llLookAt]],[[llRotLookAt]],[[llMoveToTarget]], and&lt;br /&gt;
[[llTargetOmega]] at your own risk.&lt;br /&gt;
&lt;br /&gt;
If you think you have found a bug relating to how vehicle’s work, one way to submit the problem is to give a&lt;br /&gt;
copy of the vehicle and script to Andrew Linden with comments or a notecard describing the problem. Please&lt;br /&gt;
name all submissions &amp;quot;Bugged Vehicle XX&amp;quot; where XX are your Second Life initials. The vehicle and script will&lt;br /&gt;
be examined at the earliest convenience.&lt;br /&gt;
&lt;br /&gt;
==  Definitions ==&lt;br /&gt;
&lt;br /&gt;
The terms &amp;quot;roll&amp;quot;, &amp;quot;pitch&amp;quot;, and &amp;quot;yaw&amp;quot; are often used to describe the modes of rotations that can happen to a&lt;br /&gt;
airplane or boat. They correspond to rotations about the local x-, y-, and z-axis respectively.&lt;br /&gt;
z-axis .&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/Tait-Bryan_angles&lt;br /&gt;
&lt;br /&gt;
The right-hand-rule, often introduced in beginning physics courses, is used to define the direction of positive&lt;br /&gt;
rotation about any axis. As an example of how to use the right hand rule, consider a positive rotation about the&lt;br /&gt;
roll axis. To help visualize how such a rotation would move the airplane, place your right thumb parallel to the&lt;br /&gt;
plane’s roll-axis such that the thumb points in the positive x-direction, then curl the four fingers into a fist. Your&lt;br /&gt;
fingers will be pointing in the direction that the plane will spin.&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/Right_hand_rule&lt;br /&gt;
&lt;br /&gt;
Many of the parameters that control a vehicle’s behavior are of the form:&lt;br /&gt;
&lt;br /&gt;
VEHICLE_&#039;&#039;&#039;BEHAVIOR&#039;&#039;&#039;_TIMESCALE&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;BEHAVIOR&#039;&#039;&#039; ’s &amp;quot;timescale&amp;quot; can usually be understood as the time for the&lt;br /&gt;
behavior to push, twist, or otherwise affect the vehicle such that the difference between what it is doing, and&lt;br /&gt;
what it is supposed to be doing, has been reduced to 1/e of what it was, where &amp;quot;e&amp;quot; is the natural exponent&lt;br /&gt;
(approximately 2.718281828). In other words, it is the timescale for exponential decay toward full compliance to&lt;br /&gt;
the desired behavior. When you want the vehicle to be very responsive use a short timescale of one second or&lt;br /&gt;
less, and if you want to disable a behavior then set the timescale to a very large number like 300 (5 minutes) or&lt;br /&gt;
more. Note, for stability reasons, there is usually a limit to how small a timescale is allowed to be, and is usually&lt;br /&gt;
on the order of a tenth of a second. Setting a timescale to zero is safe and is always equivalent to setting it to its&lt;br /&gt;
minimum. Any feature with a timescale can be effectively disabled by setting the timescale so large that it would&lt;br /&gt;
take them all day to have any effect.&lt;br /&gt;
&lt;br /&gt;
==  Setting the Vehicle Type ==&lt;br /&gt;
&lt;br /&gt;
Before any vehicle parameters can be set the vehicle behavior must first be enabled. It is enabled by calling&lt;br /&gt;
[[llSetVehicleType]] with any &#039;&#039;&#039;VEHICLE_TYPE_*&#039;&#039;&#039;, except [[VEHICLE_TYPE_NONE]] which will disable the&lt;br /&gt;
vehicle. See the {{LSLGC|Vehicle|vehicle types}} constants section for currently available types. More types will be available soon.&lt;br /&gt;
&lt;br /&gt;
Setting the vehicle type is necessary for enabling the vehicle behavior and sets all of the parameters to its default&lt;br /&gt;
values. For each vehicle type listed we provide the corresponding equivalent code in long format. Is is important&lt;br /&gt;
to realize that the defaults are not the optimal settings for any of these vehicle types and that they will definitely&lt;br /&gt;
be changed in the future. Do not rely on these values to be constant until specified.&lt;br /&gt;
&lt;br /&gt;
Should you want to make a unique or experimental vehicle you will still have to enable the vehicle behavior with&lt;br /&gt;
one of the default types first, after which you will be able to change any of the parameters or flags within the&lt;br /&gt;
allowed ranges.&lt;br /&gt;
&lt;br /&gt;
Setting the vehicle type does not automatically take controls or otherwise move the object. However should you&lt;br /&gt;
enable the vehicle behavior while the object is free to move and parked on a hill then it may start to slide away.&lt;br /&gt;
&lt;br /&gt;
We’re looking for new and better default vehicle types. If you think you’ve found a set of parameters that make a&lt;br /&gt;
better car, boat, or any other default type of vehicle then you may submit your proposed list of settings to&lt;br /&gt;
Andrew Linden via a script or notecard.&lt;br /&gt;
&lt;br /&gt;
==  Linear and Angular Deflection ==&lt;br /&gt;
&lt;br /&gt;
A common feature of real vehicles is their tendency to move along &amp;quot;preferred axes of motion&amp;quot;. That is, due to&lt;br /&gt;
their wheels, wings, shape, or method of propulsion they tend to push or redirect themselves along axes that are&lt;br /&gt;
static in the vehicle’s local frame. This general feature defines a class of vehicles and included in this category a&lt;br /&gt;
common dart is a &amp;quot;vehicle&amp;quot;: it has fins in the back such that if it were to tumble in the air it would eventually&lt;br /&gt;
align itself to move point-forward -- we’ll call this alignment effect angular deflection.&lt;br /&gt;
&lt;br /&gt;
A wheeled craft exhibits a different effect: when a skateboard is pushed in some direction it will tend to redirect&lt;br /&gt;
the resultant motion along that which it is free to roll -- we’ll call this effect linear deflection.&lt;br /&gt;
&lt;br /&gt;
So a typical Second Life vehicle is an object that exhibits linear and/or angular deflection along the &amp;quot;preferential&lt;br /&gt;
axes of motion&amp;quot;. The default preferential axes of motion are the local x- (at), y- (left), and z- (up) axes of the&lt;br /&gt;
local frame of the vehicle’s root primitive. The deflection behaviors relate to the x-axis (at): linear deflection will&lt;br /&gt;
tend to rotate its velocity until it points along it’s positive local x-axis while the angular deflection will tend to&lt;br /&gt;
reorient the vehicle such that it’s x-axis points in the direction that it is moving. The other axes are relevant to&lt;br /&gt;
vehicle behaviors that are described later, such as the vertical attractor which tries to keep a vehicle’s local z-axis&lt;br /&gt;
pointed toward the world z-axis (up). The vehicle axes can be rotated relative to the object’s actual local axes by&lt;br /&gt;
using the [[VEHICLE_REFERENCE_FRAME]] parameter, however that is an advanced feature and is covered in&lt;br /&gt;
detail in a later section of these documents.&lt;br /&gt;
&lt;br /&gt;
Depending on the vehicle it might be desirable to have lots of linear and/or angular delfection or not. The speed&lt;br /&gt;
of the deflections are controlled by setting the relevant parameters using the[[llSetVehicleFloatParam]] script call.&lt;br /&gt;
&lt;br /&gt;
Each variety of deflection has a &amp;quot;timescale&amp;quot; parameter that determines how quickly a full deflection happens.&lt;br /&gt;
&lt;br /&gt;
Basically the timescale it the time coefficient for exponential decay toward full deflection. So, a vehicle that&lt;br /&gt;
deflects quickly should have a small timescale. For instance, a typical dart might have a angular deflection&lt;br /&gt;
timescale of a couple of seconds but a linear deflection of several seconds; it will tend to reorient itself before it&lt;br /&gt;
changes direction. To set the deflection timescales of a dart you might use the lines below:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
llSetVehicleFloatParam(VEHICLE_ANGULAR_DEFLECTION_TIMESCALE, 2.0);&lt;br /&gt;
llSetVehicleFloatParam(VEHICLE_LINEAR_DEFLECTION_TIMESCALE, 6.0);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Each variety of deflection has an &amp;quot;efficiency&amp;quot; parameter that is a slider between 0.0 and 1.0. Unlike the other&lt;br /&gt;
efficiency parameter of other vehicle behaviors, the deflection efficiencies do not slide between &amp;quot;bouncy&amp;quot; and&lt;br /&gt;
&amp;quot;damped&amp;quot;, but instead slide from &amp;quot;no deflection whatsoever&amp;quot; (0.0) to &amp;quot;maximum deflection&amp;quot; (1.0). That is, they&lt;br /&gt;
behave much like the deflection timescales, however they are normalized to the range between 0.0 and 1.0.&lt;br /&gt;
&lt;br /&gt;
==  Moving the Vehicle ==&lt;br /&gt;
&lt;br /&gt;
Once enabled, a vehicle can be pushed and rotated by external forces and/or from script calls such as&lt;br /&gt;
[[llApplyImpulse]], however linear and angular motors have been built in to make motion easier and smoother.&lt;br /&gt;
Their directions can be set using the[[llSetVehicleVectorParam]] call. For example, to make the vehicle try to move&lt;br /&gt;
at 5 meters/second along its local x-axis (the default look-at direction) you would put the following line in your&lt;br /&gt;
script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, &amp;lt;5, 0, 0&amp;gt;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To prevent vehicles from moving too fast the magnitude of the linear motor is clamped to be no larger than about&lt;br /&gt;
30 meters/second. Note that this is clamped mostly because of limitations of the physics engine, and may be&lt;br /&gt;
raised later when possible.&lt;br /&gt;
&lt;br /&gt;
Setting the motor speed is not enough to enable all interesting vehicles. For example, some will want a car that&lt;br /&gt;
immediately gets up to the speed they want, while others will want a boat that slowly climbs up to its maximum&lt;br /&gt;
velocity. To control this effect you can use the [[VEHICLE_LINEAR_MOTOR_TIMESCALE]] parameter.&lt;br /&gt;
&lt;br /&gt;
Basically the &amp;quot;timescale&amp;quot; of a motor is the time constant for the vehicle to exponentially accelerate toward its full&lt;br /&gt;
speed.&lt;br /&gt;
&lt;br /&gt;
What would happen if you were to accidentally set the vehicle’s linear velocity to maximum possible speed and&lt;br /&gt;
then let go? It would run away and never stop, right? Not necessarily: an automatic &amp;quot;motor decay&amp;quot; has been built&lt;br /&gt;
in such that all motors will gradually decrease their effectiveness after being set.&lt;br /&gt;
&lt;br /&gt;
Each time the linear motor’s vector is set its &amp;quot;grip&amp;quot; immediately starts to decay exponentially with a timescale&lt;br /&gt;
determined by the [[VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE]], such that after enough time the&lt;br /&gt;
motor ceases to have any effect. This decay timescale serves two purposes. First, since it cannot be set longer&lt;br /&gt;
than 120 seconds, and is always enabled it gaurantees that a vehicle will not push itself about forever in the&lt;br /&gt;
absence of active control (from keyboard commands or some logic loop in the script). Second, it can be used to&lt;br /&gt;
push some vehicles around using a simple impulse model. That is, rather than setting the motor &amp;quot;on&amp;quot; or &amp;quot;off&amp;quot;&lt;br /&gt;
depending on whether a particular key is pressed &amp;quot;down&amp;quot; or &amp;quot;up&amp;quot; the decay timescale can be set short and the&lt;br /&gt;
motor can be set &amp;quot;on&amp;quot; whenever the key transitions from &amp;quot;up&amp;quot; to &amp;quot;down&amp;quot; and allowed to automatically decay.&lt;br /&gt;
&lt;br /&gt;
Since the motor’s effectiveness is reset whenever the motor’s vector is set, then setting it to a vector of length&lt;br /&gt;
zero is different from allowing it to decay completely. The first case will cause the vehicle to try to reach zero&lt;br /&gt;
velocity, while the second will leave the motor impotent.&lt;br /&gt;
&lt;br /&gt;
The two motor timescales have very similar names, but have different effects, so try not to get them confused.&lt;br /&gt;
&lt;br /&gt;
::[[VEHICLE_LINEAR_MOTOR_TIMESCALE]] is the time for motor to &amp;quot;win&amp;quot;, and&lt;br /&gt;
&lt;br /&gt;
::[[VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE]] is the time for the motor’s &amp;quot;effectiveness&amp;quot; to decay&lt;br /&gt;
toward zero. If you set one when you think you are changing the other you will have frustrating results. Also, if&lt;br /&gt;
the motor’s decay timescale is shorter than the regular timescale, then the effective magnitude of the motor&lt;br /&gt;
vector will be diminished.&lt;br /&gt;
&lt;br /&gt;
==  Steering the Vehicle ==&lt;br /&gt;
&lt;br /&gt;
Much like the linear motor, there is also an angular motor that is always on, and whose direction and magnitude&lt;br /&gt;
can be set. For example, to make a vehicle turn at 5 degrees/sec around its local z-axis (its up-axis) you might&lt;br /&gt;
add the following lines to its script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vector angular_velocity = &amp;lt;0, 0, 5 * PI / 180&amp;gt;;&lt;br /&gt;
llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, angular_velocity);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The magnitude of the angular motor is capped to be no more than two rotations per second (4*PI radians/sec).&lt;br /&gt;
&lt;br /&gt;
Also like the linear motor it has an efficiency parameter, [[VEHICLE_ANGULAR_MOTOR_TIMESCALE]], and a&lt;br /&gt;
motor decay parameter, [[VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE]], which is set to themaximum possible value of 120 seconds by default.&lt;br /&gt;
&lt;br /&gt;
When steering a vehicle you probably don’t want it to turn very far or for very long. One way to do it using the&lt;br /&gt;
angular motor would be to leave the decay timescale long, enable a significant amount of angular friction (to&lt;br /&gt;
quickly slow the vehicle down when the motor is turned off) then set the angular motor to a large vector on a key&lt;br /&gt;
press, and set it to zero when the key is released. Another way to do it is to set the&lt;br /&gt;
[[VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE]] to a short value and push the vehicle about with a&lt;br /&gt;
more impulsive method that sets the motor fast on a key press down (and optionally setting the motor to zero on&lt;br /&gt;
a key up) relying on the automatic exponential decay of the motor’s effectiveness rather than a constant angular&lt;br /&gt;
friction.&lt;br /&gt;
&lt;br /&gt;
Setting the angular motor to zero magnitude is different from allowing it to decay. When the motor completely&lt;br /&gt;
decays it no longer affects the motion of the vehicle, however setting it to zero will reset the &amp;quot;grip&amp;quot; of the vehicle&lt;br /&gt;
and will make the vehicle try to achieve zero angular velocity.&lt;br /&gt;
&lt;br /&gt;
For some vehicles it will be possible to use the &amp;quot;banking feature&amp;quot; to turn. &amp;quot;Banking&amp;quot; is what airplanes and&lt;br /&gt;
motorcycles do when they turn. When a banking vehicle twists about its roll-axis there is a resultant spin around&lt;br /&gt;
its yaw-axis. Banking is only available when using the &amp;quot;vertical attractor&amp;quot; which is described below.&lt;br /&gt;
&lt;br /&gt;
==  The Vertical Attractor ==&lt;br /&gt;
&lt;br /&gt;
Some vehicles, like boats, should always keep their up-side up. This can be done by enabling the &amp;quot;vertical&lt;br /&gt;
attractor&amp;quot; behavior that springs the vehicle’s local z-axis to the world z-axis (a.k.a. &amp;quot;up&amp;quot;). To take advantage of&lt;br /&gt;
this feature you would set the [[VEHICLE_VERTICAL_ATTRACTION_TIMESCALE]] to control the period of&lt;br /&gt;
the spring frequency, and then set the [[VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY]] to control the&lt;br /&gt;
damping. An efficiency of 0.0 will cause the spring to wobble around its equilibrium, while an efficiency of 1.0&lt;br /&gt;
will cause the spring to reach it’s equilibrium with exponential decay.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
llSetVehicleVectorParam(VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, 4.0);&lt;br /&gt;
llSetVehicleVectorParam(VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY, 0.5);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The vertical attractor is disabled by setting its timescale to anything larger than 300 seconds.&lt;br /&gt;
&lt;br /&gt;
Note that by default the vertical attractor will prevent the vehicle from diving and climbing. So, if you wanted to&lt;br /&gt;
make a airplane you would probably want to unlock the attractor around the pitch axis by setting the&lt;br /&gt;
[[VEHICLE_FLAG_LIMIT_ROLL_ONLY]] bit:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
llSetVehicleFlags(VEHICLE_FLAG_LIMIT_ROLL_ONLY);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  Banking ==&lt;br /&gt;
&lt;br /&gt;
The vertical attractor feature must be enabled in order for the banking behavior to function. The way banking&lt;br /&gt;
works is this: a rotation around the vehicle’s roll-axis will produce a angular velocity around the yaw-axis,&lt;br /&gt;
causing the vehicle to turn. The magnitude of the yaw effect will be proportional to the&lt;br /&gt;
&lt;br /&gt;
::[[VEHICLE_BANKING_COEF]], the angle of the roll rotation, and sometimes the vehicle’s velocity along its&lt;br /&gt;
preferred axis of motion.&lt;br /&gt;
&lt;br /&gt;
::The [[VEHICLE_BANKING_COEF]] can vary between -1 and +1. When it’s positive then any positive rotation (by&lt;br /&gt;
the right-hand rule) about the roll-axis will effect a (negative) torque around the yaw-axis, making it turn to the&lt;br /&gt;
right -- that is the vehicle will lean into the turn, which is how real airplanes and motorcycle’s work. Negating&lt;br /&gt;
the banking coefficient will make it so that the vehicle leans to the outside of the turn (not very &amp;quot;physical&amp;quot; but&lt;br /&gt;
might allow interesting vehicles so why not?).&lt;br /&gt;
&lt;br /&gt;
::The [[VEHICLE_BANKING_MIX]] is a fake (i.e. non-physical) parameter that is useful for making banking&lt;br /&gt;
vehicles do what you want rather than what the laws of physics allow. For example, consider a real motorcycle...&lt;br /&gt;
it must be moving forward in order for it to turn while banking, however video-game motorcycles are often&lt;br /&gt;
configured to turn in place when at a dead stop -- because they’re often easier to control that way using the&lt;br /&gt;
limited interface of the keyboard or game controller. The [[VEHICLE_BANKING_MIX]] enables combinations of&lt;br /&gt;
both realistic and non-realistic banking by fuctioning as a slider between a banking that is correspondingly&lt;br /&gt;
totally static (0.0) and totally dynamic (1.0). By &amp;quot;static&amp;quot; we mean that the banking effect depends only on the&lt;br /&gt;
vehicle’s rotation about its roll-axis compared to &amp;quot;dynamic&amp;quot; where the banking is also proportional to its&lt;br /&gt;
velocity along its roll-axis. Finding the best value of the &amp;quot;mixture&amp;quot; will probably require trial and error.&lt;br /&gt;
&lt;br /&gt;
The time it takes for the banking behavior to defeat a pre-existing angular velocity about the world z-axis is&lt;br /&gt;
determined by the [[VEHICLE_BANKING_TIMESCALE]]. So if you want the vehicle to bank quickly then give it&lt;br /&gt;
a banking timescale of about a second or less, otherwise you can make a sluggish vehicle by giving it a timescale&lt;br /&gt;
of several seconds.&lt;br /&gt;
&lt;br /&gt;
==  Friction Timescales ==&lt;br /&gt;
&lt;br /&gt;
[[VEHICLE_LINEAR_FRICTION_TIMESCALE]] is a vector parameter that defines the timescales for the vehicle&lt;br /&gt;
to come to a complete stop along the three local axes of the vehicle’s reference frame. The timescale along each&lt;br /&gt;
axis is independent of the others. For example, a sliding ground car would probably have very little friction along&lt;br /&gt;
its x- and z-axes (so it can easily slide forward and fall down) while there would usually significant friction along&lt;br /&gt;
its y-axis:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
llSetVehicleVectorParam(VEHICLE_LINEAR_FRICTION_TIMESCALE, &amp;lt;1000, 1000, 3&amp;gt;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Remember that a longer timescale corresponds to a weaker friction, hence to effectively disable all linear friction&lt;br /&gt;
you would set all of the timescales to large values.&lt;br /&gt;
&lt;br /&gt;
Setting the linear friction as a scalar is allowed, and has the effect of setting all of the timescales to the same&lt;br /&gt;
value. Both code snippets below are equivalent, and both make friction negligible:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// set all linear friction timescales to 1000&lt;br /&gt;
llSetVehicleVectorParam(VEHICLE_LINEAR_FRICTION_TIMESCALE, &amp;lt;1000, 1000, 1000&amp;gt;);&lt;br /&gt;
// same as above, but fewer characters&lt;br /&gt;
llSetVehicleFloatParam(VEHICLE_LINEAR_FRICTION_TIMESCALE, 1000);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
/[[VEHICLE_ANGULAR_FRICTION_TIMESCALE]] is also a vector parameter that defines the timescales for the&lt;br /&gt;
vehicle to stop rotating about the x-, y-, and z-axes, and are set and disabled in the same way as the linear friction.&lt;br /&gt;
&lt;br /&gt;
==  Buoyancy ==&lt;br /&gt;
&lt;br /&gt;
The vehicle has a built-in buoyancy feature that is independent of the[[llSetBuoyancy]] call. It is recommended that&lt;br /&gt;
the two buoyancies do not mix! To make a vehicle buoyant, set the [[VEHICLE_BUOYANCY]] parameter to&lt;br /&gt;
something between 0.0 (no buoyancy whatsoever) to 1.0 (full anti-gravity).&lt;br /&gt;
&lt;br /&gt;
The buoyancy behavior is independent of hover, however in order for hover to work without a large offset of the&lt;br /&gt;
[[VEHICLE_HOVER_HEIGHT]], the [[VEHICLE_BUOYANCY]] should be set to 1.0.&lt;br /&gt;
&lt;br /&gt;
It is not recommended that you mix vehicle buoyancy with the[[llSetBuoyancy]] script call. It would probably&lt;br /&gt;
cause the object to fly up into space.&lt;br /&gt;
&lt;br /&gt;
==  Hover ==&lt;br /&gt;
&lt;br /&gt;
The hover behavior is enabled by setting the [[VEHICLE_HOVER_TIMESCALE]] to a value less than 300&lt;br /&gt;
seconds; larger timescales totally disable it. Most vehicles will work best with short hover timescales of a few&lt;br /&gt;
seconds or less. The shorter the timescale, the faster the vehicle will slave to is target height. Note, that if the&lt;br /&gt;
values of [[VEHICLE_LINEAR_FRICTION_TIMESCALE]] may affect the speed of the hover.&lt;br /&gt;
&lt;br /&gt;
Hover is independent of buoyancy, however the [[VEHICLE_BUOYANCY]] should be set to 1.0, otherwise the&lt;br /&gt;
vehicle will not lift itself off of the ground until the [[VEHICLE_HOVER_HEIGHT]] is made large enough to&lt;br /&gt;
counter the acceleration of gravity, and the vehicle will never float all the way to its target height.&lt;br /&gt;
&lt;br /&gt;
The [[VEHICLE_HOVER_EFFICIENCY]] can be thought of as a slider between bouncy (0.0) and smoothed (1.0).&lt;br /&gt;
&lt;br /&gt;
When in the bouncy range the vehicle will tend to hover a little lower than its target height and the&lt;br /&gt;
[[VEHICLE_HOVER_TIMESCALE]] will be approximately the oscillation period of the bounce (the real period&lt;br /&gt;
will tend to be a little longer than the timescale).&lt;br /&gt;
&lt;br /&gt;
For performance reasons, until improvements are made to the Second Life physics engine the vehicles can only&lt;br /&gt;
hover over the terrain and water, so they will not be able to hover above objects made out of primitives, such as&lt;br /&gt;
bridges and houses. By default the hover behavior will float over terrain and water, however this can be changed&lt;br /&gt;
by setting some flags:&lt;br /&gt;
&lt;br /&gt;
If you wanted to make a boat you should set the [[VEHICLE_HOVER_WATER_ONLY]] flag, or if you wanted to&lt;br /&gt;
drive a hover tank under water you would use the [[VEHICLE_HOVER_TERRAIN_ONLY]] flag instead. Finally,&lt;br /&gt;
if you wanted to make a submarine or a balloon you would use the [[VEHICLE_HOVER_GLOBAL_HEIGHT]].&lt;br /&gt;
&lt;br /&gt;
Note that the flags are independent of each other and that setting two contradictory flags will have undefined&lt;br /&gt;
behavor. The flags are set using the script call[[llSetVehicleFlags()]].&lt;br /&gt;
&lt;br /&gt;
The [[VEHICLE_HOVER_HEIGHT]] determines how high the vehicle will hover over the terrain and/or water, or&lt;br /&gt;
the global height, and has a maximum value of 100 meters. Note that for hovering purposes the &amp;quot;center&amp;quot; of the&lt;br /&gt;
vehicle is its &amp;quot;center of mass&amp;quot; which is not always obvious to the untrained eye, and it changes when avatar’s sit&lt;br /&gt;
on the vehicle.&lt;br /&gt;
&lt;br /&gt;
==  Reference Frame ==&lt;br /&gt;
&lt;br /&gt;
The vehicle relies on the x- (at), y- (left), and z- (up) axes in order to figure out which way it preferres to move&lt;br /&gt;
and which end is up. By default these axes are identical to the local axes of the root primitive of the object,&lt;br /&gt;
however this means that the vehicle’s root primitive must, by default, be oriented to agree with the designed at,&lt;br /&gt;
left, and up axes of the vehicle. But, what if the vehicle object was already pre-built with the root primitive in&lt;br /&gt;
some non-trivial orientation relative to where the vehicle as a whole should move? This is where the&lt;br /&gt;
&lt;br /&gt;
[[VEHICLE_REFERENCE_FRAME]] parameter becomes useful; the vehicle’s axes can be arbitrarily reoriented&lt;br /&gt;
by setting this parameter.&lt;br /&gt;
&lt;br /&gt;
As an example, suppose you had built a rocket out of a big cylinder, a cone for the nose, and some stretched cut&lt;br /&gt;
boxes for the fins, then linked them all together with the cylinder as the root primitive. Ideally the rocket would&lt;br /&gt;
move nose-first, however the cylinder’s axis of symmetry is its local z-axis while the default &amp;quot;at-axis&amp;quot; of the&lt;br /&gt;
vehicle, the axis it will want to deflect to forward under angular deflection, is the local x-axis and points out from&lt;br /&gt;
the curved surface of the cylinder. The script code below will rotate the vehicle’s axes such that the local z-axis&lt;br /&gt;
becomes the &amp;quot;at-axis&amp;quot; and the local negative x-axis becomes the &amp;quot;up-axis&amp;quot;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// rotate the vehicle frame -PI/2 about the local y-axis (left-axis)&lt;br /&gt;
rotation rot =llEuler2Rot(0, PI/2, 0);&lt;br /&gt;
llSetVehicleRotationParam(VEHICLE_REFERENCE_FRAME, rot);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Another example of how the reference frame parameter could be used is to consider flying craft that uses the&lt;br /&gt;
vertical attractor for stability during flying but wants to use VTOL (vertical takeoff and landing). During flight&lt;br /&gt;
the craft’s dorsal axis should point up, but during landing its nose-axis should be up. To land the vehicle: while&lt;br /&gt;
the vertical attractor is in effect, rotate the existing [[VEHICLE_REFERENCE_FRAME]] by +PI/2 about the&lt;br /&gt;
left-axis, then the vehicle will pitch up such that it’s nose points toward the sky. The vehicle could be allowed to&lt;br /&gt;
fall to the landing pad under friction, or a decreasing hover effect.&lt;br /&gt;
&lt;br /&gt;
{{LSLC|Vehicle|Tutorial}} {{LSLC|Tutorials|Vehicle}}&lt;/div&gt;</summary>
		<author><name>Blubb Dixon</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Linden_Vehicle_Tutorial&amp;diff=40064</id>
		<title>Linden Vehicle Tutorial</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Linden_Vehicle_Tutorial&amp;diff=40064"/>
		<updated>2007-11-11T12:34:03Z</updated>

		<summary type="html">&lt;p&gt;Blubb Dixon: /* Banking */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Header}}&lt;br /&gt;
&lt;br /&gt;
== Vehicles ==&lt;br /&gt;
&lt;br /&gt;
Vehicles are a new feature now available for use through LSL. This chapter will cover the basics of how vehicles&lt;br /&gt;
work, the terms used when describing vehicles, and a more thorough examination of the api available.&lt;br /&gt;
&lt;br /&gt;
There are several ways to make scripted objects move themselves around. One way is to turn the object into a&lt;br /&gt;
&amp;quot;vehicle&amp;quot;. This feature is versatile enough to make things that slide, hover, fly, and float. Some of the behaviors&lt;br /&gt;
that can be enabled are:&lt;br /&gt;
&lt;br /&gt;
*deflection of linear and angular velocity to preferred axis of motion&lt;br /&gt;
*asymmetric linear and angular friction&lt;br /&gt;
*hovering over terrain/water or at a global height&lt;br /&gt;
*banking on turns&lt;br /&gt;
*linear and angular motor for push and turning&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
Each scripted object can have one vehicle behavior that is configurable through the[[llSetVehicleType]],&lt;br /&gt;
llSetVehicleFloatParam,llSetVehicleVectorParam,llSetVehicleRotationParam,llSetVehicleFlags, and&lt;br /&gt;
llRemoveVehicleFlags library calls.&lt;br /&gt;
&lt;br /&gt;
These script calls are described in more detail below, but the important thing to notice here is that the vehicle&lt;br /&gt;
behavior has several parameters that can be adjusted to change how the vehicle handles. Depending on the values&lt;br /&gt;
chosen the vehicle can veer like a boat in water, or ride like a sled on rails.&lt;br /&gt;
&lt;br /&gt;
Setting the vehicle flags allow you to make exceptions to some default behaviors. Some of these flags only have&lt;br /&gt;
an effect when certain behaviors are enabled. For example, the [[VEHICLE_FLAG_HOVER_WATER_ONLY]] will&lt;br /&gt;
make the vehicle ignore the height of the terrain, however it only makes a difference if the vehicle is hovering.&lt;br /&gt;
&lt;br /&gt;
== Warnings ==&lt;br /&gt;
&lt;br /&gt;
Vehicles are new in Second Life 1.1 and some of the details of their behavior may be changed as necessary to&lt;br /&gt;
ensure stability and user safety. In particular, many of the limits and defaults described in the appendices will&lt;br /&gt;
probably change and should not be relied upon in the long term.&lt;br /&gt;
&lt;br /&gt;
It is not recommended that you mix vehicle behavior with some of the other script calls that provide impulse and&lt;br /&gt;
forces to the object, especially[[llSetBuoyancy]],[[llSetForce]],[[llSetTorque]], and[[llSetHoverHeight]].&lt;br /&gt;
&lt;br /&gt;
While the following methods probably don’t cause any instabilities, their behavior may conflict with vehicles&lt;br /&gt;
and cause undesired and/or inconsistent results, so use[[llLookAt]],[[llRotLookAt]],[[llMoveToTarget]], and&lt;br /&gt;
[[llTargetOmega]] at your own risk.&lt;br /&gt;
&lt;br /&gt;
If you think you have found a bug relating to how vehicle’s work, one way to submit the problem is to give a&lt;br /&gt;
copy of the vehicle and script to Andrew Linden with comments or a notecard describing the problem. Please&lt;br /&gt;
name all submissions &amp;quot;Bugged Vehicle XX&amp;quot; where XX are your Second Life initials. The vehicle and script will&lt;br /&gt;
be examined at the earliest convenience.&lt;br /&gt;
&lt;br /&gt;
==  Definitions ==&lt;br /&gt;
&lt;br /&gt;
The terms &amp;quot;roll&amp;quot;, &amp;quot;pitch&amp;quot;, and &amp;quot;yaw&amp;quot; are often used to describe the modes of rotations that can happen to a&lt;br /&gt;
airplane or boat. They correspond to rotations about the local x-, y-, and z-axis respectively.&lt;br /&gt;
z-axis .&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/Tait-Bryan_angles&lt;br /&gt;
&lt;br /&gt;
The right-hand-rule, often introduced in beginning physics courses, is used to define the direction of positive&lt;br /&gt;
rotation about any axis. As an example of how to use the right hand rule, consider a positive rotation about the&lt;br /&gt;
roll axis. To help visualize how such a rotation would move the airplane, place your right thumb parallel to the&lt;br /&gt;
plane’s roll-axis such that the thumb points in the positive x-direction, then curl the four fingers into a fist. Your&lt;br /&gt;
fingers will be pointing in the direction that the plane will spin.&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/Right_hand_rule&lt;br /&gt;
&lt;br /&gt;
Many of the parameters that control a vehicle’s behavior are of the form:&lt;br /&gt;
&lt;br /&gt;
VEHICLE_&#039;&#039;&#039;BEHAVIOR&#039;&#039;&#039;_TIMESCALE&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;BEHAVIOR&#039;&#039;&#039; ’s &amp;quot;timescale&amp;quot; can usually be understood as the time for the&lt;br /&gt;
behavior to push, twist, or otherwise affect the vehicle such that the difference between what it is doing, and&lt;br /&gt;
what it is supposed to be doing, has been reduced to 1/e of what it was, where &amp;quot;e&amp;quot; is the natural exponent&lt;br /&gt;
(approximately 2.718281828). In other words, it is the timescale for exponential decay toward full compliance to&lt;br /&gt;
the desired behavior. When you want the vehicle to be very responsive use a short timescale of one second or&lt;br /&gt;
less, and if you want to disable a behavior then set the timescale to a very large number like 300 (5 minutes) or&lt;br /&gt;
more. Note, for stability reasons, there is usually a limit to how small a timescale is allowed to be, and is usually&lt;br /&gt;
on the order of a tenth of a second. Setting a timescale to zero is safe and is always equivalent to setting it to its&lt;br /&gt;
minimum. Any feature with a timescale can be effectively disabled by setting the timescale so large that it would&lt;br /&gt;
take them all day to have any effect.&lt;br /&gt;
&lt;br /&gt;
==  Setting the Vehicle Type ==&lt;br /&gt;
&lt;br /&gt;
Before any vehicle parameters can be set the vehicle behavior must first be enabled. It is enabled by calling&lt;br /&gt;
[[llSetVehicleType]] with any &#039;&#039;&#039;VEHICLE_TYPE_*&#039;&#039;&#039;, except [[VEHICLE_TYPE_NONE]] which will disable the&lt;br /&gt;
vehicle. See the {{LSLGC|Vehicle|vehicle types}} constants section for currently available types. More types will be available soon.&lt;br /&gt;
&lt;br /&gt;
Setting the vehicle type is necessary for enabling the vehicle behavior and sets all of the parameters to its default&lt;br /&gt;
values. For each vehicle type listed we provide the corresponding equivalent code in long format. Is is important&lt;br /&gt;
to realize that the defaults are not the optimal settings for any of these vehicle types and that they will definitely&lt;br /&gt;
be changed in the future. Do not rely on these values to be constant until specified.&lt;br /&gt;
&lt;br /&gt;
Should you want to make a unique or experimental vehicle you will still have to enable the vehicle behavior with&lt;br /&gt;
one of the default types first, after which you will be able to change any of the parameters or flags within the&lt;br /&gt;
allowed ranges.&lt;br /&gt;
&lt;br /&gt;
Setting the vehicle type does not automatically take controls or otherwise move the object. However should you&lt;br /&gt;
enable the vehicle behavior while the object is free to move and parked on a hill then it may start to slide away.&lt;br /&gt;
&lt;br /&gt;
We’re looking for new and better default vehicle types. If you think you’ve found a set of parameters that make a&lt;br /&gt;
better car, boat, or any other default type of vehicle then you may submit your proposed list of settings to&lt;br /&gt;
Andrew Linden via a script or notecard.&lt;br /&gt;
&lt;br /&gt;
==  Linear and Angular Deflection ==&lt;br /&gt;
&lt;br /&gt;
A common feature of real vehicles is their tendency to move along &amp;quot;preferred axes of motion&amp;quot;. That is, due to&lt;br /&gt;
their wheels, wings, shape, or method of propulsion they tend to push or redirect themselves along axes that are&lt;br /&gt;
static in the vehicle’s local frame. This general feature defines a class of vehicles and included in this category a&lt;br /&gt;
common dart is a &amp;quot;vehicle&amp;quot;: it has fins in the back such that if it were to tumble in the air it would eventually&lt;br /&gt;
align itself to move point-forward -- we’ll call this alignment effect angular deflection.&lt;br /&gt;
&lt;br /&gt;
A wheeled craft exhibits a different effect: when a skateboard is pushed in some direction it will tend to redirect&lt;br /&gt;
the resultant motion along that which it is free to roll -- we’ll call this effect linear deflection.&lt;br /&gt;
&lt;br /&gt;
So a typical Second Life vehicle is an object that exhibits linear and/or angular deflection along the &amp;quot;preferential&lt;br /&gt;
axes of motion&amp;quot;. The default preferential axes of motion are the local x- (at), y- (left), and z- (up) axes of the&lt;br /&gt;
local frame of the vehicle’s root primitive. The deflection behaviors relate to the x-axis (at): linear deflection will&lt;br /&gt;
tend to rotate its velocity until it points along it’s positive local x-axis while the angular deflection will tend to&lt;br /&gt;
reorient the vehicle such that it’s x-axis points in the direction that it is moving. The other axes are relevant to&lt;br /&gt;
vehicle behaviors that are described later, such as the vertical attractor which tries to keep a vehicle’s local z-axis&lt;br /&gt;
pointed toward the world z-axis (up). The vehicle axes can be rotated relative to the object’s actual local axes by&lt;br /&gt;
using the [[VEHICLE_REFERENCE_FRAME]] parameter, however that is an advanced feature and is covered in&lt;br /&gt;
detail in a later section of these documents.&lt;br /&gt;
&lt;br /&gt;
Depending on the vehicle it might be desirable to have lots of linear and/or angular delfection or not. The speed&lt;br /&gt;
of the deflections are controlled by setting the relevant parameters using the[[llSetVehicleFloatParam]] script call.&lt;br /&gt;
&lt;br /&gt;
Each variety of deflection has a &amp;quot;timescale&amp;quot; parameter that determines how quickly a full deflection happens.&lt;br /&gt;
&lt;br /&gt;
Basically the timescale it the time coefficient for exponential decay toward full deflection. So, a vehicle that&lt;br /&gt;
deflects quickly should have a small timescale. For instance, a typical dart might have a angular deflection&lt;br /&gt;
timescale of a couple of seconds but a linear deflection of several seconds; it will tend to reorient itself before it&lt;br /&gt;
changes direction. To set the deflection timescales of a dart you might use the lines below:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
llSetVehicleFloatParam(VEHICLE_ANGULAR_DEFLECTION_TIMESCALE, 2.0);&lt;br /&gt;
llSetVehicleFloatParam(VEHICLE_LINEAR_DEFLECTION_TIMESCALE, 6.0);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Each variety of deflection has an &amp;quot;efficiency&amp;quot; parameter that is a slider between 0.0 and 1.0. Unlike the other&lt;br /&gt;
efficiency parameter of other vehicle behaviors, the deflection efficiencies do not slide between &amp;quot;bouncy&amp;quot; and&lt;br /&gt;
&amp;quot;damped&amp;quot;, but instead slide from &amp;quot;no deflection whatsoever&amp;quot; (0.0) to &amp;quot;maximum deflection&amp;quot; (1.0). That is, they&lt;br /&gt;
behave much like the deflection timescales, however they are normalized to the range between 0.0 and 1.0.&lt;br /&gt;
&lt;br /&gt;
==  Moving the Vehicle ==&lt;br /&gt;
&lt;br /&gt;
Once enabled, a vehicle can be pushed and rotated by external forces and/or from script calls such as&lt;br /&gt;
[[llApplyImpulse]], however linear and angular motors have been built in to make motion easier and smoother.&lt;br /&gt;
Their directions can be set using the[[llSetVehicleVectorParam]] call. For example, to make the vehicle try to move&lt;br /&gt;
at 5 meters/second along its local x-axis (the default look-at direction) you would put the following line in your&lt;br /&gt;
script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, &amp;lt;5, 0, 0&amp;gt;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To prevent vehicles from moving too fast the magnitude of the linear motor is clamped to be no larger than about&lt;br /&gt;
30 meters/second. Note that this is clamped mostly because of limitations of the physics engine, and may be&lt;br /&gt;
raised later when possible.&lt;br /&gt;
&lt;br /&gt;
Setting the motor speed is not enough to enable all interesting vehicles. For example, some will want a car that&lt;br /&gt;
immediately gets up to the speed they want, while others will want a boat that slowly climbs up to its maximum&lt;br /&gt;
velocity. To control this effect you can use the [[VEHICLE_LINEAR_MOTOR_TIMESCALE]] parameter.&lt;br /&gt;
&lt;br /&gt;
Basically the &amp;quot;timescale&amp;quot; of a motor is the time constant for the vehicle to exponentially accelerate toward its full&lt;br /&gt;
speed.&lt;br /&gt;
&lt;br /&gt;
What would happen if you were to accidentally set the vehicle’s linear velocity to maximum possible speed and&lt;br /&gt;
then let go? It would run away and never stop, right? Not necessarily: an automatic &amp;quot;motor decay&amp;quot; has been built&lt;br /&gt;
in such that all motors will gradually decrease their effectiveness after being set.&lt;br /&gt;
&lt;br /&gt;
Each time the linear motor’s vector is set its &amp;quot;grip&amp;quot; immediately starts to decay exponentially with a timescale&lt;br /&gt;
determined by the [[VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE]], such that after enough time the&lt;br /&gt;
motor ceases to have any effect. This decay timescale serves two purposes. First, since it cannot be set longer&lt;br /&gt;
than 120 seconds, and is always enabled it gaurantees that a vehicle will not push itself about forever in the&lt;br /&gt;
absence of active control (from keyboard commands or some logic loop in the script). Second, it can be used to&lt;br /&gt;
push some vehicles around using a simple impulse model. That is, rather than setting the motor &amp;quot;on&amp;quot; or &amp;quot;off&amp;quot;&lt;br /&gt;
depending on whether a particular key is pressed &amp;quot;down&amp;quot; or &amp;quot;up&amp;quot; the decay timescale can be set short and the&lt;br /&gt;
motor can be set &amp;quot;on&amp;quot; whenever the key transitions from &amp;quot;up&amp;quot; to &amp;quot;down&amp;quot; and allowed to automatically decay.&lt;br /&gt;
&lt;br /&gt;
Since the motor’s effectiveness is reset whenever the motor’s vector is set, then setting it to a vector of length&lt;br /&gt;
zero is different from allowing it to decay completely. The first case will cause the vehicle to try to reach zero&lt;br /&gt;
velocity, while the second will leave the motor impotent.&lt;br /&gt;
&lt;br /&gt;
The two motor timescales have very similar names, but have different effects, so try not to get them confused.&lt;br /&gt;
&lt;br /&gt;
::[[VEHICLE_LINEAR_MOTOR_TIMESCALE]] is the time for motor to &amp;quot;win&amp;quot;, and&lt;br /&gt;
&lt;br /&gt;
::[[VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE]] is the time for the motor’s &amp;quot;effectiveness&amp;quot; to decay&lt;br /&gt;
toward zero. If you set one when you think you are changing the other you will have frustrating results. Also, if&lt;br /&gt;
the motor’s decay timescale is shorter than the regular timescale, then the effective magnitude of the motor&lt;br /&gt;
vector will be diminished.&lt;br /&gt;
&lt;br /&gt;
==  Steering the Vehicle ==&lt;br /&gt;
&lt;br /&gt;
Much like the linear motor, there is also an angular motor that is always on, and whose direction and magnitude&lt;br /&gt;
can be set. For example, to make a vehicle turn at 5 degrees/sec around it’s local z-axis (its up-axis) you might&lt;br /&gt;
add the following lines to its script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vector angular_velocity = &amp;lt;0, 0, 5 * PI / 180&amp;gt;;&lt;br /&gt;
llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, angular_velocity);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The magnitude of the angular motor is capped to be no more than two rotations per second (4*PI radians/sec).&lt;br /&gt;
&lt;br /&gt;
Also like the linear motor it has an efficiency parameter, [[VEHICLE_ANGULAR_MOTOR_TIMESCALE]], and a&lt;br /&gt;
motor decay parameter, [[VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE]], which is set to themaximum possible value of 120 seconds by default.&lt;br /&gt;
&lt;br /&gt;
When steering a vehicle you probably don’t want it to turn very far or for very long. One way to do it using the&lt;br /&gt;
angular motor would be to leave the decay timescale long, enable a significant amount of angular friction (to&lt;br /&gt;
quickly slow the vehicle down when the motor is turned off) then set the angular motor to a large vector on a key&lt;br /&gt;
press, and set it to zero when the key is released. Another way to do it is to set the&lt;br /&gt;
[[VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE]] to a short value and push the vehicle about with a&lt;br /&gt;
more impulsive method that sets the motor fast on a key press down (and optionally setting the motor to zero on&lt;br /&gt;
a key up) relying on the automatic exponential decay of the motor’s effectiveness rather than a constant angular&lt;br /&gt;
friction.&lt;br /&gt;
&lt;br /&gt;
Setting the angular motor to zero magnitude is different from allowing it to decay. When the motor completely&lt;br /&gt;
decays it no longer affects the motion of the vehicle, however setting it to zero will reset the &amp;quot;grip&amp;quot; of the vehicle&lt;br /&gt;
and will make the vehicle try to achieve zero angular velocity.&lt;br /&gt;
&lt;br /&gt;
For some vehicles it will be possible to use the &amp;quot;banking feature&amp;quot; to turn. &amp;quot;Banking&amp;quot; is what airplanes and&lt;br /&gt;
motorcycles do when they turn. When a banking vehicle twists about its roll-axis there is a resultant spin around&lt;br /&gt;
its yaw-axis. Banking is only available when using the &amp;quot;vertical attractor&amp;quot; which is described below.&lt;br /&gt;
&lt;br /&gt;
==  The Vertical Attractor ==&lt;br /&gt;
&lt;br /&gt;
Some vehicles, like boats, should always keep their up-side up. This can be done by enabling the &amp;quot;vertical&lt;br /&gt;
attractor&amp;quot; behavior that springs the vehicle’s local z-axis to the world z-axis (a.k.a. &amp;quot;up&amp;quot;). To take advantage of&lt;br /&gt;
this feature you would set the [[VEHICLE_VERTICAL_ATTRACTION_TIMESCALE]] to control the period of&lt;br /&gt;
the spring frequency, and then set the [[VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY]] to control the&lt;br /&gt;
damping. An efficiency of 0.0 will cause the spring to wobble around its equilibrium, while an efficiency of 1.0&lt;br /&gt;
will cause the spring to reach it’s equilibrium with exponential decay.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
llSetVehicleVectorParam(VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, 4.0);&lt;br /&gt;
llSetVehicleVectorParam(VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY, 0.5);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The vertical attractor is disabled by setting its timescale to anything larger than 300 seconds.&lt;br /&gt;
&lt;br /&gt;
Note that by default the vertical attractor will prevent the vehicle from diving and climbing. So, if you wanted to&lt;br /&gt;
make a airplane you would probably want to unlock the attractor around the pitch axis by setting the&lt;br /&gt;
[[VEHICLE_FLAG_LIMIT_ROLL_ONLY]] bit:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
llSetVehicleFlags(VEHICLE_FLAG_LIMIT_ROLL_ONLY);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  Banking ==&lt;br /&gt;
&lt;br /&gt;
The vertical attractor feature must be enabled in order for the banking behavior to function. The way banking&lt;br /&gt;
works is this: a rotation around the vehicle’s roll-axis will produce a angular velocity around the yaw-axis,&lt;br /&gt;
causing the vehicle to turn. The magnitude of the yaw effect will be proportional to the&lt;br /&gt;
&lt;br /&gt;
::[[VEHICLE_BANKING_COEF]], the angle of the roll rotation, and sometimes the vehicle’s velocity along its&lt;br /&gt;
preferred axis of motion.&lt;br /&gt;
&lt;br /&gt;
::The [[VEHICLE_BANKING_COEF]] can vary between -1 and +1. When it’s positive then any positive rotation (by&lt;br /&gt;
the right-hand rule) about the roll-axis will effect a (negative) torque around the yaw-axis, making it turn to the&lt;br /&gt;
right -- that is the vehicle will lean into the turn, which is how real airplanes and motorcycle’s work. Negating&lt;br /&gt;
the banking coefficient will make it so that the vehicle leans to the outside of the turn (not very &amp;quot;physical&amp;quot; but&lt;br /&gt;
might allow interesting vehicles so why not?).&lt;br /&gt;
&lt;br /&gt;
::The [[VEHICLE_BANKING_MIX]] is a fake (i.e. non-physical) parameter that is useful for making banking&lt;br /&gt;
vehicles do what you want rather than what the laws of physics allow. For example, consider a real motorcycle...&lt;br /&gt;
it must be moving forward in order for it to turn while banking, however video-game motorcycles are often&lt;br /&gt;
configured to turn in place when at a dead stop -- because they’re often easier to control that way using the&lt;br /&gt;
limited interface of the keyboard or game controller. The [[VEHICLE_BANKING_MIX]] enables combinations of&lt;br /&gt;
both realistic and non-realistic banking by fuctioning as a slider between a banking that is correspondingly&lt;br /&gt;
totally static (0.0) and totally dynamic (1.0). By &amp;quot;static&amp;quot; we mean that the banking effect depends only on the&lt;br /&gt;
vehicle’s rotation about its roll-axis compared to &amp;quot;dynamic&amp;quot; where the banking is also proportional to its&lt;br /&gt;
velocity along its roll-axis. Finding the best value of the &amp;quot;mixture&amp;quot; will probably require trial and error.&lt;br /&gt;
&lt;br /&gt;
The time it takes for the banking behavior to defeat a pre-existing angular velocity about the world z-axis is&lt;br /&gt;
determined by the [[VEHICLE_BANKING_TIMESCALE]]. So if you want the vehicle to bank quickly then give it&lt;br /&gt;
a banking timescale of about a second or less, otherwise you can make a sluggish vehicle by giving it a timescale&lt;br /&gt;
of several seconds.&lt;br /&gt;
&lt;br /&gt;
==  Friction Timescales ==&lt;br /&gt;
&lt;br /&gt;
[[VEHICLE_LINEAR_FRICTION_TIMESCALE]] is a vector parameter that defines the timescales for the vehicle&lt;br /&gt;
to come to a complete stop along the three local axes of the vehicle’s reference frame. The timescale along each&lt;br /&gt;
axis is independent of the others. For example, a sliding ground car would probably have very little friction along&lt;br /&gt;
its x- and z-axes (so it can easily slide forward and fall down) while there would usually significant friction along&lt;br /&gt;
its y-axis:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
llSetVehicleVectorParam(VEHICLE_LINEAR_FRICTION_TIMESCALE, &amp;lt;1000, 1000, 3&amp;gt;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Remember that a longer timescale corresponds to a weaker friction, hence to effectively disable all linear friction&lt;br /&gt;
you would set all of the timescales to large values.&lt;br /&gt;
&lt;br /&gt;
Setting the linear friction as a scalar is allowed, and has the effect of setting all of the timescales to the same&lt;br /&gt;
value. Both code snippets below are equivalent, and both make friction negligible:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// set all linear friction timescales to 1000&lt;br /&gt;
llSetVehicleVectorParam(VEHICLE_LINEAR_FRICTION_TIMESCALE, &amp;lt;1000, 1000, 1000&amp;gt;);&lt;br /&gt;
// same as above, but fewer characters&lt;br /&gt;
llSetVehicleFloatParam(VEHICLE_LINEAR_FRICTION_TIMESCALE, 1000);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
/[[VEHICLE_ANGULAR_FRICTION_TIMESCALE]] is also a vector parameter that defines the timescales for the&lt;br /&gt;
vehicle to stop rotating about the x-, y-, and z-axes, and are set and disabled in the same way as the linear friction.&lt;br /&gt;
&lt;br /&gt;
==  Buoyancy ==&lt;br /&gt;
&lt;br /&gt;
The vehicle has a built-in buoyancy feature that is independent of the[[llSetBuoyancy]] call. It is recommended that&lt;br /&gt;
the two buoyancies do not mix! To make a vehicle buoyant, set the [[VEHICLE_BUOYANCY]] parameter to&lt;br /&gt;
something between 0.0 (no buoyancy whatsoever) to 1.0 (full anti-gravity).&lt;br /&gt;
&lt;br /&gt;
The buoyancy behavior is independent of hover, however in order for hover to work without a large offset of the&lt;br /&gt;
[[VEHICLE_HOVER_HEIGHT]], the [[VEHICLE_BUOYANCY]] should be set to 1.0.&lt;br /&gt;
&lt;br /&gt;
It is not recommended that you mix vehicle buoyancy with the[[llSetBuoyancy]] script call. It would probably&lt;br /&gt;
cause the object to fly up into space.&lt;br /&gt;
&lt;br /&gt;
==  Hover ==&lt;br /&gt;
&lt;br /&gt;
The hover behavior is enabled by setting the [[VEHICLE_HOVER_TIMESCALE]] to a value less than 300&lt;br /&gt;
seconds; larger timescales totally disable it. Most vehicles will work best with short hover timescales of a few&lt;br /&gt;
seconds or less. The shorter the timescale, the faster the vehicle will slave to is target height. Note, that if the&lt;br /&gt;
values of [[VEHICLE_LINEAR_FRICTION_TIMESCALE]] may affect the speed of the hover.&lt;br /&gt;
&lt;br /&gt;
Hover is independent of buoyancy, however the [[VEHICLE_BUOYANCY]] should be set to 1.0, otherwise the&lt;br /&gt;
vehicle will not lift itself off of the ground until the [[VEHICLE_HOVER_HEIGHT]] is made large enough to&lt;br /&gt;
counter the acceleration of gravity, and the vehicle will never float all the way to its target height.&lt;br /&gt;
&lt;br /&gt;
The [[VEHICLE_HOVER_EFFICIENCY]] can be thought of as a slider between bouncy (0.0) and smoothed (1.0).&lt;br /&gt;
&lt;br /&gt;
When in the bouncy range the vehicle will tend to hover a little lower than its target height and the&lt;br /&gt;
[[VEHICLE_HOVER_TIMESCALE]] will be approximately the oscillation period of the bounce (the real period&lt;br /&gt;
will tend to be a little longer than the timescale).&lt;br /&gt;
&lt;br /&gt;
For performance reasons, until improvements are made to the Second Life physics engine the vehicles can only&lt;br /&gt;
hover over the terrain and water, so they will not be able to hover above objects made out of primitives, such as&lt;br /&gt;
bridges and houses. By default the hover behavior will float over terrain and water, however this can be changed&lt;br /&gt;
by setting some flags:&lt;br /&gt;
&lt;br /&gt;
If you wanted to make a boat you should set the [[VEHICLE_HOVER_WATER_ONLY]] flag, or if you wanted to&lt;br /&gt;
drive a hover tank under water you would use the [[VEHICLE_HOVER_TERRAIN_ONLY]] flag instead. Finally,&lt;br /&gt;
if you wanted to make a submarine or a balloon you would use the [[VEHICLE_HOVER_GLOBAL_HEIGHT]].&lt;br /&gt;
&lt;br /&gt;
Note that the flags are independent of each other and that setting two contradictory flags will have undefined&lt;br /&gt;
behavor. The flags are set using the script call[[llSetVehicleFlags()]].&lt;br /&gt;
&lt;br /&gt;
The [[VEHICLE_HOVER_HEIGHT]] determines how high the vehicle will hover over the terrain and/or water, or&lt;br /&gt;
the global height, and has a maximum value of 100 meters. Note that for hovering purposes the &amp;quot;center&amp;quot; of the&lt;br /&gt;
vehicle is its &amp;quot;center of mass&amp;quot; which is not always obvious to the untrained eye, and it changes when avatar’s sit&lt;br /&gt;
on the vehicle.&lt;br /&gt;
&lt;br /&gt;
==  Reference Frame ==&lt;br /&gt;
&lt;br /&gt;
The vehicle relies on the x- (at), y- (left), and z- (up) axes in order to figure out which way it preferres to move&lt;br /&gt;
and which end is up. By default these axes are identical to the local axes of the root primitive of the object,&lt;br /&gt;
however this means that the vehicle’s root primitive must, by default, be oriented to agree with the designed at,&lt;br /&gt;
left, and up axes of the vehicle. But, what if the vehicle object was already pre-built with the root primitive in&lt;br /&gt;
some non-trivial orientation relative to where the vehicle as a whole should move? This is where the&lt;br /&gt;
&lt;br /&gt;
[[VEHICLE_REFERENCE_FRAME]] parameter becomes useful; the vehicle’s axes can be arbitrarily reoriented&lt;br /&gt;
by setting this parameter.&lt;br /&gt;
&lt;br /&gt;
As an example, suppose you had built a rocket out of a big cylinder, a cone for the nose, and some stretched cut&lt;br /&gt;
boxes for the fins, then linked them all together with the cylinder as the root primitive. Ideally the rocket would&lt;br /&gt;
move nose-first, however the cylinder’s axis of symmetry is its local z-axis while the default &amp;quot;at-axis&amp;quot; of the&lt;br /&gt;
vehicle, the axis it will want to deflect to forward under angular deflection, is the local x-axis and points out from&lt;br /&gt;
the curved surface of the cylinder. The script code below will rotate the vehicle’s axes such that the local z-axis&lt;br /&gt;
becomes the &amp;quot;at-axis&amp;quot; and the local negative x-axis becomes the &amp;quot;up-axis&amp;quot;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// rotate the vehicle frame -PI/2 about the local y-axis (left-axis)&lt;br /&gt;
rotation rot =llEuler2Rot(0, PI/2, 0);&lt;br /&gt;
llSetVehicleRotationParam(VEHICLE_REFERENCE_FRAME, rot);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Another example of how the reference frame parameter could be used is to consider flying craft that uses the&lt;br /&gt;
vertical attractor for stability during flying but wants to use VTOL (vertical takeoff and landing). During flight&lt;br /&gt;
the craft’s dorsal axis should point up, but during landing its nose-axis should be up. To land the vehicle: while&lt;br /&gt;
the vertical attractor is in effect, rotate the existing [[VEHICLE_REFERENCE_FRAME]] by +PI/2 about the&lt;br /&gt;
left-axis, then the vehicle will pitch up such that it’s nose points toward the sky. The vehicle could be allowed to&lt;br /&gt;
fall to the landing pad under friction, or a decreasing hover effect.&lt;br /&gt;
&lt;br /&gt;
{{LSLC|Vehicle|Tutorial}} {{LSLC|Tutorials|Vehicle}}&lt;/div&gt;</summary>
		<author><name>Blubb Dixon</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Linden_Vehicle_Tutorial&amp;diff=40063</id>
		<title>Linden Vehicle Tutorial</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Linden_Vehicle_Tutorial&amp;diff=40063"/>
		<updated>2007-11-11T12:23:47Z</updated>

		<summary type="html">&lt;p&gt;Blubb Dixon: /* Banking */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Header}}&lt;br /&gt;
&lt;br /&gt;
== Vehicles ==&lt;br /&gt;
&lt;br /&gt;
Vehicles are a new feature now available for use through LSL. This chapter will cover the basics of how vehicles&lt;br /&gt;
work, the terms used when describing vehicles, and a more thorough examination of the api available.&lt;br /&gt;
&lt;br /&gt;
There are several ways to make scripted objects move themselves around. One way is to turn the object into a&lt;br /&gt;
&amp;quot;vehicle&amp;quot;. This feature is versatile enough to make things that slide, hover, fly, and float. Some of the behaviors&lt;br /&gt;
that can be enabled are:&lt;br /&gt;
&lt;br /&gt;
*deflection of linear and angular velocity to preferred axis of motion&lt;br /&gt;
*asymmetric linear and angular friction&lt;br /&gt;
*hovering over terrain/water or at a global height&lt;br /&gt;
*banking on turns&lt;br /&gt;
*linear and angular motor for push and turning&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
Each scripted object can have one vehicle behavior that is configurable through the[[llSetVehicleType]],&lt;br /&gt;
llSetVehicleFloatParam,llSetVehicleVectorParam,llSetVehicleRotationParam,llSetVehicleFlags, and&lt;br /&gt;
llRemoveVehicleFlags library calls.&lt;br /&gt;
&lt;br /&gt;
These script calls are described in more detail below, but the important thing to notice here is that the vehicle&lt;br /&gt;
behavior has several parameters that can be adjusted to change how the vehicle handles. Depending on the values&lt;br /&gt;
chosen the vehicle can veer like a boat in water, or ride like a sled on rails.&lt;br /&gt;
&lt;br /&gt;
Setting the vehicle flags allow you to make exceptions to some default behaviors. Some of these flags only have&lt;br /&gt;
an effect when certain behaviors are enabled. For example, the [[VEHICLE_FLAG_HOVER_WATER_ONLY]] will&lt;br /&gt;
make the vehicle ignore the height of the terrain, however it only makes a difference if the vehicle is hovering.&lt;br /&gt;
&lt;br /&gt;
== Warnings ==&lt;br /&gt;
&lt;br /&gt;
Vehicles are new in Second Life 1.1 and some of the details of their behavior may be changed as necessary to&lt;br /&gt;
ensure stability and user safety. In particular, many of the limits and defaults described in the appendices will&lt;br /&gt;
probably change and should not be relied upon in the long term.&lt;br /&gt;
&lt;br /&gt;
It is not recommended that you mix vehicle behavior with some of the other script calls that provide impulse and&lt;br /&gt;
forces to the object, especially[[llSetBuoyancy]],[[llSetForce]],[[llSetTorque]], and[[llSetHoverHeight]].&lt;br /&gt;
&lt;br /&gt;
While the following methods probably don’t cause any instabilities, their behavior may conflict with vehicles&lt;br /&gt;
and cause undesired and/or inconsistent results, so use[[llLookAt]],[[llRotLookAt]],[[llMoveToTarget]], and&lt;br /&gt;
[[llTargetOmega]] at your own risk.&lt;br /&gt;
&lt;br /&gt;
If you think you have found a bug relating to how vehicle’s work, one way to submit the problem is to give a&lt;br /&gt;
copy of the vehicle and script to Andrew Linden with comments or a notecard describing the problem. Please&lt;br /&gt;
name all submissions &amp;quot;Bugged Vehicle XX&amp;quot; where XX are your Second Life initials. The vehicle and script will&lt;br /&gt;
be examined at the earliest convenience.&lt;br /&gt;
&lt;br /&gt;
==  Definitions ==&lt;br /&gt;
&lt;br /&gt;
The terms &amp;quot;roll&amp;quot;, &amp;quot;pitch&amp;quot;, and &amp;quot;yaw&amp;quot; are often used to describe the modes of rotations that can happen to a&lt;br /&gt;
airplane or boat. They correspond to rotations about the local x-, y-, and z-axis respectively.&lt;br /&gt;
z-axis .&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/Tait-Bryan_angles&lt;br /&gt;
&lt;br /&gt;
The right-hand-rule, often introduced in beginning physics courses, is used to define the direction of positive&lt;br /&gt;
rotation about any axis. As an example of how to use the right hand rule, consider a positive rotation about the&lt;br /&gt;
roll axis. To help visualize how such a rotation would move the airplane, place your right thumb parallel to the&lt;br /&gt;
plane’s roll-axis such that the thumb points in the positive x-direction, then curl the four fingers into a fist. Your&lt;br /&gt;
fingers will be pointing in the direction that the plane will spin.&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/Right_hand_rule&lt;br /&gt;
&lt;br /&gt;
Many of the parameters that control a vehicle’s behavior are of the form:&lt;br /&gt;
&lt;br /&gt;
VEHICLE_&#039;&#039;&#039;BEHAVIOR&#039;&#039;&#039;_TIMESCALE&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;BEHAVIOR&#039;&#039;&#039; ’s &amp;quot;timescale&amp;quot; can usually be understood as the time for the&lt;br /&gt;
behavior to push, twist, or otherwise affect the vehicle such that the difference between what it is doing, and&lt;br /&gt;
what it is supposed to be doing, has been reduced to 1/e of what it was, where &amp;quot;e&amp;quot; is the natural exponent&lt;br /&gt;
(approximately 2.718281828). In other words, it is the timescale for exponential decay toward full compliance to&lt;br /&gt;
the desired behavior. When you want the vehicle to be very responsive use a short timescale of one second or&lt;br /&gt;
less, and if you want to disable a behavior then set the timescale to a very large number like 300 (5 minutes) or&lt;br /&gt;
more. Note, for stability reasons, there is usually a limit to how small a timescale is allowed to be, and is usually&lt;br /&gt;
on the order of a tenth of a second. Setting a timescale to zero is safe and is always equivalent to setting it to its&lt;br /&gt;
minimum. Any feature with a timescale can be effectively disabled by setting the timescale so large that it would&lt;br /&gt;
take them all day to have any effect.&lt;br /&gt;
&lt;br /&gt;
==  Setting the Vehicle Type ==&lt;br /&gt;
&lt;br /&gt;
Before any vehicle parameters can be set the vehicle behavior must first be enabled. It is enabled by calling&lt;br /&gt;
[[llSetVehicleType]] with any &#039;&#039;&#039;VEHICLE_TYPE_*&#039;&#039;&#039;, except [[VEHICLE_TYPE_NONE]] which will disable the&lt;br /&gt;
vehicle. See the {{LSLGC|Vehicle|vehicle types}} constants section for currently available types. More types will be available soon.&lt;br /&gt;
&lt;br /&gt;
Setting the vehicle type is necessary for enabling the vehicle behavior and sets all of the parameters to its default&lt;br /&gt;
values. For each vehicle type listed we provide the corresponding equivalent code in long format. Is is important&lt;br /&gt;
to realize that the defaults are not the optimal settings for any of these vehicle types and that they will definitely&lt;br /&gt;
be changed in the future. Do not rely on these values to be constant until specified.&lt;br /&gt;
&lt;br /&gt;
Should you want to make a unique or experimental vehicle you will still have to enable the vehicle behavior with&lt;br /&gt;
one of the default types first, after which you will be able to change any of the parameters or flags within the&lt;br /&gt;
allowed ranges.&lt;br /&gt;
&lt;br /&gt;
Setting the vehicle type does not automatically take controls or otherwise move the object. However should you&lt;br /&gt;
enable the vehicle behavior while the object is free to move and parked on a hill then it may start to slide away.&lt;br /&gt;
&lt;br /&gt;
We’re looking for new and better default vehicle types. If you think you’ve found a set of parameters that make a&lt;br /&gt;
better car, boat, or any other default type of vehicle then you may submit your proposed list of settings to&lt;br /&gt;
Andrew Linden via a script or notecard.&lt;br /&gt;
&lt;br /&gt;
==  Linear and Angular Deflection ==&lt;br /&gt;
&lt;br /&gt;
A common feature of real vehicles is their tendency to move along &amp;quot;preferred axes of motion&amp;quot;. That is, due to&lt;br /&gt;
their wheels, wings, shape, or method of propulsion they tend to push or redirect themselves along axes that are&lt;br /&gt;
static in the vehicle’s local frame. This general feature defines a class of vehicles and included in this category a&lt;br /&gt;
common dart is a &amp;quot;vehicle&amp;quot;: it has fins in the back such that if it were to tumble in the air it would eventually&lt;br /&gt;
align itself to move point-forward -- we’ll call this alignment effect angular deflection.&lt;br /&gt;
&lt;br /&gt;
A wheeled craft exhibits a different effect: when a skateboard is pushed in some direction it will tend to redirect&lt;br /&gt;
the resultant motion along that which it is free to roll -- we’ll call this effect linear deflection.&lt;br /&gt;
&lt;br /&gt;
So a typical Second Life vehicle is an object that exhibits linear and/or angular deflection along the &amp;quot;preferential&lt;br /&gt;
axes of motion&amp;quot;. The default preferential axes of motion are the local x- (at), y- (left), and z- (up) axes of the&lt;br /&gt;
local frame of the vehicle’s root primitive. The deflection behaviors relate to the x-axis (at): linear deflection will&lt;br /&gt;
tend to rotate its velocity until it points along it’s positive local x-axis while the angular deflection will tend to&lt;br /&gt;
reorient the vehicle such that it’s x-axis points in the direction that it is moving. The other axes are relevant to&lt;br /&gt;
vehicle behaviors that are described later, such as the vertical attractor which tries to keep a vehicle’s local z-axis&lt;br /&gt;
pointed toward the world z-axis (up). The vehicle axes can be rotated relative to the object’s actual local axes by&lt;br /&gt;
using the [[VEHICLE_REFERENCE_FRAME]] parameter, however that is an advanced feature and is covered in&lt;br /&gt;
detail in a later section of these documents.&lt;br /&gt;
&lt;br /&gt;
Depending on the vehicle it might be desirable to have lots of linear and/or angular delfection or not. The speed&lt;br /&gt;
of the deflections are controlled by setting the relevant parameters using the[[llSetVehicleFloatParam]] script call.&lt;br /&gt;
&lt;br /&gt;
Each variety of deflection has a &amp;quot;timescale&amp;quot; parameter that determines how quickly a full deflection happens.&lt;br /&gt;
&lt;br /&gt;
Basically the timescale it the time coefficient for exponential decay toward full deflection. So, a vehicle that&lt;br /&gt;
deflects quickly should have a small timescale. For instance, a typical dart might have a angular deflection&lt;br /&gt;
timescale of a couple of seconds but a linear deflection of several seconds; it will tend to reorient itself before it&lt;br /&gt;
changes direction. To set the deflection timescales of a dart you might use the lines below:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
llSetVehicleFloatParam(VEHICLE_ANGULAR_DEFLECTION_TIMESCALE, 2.0);&lt;br /&gt;
llSetVehicleFloatParam(VEHICLE_LINEAR_DEFLECTION_TIMESCALE, 6.0);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Each variety of deflection has an &amp;quot;efficiency&amp;quot; parameter that is a slider between 0.0 and 1.0. Unlike the other&lt;br /&gt;
efficiency parameter of other vehicle behaviors, the deflection efficiencies do not slide between &amp;quot;bouncy&amp;quot; and&lt;br /&gt;
&amp;quot;damped&amp;quot;, but instead slide from &amp;quot;no deflection whatsoever&amp;quot; (0.0) to &amp;quot;maximum deflection&amp;quot; (1.0). That is, they&lt;br /&gt;
behave much like the deflection timescales, however they are normalized to the range between 0.0 and 1.0.&lt;br /&gt;
&lt;br /&gt;
==  Moving the Vehicle ==&lt;br /&gt;
&lt;br /&gt;
Once enabled, a vehicle can be pushed and rotated by external forces and/or from script calls such as&lt;br /&gt;
[[llApplyImpulse]], however linear and angular motors have been built in to make motion easier and smoother.&lt;br /&gt;
Their directions can be set using the[[llSetVehicleVectorParam]] call. For example, to make the vehicle try to move&lt;br /&gt;
at 5 meters/second along its local x-axis (the default look-at direction) you would put the following line in your&lt;br /&gt;
script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, &amp;lt;5, 0, 0&amp;gt;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To prevent vehicles from moving too fast the magnitude of the linear motor is clamped to be no larger than about&lt;br /&gt;
30 meters/second. Note that this is clamped mostly because of limitations of the physics engine, and may be&lt;br /&gt;
raised later when possible.&lt;br /&gt;
&lt;br /&gt;
Setting the motor speed is not enough to enable all interesting vehicles. For example, some will want a car that&lt;br /&gt;
immediately gets up to the speed they want, while others will want a boat that slowly climbs up to its maximum&lt;br /&gt;
velocity. To control this effect you can use the [[VEHICLE_LINEAR_MOTOR_TIMESCALE]] parameter.&lt;br /&gt;
&lt;br /&gt;
Basically the &amp;quot;timescale&amp;quot; of a motor is the time constant for the vehicle to exponentially accelerate toward its full&lt;br /&gt;
speed.&lt;br /&gt;
&lt;br /&gt;
What would happen if you were to accidentally set the vehicle’s linear velocity to maximum possible speed and&lt;br /&gt;
then let go? It would run away and never stop, right? Not necessarily: an automatic &amp;quot;motor decay&amp;quot; has been built&lt;br /&gt;
in such that all motors will gradually decrease their effectiveness after being set.&lt;br /&gt;
&lt;br /&gt;
Each time the linear motor’s vector is set its &amp;quot;grip&amp;quot; immediately starts to decay exponentially with a timescale&lt;br /&gt;
determined by the [[VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE]], such that after enough time the&lt;br /&gt;
motor ceases to have any effect. This decay timescale serves two purposes. First, since it cannot be set longer&lt;br /&gt;
than 120 seconds, and is always enabled it gaurantees that a vehicle will not push itself about forever in the&lt;br /&gt;
absence of active control (from keyboard commands or some logic loop in the script). Second, it can be used to&lt;br /&gt;
push some vehicles around using a simple impulse model. That is, rather than setting the motor &amp;quot;on&amp;quot; or &amp;quot;off&amp;quot;&lt;br /&gt;
depending on whether a particular key is pressed &amp;quot;down&amp;quot; or &amp;quot;up&amp;quot; the decay timescale can be set short and the&lt;br /&gt;
motor can be set &amp;quot;on&amp;quot; whenever the key transitions from &amp;quot;up&amp;quot; to &amp;quot;down&amp;quot; and allowed to automatically decay.&lt;br /&gt;
&lt;br /&gt;
Since the motor’s effectiveness is reset whenever the motor’s vector is set, then setting it to a vector of length&lt;br /&gt;
zero is different from allowing it to decay completely. The first case will cause the vehicle to try to reach zero&lt;br /&gt;
velocity, while the second will leave the motor impotent.&lt;br /&gt;
&lt;br /&gt;
The two motor timescales have very similar names, but have different effects, so try not to get them confused.&lt;br /&gt;
&lt;br /&gt;
::[[VEHICLE_LINEAR_MOTOR_TIMESCALE]] is the time for motor to &amp;quot;win&amp;quot;, and&lt;br /&gt;
&lt;br /&gt;
::[[VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE]] is the time for the motor’s &amp;quot;effectiveness&amp;quot; to decay&lt;br /&gt;
toward zero. If you set one when you think you are changing the other you will have frustrating results. Also, if&lt;br /&gt;
the motor’s decay timescale is shorter than the regular timescale, then the effective magnitude of the motor&lt;br /&gt;
vector will be diminished.&lt;br /&gt;
&lt;br /&gt;
==  Steering the Vehicle ==&lt;br /&gt;
&lt;br /&gt;
Much like the linear motor, there is also an angular motor that is always on, and whose direction and magnitude&lt;br /&gt;
can be set. For example, to make a vehicle turn at 5 degrees/sec around it’s local z-axis (its up-axis) you might&lt;br /&gt;
add the following lines to its script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vector angular_velocity = &amp;lt;0, 0, 5 * PI / 180&amp;gt;;&lt;br /&gt;
llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, angular_velocity);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The magnitude of the angular motor is capped to be no more than two rotations per second (4*PI radians/sec).&lt;br /&gt;
&lt;br /&gt;
Also like the linear motor it has an efficiency parameter, [[VEHICLE_ANGULAR_MOTOR_TIMESCALE]], and a&lt;br /&gt;
motor decay parameter, [[VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE]], which is set to themaximum possible value of 120 seconds by default.&lt;br /&gt;
&lt;br /&gt;
When steering a vehicle you probably don’t want it to turn very far or for very long. One way to do it using the&lt;br /&gt;
angular motor would be to leave the decay timescale long, enable a significant amount of angular friction (to&lt;br /&gt;
quickly slow the vehicle down when the motor is turned off) then set the angular motor to a large vector on a key&lt;br /&gt;
press, and set it to zero when the key is released. Another way to do it is to set the&lt;br /&gt;
[[VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE]] to a short value and push the vehicle about with a&lt;br /&gt;
more impulsive method that sets the motor fast on a key press down (and optionally setting the motor to zero on&lt;br /&gt;
a key up) relying on the automatic exponential decay of the motor’s effectiveness rather than a constant angular&lt;br /&gt;
friction.&lt;br /&gt;
&lt;br /&gt;
Setting the angular motor to zero magnitude is different from allowing it to decay. When the motor completely&lt;br /&gt;
decays it no longer affects the motion of the vehicle, however setting it to zero will reset the &amp;quot;grip&amp;quot; of the vehicle&lt;br /&gt;
and will make the vehicle try to achieve zero angular velocity.&lt;br /&gt;
&lt;br /&gt;
For some vehicles it will be possible to use the &amp;quot;banking feature&amp;quot; to turn. &amp;quot;Banking&amp;quot; is what airplanes and&lt;br /&gt;
motorcycles do when they turn. When a banking vehicle twists about its roll-axis there is a resultant spin around&lt;br /&gt;
its yaw-axis. Banking is only available when using the &amp;quot;vertical attractor&amp;quot; which is described below.&lt;br /&gt;
&lt;br /&gt;
==  The Vertical Attractor ==&lt;br /&gt;
&lt;br /&gt;
Some vehicles, like boats, should always keep their up-side up. This can be done by enabling the &amp;quot;vertical&lt;br /&gt;
attractor&amp;quot; behavior that springs the vehicle’s local z-axis to the world z-axis (a.k.a. &amp;quot;up&amp;quot;). To take advantage of&lt;br /&gt;
this feature you would set the [[VEHICLE_VERTICAL_ATTRACTION_TIMESCALE]] to control the period of&lt;br /&gt;
the spring frequency, and then set the [[VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY]] to control the&lt;br /&gt;
damping. An efficiency of 0.0 will cause the spring to wobble around its equilibrium, while an efficiency of 1.0&lt;br /&gt;
will cause the spring to reach it’s equilibrium with exponential decay.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
llSetVehicleVectorParam(VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, 4.0);&lt;br /&gt;
llSetVehicleVectorParam(VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY, 0.5);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The vertical attractor is disabled by setting its timescale to anything larger than 300 seconds.&lt;br /&gt;
&lt;br /&gt;
Note that by default the vertical attractor will prevent the vehicle from diving and climbing. So, if you wanted to&lt;br /&gt;
make a airplane you would probably want to unlock the attractor around the pitch axis by setting the&lt;br /&gt;
[[VEHICLE_FLAG_LIMIT_ROLL_ONLY]] bit:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
llSetVehicleFlags(VEHICLE_FLAG_LIMIT_ROLL_ONLY);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  Banking ==&lt;br /&gt;
&lt;br /&gt;
The vertical attractor feature must be enabled in order for the banking behavior to function. The way banking&lt;br /&gt;
works is this: a rotation around the vehicle’s roll-axis will produce a angular velocity around the yaw-axis,&lt;br /&gt;
causing the vehicle to turn. The magnitude of the yaw effect will be proportional to the&lt;br /&gt;
&lt;br /&gt;
::[[VEHICLE_BANKING_COEF]], the angle of the roll rotation, and sometimes the vehicle’s velocity along its&lt;br /&gt;
preferred axis of motion.&lt;br /&gt;
&lt;br /&gt;
::The [[VEHICLE_BANKING_COEF]] can vary between -1 and +1. When it’s positive then any positive rotation (by&lt;br /&gt;
the right-hand rule) about the roll-axis will effect a (negative) torque around the yaw-axis, making it turn to the&lt;br /&gt;
right -- that is the vehicle will lean into the turn, which is how real airplanes and motorcycle’s work. Negating&lt;br /&gt;
the banking coefficient will make it so that the vehicle leans to the outside of the turn (not very &amp;quot;physical&amp;quot; but&lt;br /&gt;
might allow interesting vehicles so why not?).&lt;br /&gt;
&lt;br /&gt;
::The [[VEHICLE_BANKING_MIX]] is a fake (i.e. non-physical) parameter that is useful for making banking&lt;br /&gt;
vehicles do what you want rather than what the laws of physics allow. For example, consider a real motorcycle...&lt;br /&gt;
it must be moving forward in order for it to turn while banking, however video-game motorcycles are often&lt;br /&gt;
configured to turn in place when at a dead stop -- because they’re often easier to control that way using the&lt;br /&gt;
limited interface of the keyboard or game controller. The [[VEHICLE_BANKING_MIX]] enables combinations of&lt;br /&gt;
both realistic and non-realistic banking by fuctioning as a slider between a banking that is correspondingly&lt;br /&gt;
totally static (0.0) and totally dynamic (1.0). By &amp;quot;static&amp;quot; we mean that the banking effect depends only on the&lt;br /&gt;
vehicle’s rotation about it’s roll-axis compared to &amp;quot;dynamic&amp;quot; where the banking is also proportional to it’s&lt;br /&gt;
velocity along it’s roll-axis. Finding the best value of the &amp;quot;mixture&amp;quot; will probably require trial and error.&lt;br /&gt;
&lt;br /&gt;
The time it takes for the banking behavior to defeat a pre-existing angular velocity about the world z-axis is&lt;br /&gt;
determined by the [[VEHICLE_BANKING_TIMESCALE]]. So if you want the vehicle to bank quickly then give it&lt;br /&gt;
a banking timescale of about a second or less, otherwise you can make a sluggish vehicle by giving it a timescale&lt;br /&gt;
of several seconds.&lt;br /&gt;
&lt;br /&gt;
==  Friction Timescales ==&lt;br /&gt;
&lt;br /&gt;
[[VEHICLE_LINEAR_FRICTION_TIMESCALE]] is a vector parameter that defines the timescales for the vehicle&lt;br /&gt;
to come to a complete stop along the three local axes of the vehicle’s reference frame. The timescale along each&lt;br /&gt;
axis is independent of the others. For example, a sliding ground car would probably have very little friction along&lt;br /&gt;
its x- and z-axes (so it can easily slide forward and fall down) while there would usually significant friction along&lt;br /&gt;
its y-axis:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
llSetVehicleVectorParam(VEHICLE_LINEAR_FRICTION_TIMESCALE, &amp;lt;1000, 1000, 3&amp;gt;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Remember that a longer timescale corresponds to a weaker friction, hence to effectively disable all linear friction&lt;br /&gt;
you would set all of the timescales to large values.&lt;br /&gt;
&lt;br /&gt;
Setting the linear friction as a scalar is allowed, and has the effect of setting all of the timescales to the same&lt;br /&gt;
value. Both code snippets below are equivalent, and both make friction negligible:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// set all linear friction timescales to 1000&lt;br /&gt;
llSetVehicleVectorParam(VEHICLE_LINEAR_FRICTION_TIMESCALE, &amp;lt;1000, 1000, 1000&amp;gt;);&lt;br /&gt;
// same as above, but fewer characters&lt;br /&gt;
llSetVehicleFloatParam(VEHICLE_LINEAR_FRICTION_TIMESCALE, 1000);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
/[[VEHICLE_ANGULAR_FRICTION_TIMESCALE]] is also a vector parameter that defines the timescales for the&lt;br /&gt;
vehicle to stop rotating about the x-, y-, and z-axes, and are set and disabled in the same way as the linear friction.&lt;br /&gt;
&lt;br /&gt;
==  Buoyancy ==&lt;br /&gt;
&lt;br /&gt;
The vehicle has a built-in buoyancy feature that is independent of the[[llSetBuoyancy]] call. It is recommended that&lt;br /&gt;
the two buoyancies do not mix! To make a vehicle buoyant, set the [[VEHICLE_BUOYANCY]] parameter to&lt;br /&gt;
something between 0.0 (no buoyancy whatsoever) to 1.0 (full anti-gravity).&lt;br /&gt;
&lt;br /&gt;
The buoyancy behavior is independent of hover, however in order for hover to work without a large offset of the&lt;br /&gt;
[[VEHICLE_HOVER_HEIGHT]], the [[VEHICLE_BUOYANCY]] should be set to 1.0.&lt;br /&gt;
&lt;br /&gt;
It is not recommended that you mix vehicle buoyancy with the[[llSetBuoyancy]] script call. It would probably&lt;br /&gt;
cause the object to fly up into space.&lt;br /&gt;
&lt;br /&gt;
==  Hover ==&lt;br /&gt;
&lt;br /&gt;
The hover behavior is enabled by setting the [[VEHICLE_HOVER_TIMESCALE]] to a value less than 300&lt;br /&gt;
seconds; larger timescales totally disable it. Most vehicles will work best with short hover timescales of a few&lt;br /&gt;
seconds or less. The shorter the timescale, the faster the vehicle will slave to is target height. Note, that if the&lt;br /&gt;
values of [[VEHICLE_LINEAR_FRICTION_TIMESCALE]] may affect the speed of the hover.&lt;br /&gt;
&lt;br /&gt;
Hover is independent of buoyancy, however the [[VEHICLE_BUOYANCY]] should be set to 1.0, otherwise the&lt;br /&gt;
vehicle will not lift itself off of the ground until the [[VEHICLE_HOVER_HEIGHT]] is made large enough to&lt;br /&gt;
counter the acceleration of gravity, and the vehicle will never float all the way to its target height.&lt;br /&gt;
&lt;br /&gt;
The [[VEHICLE_HOVER_EFFICIENCY]] can be thought of as a slider between bouncy (0.0) and smoothed (1.0).&lt;br /&gt;
&lt;br /&gt;
When in the bouncy range the vehicle will tend to hover a little lower than its target height and the&lt;br /&gt;
[[VEHICLE_HOVER_TIMESCALE]] will be approximately the oscillation period of the bounce (the real period&lt;br /&gt;
will tend to be a little longer than the timescale).&lt;br /&gt;
&lt;br /&gt;
For performance reasons, until improvements are made to the Second Life physics engine the vehicles can only&lt;br /&gt;
hover over the terrain and water, so they will not be able to hover above objects made out of primitives, such as&lt;br /&gt;
bridges and houses. By default the hover behavior will float over terrain and water, however this can be changed&lt;br /&gt;
by setting some flags:&lt;br /&gt;
&lt;br /&gt;
If you wanted to make a boat you should set the [[VEHICLE_HOVER_WATER_ONLY]] flag, or if you wanted to&lt;br /&gt;
drive a hover tank under water you would use the [[VEHICLE_HOVER_TERRAIN_ONLY]] flag instead. Finally,&lt;br /&gt;
if you wanted to make a submarine or a balloon you would use the [[VEHICLE_HOVER_GLOBAL_HEIGHT]].&lt;br /&gt;
&lt;br /&gt;
Note that the flags are independent of each other and that setting two contradictory flags will have undefined&lt;br /&gt;
behavor. The flags are set using the script call[[llSetVehicleFlags()]].&lt;br /&gt;
&lt;br /&gt;
The [[VEHICLE_HOVER_HEIGHT]] determines how high the vehicle will hover over the terrain and/or water, or&lt;br /&gt;
the global height, and has a maximum value of 100 meters. Note that for hovering purposes the &amp;quot;center&amp;quot; of the&lt;br /&gt;
vehicle is its &amp;quot;center of mass&amp;quot; which is not always obvious to the untrained eye, and it changes when avatar’s sit&lt;br /&gt;
on the vehicle.&lt;br /&gt;
&lt;br /&gt;
==  Reference Frame ==&lt;br /&gt;
&lt;br /&gt;
The vehicle relies on the x- (at), y- (left), and z- (up) axes in order to figure out which way it preferres to move&lt;br /&gt;
and which end is up. By default these axes are identical to the local axes of the root primitive of the object,&lt;br /&gt;
however this means that the vehicle’s root primitive must, by default, be oriented to agree with the designed at,&lt;br /&gt;
left, and up axes of the vehicle. But, what if the vehicle object was already pre-built with the root primitive in&lt;br /&gt;
some non-trivial orientation relative to where the vehicle as a whole should move? This is where the&lt;br /&gt;
&lt;br /&gt;
[[VEHICLE_REFERENCE_FRAME]] parameter becomes useful; the vehicle’s axes can be arbitrarily reoriented&lt;br /&gt;
by setting this parameter.&lt;br /&gt;
&lt;br /&gt;
As an example, suppose you had built a rocket out of a big cylinder, a cone for the nose, and some stretched cut&lt;br /&gt;
boxes for the fins, then linked them all together with the cylinder as the root primitive. Ideally the rocket would&lt;br /&gt;
move nose-first, however the cylinder’s axis of symmetry is its local z-axis while the default &amp;quot;at-axis&amp;quot; of the&lt;br /&gt;
vehicle, the axis it will want to deflect to forward under angular deflection, is the local x-axis and points out from&lt;br /&gt;
the curved surface of the cylinder. The script code below will rotate the vehicle’s axes such that the local z-axis&lt;br /&gt;
becomes the &amp;quot;at-axis&amp;quot; and the local negative x-axis becomes the &amp;quot;up-axis&amp;quot;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// rotate the vehicle frame -PI/2 about the local y-axis (left-axis)&lt;br /&gt;
rotation rot =llEuler2Rot(0, PI/2, 0);&lt;br /&gt;
llSetVehicleRotationParam(VEHICLE_REFERENCE_FRAME, rot);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Another example of how the reference frame parameter could be used is to consider flying craft that uses the&lt;br /&gt;
vertical attractor for stability during flying but wants to use VTOL (vertical takeoff and landing). During flight&lt;br /&gt;
the craft’s dorsal axis should point up, but during landing its nose-axis should be up. To land the vehicle: while&lt;br /&gt;
the vertical attractor is in effect, rotate the existing [[VEHICLE_REFERENCE_FRAME]] by +PI/2 about the&lt;br /&gt;
left-axis, then the vehicle will pitch up such that it’s nose points toward the sky. The vehicle could be allowed to&lt;br /&gt;
fall to the landing pad under friction, or a decreasing hover effect.&lt;br /&gt;
&lt;br /&gt;
{{LSLC|Vehicle|Tutorial}} {{LSLC|Tutorials|Vehicle}}&lt;/div&gt;</summary>
		<author><name>Blubb Dixon</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlGetInventoryKey&amp;diff=39827</id>
		<title>LlGetInventoryKey</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlGetInventoryKey&amp;diff=39827"/>
		<updated>2007-11-09T06:18:37Z</updated>

		<summary type="html">&lt;p&gt;Blubb Dixon: added link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function/inventory|name|uuid=false|type}}&lt;br /&gt;
{{LSL_Function&lt;br /&gt;
|func_id=175|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|func=llGetInventoryKey|return_type=key|p1_type=string|p1_name=name&lt;br /&gt;
|func_footnote=If &#039;&#039;&#039;item&#039;&#039;&#039; is not [[llGetInventoryPermMask|copy, mod, trans]] then the return is [[NULL_KEY]]&lt;br /&gt;
|func_desc&lt;br /&gt;
|sort=GetInventoryKey&lt;br /&gt;
|return_text=that is the [[UUID]] of the inventory &#039;&#039;&#039;name&#039;&#039;&#039;&lt;br /&gt;
|spec&lt;br /&gt;
|caveats&lt;br /&gt;
|constants&lt;br /&gt;
|examples&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llGetInventoryName]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llGetInventoryCreator]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llGetInventoryType]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llGetInventoryPermMask]]|}}&lt;br /&gt;
|also_events&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes&lt;br /&gt;
|cat1=Inventory&lt;br /&gt;
|cat2&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Blubb Dixon</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlGetInventoryName&amp;diff=39826</id>
		<title>LlGetInventoryName</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlGetInventoryName&amp;diff=39826"/>
		<updated>2007-11-09T06:15:59Z</updated>

		<summary type="html">&lt;p&gt;Blubb Dixon: sp&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Function/negative_index|false|number}}&lt;br /&gt;
{{LSL_Function&lt;br /&gt;
|func_id=147|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|func=llGetInventoryName|return_type=string&lt;br /&gt;
|p1_type=integer|p1_name=type|p1_desc=INVENTORY_* flag&lt;br /&gt;
|p2_type=integer|p2_name=number&lt;br /&gt;
|func_footnote&lt;br /&gt;
|func_desc&lt;br /&gt;
|return_text=that is the name of the inventory item &#039;&#039;&#039;number&#039;&#039;&#039; of &#039;&#039;&#039;type&#039;&#039;&#039;. Returns an empty string if no item of the specified type is found in the prim&#039;s inventory.&lt;br /&gt;
|spec&lt;br /&gt;
|caveats&lt;br /&gt;
|constants={{LSL Constants Inventory}}&lt;br /&gt;
|examples======Will Unpack all items of a box=====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// script created by SpiritWolf Chikuwa&lt;br /&gt;
// minor changes by Strife Onizuka to speed things up&lt;br /&gt;
//&lt;br /&gt;
// /!\ PUBLIC DOMAIN /!\&lt;br /&gt;
// You can Copy/Mod/Trans &lt;br /&gt;
// Please, do not resell this script and give it full perm&lt;br /&gt;
// Just please leave this header intact&lt;br /&gt;
//&lt;br /&gt;
// Minor changes: (insert your name here and delete this comment if you do any mod of this script, thank you)&lt;br /&gt;
//&lt;br /&gt;
// Script start here:&lt;br /&gt;
&lt;br /&gt;
list    gInventoryList;&lt;br /&gt;
&lt;br /&gt;
list getInventoryList()&lt;br /&gt;
{&lt;br /&gt;
    list       result = [];&lt;br /&gt;
    integer    n = llGetInventoryNumber(INVENTORY_ALL);&lt;br /&gt;
    integer    i = 0;&lt;br /&gt;
&lt;br /&gt;
    while(i &amp;lt; n)&lt;br /&gt;
    {&lt;br /&gt;
        result += llGetInventoryName(INVENTORY_ALL, i);&lt;br /&gt;
        ++i;&lt;br /&gt;
    }&lt;br /&gt;
    return result;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        gInventoryList = getInventoryList();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    touch_start( integer n )&lt;br /&gt;
    {&lt;br /&gt;
        integer i = 0;&lt;br /&gt;
        string folder = llGetObjectName();&lt;br /&gt;
&lt;br /&gt;
        while(i &amp;lt; n)&lt;br /&gt;
        {&lt;br /&gt;
            llGiveInventoryList(llDetectedKey(i), folder, gInventoryList );&lt;br /&gt;
            ++i;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    changed( integer change )&lt;br /&gt;
    {&lt;br /&gt;
       if ( change == CHANGED_INVENTORY )&lt;br /&gt;
           gInventoryList = getInventoryList();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// llGetInventory number and name will scan all objects on the box.&lt;br /&gt;
// llGiveInventory will give you the content.&lt;br /&gt;
// See also llGetInventory and llGiveInventory on LSL Wiki for further informations.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llGetInventoryNumber]]|Returns the number of items of a specific type in inventory}}&lt;br /&gt;
{{LSL DefineRow||[[llGetInventoryType]]|Tests to see if an inventory item exists and returns its type.}}&lt;br /&gt;
{{LSL DefineRow||[[llGetInventoryCreator]]|Returns the inventory item&#039;s creator}}&lt;br /&gt;
{{LSL DefineRow||[[llGetInventoryPermMask]]|Returns the inventory item&#039;s permissions}}&lt;br /&gt;
{{LSL DefineRow||[[llGetInventoryKey]]|Returns the inventory item&#039;s [[UUID]] (if full perm)}}&lt;br /&gt;
|also_events&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes&lt;br /&gt;
|permission&lt;br /&gt;
|sort=GetInventoryName&lt;br /&gt;
|cat1=Inventory&lt;br /&gt;
|cat2&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Blubb Dixon</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Sculpted_Prims:_3d_Software_Guide&amp;diff=34854</id>
		<title>Sculpted Prims: 3d Software Guide</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Sculpted_Prims:_3d_Software_Guide&amp;diff=34854"/>
		<updated>2007-10-09T13:30:12Z</updated>

		<summary type="html">&lt;p&gt;Blubb Dixon: sp&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;(Want to help out with this page?  Check out the [[Talk:Sculpted_Prims:_3d_Software_Guide#ToDo | To-do list]].)&#039;&#039;&lt;br /&gt;
= About 3D Modeling Software =&lt;br /&gt;
&lt;br /&gt;
This page offers a list of 3D modeling software for use with Sculpt Maps for [[Sculpted Prims]], along with a short explanation of popular 3D file formats. Each entry lists the software package&#039;s web site, operating system support, cost and trial versions if applicable, and the license.&lt;br /&gt;
&lt;br /&gt;
Note: Resident-made sculpt map tools and offline previewers [[Sculpted Prims: Resident-made Tools|now have their own page]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;What Features are important for making Sculpted Prims?&lt;br /&gt;
&lt;br /&gt;
Each software entry includes a rundown of features that are particularly useful for creating sculpt maps. Although support for these features isn&#039;t necessary in order to create sculpt maps, it can make the process a whole lot easier.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;User Scripting:&#039;&#039;&#039; A script interface is one of the easiest and fastest ways to add functionality to a program or to automate tasks the program is already capable of. Plugins and SDKs can do the same thing but may not be available.&lt;br /&gt;
*&#039;&#039;&#039;Built-in texture baking/generation:&#039;&#039;&#039; This term describes the ability to create/&amp;quot;render&amp;quot; textures and export them to image files. If this functionality is built into the software, it is available to user-generated scripts. For example, it allows manual export of sculpt maps with [[#Blender|Blender]] and [[#Lightwave_.28Newtek.29|Lightwave]].  It can also make it easier to create regular textures for your model; you can apply colors, patterns or just a template guide to your model and bake it out for upload or further detailing in a paint program.&lt;br /&gt;
*&#039;&#039;&#039;Modeling Methods:&#039;&#039;&#039; Over the years a variety of different 3d modeling techniques have emerged, each having various strengths and weaknesses.  They include:&lt;br /&gt;
** Polygon modeling: The most mature method and the choice output for most games and realtime rendering in which you directly manipulate the faces, edges and vertices of an object.&lt;br /&gt;
** NURBS: NURBS modeling uses series of curved splines to define the shape of an object and are excellent for smooth organic shapes. The methodology behind sculpted prims are very largely based on them.&lt;br /&gt;
** Subdivision Surface: Subdivision modeling shares some of the advantages of both NURBS and polygon modeling: the shape is manipulated using sets of control points that allow for both smooth surfaces and precise details.&lt;br /&gt;
** Brush Sculpting:  With this method, you use your mouse or pen tablet and a series of adjustable brushes to literally sculpt on the 3d surface like clay. Many programs such as Blender and 3ds Max offer this function in a limited sense to help with precision detailing but not to the extent of programs built with this method as their focus, such as zBrush.&lt;br /&gt;
&lt;br /&gt;
Which you use will ultimately come down to personal preference and what your exporter will handle best.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Do I need a really powerful computer to run this stuff?&lt;br /&gt;
&lt;br /&gt;
For most Second Life users, this shouldn&#039;t be a major issue.  If your computer is capable of running the Second Life client, you should have no trouble running most of these programs. Some programs will run fine on something as old as a Pentium III. A few professional programs (like Maya) say they&#039;ll only support high-end workstation graphics cards but it will still run ok on a regular setup. Check the system requirements on the software vendor&#039;s webpage for specific details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;What program(s) are the best for making sculpties?&lt;br /&gt;
&lt;br /&gt;
There&#039;s no easy answer to that question. It will depend on a number of factors:&lt;br /&gt;
* &#039;&#039;&#039;How much money are you willing to spend?&#039;&#039;&#039; The cost of 3d software ranges from &amp;quot;free&amp;quot; to thousands of dollars. Programs like Maya and 3ds Max are powerful but if you&#039;re not already seriously into 3d modeling, they&#039;re probably overkill. Lightwave, zBrush and programs in their price range are powerful professional tools while still being within reach of a reasonably well-to-do person who&#039;s dedicated to their SL design work, but these are probably still overkill as most of the features you pay for gone beyond the general tools to create sculpt maps for Second Life. Programs like Amorphium, trueSpace and Milkshape are aimed at professionals and casual hobbyists but not all of them are going to have the full 3D studio capabilities of some more expensive programs. Free programs run the gamut between the pro and hobby levels and you&#039;ll have to consider other factors when choosing between them.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;How much time are you willing to invest?&#039;&#039;&#039;  If you want to just make a few sculpted objects, a simple standalone utility like Rokuro might suit you best. If you&#039;re a serious content creator though, you&#039;ll want to put the time and effort into learning a more complex program.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;How much prior experience do you have?&#039;&#039;&#039; If you&#039;ve been working with 3d software for a while already, you probably already know what you like or will have an easier time picking up a new and/or more complicated program. If you&#039;re a brand newbie to modeling, it&#039;s probably a mistake to jump right into a program like Blender or Maya with their steep learning curves. The availability of general modeling tutorials and other resources (not just SL-related ones) will probably affect your choice as well. &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;I&#039;m a newbie to all this.  What should I start with?&lt;br /&gt;
Probably not with anything expensive...&#039;&#039;unless&#039;&#039; you&#039;re a university student at a school with a good computer art program where you can take advantage of their resources. If you&#039;re very serious about learning the tools the pros use you might also seek out such a program, either online or in a classroom.&lt;br /&gt;
&lt;br /&gt;
If you just want to dive in to making sculpties then there are a couple front runners for your attention.  (Please note that these are opinions and may not reflect everyone&#039;s.)  If you have to go the free route, Wings 3d is probably your best bet: the exporter has some hard limitations and the interface isn&#039;t necessarily friendly but it&#039;s loads easier than the other main free option, Blender.  Once you get the hang of it you can make sculpties fairly quickly.&lt;br /&gt;
&lt;br /&gt;
If you want free and simple, try out the Rokuro and Tokoroten sculpt making tools. You&#039;ll be limited in the shapes you can produce but they require no 3d experience and you can turn out some good sculpties in a little as ten minutes. The Wings plugin can also import these sculpt maps where you can tweak them further.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re willing to spend some money (under $100), AC3D is a good place to start. The interface is nicer than that of Wings and Zora Spoonhamer&#039;s exporter allows you to take good advantage of program features that the Wings exporter doesn&#039;t; full subdivision capabilities, cutting and extrusion of faces, etc.&lt;br /&gt;
&lt;br /&gt;
That said, the best way to decide what program you should use is to start downloading their demos and trying them to find what you like.&lt;br /&gt;
&lt;br /&gt;
= Adding Programs to This List =&lt;br /&gt;
The hobby market for 3d software is currently growing rapidly: as a result there are dozens of software packages in the wild, many undiscovered or not well known.  If a new program is discovered and proven by means of it being listed here, great, but it&#039;s not within the scope of this list to name them all, else the most usefull ones would get burried and the page would become a confusing mess.&lt;br /&gt;
&lt;br /&gt;
A couple things to consider:&lt;br /&gt;
* Popularity: This may seem contrary to the &amp;quot;discovering new programs&amp;quot; bit above, but it&#039;s impossible to ignore the impact popularity has on a program: it means there&#039;s a community of users that can offer support to newbies and it increases the liklyhood that someone will develop sculpt map support for it.&lt;br /&gt;
* Features: If it doesn&#039;t allready have sculpt map support, does it have the features that will make it likely able to support sculpt maps?  Certian well known programs like Sketchup and Milkshape have been put in the &amp;quot;Other&amp;quot; category because people will ask about them but the chance of sculpt map support being developed for them seems slim because of their feature sets.  If that turns out to be an incorrect assumption then they&#039;ll certianly be moved up.  A file converter like 3dm2sculpt or one of various object to sculpty programs is better than nothing but as such programs are in varrying stages of being beta and/or experimental (and often may not work), being able to save to a convertable file format shouldn&#039;t be the only thing to consider.  Other things to keep in mind: is the interface useable?  Does the program run without frequently crashing?&lt;br /&gt;
&lt;br /&gt;
With those in mind, if you&#039;re adding a program, follow the format used in the rest of the entries (they differ slightly between the free and commercial packages) and be sure to fill in as much information as you can; this will usualy take a little research.  If you&#039;ve used the program, you&#039;re encouraged to include your insights and experiences in the short decription blurb (you don&#039;t need more than a short paragraph).  Tutorials, documentation and the like should be linked seperately under the Resources section.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Special Purpose Sculpted Prim Tools = &lt;br /&gt;
&lt;br /&gt;
The resident-made sculpt tools such as Rokuro, SnurbO&#039;Matic and the preview tools now have their own page: [[Sculpted Prims: Resident-made Tools]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Free 3D Modeling Software =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Art of Illusion ===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Website:&#039;&#039;&#039; [http://www.artofillusion.org artofillusion.org]&lt;br /&gt;
*&#039;&#039;&#039;License:&#039;&#039;&#039; [http://www.gnu.org/licenses/gpl.html GPL]&lt;br /&gt;
*&#039;&#039;&#039;Operating Systems:&#039;&#039;&#039; Any OS that will run Java (requires Java Runtime Environment 1.4 or later)&lt;br /&gt;
*&#039;&#039;&#039;User Scripting?&#039;&#039;&#039; Yes, Java via [http://www.beanshell.org/ Beanshell]&lt;br /&gt;
*&#039;&#039;&#039;Modeling Methods:&#039;&#039;&#039; Polygon, NURBS&lt;br /&gt;
*&#039;&#039;&#039;Built-in Texture Baking?&#039;&#039;&#039; ???&lt;br /&gt;
*&#039;&#039;&#039;Current Sculpt Map Support?:&#039;&#039;&#039; No, although it is possible to save as a .obj file and then convert it to a sculpt image.&lt;br /&gt;
&lt;br /&gt;
A number of Residents have recommended this program. If you&#039;re familiar with it, please give the rest of us a summary!&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Warning:&#039;&#039;&#039; I have a reported &#039;&#039;&#039;Malware/Virus&#039;&#039;&#039; that came from Art Of Illusion. It infected a few of my files!  &#039;&#039;-Caboose Enfield&#039;&#039;&lt;br /&gt;
[NOTE:  chances are it was either downloaded from a shady site or was a false positive. More details are needed!]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Resources&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*[http://www.artofillusion.org/documentation AoI Documentation]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Blender ===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Website:&#039;&#039;&#039; [http://www.blender.org blender.org]&lt;br /&gt;
*&#039;&#039;&#039;License:&#039;&#039;&#039; [http://www.gnu.org/licenses/gpl.html GPL]&lt;br /&gt;
*&#039;&#039;&#039;Operating Systems&#039;&#039;&#039;: Cross-platform (Windows, Mac, Linux, Irix, Solaris, FreeBSD and others)&lt;br /&gt;
*&#039;&#039;&#039;User Scripting?&#039;&#039;&#039; Yes, Python&lt;br /&gt;
*&#039;&#039;&#039;Modeling Methods:&#039;&#039;&#039; Polygon, NURBS, Subdivision, Basic Brush Sculpting&lt;br /&gt;
*&#039;&#039;&#039;Built-in Texture Baking?&#039;&#039;&#039; Yes&lt;br /&gt;
*&#039;&#039;&#039;Current Sculpt Map Support?:&#039;&#039;&#039; Yes.  Documented [http://amandalevitsky.googlepages.com/sculptedprims here], and [http://www.bentha.net/sculpted2/Blender-to-sculpted.html here]&lt;br /&gt;
&lt;br /&gt;
Formerly a company&#039;s in-house tool, Blender is the current king of the open source modeling programs.  With all the features of the expensive programs, an active development community and even some existing SL-based tools made by Residents, this is going to be the default choice for many people.  Downsides: Blender&#039;s interface is not newbie-friendly.  That combined with spotty documentation can make for a slow learning curve.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Resources&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [http://forums.secondlife.com/showthread.php?t=203571 Blender Sculptie Import &amp;amp; Export scripts]&lt;br /&gt;
* [http://www.blender.org/tutorials-help/ Blender.org Documentation and Tutorials]&lt;br /&gt;
* [http://en.wikibooks.org/wiki/Blender_3D:_Noob_to_Pro Blender 3D: Noob to Pro] - on [http://en.wikibooks.org/wiki/Main_Page Wikibooks], It&#039;s a great step-by-step tutorial that contains substantial content, is well-formatted, and has screen shots. &lt;br /&gt;
* [http://amandalevitsky.googlepages.com/sculptedprims How to Make Sculpted Prims with Blender]&lt;br /&gt;
*[http://www.bentha.net/sculpted-tuto/Blender-export-template-tut.html A template file to start with and export easy]&lt;br /&gt;
*[http://blendernewbies.blogspot.com/2007/04/video-oven-baked-pretzels-in-blender-3d.html Oven Baked Pretzels @ BlenderNewbies.com] - A video tutorial that covers the basics of Blender&#039;s new sculpt mode, useful if you&#039;re creating sculpties using the above manual method.&lt;br /&gt;
*[http://www.bentha.net/sculpted2/Blender-to-sculpted.html An almost complete method] to export almost anything from blender&lt;br /&gt;
*[http://iramblesorry.blogspot.com/2007/05/how-i-learned-to-stop-worrying-and-love_28.html Another great tutorial] on using blender for sculpts&lt;br /&gt;
*[http://forums.secondlife.com/showthread.php?t=110607 Offline Prim Builder] for standard prims (restricted access)&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Moment of Inspiration ===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Website:&#039;&#039;&#039; [http://moi3d.com/ Moment of Inspiration]&lt;br /&gt;
*&#039;&#039;&#039;License:&#039;&#039;&#039; Open beta testing/freeware&lt;br /&gt;
*&#039;&#039;&#039;Operating Systems:&#039;&#039;&#039; Windows 2000/XP/Vista&lt;br /&gt;
*&#039;&#039;&#039;User Scripting?&#039;&#039;&#039; ?&lt;br /&gt;
*&#039;&#039;&#039;Modeling Methods:&#039;&#039;&#039; NURBS, Polygon (Import/Export Only)&lt;br /&gt;
*&#039;&#039;&#039;Built-in Texture Baking?&#039;&#039;&#039; ?&lt;br /&gt;
*&#039;&#039;&#039;Current Sculpt Map Support?:&#039;&#039;&#039; Yes, try [[3dm2sculpt]]&lt;br /&gt;
&lt;br /&gt;
This program has some cool things going for it.  It&#039;s the work of a former [[#Rhino_3D | Rhino]] developer and has an interface that pretty much lets you draw shapes with the mouse or a pen tablet.  Documentation on the website is sparse however and being in beta means there will be kinks.&lt;br /&gt;
&lt;br /&gt;
It should be noted that MoI will become a commercial product when it leaves beta testing (expected later this summer), but it will still be comparatively inexpensive; the estimated cost is between US$200-$100.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Resources&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [http://moi3d.com/forum/ Moment of Inspiration Forums]&lt;br /&gt;
* [http://mefeedia.com/tags/momentofinspiration/ Video Tutorials]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Plopp===&lt;br /&gt;
[[Image:Plopp example.jpg|thumb|250 px| A SLork sculpted in Plopp]]&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Website:&#039;&#039;&#039; [http://www.secondplopp.com/ Plopp Second Life]&lt;br /&gt;
*&#039;&#039;&#039;License:&#039;&#039;&#039; Donationware/Commercial&lt;br /&gt;
*&#039;&#039;&#039;Operating Systems:&#039;&#039;&#039;Windows, Mac, Linux&lt;br /&gt;
*&#039;&#039;&#039;User Scripting?&#039;&#039;&#039; No (N/A)&lt;br /&gt;
*&#039;&#039;&#039;Modeling Methods:&#039;&#039;&#039; 2d painting&lt;br /&gt;
*&#039;&#039;&#039;Built-in Texture Baking?&#039;&#039;&#039; Yes&lt;br /&gt;
*&#039;&#039;&#039;Current Sculpt Map Support?:&#039;&#039;&#039; Yes&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Plopp&#039;&#039; is a cute 3D modeling tool designed for little kids.  The makers of Plopp have now put out a free version for SL users (the full program can be bought for US$19.50).  &lt;br /&gt;
&lt;br /&gt;
Imagine one of those new mylar balloons.  You paint the one side with an image, and then paint the other side with an image represetning the other side.  Plopp then blows up the balloon and shades it.  You can also import graphics from other tools (Photoshop, a scanned drawing, etc.), make a &amp;quot;cutout&amp;quot; with the eraser and inflate that.  You can play a little with the lighting and with rotations.  The Plopp drawing tools are very basic but keep in mind, this is for little children.  Then it bakes the texture and exports the texture and the sculpt map (128x128).&lt;br /&gt;
&lt;br /&gt;
Even if you don&#039;t use this for Second Life, you might like to get it for your kids...or inner child.  It just looks like a lot of fun.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Resources&#039;&#039;&#039;&lt;br /&gt;
*[http://www.planet-plopp.com/biggerkids/tips.html Plopp Tips] - Video tutorials and neat tricks from the Plopp website&lt;br /&gt;
&lt;br /&gt;
=== Wings 3D ===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Website:&#039;&#039;&#039; [http://www.wings3d.com Wings 3D]&lt;br /&gt;
*&#039;&#039;&#039;License:&#039;&#039;&#039;[http://www.opensource.org/licenses/bsd-license.html BSD license]&lt;br /&gt;
*&#039;&#039;&#039;Get Started:&#039;&#039;&#039;[[Wings 3D|Second Life Wings 3D guide]]&lt;br /&gt;
*&#039;&#039;&#039;Operating Systems:&#039;&#039;&#039; Windows, Mac OS X, Linux (binaries), other Unixes (source only)&lt;br /&gt;
*&#039;&#039;&#039;User Scripting?&#039;&#039;&#039; Plugin interface using a language called  Erlang&lt;br /&gt;
*&#039;&#039;&#039;Modeling Methods:&#039;&#039;&#039; Polygon, Subdivision&lt;br /&gt;
*&#039;&#039;&#039;Built-in Texture Baking?&#039;&#039;&#039; Not sure&lt;br /&gt;
*&#039;&#039;&#039;Current Sculpt Map Support?:&#039;&#039;&#039; Yes.   &lt;br /&gt;
&lt;br /&gt;
Wings3D is a [http://en.wikipedia.org/wiki/Subdivision_surface subdivision modeler] that is easy to learn and is well suited to making sculpted prims.  The sculpt import and export for Wings is easy to use.  Detailed documentation is sparse, but there are several Second Life tutorials in this Wiki and on the Web.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Resources&#039;&#039;&#039;&lt;br /&gt;
* See the [[Wings 3D|Second Life Wings 3D guide]].&lt;br /&gt;
* Get the [[Omei Turnbull]] [http://forums.secondlife.com/showthread.php?t=183764  import/export plugin here.]&lt;br /&gt;
* Get the  [[user:Strife Onizuka|Strife Onizuka]]  [http://forums.secondlife.com/attachment.php?attachmentid=25721 import/export plugin here]. &lt;br /&gt;
*Get the [http://sourceforge.net/project/downloading.php?groupname=wings&amp;amp;filename=wings3d_manual1.6.1.pdf&amp;amp;use_mirror=internap Wings 3D User Manual] here. (Sourceforge, pdf)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== POV-Ray ===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Website:&#039;&#039;&#039; http://povray.org&lt;br /&gt;
*&#039;&#039;&#039;Cost:&#039;&#039;&#039; FREE&lt;br /&gt;
*&#039;&#039;&#039;Operating Systems:&#039;&#039;&#039; Windows/Linux/Mac&lt;br /&gt;
*&#039;&#039;&#039;Trial version available?&#039;&#039;&#039; &lt;br /&gt;
*&#039;&#039;&#039;User Scripting?&#039;&#039;&#039; &lt;br /&gt;
*&#039;&#039;&#039;Modeling Methods:&#039;&#039;&#039; N/A&lt;br /&gt;
*&#039;&#039;&#039;Built-in Texture Baking/generation?&#039;&#039;&#039; Yes&lt;br /&gt;
*&#039;&#039;&#039;Current Sculpt Map Support:&#039;&#039;&#039; Yes.  Instructions are here: http://johannahyacinth.blogspot.com/2007/05/sculpted-prims-with-pov-ray.html&lt;br /&gt;
&lt;br /&gt;
POV-Ray is a renderer - you have to do all your modeling in another application, or by describing in plain text the mathematical shapes which make up the model.  It may seem an odd inclusion in this part of the list but merits mentioning up here instead of burried at the bottom with the &amp;quot;Other&amp;quot; section because it actualy can produce sculpt maps.  Some other programs like AC3D (below) can also call on POV-Ray for texture baking.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Commercial 3D Suites =&lt;br /&gt;
&lt;br /&gt;
It has to be said: most professional 3D software is (understandably) expensive, anywhere from hundreds to many thousands of dollars for a single copy. They&#039;re marketed at big professional studios with thousands or millions of dollars to budget for this stuff. There are ways to [[3D software cost savings|reduce this expense]] so that it&#039;s within the reach of an average person: some legal, some not.&lt;br /&gt;
&lt;br /&gt;
== Under $200 ==&lt;br /&gt;
&lt;br /&gt;
=== Amorphium (Electric Image)===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Website:&#039;&#039;&#039; [http://www.eitechnologygroup.com/products/amorphium Electric Image Amorphium]&lt;br /&gt;
*&#039;&#039;&#039;Cost:&#039;&#039;&#039; US$79 (&amp;quot;Standard&amp;quot;)&lt;br /&gt;
*&#039;&#039;&#039;Operating Systems:&#039;&#039;&#039; Windows, Mac (UB) - trial is Mac OS X 10.0 - 10.3 only&lt;br /&gt;
*&#039;&#039;&#039;Trial version available?:&#039;&#039;&#039; Yes&lt;br /&gt;
*&#039;&#039;&#039;User Scripting?&#039;&#039;&#039; Yes&lt;br /&gt;
*&#039;&#039;&#039;Modeling Methods:&#039;&#039;&#039; Brush Sculpting, NURBS, Polygon&lt;br /&gt;
*&#039;&#039;&#039;Built-in Texture Baking?&#039;&#039;&#039; Yes (paint on, further controllable with sensitive pen-tablet)&lt;br /&gt;
*&#039;&#039;&#039;Current Sculpt Map Support?:&#039;&#039;&#039; No (export to a format Blender knows, or to OBJ, and use a converter, can start with the 64x63 sphere made by Wings3D)&lt;br /&gt;
&lt;br /&gt;
Sculpting is what Amorphium is all about. If you have a pen tablet (even a tablet PC), the pressure sensitivity will control the pressure applied to the current brush to morph the sculpture. It gives a very natural feel to being able to sculpt 3d models easily and intuitively. Amorphium has won 14 awards including &amp;quot;Best Graphics Software&amp;quot; from magazines like Computer Graphics World, PC World, and Macworld for its breakthrough real-time approach to creating 3D graphics.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Resources&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [http://forums.secondlife.com/showthread.php?t=186218 Sculpted Prim Modeler: Amorphium] on sl forums (restricted access)&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== AC3D (invis) ===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Website:&#039;&#039;&#039; [http://www.inivis.com/ www.invis.com - AC3D]&lt;br /&gt;
*&#039;&#039;&#039;Cost:&#039;&#039;&#039; US$75&lt;br /&gt;
*&#039;&#039;&#039;Operating Systems:&#039;&#039;&#039; Windows, Mac OSX 10.4 or later, Linux (x86 only)&lt;br /&gt;
*&#039;&#039;&#039;Trial version available?:&#039;&#039;&#039; Yes - 14 day trial&lt;br /&gt;
*&#039;&#039;&#039;User Scripting?&#039;&#039;&#039; Plugin Interface available, plus TCL-based scripting&lt;br /&gt;
*&#039;&#039;&#039;Modeling Methods:&#039;&#039;&#039; Polygon, Subdivision&lt;br /&gt;
*&#039;&#039;&#039;Built-in Texture Baking?&#039;&#039;&#039; No (But can be accomplished via 3rd party plug-ins or POV-Ray)&lt;br /&gt;
*&#039;&#039;&#039;Current Sculpt Map Support?:&#039;&#039;&#039; Yes: [http://www.inivis.com/secondlife.html Export plug-in for Windows, Mac and Linux], [http://www.ccccybernetics.com/ developed by Zora Spoonhammer]&lt;br /&gt;
&lt;br /&gt;
AC3D is an inexpensive polygon modeler with SubD support designed to be easy for novice users. The sculpt map plug-in will export any model that has a perfect uv space. Several pre-mapped starter shapes are included with the plug-in, including a cube that can be used as basis for complex objects by artists familiar with the popular box modeling method using sub-division surfaces.  Invis recently gave their official blessing (as well as hosting) to the plugin, making them the first vendor of this kind of software to put their backing into sculpy development.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Resources &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*[http://www.youtube.com/watch?v=Y8RC5aJuWks 5-minute video tutorial on creating a pear]&lt;br /&gt;
*[http://www.independentdeveloper.com/archive/2007/09/27/sculpted_prims_from_existing_3  Sculpted Prims from Existing 3D Models] in AC3D. A step-by-step guide using an existing 3-D model of a fish.&lt;br /&gt;
*[http://www.supercoldmilk.com/ac3dplug/index.html AC3D Plugins @ Super Cold Milk] - several invaluable free plugins can be found here, including the knife tool used in the pear tutorial&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Silo (Nevercenter) ===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Website:&#039;&#039;&#039; [http://www.nevercenter.com/ Nevercenter - Silo]&lt;br /&gt;
*&#039;&#039;&#039;Cost:&#039;&#039;&#039; US$159, US$59 (upgrade), edu licensing on request&lt;br /&gt;
*&#039;&#039;&#039;Operating Systems:&#039;&#039;&#039; Windows 2000 or later, Mac OSX 10.3 or later&lt;br /&gt;
*&#039;&#039;&#039;Trial version available?:&#039;&#039;&#039; Yes - 30 day trial&lt;br /&gt;
*&#039;&#039;&#039;User Scripting?&#039;&#039;&#039; -?-&lt;br /&gt;
*&#039;&#039;&#039;Modeling Methods:&#039;&#039;&#039; Polygon, Subdivision&lt;br /&gt;
*&#039;&#039;&#039;Built-in Texture Baking?&#039;&#039;&#039; -?-&lt;br /&gt;
*&#039;&#039;&#039;Current Sculpt Map Support?:&#039;&#039;&#039; -?-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Resources&#039;&#039;&#039;&lt;br /&gt;
* [http://www.nevercenter.com/about/features/ Silo Features] and [http://www.nevercenter.com/about/videos/ how-to videos]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== $200 - $999 ==&lt;br /&gt;
&lt;br /&gt;
=== Zbrush (Pixologic) ===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Website:&#039;&#039;&#039; [http://www.pixologic.com/zbrush/products/products.php Pixologic :: Zbrush]&lt;br /&gt;
*&#039;&#039;&#039;Cost:&#039;&#039;&#039; US$489&lt;br /&gt;
*&#039;&#039;&#039;Operating Systems:&#039;&#039;&#039; Windows 98/2000/ZP, Mac OS X&lt;br /&gt;
*&#039;&#039;&#039;Trial version available?:&#039;&#039;&#039; No&lt;br /&gt;
*&#039;&#039;&#039;User Scripting?&#039;&#039;&#039; Yes, Zscripting&lt;br /&gt;
*&#039;&#039;&#039;Modeling Methods:&#039;&#039;&#039; Brush Sculpting, &amp;quot;ZSphere&amp;quot; modeling, Polygon (Import/Export)&lt;br /&gt;
*&#039;&#039;&#039;Built-in Texture Baking?&#039;&#039;&#039; Yes&lt;br /&gt;
*&#039;&#039;&#039;Current Sculpt Map Support?:&#039;&#039;&#039; No, future support is planned by Linden Lab (but note to resident developers: this one is in high demand).&lt;br /&gt;
&lt;br /&gt;
Zbrush pretty new and a bit unique.  It&#039;s a 3d painting and sculpting tool; instead of manipulating polys or curves, you select a brush and literally &#039;&#039;paint&#039;&#039; and chisel and mold...the best way to grasp it is to download the demo and play with it.  It&#039;s pretty sweet: a ton of studios such as [http://www.epicgames.com/ Epic Games] use it to create the details for their normal maps and some SL designers are already using it for the 3d painting capabilities.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Resources&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [http://www.pixologic.com/zbrush/education/documentation/guides.php Zbrush Documentation]&lt;br /&gt;
* [http://www.zbrushcentral.com/zbc/index.php ZbrushCentral - Official Forums and Online Community]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Lightwave (Newtek)===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Website:&#039;&#039;&#039; [http://www.newtek.com/lightwave/ Lightwave]&lt;br /&gt;
*&#039;&#039;&#039;Cost:&#039;&#039;&#039; US$895, US$495 as a companion upgrade for Photoshop&lt;br /&gt;
*&#039;&#039;&#039;Operating Systems:&#039;&#039;&#039; Windows XP, Mac OS X 10.3.9 or higher&lt;br /&gt;
*&#039;&#039;&#039;Trial version available?:&#039;&#039;&#039; Yes, 30 day time limit, currently only available with a couple books&lt;br /&gt;
*&#039;&#039;&#039;User Scripting?&#039;&#039;&#039; Yes, LScript&lt;br /&gt;
*&#039;&#039;&#039;Modeling Methods:&#039;&#039;&#039; Polygon, NURBS with LWCAD 2.1 add-on (costs extra)&lt;br /&gt;
*&#039;&#039;&#039;Built-in Texture Baking?&#039;&#039;&#039; Yes&lt;br /&gt;
*&#039;&#039;&#039;Current Sculpt Map Support?:&#039;&#039;&#039; Yes, manual method instructions here: [[User:Patchouli_Woollahra/Lightwave_Sculptie_Rendering]] (works with any version of Lightwave of at least version 6) or use the DStorm plugin provided [[http://www.dstorm.co.jp/english/plugin/secondlife.htm]] at DStorm (LW9+ only)&lt;br /&gt;
&lt;br /&gt;
Some high-profile Second Life designers have been using Lightwave for quite a while to burn realistic highlights and shadows onto their skins and clothing textures.  Therefore it&#039;s not a big surprise that after Blender, this was the second program that community members figured out a sculpt export method for.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Resources&#039;&#039;&#039;&lt;br /&gt;
*[http://www.robinwood.com/Catalog/Technical/LightwaveTuts/LWTutSet.html Lightwave Tutorials] by Robin Wood, a.k.a. SL&#039;s [https://wiki.secondlife.com/wiki/User:Robin_Sojourner Robin Sojourner].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Rhinoceros (McNeel) ===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Website:&#039;&#039;&#039; [http://www.rhino3d.com Rhino 3D]&lt;br /&gt;
*&#039;&#039;&#039;Cost:&#039;&#039;&#039; US$995&lt;br /&gt;
*&#039;&#039;&#039;Operating Systems:&#039;&#039;&#039; Windows 2000/XP/Vista (Vista not recommended due to OpenGL issues)&lt;br /&gt;
*&#039;&#039;&#039;Trial version available?:&#039;&#039;&#039; Yes, save count limited&lt;br /&gt;
*&#039;&#039;&#039;User Scripting?&#039;&#039;&#039; Yes, VBScript&lt;br /&gt;
*&#039;&#039;&#039;Modeling Methods:&#039;&#039;&#039; NURBS, Polygon (limited)&lt;br /&gt;
*&#039;&#039;&#039;Built-in Texture Baking?&#039;&#039;&#039; No&lt;br /&gt;
*&#039;&#039;&#039;Current Sculpt Map Support?:&#039;&#039;&#039; please try [[3dm2sculpt]] (not tested with Rhino yet)&lt;br /&gt;
&lt;br /&gt;
Rhino is built from the ground up for NURBS modeling; thus if you intend to use NURBS, this isn&#039;t such a bad option.  From this author&#039;s brief trial with it, it handles certain operations (like joining 2 or more objects) somewhat more intelligently than 3ds Max.  A couple UI tricks make it easier to learn than the sea of buttons you&#039;re initially presented with: a help window to one side explains each operation as you select it and the command line at the top effectively lets you search for a function by typing in its name, without having to know where the button or menu option is.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Resources&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== trueSpace (Caligari) ===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Website:&#039;&#039;&#039; [http://www.caligari.com Caligari]&lt;br /&gt;
*&#039;&#039;&#039;Cost:&#039;&#039;&#039; US$595 for latest version (7), but legacy versions are sold for lower prices ($199 for TrueSpace 5)&lt;br /&gt;
*&#039;&#039;&#039;Operating Systems:&#039;&#039;&#039; Windows XP/Vista&lt;br /&gt;
*&#039;&#039;&#039;Trial version available?:&#039;&#039;&#039; Yes, prior version of the program &lt;br /&gt;
*&#039;&#039;&#039;User Scripting?&#039;&#039;&#039; Yes&lt;br /&gt;
*&#039;&#039;&#039;Modeling Methods:&#039;&#039;&#039; Polygon, NURBS, Subdivision&lt;br /&gt;
*&#039;&#039;&#039;Built-in Texture Baking?&#039;&#039;&#039; Yes&lt;br /&gt;
*&#039;&#039;&#039;Current Sculpt Map Support?:&#039;&#039;&#039; No&lt;br /&gt;
&lt;br /&gt;
trueSpace and its companion products appear to be aimed more at the independent developer and hobby market, resulting in a fully featured program at a much more affordable price.  Of interest to Second Life users: trueSpace 7 and up offers a collaborative work environment; the benefit of working together like in SL but without the guy shooting off guns at you in the sandbox.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Resources&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [http://forms.caligari.com/forms/ts3all_free.html trueSpace3.2 Full Version (very old) for Free]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Softimage XSI (Avid) ===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Website:&#039;&#039;&#039; [http://www.softimage.com/products/xsi/ Softimage XSI]&lt;br /&gt;
*&#039;&#039;&#039;Cost:&#039;&#039;&#039; US$495 (&amp;quot;Foundation&amp;quot;) - US$6995 (&amp;quot;Advanced&amp;quot;)&lt;br /&gt;
*&#039;&#039;&#039;Operating Systems:&#039;&#039;&#039; Windows XP SP2/64 bit&lt;br /&gt;
*&#039;&#039;&#039;Trial version available?:&#039;&#039;&#039; Yes, 30 day trial with full features, free &amp;quot;Mod Tool&amp;quot; supported by [http://www.valvesoftware.com/ Valve] with limited features (watermarks images).&lt;br /&gt;
*&#039;&#039;&#039;User Scripting?&#039;&#039;&#039; Yes, Python, COLLADA and C#&lt;br /&gt;
*&#039;&#039;&#039;Modeling Methods:&#039;&#039;&#039; Polygon, NURBS, Subdivision&lt;br /&gt;
*&#039;&#039;&#039;Built-in Texture Baking?&#039;&#039;&#039; Yes&lt;br /&gt;
*&#039;&#039;&#039;Current Sculpt Map Support?:&#039;&#039;&#039; No&lt;br /&gt;
&lt;br /&gt;
Billing itself as &amp;quot;the most advanced 3D animation and character creation software for next generation games &amp;amp; film&amp;quot;, it does that, modeling, baking, film compositing, &#039;&#039;and&#039;&#039; it makes toast!  All kidding aside, they seem to be going after the largest slice of the market they can and their client list includes everything from [http://en.wikipedia.org/wiki/Half-Life_2 Half-Life] to [http://en.wikipedia.org/wiki/Howl&#039;s_Moving_Castle_(film) Howl&#039;s Moving Castle].  Pluses?  It&#039;s one of the few commercial programs that uses non-proprietary languages for their scripting...yes, I said languages, because apparently you have a choice between several.  However it&#039;s unlikely that it has a significant user base within the SL community at the moment.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Resources&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Modo 301 (Luxology)===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Website:&#039;&#039;&#039; [http://www.luxology.com/ Luxology Home]&lt;br /&gt;
*&#039;&#039;&#039;Cost:&#039;&#039;&#039; US$895 professional, $149 Educational, $99 &amp;quot;Good Student&amp;quot; price.  Download a trial version then wait 1-2 weeks and you&#039;ll receive a voucher dropping professional price to US$695.&lt;br /&gt;
*&#039;&#039;&#039;Operating Systems:&#039;&#039;&#039; Windows, Mac&lt;br /&gt;
*&#039;&#039;&#039;Trial version available?:&#039;&#039;&#039; Yes&lt;br /&gt;
*&#039;&#039;&#039;User Scripting?&#039;&#039;&#039; Yes&lt;br /&gt;
*&#039;&#039;&#039;Modeling Methods:&#039;&#039;&#039; Polygon, Subdivsion, Brush Sculpting&lt;br /&gt;
*&#039;&#039;&#039;Built-in Texture Baking?&#039;&#039;&#039; Yes&lt;br /&gt;
*&#039;&#039;&#039;Current Sculpt Map Support?:&#039;&#039;&#039; Yes, via texture baking&lt;br /&gt;
&lt;br /&gt;
Luxology Modo is a premier modeling and UV system built to maximize the workflow of professional modelers.   It has both a rich modeling and painting toolset, ideal for creating models for Second Life.  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Resources&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Lovecraft Forest Testbed [http://www.rabbitroo.com/SL/SLtest7.lxo SLtest7.lxo]&lt;br /&gt;
* Lovecraft Forest Usage Instructions: [http://www.lovecraftforest.com/blog/2007/05/17/sculpted-prims-in-modo-part-ii/ Blog Post]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Mudbox (Skymatter) ===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Website:&#039;&#039;&#039; [http://www.mudbox3d.com/ Mudbox]&lt;br /&gt;
*&#039;&#039;&#039;Cost:&#039;&#039;&#039; US$299 (&amp;quot;Basic&amp;quot;) - US$649 (&amp;quot;Professional&amp;quot;)&lt;br /&gt;
*&#039;&#039;&#039;Operating Systems:&#039;&#039;&#039; Windows XP SP2, Atm untested on x64 or Vista&lt;br /&gt;
*&#039;&#039;&#039;Trial version available?:&#039;&#039;&#039; Yes, 15 days trial fully functional.&lt;br /&gt;
*&#039;&#039;&#039;User Scripting?&#039;&#039;&#039; No&lt;br /&gt;
*&#039;&#039;&#039;Modeling Methods:&#039;&#039;&#039; Brush Sculpting, Subdivision&lt;br /&gt;
*&#039;&#039;&#039;Built-in Texture Baking?&#039;&#039;&#039; Yes&lt;br /&gt;
*&#039;&#039;&#039;Current Sculpt Map Support?:&#039;&#039;&#039; No&lt;br /&gt;
&lt;br /&gt;
With ZBrush one of the most powerful organic modelers out there, really easy to use and artist friendly. Its modeling is based on brushes like ZBrush but aims more to 3D like Maya or 3D Studio Max. It contains a high quality texture renderer for baking normal maps and is used be many 3D professionals and studios like WETA Digital and some artists at Raven Software and id Software.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Resources&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Carrara (Daz) ===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Website:&#039;&#039;&#039; [http://www.daz3d.com/ Daz]&lt;br /&gt;
*&#039;&#039;&#039;Cost:&#039;&#039;&#039; US$249 (&amp;quot;Standard&amp;quot;) - US$549 (&amp;quot;Professional&amp;quot;)&lt;br /&gt;
*&#039;&#039;&#039;Operating Systems:&#039;&#039;&#039; Windows, Mac (UB)&lt;br /&gt;
*&#039;&#039;&#039;Trial version available?:&#039;&#039;&#039; Yes&lt;br /&gt;
*&#039;&#039;&#039;User Scripting?&#039;&#039;&#039; Yes (plugin development, no scripting)&lt;br /&gt;
*&#039;&#039;&#039;Modeling Methods:&#039;&#039;&#039; Polygon&lt;br /&gt;
*&#039;&#039;&#039;Built-in Texture Baking?&#039;&#039;&#039; No (Yes with third party plug from [http://www.inagoni.com/content.php?content.3/ Inagoni]&lt;br /&gt;
*&#039;&#039;&#039;Current Sculpt Map Support?:&#039;&#039;&#039; Yes - via texture baking with third party plugins - tutorial [[User:Hypatia_Callisto/Carrara_Sculpt_Baking]]&lt;br /&gt;
&lt;br /&gt;
Like Hexagon, Carrara was an Eovia product that is now owned by Daz.  Carrara is full-featured 3D application, supporting polygon modeling, spline modeling, &amp;quot;metaballs&amp;quot;, and terrain modeling (it is sometimes compared to Vue).  This app seems fly under the radar consistently, but Daz does seem to be serious about maintaining it as they have recently released a Mac Universal Binary version, free to registered users.  Carrara also provides animation and particles.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Resources&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cinema 4D ===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Website:&#039;&#039;&#039; [http://www.maxon.net Maxon]&lt;br /&gt;
*&#039;&#039;&#039;Cost:&#039;&#039;&#039; CINEMA 4D R10 Win PC £586.33, additional modules available.&lt;br /&gt;
*&#039;&#039;&#039;Operating Systems:&#039;&#039;&#039; Windows XP/Vista, Mac&lt;br /&gt;
*&#039;&#039;&#039;Trial version available?:&#039;&#039;&#039; Yes, Demo &lt;br /&gt;
*&#039;&#039;&#039;User Scripting?&#039;&#039;&#039; Yes, COFFEE&lt;br /&gt;
*&#039;&#039;&#039;Modeling Methods:&#039;&#039;&#039; Polygon, NURBS, Subdivision&lt;br /&gt;
*&#039;&#039;&#039;Built-in Texture Baking?&#039;&#039;&#039; Yes&lt;br /&gt;
*&#039;&#039;&#039;Current Sculpt Map Support?:&#039;&#039;&#039; Yes, via Shader.&lt;br /&gt;
&lt;br /&gt;
One of the more affordable 3D applications, excellent learning curve. Uses COFFEE script for plugins.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Resources&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Nice [http://www.ks-3d.de/KS-3D_SCULPTIES_(SCULPTED_PRIMS).htm tutorial] to create a Shader and modeling (by KS-3D Klaus Strifler - german only)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== $1000 and Up ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Maya (Autodesk/Wavefront) ===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Website:&#039;&#039;&#039; [http://www.autodesk.com/maya Autodesk Maya]&lt;br /&gt;
*&#039;&#039;&#039;Cost:&#039;&#039;&#039; US$3000 (&amp;quot;Complete&amp;quot;) - US$7000 (&amp;quot;Unlimited&amp;quot;).  (&amp;quot;Complete&amp;quot; version sufficient for creating sculpted prims.) Educational license: US$300&lt;br /&gt;
*&#039;&#039;&#039;Operating Systems:&#039;&#039;&#039; Windows XP SP2, Mac OS X 10.4, Linux (SUSE, RedHat and Fedora supported)&lt;br /&gt;
*&#039;&#039;&#039;Trial version available?:&#039;&#039;&#039; &amp;quot;Personal Learning Edition&amp;quot;, no time limit but not usable for creating sculpted prims (sculpt textures ruined by watermark) &lt;br /&gt;
*&#039;&#039;&#039;User Scripting?&#039;&#039;&#039; Yes, MEL Script&lt;br /&gt;
*&#039;&#039;&#039;Modeling Methods:&#039;&#039;&#039; Polygon, NURBS, Subdivision&lt;br /&gt;
*&#039;&#039;&#039;Built-in Texture Baking?&#039;&#039;&#039; Yes&lt;br /&gt;
*&#039;&#039;&#039;Current Sculpt Map Support?:&#039;&#039;&#039; Yes, script by Qarl Linden available on their wiki [[LlSculpt mel|here]], instructions [[Sculpted_Prims:_FAQ#MayaExporter|here]].&lt;br /&gt;
** Qarl has released a new export script that can handle assemblies of prims and can also bake the surface textures for you.  [[Advanced_Sculptie_Exporter_From_Maya | Available Here]]&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Plugins:&#039;&#039;&#039; [http://www.sim-image.co.jp/sltk/en/index.php SIM Image SLTK (Second Life Toolkit)] (￥94,000/126,000, $800/1,100, €600/800) is a plugin for Maya that allows users to create and export objects for Second Life. See [http://www.sim-image.co.jp/sltk/en/function.php this page] for the complete feature set.&lt;br /&gt;
&lt;br /&gt;
Why was Maya the first to receive sculpted prim support from Linden Lab? Because it was what [http://www.qarl.com/ Qarl Linden], the main developer on the project, learned to use while creating kick-ass movie SFX like [http://www.qarl.com/menu/resume/matrix-demo.mov these] and the tech for sculpted prims was adapted from tricks he learned in the process. Maya has been a growing force in the movie industry for some years and a strong presence in the video game industry as well.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Resources&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [http://webpages.charter.net/talilal/Balloon%20Tutorial/ Maya Sculpt Tutorial] by Talila Liu&lt;br /&gt;
* [http://www.sim-image.co.jp/sltk/en/index.php SIM Tools - Second Life ToolKit plugin]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 3d Studio Max (Autodesk) ===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Website:&#039;&#039;&#039; [http://www.autodesk.com/3dsmax Autodesk 3ds Max]&lt;br /&gt;
*&#039;&#039;&#039;Cost:&#039;&#039;&#039; US$3495.  Educational License: ~US$200. Subscription: ~US$500/year.&lt;br /&gt;
*&#039;&#039;&#039;Operating Systems:&#039;&#039;&#039; Windows 2000/XP, Windows Vista (with version 9.1)&lt;br /&gt;
*&#039;&#039;&#039;Trial version available?:&#039;&#039;&#039; Yes, 30-day demo, full features&lt;br /&gt;
*&#039;&#039;&#039;User Scripting?&#039;&#039;&#039; Yes, MAX Script/plugins&lt;br /&gt;
*&#039;&#039;&#039;Modeling Methods:&#039;&#039;&#039; Polygons, NURBS, Subdivsion, Basic Brush Sculpting&lt;br /&gt;
*&#039;&#039;&#039;Built-in Texture Baking?&#039;&#039;&#039; Yes (some functions only in version 8 and higher)&lt;br /&gt;
*&#039;&#039;&#039;Current Sculpt Map Support?:&#039;&#039;&#039; 3 methods in development:&lt;br /&gt;
** [http://www.joe-brown.net/SecondLife/SculptTut/SculptTut.html Method 1] by Gearsawe Stonecutter, uses a premade template file.&lt;br /&gt;
** [http://forums.secondlife.com/showthread.php?t=182461 Method 2] by Abu Nasu, uses a shader.  [http://forums.secondlife.com/showpost.php?p=1505984&amp;amp;postcount=46 Download the Materials file here].  [http://tech-slop.serveit.org/wiki/index.php?title=Sculptie_Egg Read the tutorial here].&lt;br /&gt;
*** A varient of Abu&#039;s methood by Chip Midnight uses a projection modifier and can handle arbitrary shapes but requires Max version 8 or higher. [http://home.comcast.net/~pixelforgeltd/Tutorial.htm The tutorial is here.]&lt;br /&gt;
** Method 3 ([http://forums.secondlife.com/showthread.php?t=185426 thread]) ([http://wiki.secondlife.com/wiki/SculptGenMax wiki]) by Shack Dougall, is a vertex-based method using MAXScript and preset geometry as a starting point. Tested on 3dsMax 9.  &lt;br /&gt;
&lt;br /&gt;
Formerly Maya&#039;s main competitor, especially in the game industry. Then Autodesk (the makers of Max) bought out Alias (the makers of Maya) a couple years ago.  So far the company is developing both products separately, marketing Maya at the movie industry and Max at the game developers, but they have long had comparable feature sets, and in the future it&#039;s likely that there will be tighter integration between the two.  A choice between Maya and Max generally comes down to user preference and (particularly in our case) plugin support.  Some users have said that Max is easier for a newbie to learn than Maya and certain basic controls share similarities with SL&#039;s build tools (such as shift-drag to copy).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Resources&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== AutoCAD (Autodesk) ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Website:&#039;&#039;&#039; [http://www.autodesk.com/autocad Autodesk AutoCAD]&lt;br /&gt;
*&#039;&#039;&#039;Cost:&#039;&#039;&#039; US$4,000  Educational License: US$400 AutoCAD LT: US$900&lt;br /&gt;
*&#039;&#039;&#039;Operating Systems:&#039;&#039;&#039; -&lt;br /&gt;
*&#039;&#039;&#039;Trial version available?:&#039;&#039;&#039; -&lt;br /&gt;
*&#039;&#039;&#039;User Scripting?&#039;&#039;&#039; -&lt;br /&gt;
*&#039;&#039;&#039;Modeling Methods:&#039;&#039;&#039; -&lt;br /&gt;
*&#039;&#039;&#039;Built-in Texture Baking?&#039;&#039;&#039; -&lt;br /&gt;
*&#039;&#039;&#039;Current Sculpt Map Support?:&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;[http://ai-designstudio.net/ Henshin III]&#039;&#039;&#039; by AI Design Studio is a tool that allows the export of AutoCAD files into Second Life.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Resources&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [http://ai-designstudio.net/ AI Design Studio]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Other 3d Programs =&lt;br /&gt;
&lt;br /&gt;
These programs may be free or cheap, but they won&#039;t have nearly as expansive feature sets as those above.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== MilkShape 3D ===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Website:&#039;&#039;&#039; [http://www.milkshape3d.com/ www.milkshape3d.com]&lt;br /&gt;
*&#039;&#039;&#039;Cost:&#039;&#039;&#039; US$25 / €25&lt;br /&gt;
*&#039;&#039;&#039;Operating Systems:&#039;&#039;&#039; Windows&lt;br /&gt;
*&#039;&#039;&#039;Trial version available?&#039;&#039;&#039; 30-day unrestricted trial, save disabled thereafter until registered&lt;br /&gt;
*&#039;&#039;&#039;User Scripting?&#039;&#039;&#039; Plug-in SDK available (Does that count?)&lt;br /&gt;
*&#039;&#039;&#039;Modeling Methods:&#039;&#039;&#039; Polygons&lt;br /&gt;
*&#039;&#039;&#039;Built-in Texture Baking/generation?&#039;&#039;&#039; No&lt;br /&gt;
*&#039;&#039;&#039;Current Sculpt Map Support:&#039;&#039;&#039; Import/Export plugin under development&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Resources&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* See the &#039;&#039;&#039;Tutorials&#039;&#039;&#039; and &#039;&#039;&#039;Links&#039;&#039;&#039; sections on the [http://www.milkshape3d.com/ MilkShape website]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Hexagon 2 (DAZ Productions) ===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Website:&#039;&#039;&#039; [http://www.daz3d.com/i.x/software/hexagon/-/? Hexagon product page]&lt;br /&gt;
*&#039;&#039;&#039;Cost:&#039;&#039;&#039; Full version: $149, &amp;quot;Crossgrade&amp;quot; from other DAZ software: $79, Upgrade: $49&lt;br /&gt;
*&#039;&#039;&#039;Operating Systems:&#039;&#039;&#039; Windows 2000/XP, Mac OS X 10.2 or higher&lt;br /&gt;
*&#039;&#039;&#039;Trial version available?&#039;&#039;&#039; Yes, it&#039;s buried: go [http://www.daz3d.com/i.x/support/downloads/-/ here] and select Hexagon from the list.&lt;br /&gt;
*&#039;&#039;&#039;User Scripting?&#039;&#039;&#039; No&lt;br /&gt;
*&#039;&#039;&#039;Modeling Methods:&#039;&#039;&#039; Polygon&lt;br /&gt;
*&#039;&#039;&#039;Built-in Texture Baking/generation?&#039;&#039;&#039; No&lt;br /&gt;
*&#039;&#039;&#039;Current Sculpt Map Support:&#039;&#039;&#039; No&lt;br /&gt;
&lt;br /&gt;
SL animators may have heard about (and perhaps been disappointed with) [http://www.daz3d.com/i.x/software/studio/-/? DAZ Studio], a competitor to Poser.  Others may be familiar with [http://www.daz3d.com/i.x/software/bryce/-/? Bryce], a landscape creation tool with a much better reputation.  Hexagon was originally developed by eovia until purchased by DAZ and while it appears to be a perfectly capable 3d program by itself with polygon modeling subdivision modeling, sculpting tools, and is that 3d painting I see?, the absence in their feature list of either texture baking or any sort of user scripting or plugin interface could be a deal-breaker until something like a reliable .OBJ converter comes along.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Google SketchUp ===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Website:&#039;&#039;&#039; [http://sketchup.google.com/ Google SketchUp] &lt;br /&gt;
*&#039;&#039;&#039;Cost:&#039;&#039;&#039; Free (Google SketchUp 6); $495 (Google SketchUp 6 Pro)/$45 (full-feature academic license for Google SketchUp 6 Pro)&lt;br /&gt;
*&#039;&#039;&#039;Operating Systems:&#039;&#039;&#039; Windows XP/2000, Windows Vista (with OpenGL 1.5 or higher), Mac OS X (10.3.9 or higher)&lt;br /&gt;
*&#039;&#039;&#039;Trial version available?:&#039;&#039;&#039; 8 hour trial available for Sketchup Pro&lt;br /&gt;
*&#039;&#039;&#039;User Scripting?&#039;&#039;&#039; Yes, Ruby&lt;br /&gt;
*&#039;&#039;&#039;Modeling Methods:&#039;&#039;&#039; Polygon&lt;br /&gt;
*&#039;&#039;&#039;Built-in Texture Baking?&#039;&#039;&#039; No&lt;br /&gt;
*&#039;&#039;&#039;Current Sculpt Map Support?:&#039;&#039;&#039; Indirectly (through OBJ export; Pro version only)&lt;br /&gt;
&lt;br /&gt;
SketchUp is a 3D drafting program popular among architects for its conceptual similarity to manual drafting and physical model-building. It has a very low learning curve, but is rather foreign to most established suites other than AutoCAD.&lt;br /&gt;
&lt;br /&gt;
Hypothetically, SketchUp could be used to reduce the number of prims used in structures already possible with Second Life&#039;s built-in tools, as its use of edges and faces allows the creation of efficient compound geometric forms. &lt;br /&gt;
&lt;br /&gt;
On the other hand, SketchUp&#039;s &amp;quot;bring your own geometry&amp;quot; approach makes it not particularly suited to the creation of mesh-based organic shapes. &lt;br /&gt;
&lt;br /&gt;
Sketchup&#039;s surface modeling paradigm currently makes it difficult to translate SketchUp models into Sculpted Prims. The paid &amp;quot;Pro&amp;quot; version of SketchUp does, however, allow export to OBJ which, via [[Sculpted_Prims:_3d_Software_Guide#obj2sculpt|obj2sculpt]] (or, of course, Maya), may allow sculpt-map export. It also exports to 3DS, Collada, XSI and VRML, &#039;&#039;et cetera&#039;&#039;, but these formats may well require software more expensive than SketchUp.&lt;br /&gt;
&lt;br /&gt;
SketchUp uses image textures about as basic as those found in the Second Life build tools. Its texture capabilities would therefore likely not be useful to Second Life designers other than for previewing existing textures.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
=== Ayam ===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Website:&#039;&#039;&#039; [http://ayam.sourceforge.net/ Ayam]&lt;br /&gt;
*&#039;&#039;&#039;License:&#039;&#039;&#039; [http://www.opensource.org/licenses/bsd-license.html BSD license]&lt;br /&gt;
*&#039;&#039;&#039;Operating Systems:&#039;&#039;&#039; Unix/Linux (native), Windows 98, 2000 and XP, Mac OS X (with X11)&lt;br /&gt;
*&#039;&#039;&#039;User Scripting?&#039;&#039;&#039; Yes, tcl&lt;br /&gt;
*&#039;&#039;&#039;Modeling Methods:&#039;&#039;&#039; NURBS, Polygon (Import/Export Only)&lt;br /&gt;
*&#039;&#039;&#039;Built-in Texture Baking?&#039;&#039;&#039; No&lt;br /&gt;
*&#039;&#039;&#039;Current Sculpt Map Support?:&#039;&#039;&#039; No&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Resources&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [http://ayam.sourceforge.net/docs.html Ayam Documentation page]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= 3D File Formats =&lt;br /&gt;
&lt;br /&gt;
If you&#039;re using software that cannot export to sculpt directly, you might still be able to succeed. You can always give the file to someone with access to the appropriate software, or you could export your model into another 3D modeler. To do that, you&#039;ll need to export the model into a format the other program can handle. Here&#039;s a brief rundown of the file formats that SL developers will generally find the most useful.&lt;br /&gt;
&lt;br /&gt;
:*&#039;&#039;&#039;.OBJ&#039;&#039;&#039;: Probably the most common cross-platform export format for polygon models; it&#039;s fairly open and any 3D program worth its bits supports it. It&#039;s also well-documented and easily hackable.&lt;br /&gt;
&lt;br /&gt;
:*&#039;&#039;&#039;.3DS&#039;&#039;&#039;: The default polygon export format supported by [[#3d_Studio_Max_.28Autodesk.29|3D Studio Max]]. Because of this, it is widely supported. However, it doesn&#039;t have as many export options as OBJ.&lt;br /&gt;
&lt;br /&gt;
:*&#039;&#039;&#039;.FBX&#039;&#039;&#039;: Another Autodesk format that is good if you need to export whole scenes: objects, animation, lights, cameras, etc. More importantly for our purposes, it preserves [http://en.wikipedia.org/wiki/NURBS NURBS] objects in some programs.  Especially useful if you&#039;re trading files between 3DS Max and [[#Maya_.28Autodesk.2FWavefront.29|Maya]]; it&#039;s also supported in some other programs but [[#Blender|Blender]] isn&#039;t among them ...yet.&lt;br /&gt;
&lt;br /&gt;
:*&#039;&#039;&#039;.3DM&#039;&#039;&#039;: a.k.a [http://www.opennurbs.com OpenNURBS]. This is the native format of [[#Rhinoceros_Rhino_3D|Rhino3D]] and [[#Moment_of_Inspiration|MoI]] and, as the name suggests, is a [[Sculpted_Prims:_3d_Modeling_Glossary#NURBS_Modeling | NURBS]] export format. It&#039;s gaining some popularity; unfortunately, it&#039;s not currently supported by the big three (Maya, Max and Blender). However the format documentation and code libraries are open-source, tempting those brave enough to try and write tools for it, such as [[#3dm2sculpt | 3dm2sculpt]].&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Other Resources =&lt;br /&gt;
&lt;br /&gt;
Useful places for anyone interested in 3d modeling:&lt;br /&gt;
&lt;br /&gt;
* [http://www.3dbuzz.com 3d Buzz] &amp;amp;mdash; Forums, video tutorials and even classes covering everything from 3d programs to 3d programing and even Photoshop.&lt;br /&gt;
* [http://ibiblio.org/e-notes/Splines/Intro.htm An Interactive Introduction to Splines] &amp;amp;mdash; a technical introduction to NURBs.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Sculpted Prims|Sculpted Prims]]&lt;br /&gt;
* [[Sculpted Prims: FAQ|Sculpted Prims: FAQ]]&lt;br /&gt;
* [[Sculpt Textures in Paint Programs]]&lt;br /&gt;
* [[Sculpted Prims: Technical Explanation|Sculpted Prims: Under the Hood]]&lt;br /&gt;
* [[Sharing_sculpt_maps_and_textures|Sculpted Prims: Sharing Sculpt Maps and Textures]]&lt;br /&gt;
* [[Sculpted Prims Beta Discussion|Sculpted Prims Beta Discussion]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Sculpted Prims]]&lt;/div&gt;</summary>
		<author><name>Blubb Dixon</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Sculpted_Prims&amp;diff=34843</id>
		<title>Sculpted Prims</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Sculpted_Prims&amp;diff=34843"/>
		<updated>2007-10-09T11:12:47Z</updated>

		<summary type="html">&lt;p&gt;Blubb Dixon: spelling&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Sculpted_fruit_small.png|frame|right|Sculpted Prims]]&lt;br /&gt;
[[Image:Sculpted_couch_Xenius_Revere.png|frame|right|Seven prim couch by Xenius Revere, using baked ambient occlusion.]]&lt;br /&gt;
[[Image:Sculpted_head_Chip_Midnight.png|frame|right|One prim head by Chip Midnight, using baked diffuse lighting.]]&lt;br /&gt;
[[Image:Sculpted_vases_Damanios_Thetan.jpg|frame|right|Vase sculpture by Damanios Thetan]]&lt;br /&gt;
&lt;br /&gt;
{|cellspacing=&amp;quot;5px&amp;quot;&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&lt;br /&gt;
__TOC__&lt;br /&gt;
|valign=&amp;quot;top&amp;quot; width=&amp;quot;48%&amp;quot;|&lt;br /&gt;
{{Sculpted Prims/Links}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;Sculpted Prim&#039;&#039;&#039;, or &#039;&#039;sculptie&#039;&#039;, is a [[prim]] whose shape is determined by an array of &amp;lt;math&amp;gt;&amp;lt;x, y, z&amp;gt;&amp;lt;/math&amp;gt; coordinates stored as RGB values in an image file &lt;br /&gt;
(a &#039;&#039;&#039;[[Sculpted Prims: FAQ#SculptTextures|Sculpt Texture]]&#039;&#039;&#039; or &#039;&#039;&#039;[[Sculpted Prims: FAQ#SculptTextures|Sculpt Map]]&#039;&#039;&#039;). &lt;br /&gt;
Sculpted prims can be used to create more complex, organic shapes that were not previously possible with Second Life&#039;s prim system. Each piece of fruit to the right is one prim (and so is the plate). For technical details, see [[Sculpted Prims: Technical Explanation]].&lt;br /&gt;
&lt;br /&gt;
== How do I make Sculpted Prims == &lt;br /&gt;
&lt;br /&gt;
Presently, there only a few limited tools &#039;&#039;&#039;inside&#039;&#039;&#039; Second Life for creating sculpties.  They are usually created externally using a 3D modeling tool such as Blender, Maya, or Wings 3D, and then uploaded to Second Life, where they are applied to a prim with the build tools.  See [[Sculpted Prims: Creator&#039;s Guide]] for more guidance, or jump straight to [[Sculpted Prims: 3d Software Guide]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  News ==&lt;br /&gt;
&lt;br /&gt;
=== 20 June 2007 ===&lt;br /&gt;
&lt;br /&gt;
In-world group &#039;&#039;&#039;Sculptie Dev&#039;&#039;&#039;: group primarily for the communication/announcement of sculpted prim development.&lt;br /&gt;
&lt;br /&gt;
=== 24 May 2007 ===&lt;br /&gt;
&lt;br /&gt;
Linden Lab is running a contest: show off your sculpties for fun, fame and schwag!  [http://blog.secondlife.com/2007/05/24/second-life-sculpted-prim-contest-show-us-your-sculpties/ Read the blog for details.]  Deadline for submissions is June 1st.&lt;br /&gt;
&lt;br /&gt;
=== 23 May 2007 ===&lt;br /&gt;
&lt;br /&gt;
Sculpted prims are now available on the [http://blog.secondlife.com/2007/05/23/the-grid-is-down-for-scheduled-maintenance/ Main Grid] as of version 1.16.0(5).&lt;br /&gt;
&lt;br /&gt;
=== 16 May 2007 ===&lt;br /&gt;
&lt;br /&gt;
An update to sculpted prims, included in the [http://blog.secondlife.com/2007/05/15/beta-grid-updated-to-second-life-11601/ latest build] of the beta viewer ([http://secondlife.com/community/preview.php 1.16.0(1)]), has two changes that are not backwards-compatible:&lt;br /&gt;
&lt;br /&gt;
1) The orientation of the &#039;&#039;&#039;sculpt map&#039;&#039;&#039; (sculpt texture) is reversed. This means all previously created sculpt maps/textures need to be horizontally flipped (otherwise they&#039;ll appear inside out.) This change fixes the orientation discrepancy between sculpt maps/textures and surface textures (which have required a 90 degree rotate and flip.) ([http://blog.secondlife.com/2007/05/15/beta-grid-updated-to-second-life-11601/ source])&lt;br /&gt;
&lt;br /&gt;
2) The LSL call to set sculpted prims is changing to require two parameters: the texture and the topology type. (source: [[Talk:Sculpted_Prims#HEADS_UP.21|Talk page]])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 27 April 2007 ===&lt;br /&gt;
&lt;br /&gt;
Sculpted Prims made available on the [http://www.secondlife.com/community/preview.php preview grid].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Where can I find out more about Sculpted Prims? ==&lt;br /&gt;
&lt;br /&gt;
Sculpted Prims have now a comprehensive [[Sculpted Prims: FAQ|FAQ]] wiki page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
*[[Sculpted Prims: Technical Explanation]]&lt;br /&gt;
*[[Sculpted Prims: FAQ| Sculpted Prims FAQ]]&lt;br /&gt;
*[[Sculpted_Prims:_Sculpt_Maps_and_Textures|Sculpt Maps and Textures]]&lt;br /&gt;
*[[Sculpted_Prims:_3d_Software_Guide|3D Software Guide]]&lt;br /&gt;
*[[Sculpted_Prims:_3d_Modeling_Glossary|3D Modeling Glossary]]&lt;br /&gt;
*[[Sculpt_Textures_in_Paint_Programs|Sculpt Maps and 2D Graphics Software]]&lt;br /&gt;
*[[Sculpted_Prims:_Resident-made_Tools|Sculpted Prims: Resident-made Tools]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Sculpted Prims]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Features]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Creation]]&lt;/div&gt;</summary>
		<author><name>Blubb Dixon</name></author>
	</entry>
</feed>