Hi, this is Sean Rutledge from the Qt Company, here to talk to you about... Oh, happy listening. Okay. So, should I start it? Yep. How to develop interactive UIs in Qt Quick 3D, which is just now becoming a possibility. I've been a Qt developer since about 2004, joined the Qt Company in 2011, and these are some other things that I've worked on during those times. I'll be going through different scenarios in which you might be able to use Qt Quick 3D for some sort of interactive application. For some disclaimers, I'm not on the graphics team, I'm not a gamer, and there's a lot of things I don't understand yet about how 3D rendering is done internally, but as the Qt Quick maintainer, I wanted to make sure that the interactive aspects work similarly in Qt Quick 3D as they do in Qt Quick so that you don't have to completely start over with different QML types for handling mouse and touch events and things like that. Also, this presentation depends on some forward-looking features that we haven't shipped yet. If you want to reproduce my demos, you can apply these two patches and you should be able to. So, maybe you want to think a little bit about what applications you have in mind where you could actually use Qt Quick 3D. Surely, it's useful for other things besides games, right? But let's start by showing the runtime loader, which is one way of loading a model, and I'm loading a GLTF model here, which I downloaded from the Smithsonian. GLTF is an open format, and they've decided that they're going to use it for digitizing a lot of the format, and they've decided that they're going to use it for digitizing a lot of the items in the museum collection. So this is the Apollo command module, which was in orbit around the moon and came back to Earth afterwards. At least I think it's the original, or maybe it was a spare, I'm not sure. So I downloaded this model. I'm simply loading it with the runtime loader, and while you see that the runtime loader is there, and then at the bottom I have a file dialog, and unaccepted, I set the loader source to the URL that was chosen from the file dialog. And that's really all there is to it, and the rest of it has to do with navigation. There's a wheel handler, a drag handler with the middle button that I can pan around, and the WASD controller is what you usually use for game navigation, where you use the keyboard to walk around, and also you can use the mouse to pan around the scene. When you're working with Qt Quick 3D, these are the most common QML types that you'll encounter. 3D is the base class, implements QObject, then node has position rotation scale. It's abstract, but it can be instantiated, and it can be used as a container. So a node can contain any number of other nodes. Another subclass is the model, which has geometry and materials. This pickable property is important for making the model interactive, if you want to add any interactive content as children of it. And then you have lights, camera, the runtime loader is the one I just showed that was also putting geometry into the scene. Then we have materials. Principled material and default material have the same shader implementation, but they have different properties. Default material has the specular and translucency. Principled material is a more modern PBR approach where it has metalness. Custom material is also similar, but it does allow you to provide your own shaders if you don't want to use the default ones. So you've got a 3D scene and you want to show it. Then you need View 3D. That's a 2D viewport into the 3D scene. It allows you to specify the camera. Skybox typically would be an environment that you would use, and that is an item. So you actually use this to embed it into an ordinary 2D Qt Quick scene. But you're not usually going to write all of that from scratch, right? You might want to start with a modeling tool for creating the 3D objects. The best of the free software from modeling is Blender. It's really worth your time to try to learn that, even though DUI is a bit complicated. It's gotten better in recent years and more organized, easier to work with. But I come from the 3D printing background, so I've been using OpenScand a lot. And OpenScand is only able to output an STL file, which is just a bunch of triangles. It's just a mesh. And so an STL file can be imported into Qt Quick. I'll tell you how. But you're not able to apply textures to it, or at least not without further modification. That's a nice declarative way to work if you like writing code instead of graphically manipulating things. Then OpenScand is fun to work with, but it has its limitations. FreeCAD, I haven't had very much success with so far, but it's able to export GLTF in theory.  Because Qt Quick 3D is a real time renderer, our favorite format is GLTF because it was designed for that. And we're eventually going to be able to support all the features of GLTF. STL, like I said, it has its limitations when it comes to applying materials to the result, although you can apply a color and the glossiness and so forth. It's fine to use default material or principled material with STL. Then there's Kalada, FEX, and Wavefront, OBJ. Those are typically used as interchange formats between the different modeling tools. And they have a lot of features. And Qt is not ever probably going to be able to support all of those features because they're not appropriate for a real time rendering. So when it comes to import these different kinds of assets into your scene, I showed you the runtime loader already. And there's also another choice, which is Balsam. That uses our asset import module, which consists of an asset import manager. And then there's a virtual base class for the asset importers. And then we have two subclasses so far. One of them uses ASIMP, which is a third party asset importer library. Qt 3D Studio is obsolete. But if you've been using it so far to create models, then you'll be able to import them with this UIP importer. So anyway, there's a command line tool called Balsam. And it can read any of these formats and output a mesh file, which is a Qt specific way of storing meshes and also the QML for the entire scene. So what you'll get out is typically a node as your root object and then models and materials and stuff inside there. And you just need to create the view 3D to embed it into your 2D scene. There's also Balsam UI, which is just a widget application that provides checkboxes for all the command line options. So that's one way to work. Another way to work is to use Qt Design Studio, which is our commercial only tool. In Qt Creator 5, there's going to be a pretty decent 3D design mode built in. So the ultimate goal is that Design Studio will be able to orchestrate all of this stuff so that designers that are not programmers will be able to import it and create the QML scenes and then they can hand it over to the kind of people who add the interactive functionality to it. If you've been using custom material and writing your own shaders, then probably you want to use ShaderGen to pre-compile the shaders into Spear, which is standard portable intermediate representation. And that makes it more suited for fast runtime loading. But that's an optional step. We're perfectly capable of loading shaders at runtime. So the typical workflow for creating 3D interactive content is that you're going to start with a modeling tool to create your 3D objects and manipulate existing 3D objects that you're able to download, probably Blender, but at any rate you need to choose modeling tools that are able to export GLTF because that's the format that we support best for importing into Qt Quick. And then you probably can use Balsam on the command line to generate your QML if you're not using Creator or Design Studio for that.  And that's basically it. So I mentioned that Creator is going to be having a design mode, and this is what it looks like. I actually imported a model, which you'll be seeing later on. OK, so let's talk about the most basic use case. If you have a 3D application, you might want to incorporate some sort of a 2D UI into there. And I've simply declared a Busybox 2D item inside a node. And so what this does is it creates a 2D sub-scene inside the 3D scene. You'll see that if I use the slider to change the rotation, now I've got a 3D rotating cube over here, and that actually pokes through. Busybox has a particular size, of course, in pixels, but it's on an infinite plane, and I have a 2D particle system inside there. So you can see that it's filling up the entire space on that plane when the particles are emitted. It's 1024 by 480. This is a 4K screen, and you can actually see that that's taking up about a quarter of my screen width. Another way to use it is to have textures mapped onto 3D objects. So in this case, I've got a node, which actually wasn't really necessary. I could have just had my model directly in the View3D. There's built-in types like cubes, sphere, cylinder, and rectangle. I have a model, which is a cube, and a default material. The diffuse map, meaning the diffuse color, is a texture. And inside there, I declare this busybox. So this is actually creating a 2D item. And I positioned it in such a way that it goes mostly off-screen, and I left 20 pixels showing on the screen, just so you can see that that's actually... You see I move my cursor, it hovers, and you see the little orange ball moving around in the 3D scene as well. And that basically shows you that the 2D item is a separate thing, and we're just grabbing it, grabbing a texture from that, and mapping it onto the surface of the cube. So the way that that works is you set layer-enabled true, and that makes a texture available. And then we set the texture size to 512 by 512 so that we get reasonable resolution in 3D. So you have some control over that. You can either save memory, or you can make it really high-res. The cube built-in type has texture coordinates, meaning UV coordinates, which go from zero to one on each face of the cube. And so the result is that the scene texture actually gets mapped onto each face of the cube at the same time. Now, if I hold down a button, you can see that the button is pressed and all of them at the same time, because this is really only one 2D sub-scene just mapped onto all the faces of the cube. And in addition to pressing buttons, you can also edit the text as a nice alternative to eating it. Okay, let's talk about event delivery a little bit. So in this scenario, we're going to say that the mouse is being pressed and a QPA mouse event comes in to QQI application into process mouse event. And of course, we're going to construct a mouse event and deliver it. QQI application looks for a top-level window to deliver it to. So that'll be my Qt Quick top-level window, which in this case is the entire presentation. So Qt Quick window, its event method gets called. It used to be that Qt Quick window was actually doing the delivery of the event entirely itself, but the new thing in 6.1 is that we have a class called Qt Quick delivery agent, which is doing that now. And the reason is because of these 2D sub-scenes, it's not possible to have the window know about all of that. Qt Quick window now has its own Qt Quick delivery agent by default, and that is simply all of the delivery related code that was in Qt Quick window. So it was a simple refactoring, or at least that's how it started. Qt Quick window was an enormous class anyway, so it felt really good to move all of that code out into another class. So the Qt Quick window is going to forward all of the input events to the delivery agent, and then it does a bunch of internal processing and eventually it finds the 3D viewport, which is our top-level item. It calls event on that. And then view 3D viewport does internal pick, which is a function that does hit testing on the 3D model. Basically, it's shooting a virtual array down into the scene from your mouse position, and it's finding the first 3D object that it hits. It finds the 3D position and world coordinates and the 3D position relative to the model itself. And then it notices that this cube that we hit has a 2D sub-scene as its diffuse map. And so that's how it discovers the sub-scene, but let's just imagine that there is a tap handler on the cube. And so the 3D viewport is going to directly try to deliver the pointer event to that handler. This is the feature that's not actually implemented in 6.2 yet. What I'm proposing is that it'll be possible to install handlers directly on 3D models. And so if the viewport discovers that that has happened, then it's going to call set model position and set world position on the handler, and that in turn stores this in the handler point class so that your handler in QML will be able to see those world and object positions in 3D. And then it's going to call handle pointer event on the handler and react in QML. And the tap handler adds itself as a passive grabber on press because it wants to see the move events later on. So it calls add passive grabber on mouse event, and that in turn calls add passive grabber on the pointing device. And then that adds to the passive grabbers list in the event point data object. And that'll emit a grab change signal which is connected to the delivery agent. The delivery agent then wants it to be remembered that this was the delivery agent that caused this particular grab to happen because that means subsequent mouse moves need to be delivered the same way. So it calls passive grabbers context append itself. The passive grabbers as a list of handlers that are passively grabbing and the passive grabbers context is a parallel list of delivery agents that are responsible for dealing with that. So those have to be updated together. Okay, the next thing that happens is we've already discovered that there is a 2D sub-scene. And so we call event on a second delivery agent which has been created to handle that sub-scene. And then let's say that inside that 2D sub-scene we have an item which is able to handle events itself but it also has a drag handler on the item. So the first thing it's gonna do because we have a rule that handlers go first, it's gonna ask does any pointer handler want this event? And it discovers the drag handler which says yes, I do want the event. So then it delivers the pointer event to the drag handler and the drag handler also wants to add itself as a passive grabber. So it calls add passive grabber on the mouse event. The result is like it was before it will be appended to the passive grabbers list in the event point data and the signal will be emitted. The sub-scene delivery agent is gonna add itself as the context for that particular passive grab. Next, we deliver the event to the item itself because it's one of these old-fashioned items. This legacy logic that we have says that if the item allows the event to remain accepted then that means that it wants an exclusive grab. This legacy logic that we have says that if the item allows the event to remain accepted, this legacy logic that we have says that if the item allows the event to remain accepted then that means that it wants an exclusive grab. So the delivery agent is now going to set it an exclusive grabber to that item. That will again emit the signal that the grab changed. Sub-scene delivery agent is gonna set the exclusive grabber context to itself. The next thing is that the 3D viewport will see that some grabs have happened in that sub-scene, and it also needs to remember how to do the transform from scene to sub-scene coordinates. It creates this viewport transform helper, which is an implementation of a pure virtual class in Qt Quick that lives in Qt Quick 3D and embodies the transformation from the viewport to the 2D sub-scene. So it creates this class and it calls that scene transform on the sub-scene. So then let's say that the next thing that happens is that the mouse moves with the button still being pressed. So this is a drag now. And then it wants to construct a mouse event and it calls event on its top level window. And the Qt Quick window is going to get the endpoint data because now it wants to find out about existing grabbers. So it finds that there is an exclusive grabber and therefore it gets the exclusive grabber context, sees that the exclusive grabber is a sub-scene and it has its own delivery agent. So now rather than going through all of the stuff that we did before, we're skipping picking, we're skipping the event delivery through the main 2D scene and we're going directly to the sub-scene first because that's the context in which the exclusive grabber occurred. So we call event on the sub-scene delivery agent, which will deliver the pointer event. And then it's going to use that, this viewport transform helper that was created here and set. Now it's going to use that and call map on it to directly convert the scene position from the root 2D scene into the sub-scene. And then we start looking again at the grabbers. The exclusive grabber has to go first. So the event is going to be delivered to this item which had the exclusive grab. And then it goes to the passive grabbers and it calls handle pointer event on this drag handler which was the passive grabber in the sub-scene. So now we're done with the sub-scene and we go back to delivering in the main scene. The delivery agent that's constructed along with every window is now going to deliver this pointer event and it sees that there's a passive grabber which is the tap handler on the cube and it calls handle pointer event on that. And we're done. Okay, so here's a little bit more real world example and I've demoed this before. This was from a few months ago. So I have a view 3D and at that point I didn't know how to use Blinder yet. So I actually made this casing of this device in OpenScad and you can see that you can rotate it around in the 3D world. So OpenScad generated me an STL. I used Balsam to export that to a mesh file. It has no texture. It cannot have a texture but it can have a color. So I have a view 3D with a scene environment which is a sky box and that's just something I downloaded from the net. It's an image of somebody's kitchen. And then there's a spotlight and a camera and here's my case mesh and then I separated out the buttons. I made those separate models in OpenScad and so I can actually press these buttons in 3D because each of the buttons has a tap handler on there and then I change the Z position when I press it. If I press this one, I get confetti. It's the 3D particle engine which is something new in 6.1 I think. There's a particle system 3D. And there are some bugs when we're using Qt Quick Controls together with 3D so I'm actually not able to interact with much of this Qt Quick content inside the 2D scene, at least not inside the presentation but if I run this standalone then it works. Okay so this is the one that I was working on last weekend. I thought let's try to get even more realistic and I found this on a website. Somebody has created this model of an old mixer. So let's turn it on and well you can see I animated the VU meters. It's pretending like there's some music playing. That's just an animation and I put lights inside the VU meters because that's what they usually do. So if you turn the ambient lighting way down you can see that there's light coming out of there. But the meters actually are lighting a lot of light out around the edges. They're not really as opaque inside as they would be in the real world. So it's lighting up a lot of other stuff here too. There's light bulbs inside here and it's lighting up the sides of these sliders and so forth and then this slider I wired up to control the directional light here. That one. See the brightness is obj, phono one slider value. And sometimes I'm able to use the wheel handler on this knob here to rotate it and all of these sliders are interactive but they don't really do anything else. So this was a static model that somebody had created. Tried to make a realistic rendering of a real world object and I took that and made it interactive and we'll talk about how in a minute.  So here's the workflow that I used for that model. I found something interesting on Sketchfab, downloaded it as a GLTF, I imported it into Blender because I found that I needed to actually split the meshes of all of those knobs into separate objects so that I would be able to rotate them in QML. In Blender I re-exported it to GLTF. Then I used Balsam to import it and that wrote my QML for me and then I just wrote the rest of the scene, the QML U3D and first I just made sure that the Balsam scene actually worked but anyway, the Blender work, let me just give you a couple of tips here. It turned out that the way that this guy modeled this mixer, he put everything together by material. Well, the knobs are a different material, some phenolic or something like that. So the knobs are a separate node and then this an ISO is the anodized caps on the knobs but I just wanted to work with the knobs themselves. So the first thing I have to do is, you see these eyeball icons, I had to just turn off the things that I don't want to see because when you try to pick vertices, all that other stuff will get in the way and so you see that it looks like the eye is shut, that means you can't see it anymore. So you click on those and then you do lasso selection and you will select some vertices but only the vertices that you can actually see from that particular angle and so then the next thing I do is select linked to find all the vertices that are connected to the edges that those selected vertices are connected to and then I look at the scene from a different angle and I find out there's still some more vertices that aren't selected. So then I hold down the shift key and lasso some more and I select some more vertices and then I select linked again and then I look at it from a different angle and there's even more vertices that aren't selected. So I had to do that several times until I finally got all the vertices of the knob selected and nothing else and then finally I'm able to hit the P key and create it as a separate object. So that was in edit mode where I was editing vertices and then over here I'm in object mode. So here I've got the entire object selected and now I can worry about moving its origin. So object set origin and then you have choices. You can set it to the center of mass or to the, if you've already moved the 3D cursor you can just move the origin there. So it seemed like the center of mass thing works decently although I'm suspicious because there's a cutout here for a set screw so that's going to alter the mass and also there's a cutout for the little indicator on the knob but it seemed like it was pretty much at the center after I had done that. And then I also have to move the 3D cursor to the center and then finally I'm able to, ah maybe it's better to show it live. So I get on this blue thing and I can rotate this knob around its axis now. After I exported the GLTF scene from Blender and imported it with Balsam it wrote this QML for me. It's possible to actually remove these outer nodes and kind of collapse it all so that you just have the root node which is what I did. And you'll see that there's a bunch of textures here for the materials. It writes all that for you, exports the PNG files and the mesh files and we've just got a bunch of different materials and then they end up getting reused when we get down into the actual knobs. You know, here's that micro base knob and it's just reusing the existing material that was declared above inside one of the other knobs and the same thing for all these anodized caps on the knobs and then the view meters I also had to separate out into separate objects so that they're able to be rotated so that I can animate those. So next I take this output from Balsam and try to make it interactive. So I simplified the QML as I mentioned these quaternions are hard to work with in QML because at least I don't know how to change the numbers to make the knob rotate in place. And so I used QQuaternion to Euler angles that's a C++ function to do the conversion to Euler angles but there's isn't a way to do this in QML yet as far as I can tell. So I wrote a little widget application just for that purpose. It works with text. So I can actually just in Qt Creator I can select a quaternion's values and middle mouse pasted into this tool and then it will parse it and convert it to a quaternion and then it converts it to Euler angles and puts the text of that and then I can select that text and paste it back into Creator. I have to declare pickable on each of those knobs that I want to be able to rotate because picking in the view 3D will skip anything that's not set pickable. And then it turned out that I couldn't pick those knobs. Anyway, that's some sort of a bug but at least it worked with a slider handle. So I was able to put handlers on each of those slider knobs and then I'm able to drag them. So if you're using drag handler you'll be interested in this persistent translation property which is a new thing in 6.2 because drag handler translation it's an instantaneous amount of translation which just shows how far the drag handler has been dragged since the time when you pressed but what we actually want for a mixer knob is to keep track of how far it's been dragged for all time. I now think that it was a mistake that I didn't make all of those properties that way from the beginning in pointer handlers but that's my mistake and we can't just make sudden behavior changes now and so therefore we have to start adding more. We have this new pattern that the persistent properties are gonna be called that. So persistent translation is the amount of translation that's happened since the drag handler existed. Wheel handler rotation on the other hand already is persistent. So I think maybe we should rename that now to persistent rotation but anyway, it's the amount that the wheel on the mouse has been rotated since you started your application in degrees. So that's useful for binding to knobs as well. Of course the problem is if you keep rotating your mouse wheel past the stop past the point where you can't rotate your 3D knob anymore then you get too far ahead of it and then you have to rotate back a long way on your mouse wheel. So we need to deal with that somehow. The tap handler pressed property is useful of course. The scale and the translation on the pinch handler are useful but so far we haven't added the persistent translation properties. I'm proposing to add to handler point the model position and the world position as Q vector 3D. You can actually get the 3D positions in QML when you're using any of these handlers. Here's a diff before I actually simplified the root nodes so I still have all this nesting going on. I just started adding properties. I want to keep track of how far each of these knobs have rotated and then I started converting the rotations like I mentioned with that widget application that I wrote from quaternions to Euler rotations. Okay, so I have this property to keep track of for example, how far this micro base knob has been rotated and so I have to actually make the rotation happen here and then there's also a handler down in here somewhere where I attempted to set it and then I had the problem that it's not pickable. So here's a slider. This drag handler actually does work. Then I just use its persistent translation up here to directly set the Y value. And the problem with this is that the drag handler drags in pixels but in 3D we're in completely different units and so I just did a kind of ballpark conversion here divide by 2000 and that's really not very accurate at all. I could have divided it a bit more but we probably need to come up with a better solution for that as well to convert deltas and pixels to deltas in your 3D space so that you can actually drag it or else maybe we need to make the drag handler smart enough to do this on its own but the trouble is drag handler lives in Qt Quick not in 3D according to the separation of concerns principle that's not its concern which is why I was using bindings here. I also have a used a boundary rule on the Y property of the model to make sure that you don't drag it outside things here. I also have a used a boundary rule on the Y property of the model to make sure that you don't drag it outside of its groove and that turned out to work pretty well. Boundary rule was added in Qt Quick mostly to make wheel handler behave and it's a property interceptor it's kind of like behavior so you can apply it to a property and it will make sure that that property never goes out of a certain range. So that turned out to be just as useful in 3D as it is there. Okay, here's a really simple manual test that I'm proposing to add which shows how to use these new handler point properties. So I have a sphere and then I have another little sphere which if I hover you'll see that that sphere moves around to the hover point so there's a hover handler with the IDSHH the spheres hover handler and I'm proposing that its handler point should provide this world position which is in 3D now and so I can directly bind the position of another sphere to that world position and therefore when I hover on the big sphere then the little sphere moves around to the same position just with a plane binding. And then I did the same thing with this cube over here and I'm also using bindings to update some text down here just to show you where you are in both the model and world coordinates and yeah, there's also a tap handler I can tap the sphere, same thing there and I can use pinch handler but I'll have to show you that on a touchscreen. Now I'm showing you the same thing on a touchscreen and now I'm able to either use two fingers to move two handlers at the same time or I can use the pinch handler and I can rotate this cube by dragging my pinch around and I can resize it by scaling the pinch. Okay, one more little demo this is how you can do ray picking in QML. I mentioned earlier that the normal way that View3D does ray picking is it sends a virtual ray straight down into the scene from the mouse cursor position and it finds out what you're hitting. But let's say you're in VR and you have some other kind of controller which can point in arbitrary directions like this. So I have this little spaceship here which is pretending to fire a laser and sometimes it's able to hit an object. So how does this work? The spaceship has a position and it has a forward vector which tells you the direction that it's pointed. So in QML you can call this view as the View3D declared at the top and you can call this ray pick function giving the position and a direction vector and it will tell you the first object that you hit. And so we find that and we measure the distance to that object and then we set the length of the ray which is actually just a cylinder to that distance. And then we have a particle system that's emitting particles at that position as well. So that's why you see that. We have this repeater 3D which is a way of creating actual instances of these donuts. So we're actually making multiple copies of the donut model. The other way to create multiple instances is with instancing then those are not actual copies of the model object there is just a rendering trick. So in this case these donuts are real so to speak their actual copies of this model being repeated by this repeater 3D which is kind of like the repeater in Qt Quick it creates actual instances. So the other interactive aspects are we have a wheel handler on the scene so we can zoom in and out and there's a point handler which reacts to the middle button so I can rotate the scene. So if you're not using the WASD controller that's another way that you can get the same kind of behavior. That's being used to rotate the spaceship in this case instead of the scene. So the WASD controller you can set the controlled object to either the camera or to something else and then you can use the keyboard WASD keys to move it around and you can also use the mouse to change the angle. So what do we have left to work on while we're trying to still get consensus on the team whether this idea of reusing the existing 2D handlers in 3D is actually a good idea. The upside of course is that there will only be one set of handlers to maintain and they are exactly the same and therefore the API should be the same. On the other hand, as soon as I implemented this feature it seemed to break designer a little bit navigation inside this QML puppet that it uses to visualize the scene. It also seems like drag handler is never gonna be able to directly drag 3D models because it lives in Qt Quick it doesn't know about that. And so we're gonna have to come up with a way to convert the 2D mouse deltas to 3D deltas. Hovering doesn't always behave consistently when you've got complicated scenarios with 3D embedded inside 2D, inside 3D and so forth. I think there's this bug that I couldn't pick the knobs in my scene and I don't really understand why I'm not sure if that's a bug in picking or if it's just something wrong with my model. The WASD controller also seems to steal mouse events that you might want to deliver to something interactive and controls are stealing events as soon as you put controls in the scene and they don't work the way they should. So suggestions for you guys, for the community, this is really a lot of fun. I think that you should already enjoy playing with it even though the interactive stuff is incomplete. I mean, you can feel free to pick those two patches and you can play with it and try to imagine that you're living in the future. Try to imagine what you can use this for outside of games, what kind of KDE applications, for example, could really make good use of 3D. When I was writing this simple model viewer for that Apollo command module, I was having a hard time finding toolbar icons for it. So that was something that I noticed. I think if there are designers in the community that are interested in creating icons, it would be nice to have a standard set of icons for 3D applications. For stuff like turning the axes and the grid on and off, rotating to different standard positions in 3D and stuff like that. Just all of the toolbar icons that everybody's gonna want. Yeah, some of this stuff existed from before. We had a hackathon a couple of months ago on which we created this fancy spaceship with the Wayland compositor on different screens inside. Code has not been open sourced yet. At least there's a demo video of that. The digital assistant on the other hand is my creation and that is open source. And there's a demo video of that separately going into more details. And well, that's the end of the presentation. Thanks for watching. I hope you had fun. I hope it inspires you. Thanks. Oops. Sorry. Thanks, Sean. That was very impressive. The chat was already talking about bringing back skewmorphic user interfaces and key-win special effects, but let's not go there. We have two questions. Any chance of a proper vector API in QML? Things like being able to do Q dot vector 3D 1.0, 0.0, 0.0 multiplied per 10 for scaling? That's a good question. Okay, so you're saying that the, I haven't actually, have I tried that? I think maybe I tried that once, yeah. So multiplying by a scalar is actually missing. Is that what you mean, or? That's what they are asking, it seems. Yeah, I mean, that's more of a question for the QML engine guys, but yeah. Wolf and so forth. Another question is any consideration for PR support in Qt Quick 3D? Yeah, and that's something that Andy Nichols is really into. So I think he's probably gonna come up with something, but the last example that I showed with array picking would give you an idea how you could do that, if assuming that the controller gives you a position in a direction, then you should be able to do the picking the same way. Okay, we don't have any other question so far and we are strict with the times. So I guess we can, thanks all Sean for the presentation. So big round of grateful applause for this. And I guess people can contact you on the places you just showed in the slide. So thank you again, and we will continue in two minutes. Okay.


Hello, everyone, and welcome to the 1 to 2 p.m. session of the 2017 Open Simulator Community Conference. As a reminder to our in-world and web audience, you can view the full conference schedule at conference.opensimulator.org and tweet your questions or comments, too, at opensimcc with the hashtag OSCC17. This session, we are happy to introduce an exciting panel session called Open Simulator e-commerce panel. We have great speakers today on our panel, Ilan Tokner, Chris Colosi, Melanie Milland, Mike Glory, Lisa Laxton, and Kayakar Magic. And let me take just a couple of minutes to introduce all of them. Chris Colosi is the founder and CEO of Globit, and Chris is sitting closest to me there. Globit is a digital currency web service providing an in-app, micropayments, and user-to-user transactions for digital commerce. His vision for a single currency across VR began taking shape in 2016 with the launch and adoption of the Open Sim Globit money module beta. Chris is focused on the digital currency and VR commerce originated when he joined Linden Lab in 2007. There, he acquired and managed Second Life's web marketplace for virtual goods. In 2010, he restored stability to the Linden Dollar and then assumed oversight of the Lindex, a $100 million a year Linden Dollar to U.S. Dollar exchange, as well as the entire $500 million a year ecosystem, serving as the effective Federal Reserve Chair of Second Life. Chris co-founded Windward Mark Interactive, a video game company best known for its wind-light graphics technology, which was acquired by Linden Lab. Christopher has a BA in computer science from Harvard University. And sitting next to Chris is Ilan Tokner. Ilan is the co-founder and CEO of Kightly, the biggest commercial provider of Open Sim regions and the creator of Kightly Market, which we all know now, the leading marketplace serving the hyper grid metaverse. Ilan formally held key positions in several startups, including as CEO at ID Choice and director of infrastructure development at Omnisky. Ilan has an MBA from Tel Aviv University and a BSC in computer science from the Hebrew University of Jerusalem. And moving away from me next to Ilan is Mike Glory. Mike is the CEO of Galactic Systems, Inc., creator of the grid phone. Mike has a long record in virtual reality as one of the top developers in Second Life over a decade ago and has been a vocal advocate for individual liberty in reality and the metaverse for even longer. He now teaches scripting and blender in Kightly and is an active merchant on the Kightly Marketplace. Next to Mike is Lisa Laxton. Lisa is the R&D visionary and CEO of the new Open Simulator Community Focused Infinite Metaverse Alliance, or IMA. She is also president of Laxton Consulting, LLC, with experience providing various virtual world technology solutions for education, research, business and defense clients. And next to Lisa on the couch farthest away from me is Kayaker Magic. After four decades of writing code in the real world, Kayaker Magic has been scripting in virtual world since 2008. He started by extending his love of water sports, especially kayaking, surprise there, sailing and surfing into Second Life and then Open Simulator. But he has expanded his interest into many different fields of scripting here. And next to Kayaker is Melanie Miland. As an Open Simulator core developer, Melanie has been one of the most active contributors to virtual world software in general, and Open Simulator in particular. Melanie has been involved in a number of virtual world projects and has created her own spin of the Open Simulator software. Okay, all well, let's begin this panel session. Thank you everyone for joining us. And what I would like to do is just start back closest to me and kind of just good on the lines so we all get to know what you're doing. And just tell us a little bit about yourself and what you do and how, you know, how it's involved in Open Simulator. And Chris, we'll start with you. Hi, thank you very much. And thanks everyone for being here. You covered it pretty well in my intro. I've been in VR and eCommerce for quite some time at Second Life. And then later on getting involved with creating Globit, my current company, and which I've launched for Open Sim. The way we relate to Open Sim is we brought cross grid, hyper grid enabled currency to whatever grids would like it. And with choice, something that people can enable by region by sim or across their whole grid. We created a drop in plug in to make it as simple as possible. And we've had over 35 different worlds adopt us in some portion of their grid on Open Simulator. And so for someone who uses Globit, their users can have as many accounts or can have as many avatars on as many worlds hooked up to their one Globit account. That's kind of one currency that works incredibly well with all of the in world eCommerce transactions. And, you know, we just want to look to expand that with an Open Sim to get out to whoever wants us and expand eventually perhaps into other virtual reality spaces as well. So uniting all of VR across one currency just to make it as simple as possible for merchants and for users. A couple of things that we've done recently. We released a patch for viewers, which is going to make it simpler for hyper grid users to buy land and for some functionality to work as people hyper grid teleport or go region to region. And we've been working with Fred of Outworlds lately to try to get enabling of Globit into his Outworlds installer as well so that all of the worlds using Outworlds will have a nice gooey interface. So our focus lately have just been things like that to make it easy to adopt us by more and more worlds. I'll look forward to answering questions from you and from the audience, but I'll, I know we have a large panel. So it's a blast to be up here with so many people who contributed so much to Open Sim. Thank you. Thank you so much, Chris. Okay, yes, I think we'll just go ahead and move on down our panel panelists. And if you have questions, you can go ahead and just put them into chat or you can I am them to me. I also have a list of my own. So we'll have plenty to talk about today. So Ilan, we'll come to you next. Tell us about Kitely. Hi, I'm Laan Tashner. I've been involved in Virtual Worlds since the early 2000s. And we started Kitely in 2008. We started a published beta in 2011 with a quickly picked up steam, basically providing Virtual Worlds on demand and Kitely currently hosts close to 16,000 different worlds, each one being between one and 16 regions in size. Later on in 2014, we launched Kitely Market with the goal of being basically like the Amazon of the metaverse. And Kitely Market has been serving more than 240 Open Sim grids to date. Our goal for Kitely Market includes moving forward from not just delivering orders to Open Sim base grids to once basically put any open architecture, including high fidelity in the foreseeable future. And basically what we see as important is being able to have a long term relationship connecting merchants and people using Virtual Worlds across the metaverse from a single online store and being able to develop this relationship as people move between technologies as additional platforms evolve. And people take on a type of, let's call it, evolving permissions or licensing system from the one that exists now into something that is, I think, more compatible with how work at large, world at large works. So we intend to take a big role in helping develop that aspect and integrate that into Kitely Market in the next, I'd say somewhere in 2018, you should see that coming to market. Lately, we rolled out new features relating to Kitely Market that enable people with the lost items to close grids to regain access to those items with the help of merchants. So the merchant has the ability to decide whether or not they want to help the person regain content that was lost to a grid that is closed down. And if so, using very simple interface that can give people access back to that content, either to particular people from that closed grid or everyone of their customers who bought from that closed grid. Okay. That's very interesting. All right. And next to Elon again is Mike Laurie and tell us a little bit about the grid phone and what that's all about. Hi. Well, as people know, I used to be very active in Second Life. And then I had, let's say, irreconcilable differences with Lin and Lab. And so I was out of virtual worlds for a few years and dealing with some legal issues with them. And those finally settled. And I had wanted to create a whole new virtual reality platform that would not have the flaws that I saw in Second Life. And when I was in Second Life, I had helped capitalize the first OpenSim central grid, which did their IPO on my stock exchange. And but I wasn't quite sure of how well OpenSim was going to do in getting people to transfer over from Second Life. And so I was working on this other platform. And then we saw a lot of money going into Oculus and with Google and other projects. And we saw we couldn't compete there. So we took our time off. I wrote a novel. And when I was looking for a place to create cover art for my novel, I went into Kitely, but I wanted to talk to friends in Second Life. And I couldn't. So I looked at the chat bridge scripts that people have been using for years. And those were very clunky. And so we created this platform, this program to enable us to have a much more robust communications between OpenSim and Second Life locations and persons. And it was purely selfish at that point. But I realized there's there are ways that both commercial potential as well as ways that we can use it to build OpenSim and create more of an open metaverse. And so we've been expanding on that in with a sort of a virtual smartphone business model for avatar to avatar communications and commerce. And not just between Second Life and OpenSim, but we're working on expanding into high fidelity and Unity 3D and Unreal and whatever other platforms we can go into that allow either user created content or third party mods. And so we want to enable people to talk to any other avatar any place. And it'll be backed up by our galactic coin blockchain that will allow people to register their identity on the chain. So you can associate accounts with it for different platforms.  So you're able to take back control of your virtual identity. Wow, that's very interesting. Okay. And moving away from me again. Next to Mike is Lisa Laxton. And Lisa, tell us a little bit about yourself and the infinite metaverse alliance. Thank you. First, I want to say hello to everyone. I feel really privileged to be up here on this panel. Thank you for the invite. For those who don't know me, I am a systems engineer by profession. And I look at things from that perspective, I think about standards. I think about different types of users and meeting the needs of the larger community, and not just any one portion of the community. So from an e-commerce perspective, I think we need to make sure that we're looking at cryptocurrency security standards, that we are looking at cryptocurrency certification, otherwise known as C4. But then we also need to realize that the majority of the open simulator community is not going to want to engage in monetary e-commerce, even though they might want to engage in a virtual e-commerce. And this is perfectly fine. I think there's a balance that needs to be there to make sure we meet the needs of the community. I'm interested on the communication aspect with Mike, because when you look at the needs of education and government and some of the private sector, their concern is security. So if we're addressing security with an e-commerce notion for open STEM, then we're also meeting those needs. And we're meeting the needs of the creators and the individual users who want to make sure we have a more secure ecosystem. And the economy is only one part of that ecosystem. Thank you. Thank you, Lisa. Very interesting. Okay. And next to Lisa, we have again Kayaker Magic. And Kayaker, tell us a little bit about yourself. Well, I got interested in virtual worlds by reading the Terms of Service of Second Life back in 2008. And I wouldn't be surprised to hear that not very many people did that. And somewhere in the middle of it, it said that if you write scripts that produce self-replicating objects, you should make sure you keep them under control so they don't mess up our servers. And I was astounded that you mean it's possible to write self-replicating objects in Second Life, and second of all, you let us get away with it. And that got me interested in scripting in Second Life. And I started a store there and eventually came to like the web market there. I've had stores in several open sim grids. And then I finally settled on the Kytley market as my favorite place to get products out there to the market. And I heard at one point that I was one of Elon's top merchants, and that's nice to hear. Surrounded by all of these lettered people, it occurs to me I never mentioned in my bio that I have a degree in computer science from UC Berkeley, where I met some people, Ed Catmull, when he was starting the company that eventually became Pixar. And so I heard him give talks on fundamental computer algorithms. And one of the things I learned directly from Ed Catmull was how to generate fractals in the computer environment. And I've used what I learned way back then to build terraforming tools, which is my latest product on the Kytley market that can fill an 8x8 var region with interesting looking terrain in just two minutes. And so that's my favorite way to build terrain these days. Wow, I didn't know you could do that. That's great. Okay, thank you. And Melanie, tell us a bit about yourself and what you're doing. Well, the one thing that I would say seeing this illustrious round of people here who all have touched on something that I've had my hands in at one point and another is that I guess it's the bane of my life that I do things too soon. If I had had the Kytley idea of conserving resources, Avination would have used that. If I had globits, then Avination might still exist. I've worked for Legend City online, then I've done a currency thing for a central grid. It's funny, isn't it? How things can go around. And Kayaka has also been on my grid. Avination was still up and doing waves. Now, I see he's turned away from water and he's turned into land. I mean, while I have sort of moved on in so far that I'm now working at the marriage of virtual worlds with virtual reality in the PLM for large companies, a manufacturing sector, meaning engineers using virtual worlds, using VR headsets, using tablets, using PCs to discuss and present data in a virtual world setting. So no longer social virtual grids, which is why I've become a bit invisible, but it's definitely a very exciting thing to do. As far as commerce is concerned, I'm sitting on this panel, I think maybe by virtue of having made a lot of money with OpenSim. So, sorry about that. Okay, very interesting. Okay, we're starting to get some questions from the audience. I'm going to ask one more kind of general set of questions before we dig into some of the details of some of what each of you are doing. And I know that some of you are doing presentations throughout the afternoon. And so I'm sure you'll actually be getting into those details as well. But one of the questions that I would just like you to address is one of what we call the major concerns. And I don't mean major concerns only in the idea of, say, content piracy, although that is a concern, but for merchants and or for customers regarding a payment or delivery system and how that works, say, across OpenSimulator and what obstacles it might be causing or what concerns people bring to you so that you really need to keep your eyes on, so to speak. And I'll kind of just throw that open there and see if anybody wants to jump on that. I found that in the time while I was doing social virtual worlds, there were always the considerations of convenience versus security, meaning that most people were spending any kind of currency in a virtual world, wanted to do that with the same ease as clicking buy and lend labs second life. But at the same time, they wanted to be their money, to be secure even from being accessed and taken away by great gods, great owners, whatever you want to call them. So that is one of the major concerns in the money module interface was, unfortunately, at that time, not designed to accommodate any sort of verification mechanism. I know you're all still right to that design, which is something that Terra was a virus and I cooked up. So yeah, that was the thing, they wanted the convenience of the right click. Very interesting. Any other thoughts on that? Yeah. Well, I mean, you have a familiarity of the user interface and that user experience that you have to take in mind when you're designing a system. But I think we're probably going to move away from the methods that were used on the money module and more into smart contract type thing. And I know that Mike and Chris can both speak to that a little better. The only comment that I would make is that we need to think about one really key word and that's interoperability. And that was where you can have your programmers, your developers have an expectation of how they need their systems to be designed to be able to interface through a secure API with the various monetary system. I'd like to follow up if I may. This is Ilan? Yeah, this is Ilan, sorry. Yeah, I think that the way we see it, I haven't had quite a lot of experience with delivering content to hundreds of different grids from different versions of OpenSim sometimes with proprietary changes made to asset servers and so forth is that you need to look at both the technical side of how you actually get content to avatars on different systems. And that is mostly an engineering challenge. But I'd call it the easier part. It's quite a lot of things to handle, but it's a clear path. And the other aspect I think is how you look at content in virtual worlds and the context of how digital content is handled and the internet at large, where you have different licenses such as Creative Commons and BSD and GPL and proprietary licenses and so forth and licenses from third party marketplace to risk would and so forth and how those types of licenses and their expectations of how content is handled, how you merge all those things together into a unified system that is easy for people to handle without having to be lawyers and having to see whether A can go with B, whether there's a non-modified object can be joined with a forced share like modified object and that obviously can create problems on the legal side without people knowing which might not be so much of a concern for people who are just working at home, but if people are doing this at work environments, organizations and so forth, those become real concerns because they create liabilities for their businesses or in their schools or what have you. And one of the things we're currently very much looking at is how we turn, how we basically call it normalize those different types of licenses and turn them into something that can be easily handled both in-world and in a marketplace such as Kite Market. And I think that type of system is the way forward. There are different types of approaches, whether you go with blockchain or you go with centralized cloud-based or people running things certificate some home or there's multiple ways of handling the technical back end of how you register ownership or how you transfer data. But the bigger challenge is how you actually get all the different licenses and the different expectations that both merchants and end users, buyers, consumers, just people have for what they can do with their content. And I think a high fidelity is taking an interesting approach. They're not the one we're taking, but basically having provenance of how each item can only have a single copy in existence, which is a valid legal copy. And if you make additional ones, it will erase the previous ones. That's one way to go. I think it's not the ideal one, but it's a different path than the ones that exist in Second Life and OpenSim. They're doing it on blockchain where we'll be taking a different approach. But I think looking at how all these things connect, how different licenses, whether you expect to be able to only have a single copy of an item you buy as you would in the real world, whether you expect to be able to make as many copies as you like for, let's say, copy audience in Second Life and OpenSim, those different expectations basically in campus, the type of license or permissions that both the merchant and buyer have to agree to in order for an ecosystem that's built on legitimate codes to evolve. And I think looking forward to a world where virtual reality and augmented reality encompass people who are not today in virtual worlds, they become basically ubiquitous, we really have to consider how those types of licenses and permissions go together with the way content is created in other systems outside of virtual worlds. I'll just chime in really quickly and just echo a little bit of what Melanie said. This is Chris, by the way. And I think the biggest thing that I got when building our system is that ease of use versus safety and trust. And everyone is comfortable in a different area. So building one product that satisfies everyone's desires when they sit at different points in that spectrum is challenging. And if we were to build it from scratch, the money module interface is by no means, I think what anyone would build now knowing how folks use it. At Globit when we started, we could have gone a complete safety route and said, hey, we're going to build a HUD or look to get viewers to adopt some code so that the end user and their viewer really controls all transactions and it doesn't matter where you are. One of your early competitors used a web browser pop up within the viewer. Very annoying. Yeah, exactly. And so the problem there is you get full security, but you wouldn't be able to tie into all of the default GUI mechanisms that people use to buy. You'd have to completely change how people purchase and teach them a new mechanism. So we went a route where we said we're going to use the money module and we'll look at how to make that secure with our system. And so I think in most cases people for in-world things have gone that way. And I would say one, you need to trust your provider. But two, just like on the web where you need to ask yourself, do I trust the website I'm on? Do you trust the grid that you're on? And be aware of where you're going. Yes, in the poor developer panel, we actually came on the point. I brought it to that point, but some of us also did that the viewer is the one thing that's holding back our development right now and that's also the case of money in which actually the viewer should have an extension that allows to store certificates to cryptographically and transparently sign transactions. And so what I would say is I think we'll take steps forward. It's very hard in the system with so many users and that you have multiple viewers and multiple people working on the code to take gigantic leaps. I think it'll happen a step at a time. To that point, we went a year basically out in the wild where land transactions and we talked about that buy currency window that comes up. I won't go into the details, but they're very hard to make work because of the, frankly, inheriting the way that Lindenlab really controlled those rather than thinking about OpenSim and multiple grids. And we finally got around to saying, is there a way we can make this better and releasing a patch for the viewer to where a money module can actually control those flows a little bit more? So I think things like that can happen where we take small steps at a time. It is a challenge. We get asked things like that all the time and the route that we've taken is to try to control the money as much as possible and leave the other mechanisms up as for other specialists. So one thing we get asked is, hey, is the content exportable if I buy it using Globits? And we tell folks, that is entirely up to the grid you're on or the region you're on. Did they make the content exportable or not? We don't hijack that. We are a money module. We control the commerce. So it's a complex system. I would a lot of people who use it different ways. And I think that with any monetary system, the balance of ease of use versus safety is the challenge. Well, certainly, I agree with points that both Melanie and Chris have made, but you touched on a word that really made me want to comment, and that's trust. When you talk about trust from just a normal internet user perspective, we've all learned the hard way, in some cases, that you don't buy from certain websites because you don't trust them to handle your money. And if you want to have a trust factor already built in by design, you've got to go with the security standards that are in place. You've got to look at public blockchain versus private blockchain. You look at the private blockchain Ethereum, for example, there is an alliance already of the largest corporations and banking partners in the world are backing the private blockchain evolution. So we might want to look at that and say, why are they doing that? What is their advantage? And how does this tie in with security standards so that we can meet the needs of not just the general user community, but also meet the needs of the private sector and business and government and education to meet their IT policy requirements? Well, you seem to be a big fan of cryptocurrencies, but what about fiat currencies? They still exist. Yes, they will. And I think that the debt-based currencies that we have out there today, they're not going to go away. There's going to be a transition period. And I think that's why you see the International Monetary Fund and JP Morgan Chase are getting involved in the Ethereum alliance. Well, yes, but I'm also seeing things like, for instance, the permission to trade Bitcoin futures, which are going to make Bitcoin, for instance, much less secure by being able to actually leverage a bear market. It means that fluctuations in the value of Bitcoin are going to be more common. And this is also going to happen to other cryptocurrencies. I did look into Ethereum, but at the time I did mention I do things too soon. At the time I did, the Go client wasn't stable yet. Even with Bitcoin, that's a public blockchain, so it is entirely different than Ethereum. If I can comment on the futures trading issue, that was an issue that I've been looking into with a number of other colleagues. I think that the establishment thinks they can take control of Bitcoin by utilizing futures trading and bear markets to take it over with naked shorting strategies, but they really don't seem to comprehend how the prices and value of Bitcoin is much more driven by hashing power and solving difficulty. They don't understand that this is not a currency you can print. It's a proof-of-work currency. Absolutely. If I could chime in as well, I was at speaking yesterday at CryptoCon in Oakland and the moderator asked, how many people in the audience think that Bitcoin is going to double in price in the next six months? How many think it's going to get cut in half? And it was pretty much 50-50, and then someone said, why does it have to be either or? And pretty much the entire audience thought it'll do both. And you look at Bitcoin, that is one of the things that is a problem for it being used as commerce. And it doesn't mean that cryptocurrencies can't find a way. I think that private versus public is important. Bitcoin is expensive per transaction. It takes a long time per transaction. That does not facilitate what users want in virtual reality, which is they want a transaction which closes almost instantly. They want to receive what they bought within a couple of seconds. They want their charge to go through and know it's complete. And they want to be able to buy something for 20 cents. It can't cost 80 cents, which is what I'm hearing. Yes, and that is one of the things where you can say that Bitcoin is only going to be what the creators of Bitcoin originally envisioned, mainly a commodity rather than a currency. That is a crypto commodity. Now, that doesn't mean you can't solve those problems, but you need to understand how users need to use it. And so the question becomes, can a limited or a private or a semi-private blockchain cryptocurrency be fast, be incredibly inexpensive and still be secure? And that's something we're exploring in global, but we are a fiat currency. We started like that because when we started and I looked at crypto and at the time only Bitcoin was around, I said plenty of folks believe this is the future, but I could spot back then that the costs of Bitcoin were going to grow exponentially per transaction if it was successful. The delays were going to be there. So we'll see how technology and innovation evolves. I don't know if anyone up here is aware of a blockchain-based currency that really has fully solved those. I know High Fidelity has written a blog post where they thought they had solved some of those problems. And I'll say I was in their office for two years telling them about those problems, where two years ago they thought Bitcoin was going to work. So I'm interested to see, but two years ago they would have written a post I think that was, we're going to use Bitcoin and this is going to work. So I'm skeptical. The Bitcoin Cash fork actually is working in the direction of solving those problems. Well, you think just making larger blocks is going to solve things? It's going to hit processing power limits and it's going to hit bandwidth limits. If I may just jump in, the entire proof of work is and I'm sorry to wear an environmentalist hat here, is a crime against nature. It's wasting so much energy. It's more than most countries in the world just to run the blockchain.  It's most mining is done on a dedicated hardware running in places where energy is relatively cheap. That's what I said, ant miners. Okay. I'm just, excuse me, everybody, I'm going to just kind of jump in here a little bit and move us perhaps. This is a very interesting topic and I think we could probably talk about it for a couple of hours and it will very likely at some point in the future be more immediate perhaps for what we're doing. But what I'd like to do is to just sort of move a little bit to a different topic and back to the actual e-commerce of Open Simulator. I have a question actually for Kayaker that I myself am interested in understanding a little bit better because we hear, you know, as a person who has worked in Second Life and has worked in Open Simulator and a very, what I call myself a micro creator on all of these, I'm still in those systems and I do understand them a little bit and correct me if I'm wrong, Kayaker, that it's a little bit different selling scripts themselves as it is actually selling objects and in that does it make a difference or does it affect it that those objects may or may not be scripted? Well, I've noticed that in the closed grids like Second Life as a scripter I feel more secure because the scripts run on the servers and the viewers never get to see copies of them. But when I sell something on the Kitely Market the script and the object have to get moved over to the other system and it's possible say somebody on OS Grid who runs their own server can then go into God mode and steal the script and I'm comfortable with this. I figure the guy who does that and gives copies away to his friends is not going to be one of my regular customers and his friends aren't going to be my regular customers and so I hope I provide a better service than the thieves can by supplying support and upgrades and coming up with new stuff all the time. Okay, so someone just having your script unless they know what you know in a way won't like, you know, I've seen scripts and of course I'm not a scripter and I have no idea what to do with them but that could get actually very complex. Well, a script is a program. It's a program. A script is a program. It's a program is a script. So anybody who knows programming is going to be able to read the script and even if they don't know this particular scripting language well because of descriptive naming they are going to be able to understand how things have been done and they're going to be able to create their own spin to modify that or just to straight sell it on. It's a real and existing danger. In Havination we had a public key crypto system that allowed people to upload scripts in an encrypted AST format that we ourselves could not decode and run it from external servers because some of the people that we had dealings with that, for instance, what was their name again, Excite. They were very, very much concerned about their scripts becoming a public domain being stored whenever in an OpenSim grid and as far as I recall we are actually the only OpenSim grid that ever had a presence of that particular scripting company and so yes security options are possible but they are rather difficult. Generally you can say that in an open grid a script is at risk. Okay and then Melanie, well I have you, we have a question from Larisa I think it is, Firehawk that says if I wanted to see what your work, what would I look for on YouTube? Is there a way that someone could see what you're working on? I do not do videos. Okay, thank you. Hopefully that answered that question. Okay, so I have a question to the video of Snapchat culture at all. And that is itself, and not to get off topic but that is itself a whole set of or type of e-commerce, I guess. And I would, well we've got some time left but I want to kind of throw out another question to all of you and as an artist and an indie creator I consider myself, as I said, micro potatoes. I am a micro creator. I build my beautiful widgets whatever I build using Blender and GIMP and other open source tools because I don't have the resources behind me to use all the wonderful really expensive tools. Do you, what do you think about this idea and you may have already thought about it and you may already be doing it. I finish my beautiful widget in Blender. I've got it textured, I've put a shader on it whatever I've done. The idea that I would, that I have in my mind is that I finish my widget and I click a couple of buttons and I upload it to my store, my metaverse store let's say, multi metaversal multi-platform store out of Blender. Do you see something like that as a possibility? I'll say I don't, I just say in the near future or something near future for me to be able to do that where I'm not competing with huge you know major commercial outlets so that I can you know get my work scene. There's a difficulty in creating stuff directly out of Blender because it's very much different nature of materials in Blender as opposed to materials in Open Simulator. So usually you have to decompose your model, upload the components that you can, and then recreate it in world using the in world tools in order to be compatible. If I may, I'd want to chime in on this because that's part of Kylie Markets, the hesitated goals. Yeah, this is some of what Melanie said is correct on the technical side. You want to be able to raise your item in world on a platform in any case that you want to shift to just to verify that it works and that you expect because of differences between how Blender and other 3D software create content and how they look in world in different systems. That said, Kylie Markets' goal and I think we are working on is for you to be able to upload once and eventually, and this is yours, eventually be able to upload once and sell to multiple platforms at the same time. We already have upload once and sell to multiple grids on the same platform and sometime down the line, we'll be able to add once and sell to multiple platforms, for example Open Sim and Hype Ideality. But that's again, there are technical challenges and they are, as a creator, you probably want to check in either case, even if you list them to make sure that things look exactly as you expect them to look and behave exactly as you expect them to. Just very, very quickly, let me chime on that. To tie what Elon and Melanie said, if we use the viewer as the arbiter of this information by tying, if IMA is definitely very interested in a new viewer development and if we tie external tools to the viewer and we tie e-commerce to the viewer, then that becomes the arbiter of that information. So we need to secure it and we need to do it based on security standards. Well, unfortunately, there have been two efforts of viewer development away from Second Life's viewer that I have been involved in. Both of them died from lack of funding. And that's something we're addressing right off the bat. Okay. Any other thoughts on this? Any different kind of vision about that maybe from the grid phone or globe bits? I think it's not actually literally tied to a particular grid. Well, yeah, it's interesting. You see all these different developments and it's, from my perspective, it always seemed to me like everyone's trying to go in different directions and it's increasing factionalism and division and boundaries between different groups whereas the real power of the internet and of having an open metaverse is by having as many people connected together as possible under Metcalfe's law. It's the number of interconnections between people in a network that builds its value, not just the number. And so all of these models of walled gardens like Second Life has or just code barriers between grids in the hypergrid and so forth or closed grids entirely, you know, kind of, they're contrary to the whole notion that the internet was based on of where value is based upon building large networks rather than keeping a small group of people trapped in a closed market. There was a time for that. There was a time for closed grids for walled gardens. In my opinion, in my experience, that time has passed and the option of monetizing a grid from a region rental alone has gone from 100% to tending close to zero. But the one thing that's now currently holding us back is LibOpen metaverse. And I'm saying that because LibOpen metaverse cements and writes into stone a standard of communication between a grid server and a viewer, that viewer being the Second Life viewer. And as long as we can't get away from the Second Life viewer, Second Life viewer is what we're going to have all the many options that would be possible, all the vistas of exploration that are there, the possibility of actually creating a 3D internet. It's just not going to exist while we are tied up to the viewer and the protocol, mainly the protocol that Linton Labs designed. Now the ones that I've worked on actually made an active effort to break away from that protocol. Like one of them was based on the Unreal Engine. And that project still exists. As I said, it died on lack of funding. It didn't die because of technical impossibility. So somebody needs to spare head and effort to fund the project to give us a truly open, truly free viewer using a protocol that's more suited to modern times than the outdated Linton Labs protocol. For God's sake, it's like 15 years old. Okay. Let me ask you, I think Lisa, you made an interesting comment that there are remain legitimate reasons for closed grids. And that a couple of those use cases come to my mind too. But I wonder how the WebGL or web-based entry into virtual world, some of the web-based entry, the viewers that we were talking about would affect that. Don't even think about it. It's not remotely ready. There isn't anything that is able to display something that is as difficult to display as user-generated content with dynamically calculated lighting in WebGL at this point. Google made their stab at it and defolded it because it just didn't scale. And nothing else will scale because browsers are just too limited. Let's talk again when CPUs are four times as fast and GPUs 40 times. Okay. Lisa, we do have to kind of wrap things up. But I did give Lisa a chance to respond if you want to. Yeah. Well, there's no need. I don't want to take any more time. That would get into Mike's presentation area. But we definitely are looking at all of these concerns and we want to have some input from everyone on these lessons learned. Okay. Okay. Well, thank you to our entire panel. Thank you, Chris Colossi, Mike Glory, Kayakar Magic, Melanie Mellonde, and Lisa Lachston, and Elin Tochner. And thank you, Tochner. Sorry for a wonderful panel discussion, very lively. As a reminder to our audience, you can see what's coming up on the next conference schedule at conference.open simulator.org. Following this session, the next session will begin at 2 p.m. in this keynote region and is on the grid phone launch of public beta grid phone service, providing secure avatar to avatar communications between platforms. Also, we encourage you to visit the OSCC 17 poster expo in the OSCC Expo 3 region to find accompanying information on presentations and explore the hypergrid tour resources in OSCC Expo 2 region along with sponsor and crowd funder booths located throughout all of the OSCC Expo regions. Thank you again to our panelists and thank you to our audience. Bye now.


Welcome to today's vlog, so today what we're going to be working on is a men's haircut. We're going to call this a lived in men's cut because it's a little bit longer than a typical men's haircut and also it has disconnection. So that disconnection is going to help us create texture and a more lived in feel. This is the cut that we did. You can wear it back, you can wear it off to the side, you can part it over. It's got a nice clean interior but then the exterior that falls over it is disconnected so you get a lot of texture, a lot of movement in the cut. So hope you guys are as excited to watch this video as I am to make it. Let's get started with our step by step. Here we go. Alright guys, so the first thing I want to do is introduce a new comb that's on freesaloneducation.com. That is the YS Park 282. It's a flat top comb but I love it for clipper over comb which we're going to use on this video. Also I'm using the 339 comb to section off the mannequin head. So what I do is I follow a curve right along parietal ridge and then back down. I'm following the curve of the head basically and the reason for that is that with men's cuts you want the hair to flow with the head shape so I do a lot of my sectioning based on the head shape so I give it a nice curve feel. So I section off the top from the bottom. That just is an easy way for me to keep those two separate. We're going to cut the top later.  Then we're using our Andis Supra ZR Clipper. This is a cordless clipper. It's the most powerful cordless clipper that I've found so I really like that. This is the 282 comb. You'll notice that it's basically the same width as your clipper. Now it is called the flat top comb but that doesn't mean you have to just do flat tops with it. So I like the width of it and I like the smoothness so the clipper passes over it really nice. It doesn't get caught up like some other combs that you might use. So if you're working through taking out a lot of bulk in the hair this is a great comb for that. I also chose the white version of this comb because of the fact that I'm working on dark hair. If I was working on lighter hair there's also a black version of the comb that I would use as well. So there's my clippering on the one side. All I did was took the bulk off, got it to the length about where I want it and then I might go through and do some fine tuning scissor over comb in a little bit. Same thing on the opposite side going through using that clipper over comb. Running the clipper nice and flat over the comb is a key thing in this as well. Something I see hairdressers doing quite a bit when they're doing clipper over comb is that on one side they'll clipper towards the face and on the other side they'll clipper away from the face. I think it's okay to do that but I personally choose to do it the same on both sides because I think no matter what you are pushing a little bit of weight and in this hair cut I want it flowing diagonal back to the back of the head because he's going to wear his hair back in this style. So I just make sure as I'm going through staying consistent with that is really important. This is the blacksmith fit scissor and just to kind of share something with you guys I get a lot of questions about what is a good all around scissor or a good right out of school scissor. Blacksmith fit is great because the price point is there. It's definitely priced lower than the other Mizetani scissors and it's very versatile scissor. What I would recommend is going six inches or above with this scissor because later on I think you'll buy your precision scissor that you spend a lot of money on and I think that'll probably be a shorter scissor. So my recommendation is get a longer scissor to begin with because you can always use that for scissor over comb later or different things. That's what I did. I have a six and a half inch blacksmith fit. So now to get back into the haircut what I'm doing is I'm doing a lot of point cutting and I'm also elevating the hair. So what I did was I tilt his hair forward. I overdirect everything to the previous section and then I do a lot of point cutting to create that texture. So not only are we doing disconnection so we started our disconnection here because I'm choosing a new length that doesn't connect to the bottom. That might freak a lot of people out but it works really well because you can always take more hair off. So in hair cutting for me it's always been about what are you doing with the hair that you leave on the head. So I sometimes will push a little extra length and then play with it later as opposed to cutting it short right away then there's nothing you can do about it. The product I'm using right now is a Palmichel Steady Grip. The thing I like about that is it's got a nice firm hold and it's got a nice shine to it and it'll help hold the hair. I blow dry that bottom portion just to see if I like the shape before I let the top down. I do this in a lot of cuts. A lot of you guys have watched my videos in the past. I like to pre dry on short hair the bottom portion before I go into the top just to see if the shape's working out because then I know going into the top I'm where I want to be. So now what I do is I part it on the left hand side. That's where he's going to part his hair for the style and then I elevate everything straight up in the air. What that's going to do is remove maximum amount of weight. It's also going to still allow that weight to sit right at the low crown and that's where I really wanted to pop out with that disconnection. So we're removing weight from the top which I don't need and then keeping the weight right at that crown area. Still point cutting, still creating that texture and working my way across. The way that I sectioned this out was I basically took it at the division line which is separating the front and the back of the head and then that's where I go through and I cut that. That's usually where the calic area is as well so if they do have a strong calic just make sure you're not doing a ton of short hair cutting there. I think leaving a little extra length in a calic makes the most sense because then you can teach them to blow dry it and the more density and weight and length that they have the easier it is to control a calic. So now I'm going to work down the weak side. This is the part side. Everything's going to come back to the previous until I get to the middle of the head and then I'm going to over direct everything a little more extreme to the middle of the head. That's going to give me that extra length push in the front. So hair cutting to me is kind of like a dance. So as I work up the head shape I can change. I can move positions. So I go up there I'm bringing everything back to the previous walking up to the middle of the head and then as soon as I get to the middle of the head then I over direct everything straight back just to push that length right into the front. If I over direct everything straight back to a stationary guide at the beginning I would have way too much length in the front. So that's why I make those choices. Now we're going to go through everything is brought straight up. Now a lot of people would want to round this corner and connect to the bottom and that's where I want to push you guys to not do that because that's what this cut is all about creating texture and disconnection. So as I work across the top of the head you'll see I'll go to the top angle so you can see the over direction that we're doing but as I work across the top of the head I'm not changing. See right there I'm not shifting to connect with the round. I want that disconnection that hair to fall over what we cut underneath with our clippering. So now I add more steady grip to the top because I hadn't put any on there just to get that hold and I start putting in the style. Now if there's guys watching this that don't do hair that are trying to find a style for themselves and hairdressers that are listening to this it's a good recommendation for your clients.  I personally think gel is just like putting mousse in women's hair so you put the gel in you style you do the blow dry you see how much volume I created in that already and now at the very end I'm going to put another product in which will actually give me more of a wet kind of feel to the cut but the gel is going to give me that hold that I already needed and the other product is just to give it the look. So it's using two products for different purposes. The comb choice I use this is another new comb on freestyleneducation.com that we have it's the 254 it's a barbaring comb it's got a really flexible feel to it and a nice small teeth ridge on one side and it gets a little bit wider on the other. So I like it for getting into those tighter spots. Any men's cut that you need to do some detail work it's a great comb for that. Now the last finishing touch I'm going to do we talked about when sometimes when you create disconnection you want to soften it. So I created that triangle in the back at the very beginning and we cut our length. Now what I want to do is I want to soften it so I take everything horizontally so I keep the shape so I'm still looking at that line that I created but then I go in and I just cut a point cut a nice deep point cut because I want to remove weight from that back disconnection. Now this is the last product that I'm going to put in this is a really kind of one of my top men's products that I like it's the construction paste from Mitch it's a palmatial product for men and it's got a mesh fiber feel to it so it's not super sticky doesn't have an unbelievable hold so it's great for people with thicker hair they're just looking for a little bit of control a little bit of shine and texture so I love this product for that hopefully you guys will too I'm gonna link below if you guys want to check that product out so you can see the texture you can see the disconnection it's not extreme but it has that lived-in feel and that was the goal of the video so I hope you guys like it definitely give me that thumbs up and also make sure you hit the subscribe button because I'd love to have you following everything that I'm doing thanks so much for watching alright guys like always if you liked this haircut then make sure you hit the like button hit the share button share this video in all of your hairdresser outlets that you can I really appreciate that also if you made it this far in the video I love seeing that in the comments as well so let me know that you made it all the way through and remember on freesaloneducation.com you can buy all the tools that I used in this video and also check the links below to see where you can pick up those palmatial products if you're looking for some new hair products as well so thank you guys so much for watching this video always supporting freesaloneducation.com I'll see you guys soon