<?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=ErikoLeo+Resident</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=ErikoLeo+Resident"/>
	<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/wiki/Special:Contributions/ErikoLeo_Resident"/>
	<updated>2026-07-26T19:40:32Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Mesh/Exporting_a_mesh_from_Blender&amp;diff=1199755</id>
		<title>Mesh/Exporting a mesh from Blender</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Mesh/Exporting_a_mesh_from_Blender&amp;diff=1199755"/>
		<updated>2016-03-17T18:06:02Z</updated>

		<summary type="html">&lt;p&gt;ErikoLeo Resident: /* LOD meshes (with Blender 2.49) */ Typo, added a line feed.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Multi-lang}}&lt;br /&gt;
{{Navbox/Mesh|tools}}&lt;br /&gt;
== Basic workflow ==&lt;br /&gt;
=== Create your model===&lt;br /&gt;
&lt;br /&gt;
====Some hints:====&lt;br /&gt;
&lt;br /&gt;
# Take care to create low polygon meshes (as few verts as possible)&lt;br /&gt;
# Use no more than 8 face textures (8 materials assignments)&lt;br /&gt;
# Avoid intersecting faces (unless intersections are intended)&lt;br /&gt;
# Avoid duplicate vertices (unless you want to use the split modifier)&lt;br /&gt;
# Avoid creating more than 21844 tris per texture face&lt;br /&gt;
# Avoid creating extremely small polygons (&amp;lt; 0.1 cm edge length)&lt;br /&gt;
# Did i mention you should create low poly models only ? an avatar with &amp;gt; 10000 faces starts getting too heavy ...&lt;br /&gt;
# shoes with 30000 polygons per shoe have 20 times too much faces. really!!! Avoid that!&lt;br /&gt;
# The same is true for hair.&lt;br /&gt;
# Make low polygon meshes !!!&lt;br /&gt;
&lt;br /&gt;
====LOD meshes (with Blender 2.49)====&lt;br /&gt;
# Make sure your blender file is saved&lt;br /&gt;
# Export your full-detail mesh to COLLADA&lt;br /&gt;
# Run Poly Reducer with a poly reduce setting of 0.5 (to reduce your polygon count by half).&lt;br /&gt;
#* If you make any manual changes to tweak the resulting mesh, remember to update the UV map to match.&lt;br /&gt;
# Export your mesh to COLLADA; this will be the &amp;quot;medium&amp;quot; level of detail.&lt;br /&gt;
# Reload your original full-detail mesh. It&#039;s good to start from the full-detail mesh each time to prevent errors from accumulating, though this may not be a significant concern for simple meshes such as attachments.&lt;br /&gt;
# Run Poly Reducer with a poly reduce setting of 0.25 (to reduce your polygon count by three quarters).&lt;br /&gt;
# Export your mesh to COLLADA; this will be your &amp;quot;low&amp;quot; level of detail.&lt;br /&gt;
# Reload your original full-detail mesh.&lt;br /&gt;
# Run Poly Reducer with a poly reduce setting of 0.125 (to reduce your polygon count by seven eighths).&lt;br /&gt;
# Export your mesh to COLLADA; this will be your &amp;quot;lowest&amp;quot; level of detail. You may also want to use this mesh when defining your model&#039;s physics.&lt;br /&gt;
&lt;br /&gt;
Unfortunately the Poly Reducer script is currently only available for version 2.4x of Blender. The &amp;quot;Decimate&amp;quot; modifier is a serviceable substitute but the downside is that you&#039;ll need to redo the UV map for each LOD level.&lt;br /&gt;
&lt;br /&gt;
According to:[http://blender.stackexchange.com/questions/14501/poly-reducer-issues-in-blender-2-71 &amp;quot;Poly Reducer issues in Blender 2.71&amp;quot; in blender stackexchange], The UV mapping issues have been solved in recent versions. &lt;br /&gt;
[https://wiki.blender.org/index.php/Doc:2.4/Manual/Modifiers/Generate/Decimate Decimate Modifier on blender wiki page].&lt;br /&gt;
&lt;br /&gt;
=== Apply textures ===&lt;br /&gt;
&lt;br /&gt;
=== Export to COLLADA ===&lt;br /&gt;
You find the Blender Collada exporter here:&lt;br /&gt;
&lt;br /&gt;
File -&amp;gt; Export -&amp;gt; Collada (Default)&lt;br /&gt;
&lt;br /&gt;
=== Import to SL ===&lt;br /&gt;
This is a tutorial that was originally made for Avastar (a blender addon) but most of the tutorial also fits to arbitrary mesh imports to second Life. So here it is:&lt;br /&gt;
{{KBvideo|u575wa3knUM|640|505|type=youtube}}&lt;br /&gt;
&lt;br /&gt;
== Best Practices ==&lt;br /&gt;
[http://blogs.secondlife.com/message/460796#41935 Forum thread on optimizing your mesh in Blender for Second Life]&lt;br /&gt;
&lt;br /&gt;
[http://blogs.secondlife.com/message/552002#552002 Forum thread on installing Blender]&lt;br /&gt;
=== Bones and rigging ===&lt;br /&gt;
* &#039;&#039;&#039;BVH Animations:&#039;&#039;&#039;  It&#039;s possible to import one of the default BVH animations that can be found linked in the header of the [[Internal_Animations#User-playable_animations]]. This will get you a slightly inaccurate skeleton to work from. Please note that the bones are all the wrong names for mesh import, as mentioned in [[Mesh/Troubleshooting#Rigging]].&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Joints positions:&#039;&#039;&#039; [http://blogs.secondlife.com/message/534554#52305 Forum tip for exporting joint positions with Blender]&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Tool tip&#039;&#039;&#039;: For rigged mesh creation and animation check out [http://blog.machinimatrix.org/Avastar Avastar] this addon might be of help for you (commercial tool).&lt;br /&gt;
&lt;br /&gt;
=== Gotchas and workarounds ===&lt;br /&gt;
&lt;br /&gt;
=== Optimization techniques ===&lt;br /&gt;
&lt;br /&gt;
== Tutorial links ==&lt;br /&gt;
  ==  Blender 2.5x/2.6x specific ==&lt;br /&gt;
&lt;br /&gt;
=== Tutorials available in HD ===&lt;br /&gt;
&lt;br /&gt;
[http://blog.machinimatrix.org/category/mesh/quests/coffee-cups/ Coffee Cup Tutorials (basics)]&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/playlist?list=PLDF8295B062C9BB2F Shoe Quest (making a shoe with Blender)]&lt;br /&gt;
&lt;br /&gt;
[http://blog.machinimatrix.org/optimizing-meshes/ Mesh for sculpted prim creators]&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/playlist?list=PL7541C8D8005D6E53 Avacademy (basic insights to mesh)]&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/playlist?list=PL0A0B36DC6D404D95 Tip Top Tool tips (medium level tips for blender)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.youtube.com/watch?v=6LTWzw9ipyQ Blender 2.49/2.59 Workflow]&lt;br /&gt;
&lt;br /&gt;
[http://www.youtube.com/playlist?list=PL11D6E99BB51A2BB2 Second Life Rigged Clothing Series]&lt;br /&gt;
&lt;br /&gt;
[http://www.youtube.com/user/ashasekayi#grid/user/2A3AF00B41F652ED SL Mesh Video Tutorial Playlist]&lt;br /&gt;
&lt;br /&gt;
[http://www.youtube.com/watch?v=yow60SivXtw How to Use an Offset Pivot Point With SL Mesh]&lt;br /&gt;
&lt;br /&gt;
[http://www.youtube.com/watch?v=8FBCxIigIWw How to Install Blender and Blender Addon Scripts]&lt;br /&gt;
&lt;br /&gt;
[http://www.youtube.com/watch?v=Kh6RBvoGo-E How to Use the New Bone Weight Copy 2.5x Script]&lt;br /&gt;
&lt;br /&gt;
=== More tutorials ===&lt;br /&gt;
&lt;br /&gt;
http://blendernewbies.blogspot.com/search/label/Blender%202.5&lt;br /&gt;
&lt;br /&gt;
http://www.blendercookie.com/tag/2-5/&lt;br /&gt;
&lt;br /&gt;
http://www.blenderguru.com/whered-that-button-go/&lt;br /&gt;
&lt;br /&gt;
http://totallyblended.com/New/?page_id=705&lt;br /&gt;
&lt;br /&gt;
http://blendernerd.com/?cat=5&lt;br /&gt;
&lt;br /&gt;
https://sites.google.com/site/satishgoda/blender&lt;br /&gt;
&lt;br /&gt;
http://3d-synthesis.com/tutorialsenglish.html&lt;br /&gt;
&lt;br /&gt;
http://www.youtube.com/user/super3boy              (has been updating his tutorials for 2.5)&lt;br /&gt;
&lt;br /&gt;
http://www.katsbits.com/tutorials/index.php&lt;br /&gt;
&lt;br /&gt;
http://cogfilms.com/index.html&lt;br /&gt;
&lt;br /&gt;
http://www.3dbuzz.com/vbforum/showthread.php?188849-Blender-Fundamentals-First-drop-of-videos-now-available-to-the-public&lt;br /&gt;
&lt;br /&gt;
http://orionstaff.blog84.fc2.com/blog-entry-1566.html&lt;br /&gt;
&lt;br /&gt;
 ==  Blender 2.5x SL Mesh Classes ==&lt;br /&gt;
Beginner SL Mesh Modeling Series&lt;br /&gt;
*Class Level | Building: Beginner(2) | Blender: Beginner&lt;br /&gt;
*Instructor: Ashasekayi Ra&lt;br /&gt;
*Location: Builder&#039;s Brewery Pavilion&lt;br /&gt;
*Time: Saturdays at 10 AM SLT&lt;br /&gt;
&lt;br /&gt;
==  Blender 2.4x specific (legacy) ==&lt;br /&gt;
== Video tutorial ==&lt;br /&gt;
&lt;br /&gt;
http://blog.machinimatrix.org/3d-creation/blender-meshes-trail/&lt;br /&gt;
&#039;&#039;&#039;BlanderMan rigging tutorial [http://vimeo.com/5067809 part 1-1], [http://vimeo.com/5068722 part 1-2], [http://vimeo.com/5070359 part 2]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Simple tube avatar ===&lt;br /&gt;
{{KBvideo|3JHWDdrIeD0|640|505|type=youtube}}&lt;br /&gt;
&lt;br /&gt;
=== Mancandy avatar ===&lt;br /&gt;
{{KBvideo|8w88B7F7v_k|640|505|type=youtube}}&lt;br /&gt;
&lt;br /&gt;
=== Scale to meters ===&lt;br /&gt;
Scaling is somewhat arbitrary in Blender 2.49. In principle you just have to know how the mapping is between your 3D program (Blender) and the target environment (Second Life). Then all you need to do is to work in the correct scale. You even can later rescale your model in your target system.&lt;br /&gt;
&lt;br /&gt;
So, what is the issue with Blender 2.49 ? It is all so simple that the Collada Exporter for Blender assumes that one Measurement Unit is mapped to one real life centimeter. But the common expectation in Second Life is that one Measurement Unit is mapped to 1 Second Life Meter. Unfortunately this missmatch very often leads to the import of &amp;quot;tiny objects&amp;quot;. The common fix is to scale up the models in Blender 2.49 by a factor of 100.&lt;br /&gt;
&lt;br /&gt;
But there is a nicer fix, which adjust the Collada Exporter to behave according to our expectations.&lt;br /&gt;
See this video to find out, how you can fix the Measurement missmatch between Blender-2.49b and Second Life once and for ever:&lt;br /&gt;
&lt;br /&gt;
{{KBvideo|18354783|640|370|type=vimeo}}&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t want to watch the entire video:&lt;br /&gt;
&lt;br /&gt;
find the file &amp;lt;blender script dir&amp;gt;\bpymodules\colladaImEx\translator.py and change these two lines:&lt;br /&gt;
&lt;br /&gt;
 daeAsset.unit.name = &#039;centimeter&#039;&lt;br /&gt;
 daeAsset.unit.meter = &#039;0.01&#039;&lt;br /&gt;
&lt;br /&gt;
to&lt;br /&gt;
&lt;br /&gt;
 daeAsset.unit.name = &#039;meter&#039;&lt;br /&gt;
 daeAsset.unit.meter = &#039;1.00&#039;&lt;br /&gt;
&lt;br /&gt;
To find the scripts directory, do Help &amp;gt; System Information in blender, and look in the text file for &amp;quot;Default dir for scripts:&amp;quot;. The path for me is:&lt;br /&gt;
 C:\Documents and Settings\tapple\Application Data\Blender Foundation\Blender\.blender\scripts&lt;br /&gt;
and thus the file is:&lt;br /&gt;
 C:\Documents and Settings\tapple\Application Data\Blender Foundation\Blender\.blender\scripts\bpymodules\colladaImEx\translator.py&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that this fix is not needed in Blender 2.5x.&lt;/div&gt;</summary>
		<author><name>ErikoLeo Resident</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Mesh/Exporting_a_mesh_from_Blender&amp;diff=1199752</id>
		<title>Mesh/Exporting a mesh from Blender</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Mesh/Exporting_a_mesh_from_Blender&amp;diff=1199752"/>
		<updated>2016-03-17T09:23:49Z</updated>

		<summary type="html">&lt;p&gt;ErikoLeo Resident: /* LOD meshes (with Blender 2.49) */ : added recent information about polygon reduction in blender 2.7x. The paragraph may need to be rewritten( or a new one added) by someone who has a better experience than me.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Multi-lang}}&lt;br /&gt;
{{Navbox/Mesh|tools}}&lt;br /&gt;
== Basic workflow ==&lt;br /&gt;
=== Create your model===&lt;br /&gt;
&lt;br /&gt;
====Some hints:====&lt;br /&gt;
&lt;br /&gt;
# Take care to create low polygon meshes (as few verts as possible)&lt;br /&gt;
# Use no more than 8 face textures (8 materials assignments)&lt;br /&gt;
# Avoid intersecting faces (unless intersections are intended)&lt;br /&gt;
# Avoid duplicate vertices (unless you want to use the split modifier)&lt;br /&gt;
# Avoid creating more than 21844 tris per texture face&lt;br /&gt;
# Avoid creating extremely small polygons (&amp;lt; 0.1 cm edge length)&lt;br /&gt;
# Did i mention you should create low poly models only ? an avatar with &amp;gt; 10000 faces starts getting too heavy ...&lt;br /&gt;
# shoes with 30000 polygons per shoe have 20 times too much faces. really!!! Avoid that!&lt;br /&gt;
# The same is true for hair.&lt;br /&gt;
# Make low polygon meshes !!!&lt;br /&gt;
&lt;br /&gt;
====LOD meshes (with Blender 2.49)====&lt;br /&gt;
# Make sure your blender file is saved&lt;br /&gt;
# Export your full-detail mesh to COLLADA&lt;br /&gt;
# Run Poly Reducer with a poly reduce setting of 0.5 (to reduce your polygon count by half).&lt;br /&gt;
#* If you make any manual changes to tweak the resulting mesh, remember to update the UV map to match.&lt;br /&gt;
# Export your mesh to COLLADA; this will be the &amp;quot;medium&amp;quot; level of detail.&lt;br /&gt;
# Reload your original full-detail mesh. It&#039;s good to start from the full-detail mesh each time to prevent errors from accumulating, though this may not be a significant concern for simple meshes such as attachments.&lt;br /&gt;
# Run Poly Reducer with a poly reduce setting of 0.25 (to reduce your polygon count by three quarters).&lt;br /&gt;
# Export your mesh to COLLADA; this will be your &amp;quot;low&amp;quot; level of detail.&lt;br /&gt;
# Reload your original full-detail mesh.&lt;br /&gt;
# Run Poly Reducer with a poly reduce setting of 0.125 (to reduce your polygon count by seven eighths).&lt;br /&gt;
# Export your mesh to COLLADA; this will be your &amp;quot;lowest&amp;quot; level of detail. You may also want to use this mesh when defining your model&#039;s physics.&lt;br /&gt;
&lt;br /&gt;
Unfortunately the Poly Reducer script is currently only available for version 2.4x of Blender. The &amp;quot;Decimate&amp;quot; modifier is a serviceable substitute but the downside is that you&#039;ll need to redo the UV map for each LOD level.&lt;br /&gt;
according to:[http://blender.stackexchange.com/questions/14501/poly-reducer-issues-in-blender-2-71 &amp;quot;Poly Reducer issues in Blender 2.71&amp;quot; in blender stackexchange], The UV mapping issues have been solved in recent versions&lt;br /&gt;
[https://wiki.blender.org/index.php/Doc:2.4/Manual/Modifiers/Generate/Decimate Decimate Modifier on blender wiki page]&lt;br /&gt;
&lt;br /&gt;
=== Apply textures ===&lt;br /&gt;
&lt;br /&gt;
=== Export to COLLADA ===&lt;br /&gt;
You find the Blender Collada exporter here:&lt;br /&gt;
&lt;br /&gt;
File -&amp;gt; Export -&amp;gt; Collada (Default)&lt;br /&gt;
&lt;br /&gt;
=== Import to SL ===&lt;br /&gt;
This is a tutorial that was originally made for Avastar (a blender addon) but most of the tutorial also fits to arbitrary mesh imports to second Life. So here it is:&lt;br /&gt;
{{KBvideo|u575wa3knUM|640|505|type=youtube}}&lt;br /&gt;
&lt;br /&gt;
== Best Practices ==&lt;br /&gt;
[http://blogs.secondlife.com/message/460796#41935 Forum thread on optimizing your mesh in Blender for Second Life]&lt;br /&gt;
&lt;br /&gt;
[http://blogs.secondlife.com/message/552002#552002 Forum thread on installing Blender]&lt;br /&gt;
=== Bones and rigging ===&lt;br /&gt;
* &#039;&#039;&#039;BVH Animations:&#039;&#039;&#039;  It&#039;s possible to import one of the default BVH animations that can be found linked in the header of the [[Internal_Animations#User-playable_animations]]. This will get you a slightly inaccurate skeleton to work from. Please note that the bones are all the wrong names for mesh import, as mentioned in [[Mesh/Troubleshooting#Rigging]].&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Joints positions:&#039;&#039;&#039; [http://blogs.secondlife.com/message/534554#52305 Forum tip for exporting joint positions with Blender]&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Tool tip&#039;&#039;&#039;: For rigged mesh creation and animation check out [http://blog.machinimatrix.org/Avastar Avastar] this addon might be of help for you (commercial tool).&lt;br /&gt;
&lt;br /&gt;
=== Gotchas and workarounds ===&lt;br /&gt;
&lt;br /&gt;
=== Optimization techniques ===&lt;br /&gt;
&lt;br /&gt;
== Tutorial links ==&lt;br /&gt;
  ==  Blender 2.5x/2.6x specific ==&lt;br /&gt;
&lt;br /&gt;
=== Tutorials available in HD ===&lt;br /&gt;
&lt;br /&gt;
[http://blog.machinimatrix.org/category/mesh/quests/coffee-cups/ Coffee Cup Tutorials (basics)]&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/playlist?list=PLDF8295B062C9BB2F Shoe Quest (making a shoe with Blender)]&lt;br /&gt;
&lt;br /&gt;
[http://blog.machinimatrix.org/optimizing-meshes/ Mesh for sculpted prim creators]&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/playlist?list=PL7541C8D8005D6E53 Avacademy (basic insights to mesh)]&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/playlist?list=PL0A0B36DC6D404D95 Tip Top Tool tips (medium level tips for blender)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.youtube.com/watch?v=6LTWzw9ipyQ Blender 2.49/2.59 Workflow]&lt;br /&gt;
&lt;br /&gt;
[http://www.youtube.com/playlist?list=PL11D6E99BB51A2BB2 Second Life Rigged Clothing Series]&lt;br /&gt;
&lt;br /&gt;
[http://www.youtube.com/user/ashasekayi#grid/user/2A3AF00B41F652ED SL Mesh Video Tutorial Playlist]&lt;br /&gt;
&lt;br /&gt;
[http://www.youtube.com/watch?v=yow60SivXtw How to Use an Offset Pivot Point With SL Mesh]&lt;br /&gt;
&lt;br /&gt;
[http://www.youtube.com/watch?v=8FBCxIigIWw How to Install Blender and Blender Addon Scripts]&lt;br /&gt;
&lt;br /&gt;
[http://www.youtube.com/watch?v=Kh6RBvoGo-E How to Use the New Bone Weight Copy 2.5x Script]&lt;br /&gt;
&lt;br /&gt;
=== More tutorials ===&lt;br /&gt;
&lt;br /&gt;
http://blendernewbies.blogspot.com/search/label/Blender%202.5&lt;br /&gt;
&lt;br /&gt;
http://www.blendercookie.com/tag/2-5/&lt;br /&gt;
&lt;br /&gt;
http://www.blenderguru.com/whered-that-button-go/&lt;br /&gt;
&lt;br /&gt;
http://totallyblended.com/New/?page_id=705&lt;br /&gt;
&lt;br /&gt;
http://blendernerd.com/?cat=5&lt;br /&gt;
&lt;br /&gt;
https://sites.google.com/site/satishgoda/blender&lt;br /&gt;
&lt;br /&gt;
http://3d-synthesis.com/tutorialsenglish.html&lt;br /&gt;
&lt;br /&gt;
http://www.youtube.com/user/super3boy              (has been updating his tutorials for 2.5)&lt;br /&gt;
&lt;br /&gt;
http://www.katsbits.com/tutorials/index.php&lt;br /&gt;
&lt;br /&gt;
http://cogfilms.com/index.html&lt;br /&gt;
&lt;br /&gt;
http://www.3dbuzz.com/vbforum/showthread.php?188849-Blender-Fundamentals-First-drop-of-videos-now-available-to-the-public&lt;br /&gt;
&lt;br /&gt;
http://orionstaff.blog84.fc2.com/blog-entry-1566.html&lt;br /&gt;
&lt;br /&gt;
 ==  Blender 2.5x SL Mesh Classes ==&lt;br /&gt;
Beginner SL Mesh Modeling Series&lt;br /&gt;
*Class Level | Building: Beginner(2) | Blender: Beginner&lt;br /&gt;
*Instructor: Ashasekayi Ra&lt;br /&gt;
*Location: Builder&#039;s Brewery Pavilion&lt;br /&gt;
*Time: Saturdays at 10 AM SLT&lt;br /&gt;
&lt;br /&gt;
==  Blender 2.4x specific (legacy) ==&lt;br /&gt;
== Video tutorial ==&lt;br /&gt;
&lt;br /&gt;
http://blog.machinimatrix.org/3d-creation/blender-meshes-trail/&lt;br /&gt;
&#039;&#039;&#039;BlanderMan rigging tutorial [http://vimeo.com/5067809 part 1-1], [http://vimeo.com/5068722 part 1-2], [http://vimeo.com/5070359 part 2]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Simple tube avatar ===&lt;br /&gt;
{{KBvideo|3JHWDdrIeD0|640|505|type=youtube}}&lt;br /&gt;
&lt;br /&gt;
=== Mancandy avatar ===&lt;br /&gt;
{{KBvideo|8w88B7F7v_k|640|505|type=youtube}}&lt;br /&gt;
&lt;br /&gt;
=== Scale to meters ===&lt;br /&gt;
Scaling is somewhat arbitrary in Blender 2.49. In principle you just have to know how the mapping is between your 3D program (Blender) and the target environment (Second Life). Then all you need to do is to work in the correct scale. You even can later rescale your model in your target system.&lt;br /&gt;
&lt;br /&gt;
So, what is the issue with Blender 2.49 ? It is all so simple that the Collada Exporter for Blender assumes that one Measurement Unit is mapped to one real life centimeter. But the common expectation in Second Life is that one Measurement Unit is mapped to 1 Second Life Meter. Unfortunately this missmatch very often leads to the import of &amp;quot;tiny objects&amp;quot;. The common fix is to scale up the models in Blender 2.49 by a factor of 100.&lt;br /&gt;
&lt;br /&gt;
But there is a nicer fix, which adjust the Collada Exporter to behave according to our expectations.&lt;br /&gt;
See this video to find out, how you can fix the Measurement missmatch between Blender-2.49b and Second Life once and for ever:&lt;br /&gt;
&lt;br /&gt;
{{KBvideo|18354783|640|370|type=vimeo}}&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t want to watch the entire video:&lt;br /&gt;
&lt;br /&gt;
find the file &amp;lt;blender script dir&amp;gt;\bpymodules\colladaImEx\translator.py and change these two lines:&lt;br /&gt;
&lt;br /&gt;
 daeAsset.unit.name = &#039;centimeter&#039;&lt;br /&gt;
 daeAsset.unit.meter = &#039;0.01&#039;&lt;br /&gt;
&lt;br /&gt;
to&lt;br /&gt;
&lt;br /&gt;
 daeAsset.unit.name = &#039;meter&#039;&lt;br /&gt;
 daeAsset.unit.meter = &#039;1.00&#039;&lt;br /&gt;
&lt;br /&gt;
To find the scripts directory, do Help &amp;gt; System Information in blender, and look in the text file for &amp;quot;Default dir for scripts:&amp;quot;. The path for me is:&lt;br /&gt;
 C:\Documents and Settings\tapple\Application Data\Blender Foundation\Blender\.blender\scripts&lt;br /&gt;
and thus the file is:&lt;br /&gt;
 C:\Documents and Settings\tapple\Application Data\Blender Foundation\Blender\.blender\scripts\bpymodules\colladaImEx\translator.py&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that this fix is not needed in Blender 2.5x.&lt;/div&gt;</summary>
		<author><name>ErikoLeo Resident</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=MLPV2_Ball_Script_with_more_flexible_parameters&amp;diff=1199217</id>
		<title>MLPV2 Ball Script with more flexible parameters</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=MLPV2_Ball_Script_with_more_flexible_parameters&amp;diff=1199217"/>
		<updated>2016-02-24T06:46:24Z</updated>

		<summary type="html">&lt;p&gt;ErikoLeo Resident: Added the missing &amp;lt;/source&amp;gt; tag, removed the &amp;lt;/lsl&amp;gt; and &amp;lt;/LSL&amp;gt; obsolete(?) ones. The whole script now displays correctly.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[MLPV2]]&lt;br /&gt;
* Back to [[MLPV2_Addons]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
// ~capture Script V1.01&lt;br /&gt;
// drop into a ball&lt;br /&gt;
//&lt;br /&gt;
//MLPV2.4z9&lt;br /&gt;
//Chaz edit 2012 to give control over (1) how visible adjusting beams are, (2) how high up balls rez, and (3) and over floating text on balls&lt;br /&gt;
//that&#039;s the only change, to make these parameters easily accessible and put them all in one section near top of script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// MLPV2 Version 2 by Learjeff Innis.  Based on&lt;br /&gt;
// MLP MULTI-LOVE-POSE V1.2 - Copyright (c) 2006, by Miffy Fluffy (BSD License)&lt;br /&gt;
&lt;br /&gt;
// To make ball phantom, put &amp;quot;*&amp;quot; as the first character in the ball&#039;s description&lt;br /&gt;
// or just make the ball phantom (which really works better for HUDs).&lt;br /&gt;
// The rest of the description, if any, is used for the sit pie menu and floating text.&lt;br /&gt;
// To make this take effect, use STOP to unrez the balls, and then select any pose.&lt;br /&gt;
&lt;br /&gt;
// v2.4j - cancel old listen on rez&lt;br /&gt;
// v2.4m - handle control keys! To enable, begin ~ball description with a plus sign (&amp;quot;+&amp;quot;), following &amp;quot;*&amp;quot; if any.&lt;br /&gt;
// v2.4p - page up &amp;amp; down to enable/disable adjustment&lt;br /&gt;
// v2.4x - moved SitTarget to top.&lt;br /&gt;
&lt;br /&gt;
//chaz adjustable parameters start&lt;br /&gt;
float AdjustBeamTransparency = 0.4; //0.1 is practically invisible; 1.0 is solid (0.0 &amp;lt;= alpha &amp;lt;= 1.0) &lt;br /&gt;
string BallFloatingText = &amp;quot;&amp;quot;;//any floating text to display above the balls&lt;br /&gt;
vector  SitTarget       = &amp;lt;0.,0.,-.5&amp;gt;;   // Change this to &amp;lt;0.,0.,-.15&amp;gt; or lower, to raise balls above cushion&lt;br /&gt;
//chaz adjustable parameters end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vector  SitTargetRef    = &amp;lt;0.,0.,.1&amp;gt;;   // Don&#039;t change this, unless you&#039;re replacing earlier versions&lt;br /&gt;
                                        // with a custom SitTarget.  In that case, set to match SitTarget.&lt;br /&gt;
&lt;br /&gt;
integer ADJUSTABLE  = FALSE;&lt;br /&gt;
float   DELTA       = 0.01;        // cm to move&lt;br /&gt;
float   EPSILON     = 0.005;       // cm position error tolerance, should be about half delta&lt;br /&gt;
vector  Offset;&lt;br /&gt;
vector  BallPos;&lt;br /&gt;
rotation BallRot;&lt;br /&gt;
&lt;br /&gt;
key     NullKey = NULL_KEY;&lt;br /&gt;
&lt;br /&gt;
integer Chan;&lt;br /&gt;
integer Group;&lt;br /&gt;
integer visible = TRUE;&lt;br /&gt;
integer Adjusting;&lt;br /&gt;
key     Avatar;&lt;br /&gt;
string  Name;&lt;br /&gt;
integer ListenHandle;&lt;br /&gt;
&lt;br /&gt;
integer ControlsActive;&lt;br /&gt;
&lt;br /&gt;
// 15 color support, thanks to Liz Silverstein&lt;br /&gt;
// Color is passed as a string by object chat (from menu via poser*)&lt;br /&gt;
    &lt;br /&gt;
list colors = [ &amp;lt;0.0,0.0,0.0&amp;gt;,          // 0 = HIDE&lt;br /&gt;
                &amp;lt;0.835,0.345,0.482&amp;gt;,    // 1 = PINK&lt;br /&gt;
                &amp;lt;0.353,0.518,0.827&amp;gt;,    // 2 = BLUE&lt;br /&gt;
                &amp;lt;0.635,0.145,0.282&amp;gt;,    // 3 = PINK2 - Dark pink&lt;br /&gt;
                &amp;lt;0.153,0.318,0.627&amp;gt;,    // 4 = BLUE2 - Dark blue&lt;br /&gt;
                &amp;lt;0.128,0.500,0.128&amp;gt;,    // 5 = GREEN&lt;br /&gt;
                &amp;lt;1.000,0.000,1.000&amp;gt;,    // 6 = MAGENTA&lt;br /&gt;
                &amp;lt;1.000,0.000,0.000&amp;gt;,    // 7 = RED&lt;br /&gt;
                &amp;lt;1.000,0.500,0.000&amp;gt;,    // 8 = ORANGE&lt;br /&gt;
                &amp;lt;1.000,1.000,1.000&amp;gt;,    // 9 = WHITE&lt;br /&gt;
                &amp;lt;0.0,0.0,0.0&amp;gt;,          // 10 = BLACK&lt;br /&gt;
                &amp;lt;1.0,1.0,0.0&amp;gt;,          // 11 = YELLOW&lt;br /&gt;
                &amp;lt;0.0,0.8,0.8&amp;gt;,          // 12 = CYAN&lt;br /&gt;
                &amp;lt;0.5,0.0,0.0&amp;gt;,          // 13 = RED2&lt;br /&gt;
                &amp;lt;0.0,0.5,0.5&amp;gt;,          // 14 = TEAL&lt;br /&gt;
                &amp;lt;0.0,0.25,0.25&amp;gt;];       // 15 = GREEN2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
handle_control(key id, integer level, integer change) {&lt;br /&gt;
&lt;br /&gt;
    if (Avatar == NullKey) {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    if ((level &amp;amp; CONTROL_UP) &amp;amp;&amp;amp; (level &amp;amp; CONTROL_DOWN)) {&lt;br /&gt;
        ControlsActive = ! ControlsActive;&lt;br /&gt;
        if (ControlsActive) {&lt;br /&gt;
            control_active();&lt;br /&gt;
        } else {&lt;br /&gt;
            control_ready();&lt;br /&gt;
        }&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    if (!ControlsActive) {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    if (level &amp;amp; CONTROL_UP) {&lt;br /&gt;
        Offset.z += DELTA;&lt;br /&gt;
    } else if (level &amp;amp; CONTROL_DOWN) {&lt;br /&gt;
        Offset.z -= DELTA;&lt;br /&gt;
    } else if (level &amp;amp; CONTROL_LEFT) {&lt;br /&gt;
        Offset.y += DELTA;&lt;br /&gt;
    } else if (level &amp;amp; CONTROL_RIGHT) {&lt;br /&gt;
        Offset.y -= DELTA;&lt;br /&gt;
    } else if (level &amp;amp; CONTROL_FWD) {&lt;br /&gt;
        Offset.x += DELTA;&lt;br /&gt;
    } else if (level &amp;amp; CONTROL_BACK) {&lt;br /&gt;
        Offset.x -= DELTA;&lt;br /&gt;
    } else {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    llSetPos(BallPos + Offset * BallRot + SitTargetRef - SitTarget);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// enter &amp;quot;control ready&amp;quot; state.&lt;br /&gt;
control_ready() {&lt;br /&gt;
    ControlsActive = 0;&lt;br /&gt;
    integer controls = CONTROL_UP | CONTROL_DOWN;&lt;br /&gt;
&lt;br /&gt;
    llTakeControls(controls, TRUE, FALSE);&lt;br /&gt;
    llInstantMessage(Avatar, &amp;quot;Allow adjusting your position by pressing Pgup and Pgdn keys at the same time&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
control_active() {&lt;br /&gt;
    integer controls = CONTROL_UP | CONTROL_DOWN | CONTROL_LEFT | CONTROL_RIGHT | CONTROL_FWD | CONTROL_BACK;&lt;br /&gt;
&lt;br /&gt;
    llTakeControls(controls, TRUE, FALSE);&lt;br /&gt;
    llInstantMessage(Avatar, &amp;quot;Adjust your position using Pgup/Pgdn, Up/Down arrow, and shift-left/right arrow keys\nDisable by pressing Pgup and Pgdn keys at the same time&amp;quot;);&lt;br /&gt;
    BallPos = llGetPos() + SitTarget - SitTargetRef;&lt;br /&gt;
    BallRot = llGetRot();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
render() {&lt;br /&gt;
    if (!visible || (Avatar != NullKey &amp;amp;&amp;amp; !Adjusting)) {&lt;br /&gt;
        // hidden&lt;br /&gt;
        llSetScale(&amp;lt;0.01,0.01,0.01&amp;gt;);&lt;br /&gt;
        llSetAlpha(0.0, ALL_SIDES);&lt;br /&gt;
        llSetText(BallFloatingText,&amp;lt;1.0,1.0,1.0&amp;gt;,0.0);    &lt;br /&gt;
    } else if (Avatar != NullKey &amp;amp;&amp;amp; Adjusting) {&lt;br /&gt;
        // sitting and adjusting&lt;br /&gt;
        llSetAlpha(AdjustBeamTransparency,ALL_SIDES);&lt;br /&gt;
        llSetText(&amp;quot;Adjust&amp;quot;,&amp;lt;1.0,1.0,1.0&amp;gt;,1.0);&lt;br /&gt;
        llSetScale(&amp;lt;0.1,0.1,5.0&amp;gt;);&lt;br /&gt;
    } else {&lt;br /&gt;
        // shown&lt;br /&gt;
        llSetAlpha(1.0, ALL_SIDES);&lt;br /&gt;
        llSetScale(&amp;lt;0.2,0.2,0.2&amp;gt;);&lt;br /&gt;
        if (Adjusting) {&lt;br /&gt;
            llSetText(&amp;quot;Adjust&amp;quot;,&amp;lt;1.0,1.0,1.0&amp;gt;,1.0);&lt;br /&gt;
        } else {&lt;br /&gt;
            //chaz edit&lt;br /&gt;
            llSetText(BallFloatingText,&amp;lt;1.0,1.0,1.0&amp;gt;,1.0);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
show() {&lt;br /&gt;
    visible = TRUE;&lt;br /&gt;
    render();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
hide() {&lt;br /&gt;
    visible = FALSE;&lt;br /&gt;
    render();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default {&lt;br /&gt;
    on_rez(integer channel) {&lt;br /&gt;
        Name = llGetObjectDesc();&lt;br /&gt;
        if (Name == &amp;quot;&amp;quot; || Name == &amp;quot;(No Description)&amp;quot;) {&lt;br /&gt;
            //chaz edit&lt;br /&gt;
            Name = &amp;quot;&amp;quot;;&lt;br /&gt;
        } else {&lt;br /&gt;
            if (llSubStringIndex(Name, &amp;quot;*&amp;quot;) == 0) {&lt;br /&gt;
                llSetPrimitiveParams([PRIM_PHANTOM, TRUE]);&lt;br /&gt;
                Name = llGetSubString(Name, 1, -1);&lt;br /&gt;
            }&lt;br /&gt;
            if (llSubStringIndex(Name, &amp;quot;+&amp;quot;) == 0) {&lt;br /&gt;
                ADJUSTABLE = TRUE;&lt;br /&gt;
                Name = llGetSubString(Name, 1, -1);&lt;br /&gt;
            }&lt;br /&gt;
            if (Name == &amp;quot;none&amp;quot;) {&lt;br /&gt;
                Name = &amp;quot;&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        llSitTarget(SitTarget, ZERO_ROTATION);&lt;br /&gt;
        if (Name != &amp;quot;&amp;quot;) {&lt;br /&gt;
            llSetSitText(Name);&lt;br /&gt;
        } else {&lt;br /&gt;
            llSetSitText(&amp;quot;&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        Avatar = NullKey;&lt;br /&gt;
        Chan = channel;&lt;br /&gt;
        Group = 0;&lt;br /&gt;
        &lt;br /&gt;
        if (ListenHandle) {&lt;br /&gt;
            llListenRemove(ListenHandle);&lt;br /&gt;
            ListenHandle = 0;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if (Chan != 0) {&lt;br /&gt;
            ListenHandle = llListen(Chan,&amp;quot;&amp;quot;,NullKey,&amp;quot;&amp;quot;);&lt;br /&gt;
            // start timer unless ball was dragged from inv&lt;br /&gt;
            llSetTimerEvent(180.0);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        if (llGetObjectDesc() == &amp;quot;ADJUSTABLE&amp;quot;) {&lt;br /&gt;
            ADJUSTABLE = TRUE;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    changed(integer change) {&lt;br /&gt;
        if (change != CHANGED_LINK) return;&lt;br /&gt;
        Avatar = llAvatarOnSitTarget();&lt;br /&gt;
        if (Avatar != NullKey) {&lt;br /&gt;
&lt;br /&gt;
            if (Group) {&lt;br /&gt;
                if (!llSameGroup(Avatar)) {&lt;br /&gt;
                    llUnSit(Avatar);&lt;br /&gt;
                    llWhisper(0,&amp;quot;no permission to use poseball&amp;quot;);&lt;br /&gt;
                    return;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            if (ADJUSTABLE) {&lt;br /&gt;
                llRequestPermissions(Avatar, PERMISSION_TAKE_CONTROLS);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        llSay(Chan+8,(string)Avatar);     //requests perm, sets animation&lt;br /&gt;
        render();&lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    listen(integer channel, string name, key object, string str) {&lt;br /&gt;
        integer ix;&lt;br /&gt;
        ix = llSubStringIndex(str,&amp;quot;&amp;gt;&amp;quot;);    &lt;br /&gt;
        if (ix != -1) {&lt;br /&gt;
            BallPos = (vector)llGetSubString(str,0,ix);&lt;br /&gt;
            BallRot = (rotation)llGetSubString(str,ix+1,-1);&lt;br /&gt;
            llSetPos(BallPos + SitTargetRef - SitTarget);&lt;br /&gt;
            llSetRot(BallRot);&lt;br /&gt;
        } else if (str == &amp;quot;0&amp;quot;) {    //HIDE&lt;br /&gt;
            hide();&lt;br /&gt;
        } else if (str == &amp;quot;SHOW&amp;quot;) { //SHOW&lt;br /&gt;
            show();&lt;br /&gt;
        } else if (str == &amp;quot;ADJUST|1&amp;quot;) {&lt;br /&gt;
            Adjusting = TRUE;&lt;br /&gt;
            render();&lt;br /&gt;
        } else if (str == &amp;quot;ADJUST|0&amp;quot;) {&lt;br /&gt;
            Adjusting = FALSE;&lt;br /&gt;
            render();&lt;br /&gt;
        } else if (str == &amp;quot;SAVE&amp;quot;) {&lt;br /&gt;
            llSay(Chan+16,(string)(llGetPos() + SitTarget - SitTargetRef)+(string)llGetRot());&lt;br /&gt;
        } else if (str == &amp;quot;GROUP&amp;quot;) {&lt;br /&gt;
            Group = 1;&lt;br /&gt;
        } else if (str == &amp;quot;ALL&amp;quot;) {&lt;br /&gt;
            Group = 0;&lt;br /&gt;
        } else if (str == &amp;quot;DIE&amp;quot;) {&lt;br /&gt;
            llSay(Chan+8, (string)NullKey);    //msg to poser (don&#039;t reanimate after STOP)&lt;br /&gt;
            llDie();&lt;br /&gt;
        } else if (str == &amp;quot;LIVE&amp;quot;) {&lt;br /&gt;
            llSetTimerEvent(180.0);&lt;br /&gt;
            // llSay(Chan+8,&amp;quot;ALIVE&amp;quot;);    //msg to poser -&amp;gt; to menu&lt;br /&gt;
        } else {&lt;br /&gt;
            list ldata = llParseString2List(str, [&amp;quot;|&amp;quot;], []);&lt;br /&gt;
            integer colorIx = (integer) llList2String(ldata,0);&lt;br /&gt;
            string ballIx = llList2String(ldata,1);&lt;br /&gt;
            Adjusting = (integer) llList2String(ldata,2);&lt;br /&gt;
            if ((colorIx &amp;gt; 0) &amp;amp;&amp;amp; (colorIx &amp;lt; 16)) { // this must be a color setting  &lt;br /&gt;
                llSetColor(llList2Vector(colors, colorIx),ALL_SIDES);     //pull the color out of the list&lt;br /&gt;
                render();&lt;br /&gt;
                llSetObjectName(&amp;quot;~ball&amp;quot; + ballIx);&lt;br /&gt;
                BallPos = llGetPos() + SitTarget - SitTargetRef;&lt;br /&gt;
                BallRot = llGetRot();&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    timer() {                       //not heard &amp;quot;LIVE&amp;quot; from menu for a while: suicide&lt;br /&gt;
        llDie();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    run_time_permissions(integer perm) &lt;br /&gt;
    { &lt;br /&gt;
        if (llKey2Name(Avatar) == &amp;quot;&amp;quot;) {&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
        if (Avatar != llGetPermissionsKey()) {&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if (perm &amp;amp; PERMISSION_TAKE_CONTROLS) {&lt;br /&gt;
            control_ready();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    moving_end() {&lt;br /&gt;
        vector newpos = llGetPos() + SitTarget - SitTargetRef;&lt;br /&gt;
        if (llVecMag(newpos - (BallPos + Offset)) &amp;gt; EPSILON) {&lt;br /&gt;
            // we didn&#039;t move it, someone else did.  Deal with it.&lt;br /&gt;
            BallPos = newpos;&lt;br /&gt;
        }&lt;br /&gt;
        BallRot = llGetRot();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    control(key id, integer level, integer change) {&lt;br /&gt;
        handle_control(id, level, change);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:MLPV2]]&lt;/div&gt;</summary>
		<author><name>ErikoLeo Resident</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:ErikoLeo_Resident&amp;diff=1199066</id>
		<title>User:ErikoLeo Resident</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:ErikoLeo_Resident&amp;diff=1199066"/>
		<updated>2016-02-08T13:06:14Z</updated>

		<summary type="html">&lt;p&gt;ErikoLeo Resident: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__FORCETOC__&lt;br /&gt;
Blank at the moment.&lt;br /&gt;
== SL and I ==&lt;br /&gt;
== Scripts ==&lt;br /&gt;
== Links ==&lt;br /&gt;
* [https://my.secondlife.com/erikoleo My SL profile]&lt;br /&gt;
* [https://www.flickr.com/photos/erikoleo/ Fickr Photostream]&lt;br /&gt;
* [http://slfreelancers.yooco.org/profile/Erikoleo.html FreeLancer&#039;s Page]&lt;br /&gt;
&lt;br /&gt;
Note: All my &amp;quot;creative&amp;quot; contributions are licensed CC-BY-SA according to the [[Project:Terms of Use]]. As I do think that [http://creativecommons.org/ Creative Commons] licenses do not apply well to code, I prefer to license code parts under [http://www.gnu.org/licenses/gpl-3.0.en.html gnu GPL 3.0+] (and further), which should be used in case of license misfit. Both licenses share the same will of making quality software publicly accessible, and defend &amp;quot;fair use&amp;quot;. There are endless debates and conflicts about the two licenses, my opinion is that CC licenses apply where legal conflicts with  Authors rights may arise: Any kind of graphic or plastic arts, writings, choregraphy ...(all of them are mostly data), GPL is best suited for software, I mean programs and algorithms that make a machine or a program perform a sequence of actions.&lt;/div&gt;</summary>
		<author><name>ErikoLeo Resident</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:ErikoLeo_Resident&amp;diff=1199065</id>
		<title>User:ErikoLeo Resident</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:ErikoLeo_Resident&amp;diff=1199065"/>
		<updated>2016-02-08T12:55:50Z</updated>

		<summary type="html">&lt;p&gt;ErikoLeo Resident: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Blank at the moment.&lt;br /&gt;
== SL and I ==&lt;br /&gt;
== Scripts ==&lt;br /&gt;
== Links ==&lt;br /&gt;
* [https://my.secondlife.com/erikoleo My SL profile]&lt;br /&gt;
* [https://www.flickr.com/photos/erikoleo/ Fickr Photostream]&lt;br /&gt;
* [http://slfreelancers.yooco.org/profile/Erikoleo.html FreeLancer&#039;s Page]&lt;br /&gt;
&lt;br /&gt;
Note: All my &amp;quot;creative&amp;quot; contributions are licensed CC-BY-SA according to the [[Project:Terms of Use]]. As I do think that [http://creativecommons.org/ Creative Commons] licenses do not apply well to code, I prefer to license code parts under [http://www.gnu.org/licenses/gpl-3.0.en.html gnu GPL 3.0+] (and further), which should be used in case of license misfit. Both licenses share the same will of making quality software publicly accessible, and defend &amp;quot;fair use&amp;quot;. There are endless debates and conflicts about the two licenses, my opinion is that CC licenses apply where legal conflicts with  Authors rights may arise: Any kind of graphic or plastic arts, writings, choregraphy ...(all of them are mostly data), GPL is best suited for software, I mean programs and algorithms that make a machine or a program perform a sequence of actions.&lt;/div&gt;</summary>
		<author><name>ErikoLeo Resident</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:ErikoLeo_Resident&amp;diff=1199064</id>
		<title>User:ErikoLeo Resident</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:ErikoLeo_Resident&amp;diff=1199064"/>
		<updated>2016-02-08T11:51:58Z</updated>

		<summary type="html">&lt;p&gt;ErikoLeo Resident: Eriko&amp;#039; User page: scripting and design activities&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Blank at the moment.&lt;/div&gt;</summary>
		<author><name>ErikoLeo Resident</name></author>
	</entry>
</feed>