{"id":642,"date":"2010-05-19T10:50:59","date_gmt":"2010-05-19T09:50:59","guid":{"rendered":"http:\/\/www.feedingedge.co.uk\/blog\/?p=642"},"modified":"2010-05-19T11:54:23","modified_gmt":"2010-05-19T10:54:23","slug":"opensimsecond-life-vs-unity3d","status":"publish","type":"post","link":"https:\/\/www.feedingedge.co.uk\/blog\/2010\/05\/19\/opensimsecond-life-vs-unity3d\/","title":{"rendered":"Opensim\/Second Life Vs Unity3d"},"content":{"rendered":"\n<div class=\"twitter-share\"><a href=\"https:\/\/twitter.com\/intent\/tweet?via=epredator\" class=\"twitter-share-button\">Tweet<\/a><\/div>\n<p>I actually get asked a lot about how Unity3d stacks up against <a href=\"http:\/\/opensimulator.org\">Opensim<\/a><a href=\"http:\/\/secondlife.com\">\/Second Life<\/a>. This question is usually based on wanting to use a virtual world metaphor to replicate what Opensim\/Second Life do but with a visually very rich browser based client such as Unity3d.<br \/>\nThere is an immediate clash of ideas here though and a degree of understanding that <a href=\"http:\/\/www.unity3d.com\">Unity3d<\/a> is not comparable in the usual sense with SecondLife\/OpenSim.<br \/>\nAt its very heart you really have to consider Opensim and Second Life as being about being a server, that happens to have a client to look at it. Unity3d is primarily a client that can talk to other things such as servers but really does not have to to be what it needs to be.<br \/>\nNow this is not a 100% black and white description but it is worth taking these perspectives to understand what you might want to do with either type of platform.<br \/>\nEverything from an Opensim style server is sent to all the clients that need to know. The shapes, the textures, the position of people etc. When you create things in SL you are really telling a server to remember some things and then distribute them. Clearly some caching occurs as everything is not sent every time, but as the environment is designed to be constantly changing in every way it has to be down to the server to be in charge.<br \/>\n<a href=\"http:\/\/www.feedingedge.co.uk\/blog\/wp-content\/uploads\/2010\/05\/slopensim.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.feedingedge.co.uk\/blog\/wp-content\/uploads\/2010\/05\/slopensim-300x261.png\" alt=\"\" title=\"OpensimSecondLife\" width=\"300\" height=\"261\" class=\"aligncenter size-medium wp-image-641\" srcset=\"https:\/\/www.feedingedge.co.uk\/blog\/wp-content\/uploads\/2010\/05\/slopensim-300x261.png 300w, https:\/\/www.feedingedge.co.uk\/blog\/wp-content\/uploads\/2010\/05\/slopensim.png 548w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><br \/>\nNow compare this to an &#8220;level&#8221; created in Unity3d. Typically you build all the assets into the unity3d file that is delivered to the client. i.e. its a stand alone fully interactive environment. That may be space invaders, car racing, a FPS shooter or an island to walk around.<br \/>\n<a href=\"http:\/\/www.feedingedge.co.uk\/blog\/wp-content\/uploads\/2010\/05\/unity3d.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.feedingedge.co.uk\/blog\/wp-content\/uploads\/2010\/05\/unity3d-300x78.png\" alt=\"\" title=\"unity3d\" width=\"300\" height=\"78\" class=\"aligncenter size-medium wp-image-640\" srcset=\"https:\/\/www.feedingedge.co.uk\/blog\/wp-content\/uploads\/2010\/05\/unity3d-300x78.png 300w, https:\/\/www.feedingedge.co.uk\/blog\/wp-content\/uploads\/2010\/05\/unity3d.png 503w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><br \/>\nEach person has their own self contained highly rich and interactive environment, <a href=\"http:\/\/unity3d.com\/gallery\/live-demos\/tropical-paradise\">such as this exampl<\/a>e. That is the base of what Unity3d does. It understands physics, ragdoll animations, lighting, directional audio etc. All the elements that make an engaging experience with interactive objects and good graphic design and sound design.<br \/>\nNow as unity3d is a container for programming it is able to use network connectivity to be asked to talk to other things. Generally this is brokered by a type of server. Something has to know that 2,3 or many clients are in some way related.<br \/>\nThe simplest example is the <a href=\"http:\/\/smartfoxserver.com\/labs\/API\/\">Smartfox server multiplayer island demo<\/a>.<br \/>\nSmartfox is a state server. It remembers things, and knows how to tell other things connected to it that those things have changed. That does not mean it will just know about everything in a unity3d scene. It its down to developers and designer to determine what information should be shared.<br \/>\n<a href=\"http:\/\/www.feedingedge.co.uk\/blog\/wp-content\/uploads\/2010\/05\/unityserver.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.feedingedge.co.uk\/blog\/wp-content\/uploads\/2010\/05\/unityserver-300x214.png\" alt=\"\" title=\"unityserver\" width=\"300\" height=\"214\" class=\"aligncenter size-medium wp-image-639\" srcset=\"https:\/\/www.feedingedge.co.uk\/blog\/wp-content\/uploads\/2010\/05\/unityserver-300x214.png 300w, https:\/\/www.feedingedge.co.uk\/blog\/wp-content\/uploads\/2010\/05\/unityserver.png 511w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><br \/>\nIn the case above a set of unity clients all have objects numbered 1, 2 and 3 in them. It may be a ball, a person and a flock of birds in that order.<br \/>\n<a href=\"http:\/\/www.feedingedge.co.uk\/blog\/wp-content\/uploads\/2010\/05\/Snapz-Pro-XScreenSnapz051.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.feedingedge.co.uk\/blog\/wp-content\/uploads\/2010\/05\/Snapz-Pro-XScreenSnapz051-300x276.jpg\" alt=\"\" title=\"Unity gulls\" width=\"300\" height=\"276\" class=\"aligncenter size-medium wp-image-647\" srcset=\"https:\/\/www.feedingedge.co.uk\/blog\/wp-content\/uploads\/2010\/05\/Snapz-Pro-XScreenSnapz051-300x276.jpg 300w, https:\/\/www.feedingedge.co.uk\/blog\/wp-content\/uploads\/2010\/05\/Snapz-Pro-XScreenSnapz051.jpg 806w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><br \/>\nWhen the first client moves object number 1 smartfox on your own remote web server somewhere in the ether is just told some basic information about the state of that ball. Its not here now its here. Each of the other unity clients is connected to the same context. Hence they are told by the server to find object number 1 and move it to the new position. Now in gaming terms each of those clients might be a completely different view of the shared system. The first 2 might be a first person view, the thirds might be a 2d top down map view which has no 3d element to it at all.  All they know is the object they consider to be object number 1 has moved.<br \/>\nIn addition object number 3 in this example never shares any changes with the other clients. The server does not know anything about it and in the unity3d client it claims no network resources.<br \/>\nThis sort of game object is one that is about atmosphere, or one that has no real need to waste network sending changes around. In the island example form unity3d this is a flock of seagulls on the island. They are a highly animated, highly dynamic flock of birds, with sound, yet technically in each client they are not totally the same.<br \/>\n(Now SL and Opensim use principle this for things such as particles and clouds but that is designed in)<br \/>\nFor each user they merely see and hear seagulls, they have a degree of shared experience.<br \/>\nGames constantly have to balance the lag and data requirements of sending all this information around versus things that add to the experience. If multiplayer users need to have a common point of reference and it needs to be precise then it needs to be shared. e.g. in a racing game, the track does not change for each person. However debris and the position of other cars does.<br \/>\nIn dealing with a constantly changing environment unity3d is able to be told to dynamically load new scenes and new objects in that scene, but you have to design and decide what to do. Typically things are in the scene but hidden or generated procedurally. i.e. the flock of seagulls copies the seagull object and puts it in the flock.<br \/>\nOne of the elements of dealing the network lag in shuffling all this information around is interpolation. Again in a car example typically if a car is travelling north at 100 mph there if the client does not hear anything about the car position for a few milliseconds it can guess where the car should be.<br \/>\nVery often virtual worlds people will approach a game client expecting a game engine to be the actual server packaged, like wise game focused people will approach virtual worlds as a client not a server.<br \/>\nNow as I said this is not black and white, but opensim and secondlife and the other virtual world runnable services and toolkits are a certain collection of middleware to perform a defined task. Unity3d is a games development client that with the right programmers and designers can make anything, including a virtual world.<\/p>\n<p>*Update (I meant to link this in the post(thanks Jeroen Frans for telling me \ud83d\ude42  but hit send too early!)<br \/>\nRezzable have been working on a <a href=\"http:\/\/nwn.blogs.com\/nwn\/2010\/05\/opensim-unity.html\">unity3d client with opensim<\/a>, specifically trying to extract the prims from opensim and create unity meshes.  <\/p>\n<p>Unity3d and voice is another question. Even in SL and Opensim voice is yet another server, it just so happens than who is in the voice chat with you is brokered by the the main server. Hence when comparing to unity3d again, you need a voice server, you need to programatically hook in what you want to do with voice.<br \/>\nAs I have said before though, and as is already happening to some degree some developers are managing to blend thing such as the persistence of the opensim server with a unity3d client.<br \/>\nFinally in the virtual world context in trying to compare a technology or set of technologies we actually have a third model of working. A moderately philosophical point, but in trying use virtual worlds to create mirror worlds at any level will suffer from the model we are basing it on, name the world. The world is not really a server and we are not really clients. We are all in the same ecosystem, what happens for one happens for all.<br \/>\n<a href=\"http:\/\/www.feedingedge.co.uk\/blog\/wp-content\/uploads\/2010\/05\/realworld.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.feedingedge.co.uk\/blog\/wp-content\/uploads\/2010\/05\/realworld-300x255.png\" alt=\"\" title=\"realworld\" width=\"300\" height=\"255\" class=\"aligncenter size-medium wp-image-638\" srcset=\"https:\/\/www.feedingedge.co.uk\/blog\/wp-content\/uploads\/2010\/05\/realworld-300x255.png 300w, https:\/\/www.feedingedge.co.uk\/blog\/wp-content\/uploads\/2010\/05\/realworld.png 461w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<iframe src=\"http:\/\/www.facebook.com\/plugins\/like.php?href=https%3A%2F%2Fwww.feedingedge.co.uk%2Fblog%2F2010%2F05%2F19%2Fopensimsecond-life-vs-unity3d%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light&amp;height=80\" scrolling=\"no\" frameborder=\"0\" style=\"border:none; overflow:hidden; width:450px; height:80px;\" allowTransparency=\"true\"><\/iframe><div name=\"googleone_share_1\" style=\"position:relative;z-index:5;float: right; margin-left: 10px;\"><g:plusone size=\"tall\" count=\"1\" href=\"https:\/\/www.feedingedge.co.uk\/blog\/2010\/05\/19\/opensimsecond-life-vs-unity3d\/\"><\/g:plusone><\/div>","protected":false},"excerpt":{"rendered":"<p>I actually get asked a lot about how Unity3d stacks up against Opensim\/Second Life. This question is usually based on wanting to use a virtual world metaphor to replicate what Opensim\/Second Life do but with a visually very rich browser based client such as Unity3d. There is an immediate clash of ideas here though and<br \/>\n            <span class=\"excerpt-readmore\"><a class=\"more-link\" href=\"https:\/\/www.feedingedge.co.uk\/blog\/2010\/05\/19\/opensimsecond-life-vs-unity3d\/\"><\/a><\/span><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[81,61,5,46],"tags":[210,159,33],"class_list":["post-642","post","type-post","status-publish","format-standard","hentry","category-future","category-games","category-metaverse","category-unity3d","tag-comparison","tag-opensim","tag-secondlife"],"_links":{"self":[{"href":"https:\/\/www.feedingedge.co.uk\/blog\/wp-json\/wp\/v2\/posts\/642","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.feedingedge.co.uk\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.feedingedge.co.uk\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.feedingedge.co.uk\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.feedingedge.co.uk\/blog\/wp-json\/wp\/v2\/comments?post=642"}],"version-history":[{"count":10,"href":"https:\/\/www.feedingedge.co.uk\/blog\/wp-json\/wp\/v2\/posts\/642\/revisions"}],"predecessor-version":[{"id":653,"href":"https:\/\/www.feedingedge.co.uk\/blog\/wp-json\/wp\/v2\/posts\/642\/revisions\/653"}],"wp:attachment":[{"href":"https:\/\/www.feedingedge.co.uk\/blog\/wp-json\/wp\/v2\/media?parent=642"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.feedingedge.co.uk\/blog\/wp-json\/wp\/v2\/categories?post=642"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.feedingedge.co.uk\/blog\/wp-json\/wp\/v2\/tags?post=642"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}