Control Lighting With DMX In 4.26 | Inside Unreal

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
VICTOR: Hey, everyone. And welcome to another episode of Inside Unreal, a weekly show where we learn, explore, and celebrate everything Unreal. I'm your host, Victor Brodin. And my guest today is Patrick Wambold, solutions architect for media and entertainment PATRICK: How's it going, man? VICTOR: It's all good. I'm excited to have you on the show. PATRICK: Awesome. Yeah, I'm excited to finally get on one of these. So it's good. It's good timing, just in time for Christmas. VICTOR: And you got some really cool stuff to show us today. We're going to talk a little bit about the DMX plugin in 4.26. PATRICK: Yeah. So I mean, this is something that we initially put into 4.25 as an experimental feature. And finally, in 4.26, we're out of experimental. I believe it's still marked as beta. But we still consider it ready for production use. So I'm really excited to show some stuff about it. VICTOR: The floor is all yours. PATRICK: Cool, awesome. Well yeah, and again, thanks for having me. I always love the stuff you guys put out. So hopefully, this will be as interesting to some other people as it is to me. So just a little bit of background on me and what DMX is used for-- I came from live entertainment. So any time you go to a concert or event like that, or if you're at a theme park, or most of the cases when you're seeing lightning being done in a setting like that, it's being controlled through DMX. So if you don't know what it is, that's the general background. It's a protocol used to control lights. And so we put in some support for it, just on a protocol level, and also created some example fixtures, as well as the newest thing in 4.26 is actually the pixel mapping. So I'm going to show hopefully all of that today, if we have enough time for it. And yeah, I'll be looking forward to also hopefully answering some questions because I know we've got a lot of passionate people in that live events community, especially with the state of things this year in 2020. Yeah, so I guess like the first part-- and I guess my desktop is visible, right? VICTOR: Yeah, sorry, looks good. PATRICK: All right, cool. Yeah, so I, mean enabling it is actually super simple. And I would assume most people-- if you have some kind of interest in this, you already know this part. There's actually like four parts to it. So the engine and the protocol are the two main parts. The fixtures themselves are just if you're going to do like visualization inside the engine. They're just some examples. And then pixel mapping is just then the newest kind of feature that we pushed out that should allow you to take either a texture, or material, or something like that and actually send DMX from the engine using it. So you just need to enable all these. It'll prompt you for a restart. I've already done that. So it's not going to-- I don't have to do it again. And then once you come back, you'll actually notice a couple things about your layout that might be a little different. So you'll get this little toolbar icon at the top here. And so this will be your main control point as far as IO and DMX. So if you take it down, you have options to pause sending and receiving. So this is actually extremely helpful, if you're doing stuff like recording in and you want to play back, you don't want to have a conflict with something else that's on the network. And this also gives you access to the monitoring tools. So I actually have one of them that I usually keep just docked down here. But it's a dockable window. You can put it anywhere you want. And so this will give you a readout of what's either coming in or going out on a universe. You can pick which protocol it is. But it's just a single universe at a time. That one's pretty cool. But then our internal team came up with this other one, the Activity Monitor, which I think actually gives you a lot more information. But it shows you just every universe, just what's happening, but only the channels that are actually being affected. So it's actually just a nice way to see, oh OK, stuff's coming in or stuff going out, and where is it because sometimes there is some discrepancy on are you sending it on the right one. And so now, you can just see all of them without having to just pick between them. So that is super helpful. And then the last thing that they added in with this output console-- and really, this wasn't designed to be a control surface, so to speak. It was really meant just to quickly test things. So if you had some real-life fixtures and you just wanted to quickly send something to it, that was the purpose of it. But since then, it's definitely evolved a little bit. But still, that's kind of the point. It's really meant as a debug thing. You're not really-- it wasn't designed to control fixtures in any meaningful way. But it's pretty handy, if you're just trying to quickly bounce through some things. So those are the main parts of just, I guess, the toolbar set. But in addition to that, there's also a couple of new asset types that you get. And it's pretty-- I hate to say self-explanatory because that usually means it isn't. But if you right click to add content into your Content Browser, you can actually create DMX Library, which was similar to how it was in 4.25. We had that as well. And then you have this new pixel mapping asset type as well. So I already created a ton of libraries that I was using for some of my demo stuff. This is just some kind of a little playground that I've been using. But I wanted to go through this process and just show it from start to finish, how you would do it if you have never done it before. So hopefully, this-- will we have some good docs online now. But still, sometimes, it's just nice to see going through it. So what I'll do is I'll just create a new one. And I'm going to name at something nice. So we'll call this Live, and there. So once we open it up, we'll get a window, kind of like this. There may or may not be an extra because you can have other windows in it. But these are the three main ones that you need. So depending on if you did a fresh install, you might see an extra window. But these are the three ones that you need. So the first thing we want to do is define what our input output is going to be. So we're going to tell Unreal how are we going to get DMX in and out of the system. So we give it-- there's a couple of options in here. If you're familiar with DMX, these should seem very familiar. If you're not, basically we support two protocols, ArtNet and sACN. We give options as far as broadcast or unicast. If you go to sACN, we also have multicast as an option, since it's supported. But I tend to just use ArtNet because it's just what I've used forever and I can generally get it to work. And then from here, we're going to define what universes we're going to send out because I think most people are familiar with this. But if not, DMX is subdivided into universes and channels. And so you generally have to tell it exactly what you want to talk to. So we'll give it a universe number and a channel number. So this is where we're going to tell it at what universes are we actually going to use because there's 64,000 possible ones. We don't want to send them all. Let's just the ones we need. So I'll tell it here's the one we're going to start with, the amount. So whatever, let's put in 10. And then we can remap where we want this to go on the other end. So for example, if I wanted to actually send it to universe 20, I could make an adjustment here. Odds are good for easy stuff. You'll just leave it the same. But this can come in handy, especially like with ArtNet, you can actually send it to ArtNet 0, if you want. But I just like to leave it 1 because that's easier to deal with. So I have a little warning here. This is kind of a new thing just to tell people that, hey, you have another library that you have overlapping values on because you can create as many of these as you want, and so to give people an idea like, hey, you might have a conflict. You might be trying to send two things to the same place. So this will tell you which other libraries have overlapping addresses. So it's pretty nice. If you pick-- so if I were actually to move this somewhere much further away, it goes away because now it's not overlapping anymore. There's nothing wrong with overlapping, per se. But it's just to give you an idea like, hey, you might not want to do that. You might already have something that you're already working with. So I'll use just this for now. And then the next section is where you define what types of fixtures you're going to use. So this is something that is somewhat exclusive to if you're going to use Unreal as more like a previs style thing. So if you wanted to design a stage set, and use a console and something like that, and you would want to actually like control lights with a board, that's where you would define, like OK, what fixture types am I wanted to talk to and where are they, like address. This is kind of what we came up for this. So it's a little bit different than the old patching system. Again, if you're used to a console, all these things will probably be familiar. But I'll just quickly go through it. So if you create a new fixture type, it just comes up with a generic DMX fixture type. And then you can either do one of two things. You can either just specify it manually, what you want it to be, or we also support what you call an industry standard called GDTF. GDTF is an open protocol that we participate with and support that has a common set of defined properties for lights. So right now, we only actually support the channel step and channel information. We don't actually import the models or anything like that yet. But that's something that hopefully will be in future releases. But for now, this is just to help define what are the properties of the light and what can we do with it. I'm thirsty today. So I have a few GDTFs that I had imported already. I'll show how to use that in a second. But first, I'll just show how to make a really basic light. So the most basic light is probably like an RGD light plus a dimmer. And so that would be something kind of like one of these guys, just a little LED par. It's three channels and a dimmer channel. And that's probably the most basic fixture anymore. And so when you come down to the settings of it, you have a way to specify what category it is. These don't really mean anything. You can put them on static, if you want. It's just more for grouping. So if you wanted to do sorting later, you could say, OK, give me all the static heads, give me all the moving heads, something like that. So then after that, it just goes down, moving across this way. Lights can have different modes. So you can define different mode types here. So we'll literally just say this is, whatever, four channel mode in this case. And then you can define from there what things should the light do. So we'll add four functions here. So functions on the left are really, honestly not super important if you're creating them from scratch. They're more important if you're actually importing them because what you import from the GDTF will populate the functions. And you have to assign those internally to what we would consider our attributes. So we define a certain number of attributes that we just consider common-- like a light would have intensity, a light would have color, a light might be able to pan or tilt. So we're able to add to that list. But we just give people a predefined list. That's going to kill me. All right, so hot tip-- don't use auto-tip to increase the frequency. Yeah, all right. Save manually, you'll be much happier. So we have these predefined. So when you click the dropdown, there'll be a list of them. But you can add to this list. And I'll show you kind of where that is here, once I get through the last section. So I'm just going to add, since it's a very simple fixture. So now, I have everything assigned. We're all good. And then down here, you can define some other, I guess, smaller details about each function because DMX can be either 8-bit, 16, 24, or technically 32, and probably beyond. I've never really seen anything above 24, honestly. But you can change those here. You can also swap the-- so in 16-bit mode, you can either have most significant or least significant. So the port one can come first or second. So if you need to swap it, you would swap it here. If you need to offset where the channel step is, you can also do that here. But for the most part, we're just going to try and keep it simple, all right? So essentially, this is a complete light. Now, it's been defined, what it is. And we've got all the parts we need. The last step is to then just add it to the patch. So my good friends at Geodesic did a great job making this some of the best UI, I think, in the engine. And so they made it so that now when you add a light-- so hot tip-- if you want to duplicate a lot of these, number it first. And then when you duplicate them, you'll get a nice incrementing number, which I find extremely handy. But they populate with these little bubbles over here on the left. So by default, they auto-assign. So they'll just increment. So if you keep going, it'll just keep patching to the next available. But if you wanted to, you can actually just go and drag this around and move it to a new patch. It automatically turns off auto-assign at this point. But you can always-- whatever, I could to drag it back in and click it back on, if I wanted to keep having them shuffle. You can also change the colors of the buttons. So maybe we'll go with a nice red and green look for Christmas. That's a pretty bad red actually. But you get the idea. And then you just use that. It's really just visual at that point. You can change what universe you're looking at. If you attempt to put something into a universe that we didn't define, because earlier we only said we're going to use 10, it will tell you like, hey, warning, this is actually outside of this. We can't get to it. And it'll tell you also up here unreachable by controller, meaning that we don't have enough. We should have set this to 20. So it's a pretty robust, actually, system for patching things together. At this point, we have 10 lights that Unreal is ready to deal with, if we wanted to use them. So backtracking just to cover some other things that I glossed over, I mentioned that these attributes here-- we can add more of them. So where you would do that actually is inside your Project Settings. So if you go-- once the plugin's enabled and you scroll down, you'll have this DMX Plugin section. And you have these options here that it would give you. So the first one is what interface are you going to use. So if you leave it on 0, it's going to pick whatever your Windows primary is. This is generally what I like to use. That way, I have to think less about it. But if you look at the dropdown now, instead of giving you something to type in, it's going to find all the ones that you have. So this is one of my ethernets. This is another one. This is our VPN. And then we have local loopback. But 0 will just pick your primary one. So it's pretty handy. You can also set a global offset universes. So if you needed to just move everything down for some reason, you can do that there. But here's also where we have categories and attributes, right? So the static-- those categories that I showed that are here, you can actually define more of them, if you wanted to. So you could use that for grouping or whatever. And then the attributes, right? So this is where we could define whether we want to use red, green, blue. What are these words? And so what this keyword is in here is that we noticed, when coming from GDTFs, they have something in the order of like 280, or something like that, types of attributes that they support, which is a lot. And a lot of them are very similar in a lot of cases. And so we tried to make it easier so that, if you bring one in, it will smartly look for these words. And then if it finds one of them, it will automatically map it to the attribute type. So it's quite a timesaver because, if the wording is slightly off or looking for just-- it just would take a long time to map. So you can add more of those, like I said. It's just as simple as adding a new one and just making a new field, super simple stuff. And then lastly, we have some settings about what should we do with refresh rate. So by default, DMX runs at 44 hertz. You can restrict that or, I guess, if you really wanted to, make it go faster. I don't see any real point to that. But certain consoles and certain older nodes do run at different rates. And so we give you a global setting for that. These send and receive by default-- what this actually controls is-- in here, we have a setting for-- we can pause, send, and receive. But if I tick this off, this isn't necessarily going to package with it off, right? And we can tell it, through Blueprints or codes, to send or receive. But you actually just have a setting in here where you can say, OK, you know what? I don't want you to send by default. Unless I tell you to, don't do it, same thing with receive. So by default, they're both checked, which means, as soon as you hit Play, it's assuming both will be working. But there could be some cases, for sure, if you recorded with the sequencer, I don't want it to receive by default. I just want to play back what I'm looking at. So that's all the settings that we have for it at this point. And so then I'll pop back over to the patch. So I mentioned this idea of importing a GDTF file. And what these are-- we can maybe post a link. But it's gdtf-share.com. Then again, it's like an open source database of these fixture types. So I have brought a few of them. I already had a few. So I'll just use one that I already had. So we're just going to use a beamy light. Well, actually, I guess technically it is a sharpy because beamy is another type. So I'll use the import here. And I had already-- so I'd already dropped the file in. But literally, you just drag it into the Content Browser. And so I'm going to use this one, just because I know that it works. So I'll set my category to Moving Head. It's not a matrix. And then so you can see the two modes that already came in, so standard and vector. And it automatically detected how many channels are in it. It's set up a-- and it did the mapping for me, for all the ones that it understands. So if there is one of these it says selected value, that means we don't have something currently for that. So we're going to-- you can either pick something or, if it's something that you don't think you would use internally, you can just leave it blank. So again, for something like fixture mode or maybe global reset or lamp control, these aren't things that you're actually going to visualize. So there's not necessarily a reason to assign them. But you can, if you want to. Then same thing, it detects if it's 8-bit or if it's 16-bit. It already determined these things. And it also should read the default values from the GDTF as well. So if you are working with real lights and there is a GDTF, it's insanely easy. If you are working with a light that doesn't have one, it's not too hard to create your own. But it does maybe take a little bit more. So I see stuff blowing up in the chat, just out of the corner of my eye. All right, so the last part of this that I'll go over as far as patching is we added support for our matrix fixtures in 26 as well. This is something that wasn't in 25. So if I add a new type-- and let's just say it's an LED strip light or whatever. Let's do a 5 by 5 matrix, like a cube x or something. So I didn't have a profile for that. So I'll show you just how to make one. So again, this category doesn't necessarily matter. But just for the sake of being thorough, I'll put it in this category. But this is the checkbox you do need. This tells Unreal internally, yes, we want to use a matrix style for this type thing. So when I add this one, I'll get a different kind of look in these two windows, and the reason being a matrix is essentially just a lot of copies of the same thing. So rather than having to define red, green, blue, red, green, blue, red, over and over and over again, you can just define it once and tell it how many cells it has. So in this case, we'll just say this is RGB mode. And then we can tell it how many cells are in it. So we're going to go 5 by 5. And then this is the sorting distribution because, if you imagine a 5 by 5 grid, it could go up and down, it could snake side to side, it could go in rows. So this is almost every conceivable combination, except maybe a weird spiral or something. I don't know. I've never seen one like that. And then you tell it what are the cell attributes that are in each one. So we can go through and say, OK, this one is going to be our red. This one is going to be our green. And this one will be our blue. And so then you'll see, over here on the right, we're getting some different information where it says, OK, we're starting at 1. We have 75 elements of-- so 25 times 3 gives us our 75, right? Now, some fixtures also have extra control channels that will sit in front or behind of the main thing. So you still can add those. Currently though, there is a limitation that we only support them on the front, so before the matrix things. And it's giving me a warning right now, like something's going on, like you have an overlap here. And that's because I told this guy it starts on 1. When, in reality, if I have a dimmer there, I probably should start on 2. But what I'm, I guess, talking about is if I wanted this to actually be channel 77 and come after these, right now we can't actually do that. They can only be before. So that's something we're going to fix, but just to keep that out there. But again, this is somewhat unique. It doesn't happen a lot, but just in case you run into it. So I'm actually going to delete this because, to me, it's just extra junk. And we'll save this. So now, we have one matrix, one moving head, one static picture. And we can use this to pop into the world and actually play with these things. I think that was mostly everything. Oh, well, I should patch them, right. So if I don't patch them, I won't be able to use them for anything. So we'll add in our sharpy. So we'll just add one of these guys and put in a 5 by 5 matrix. And the only reason I number them like this is that way, if I want to make more and you duplicate them, they just increment nicely. So to make it easier just visually, we'll do that. So there you go. All right, so that's-- and obviously, if you're a lighting person, you've probably done lots of patching in your life. You understand how this works. You'll add a bunch more of these. And you'll populate your show that way. So if we come back out to the viewport and look at then, OK, well, that's great. We have a patch. Now, how do we do something with it? So one of the-- if we enable it in the plugins, the DMX Fixtures Content, we actually ship some pretty good example of fixtures. So we give an example of a moving head, a moving matrix style. There's a moving mirror, which I actually rarely ever use-- the static LED, a strobe, a matrix, and a wash LED-type light. And then it goes through what makes these a little bit different and unique. But one of our TAs, Francis-- big shout-out to Francis because he did just an awesome job making these things come to life. And not only that, but he put in some nice little tools and nice little things to make it easier. So in the previous version, in 4.26, it was kind of like a big, uber Blueprint that drove these things. And it was almost more like a proof of concept, I suppose. And now, it's turned into its own system. There's a DMX actor type. There's a class for it. And all the different things you can do are components. So we wanted to make it easier for people to create their own variants and versions of things because part of what makes lights interesting is that they don't all do the same thing. When you look at this one, it has different capabilities than this one does. And so trying to define all those-- I mean, there's literally probably millions of light types out there-- it's kind of daunting. So we wanted to make this a nice system that people could work on their own and develop their own libraries. Or possibly, maybe some entrepreneurial-type will create one in the marketplace. So if anybody's got a lot of free time and wants to do that, I think it's a valid thing. So it might be something to look into. But again, so I'll show how the structure works and show, hopefully, some more fun stuff. All right, so if you are just browsing through the thing-- and again, if you don't see that for some reason, you may be missing Engine Content or Plugin Content, right? So if you need-- if you don't see it. So I'll just-- actually, what I'll do, I'll just start a new level. And I hope I don't muck up this one. And I'll show everybody my super secret sauce of how I make an awesome level. I literally just add in the HDRI Backdrop, so another nice another nice tool that came a little while ago. VICTOR: Do you still have to turn on the plugin for that? PATRICK: Yeah, it is a plugin. And now, there's actually some more-- I've noticed there's some nice cubemap textures that came-- I don't remember what version is. I like the ambient sunset. It's just I feel like usually what we're doing is always dark. And then maybe I'll bump that down. And I always feel like I end up putting this kind of low because lights work in the dark, right? So if I just drag one in from scratch, this is kind of what I'll get. And we'll put them back at 0. And actually, I want them to sit on the floor, right? So this is what will pop in. And by itself, it's not going to do anything because we haven't told it which address are you. So all that stuff we did in the patch earlier, we have to tell the fixture which one you are. So I only added one. So I'll just leave it at 1 for right now. And I guess, in the future, we could maybe add in a couple more of these guys. So we have one of those. We had, if I remember correctly, 10 of these, right? I'll do this and do that. And then we had one matrix, right? And so that's what I made in my little pseudo-patch there. So looking at this in the Details panel, you can see that structure that we came up with for this. So inside this part just being the actual meshes and the nesting order of it, and then you have these components that define what can this fixture do. So again, this is just an example one. I happen to know it just matches with the sharpy footprint. That's why I use it. But if you were using a different light, it's not necessarily going to grab the box because you have to tell it what kind of parameters does it have. And actually, this isn't even 100% accurate for sharpy because sharpies don't have zoom in real life. But I like to use it. So mine does. So these are all, I guess in this case, inherited because we just give you this one example. But you could literally just remake this on your own, if you were super inclined. So for example, if I create a new folder-- we'll just say a new fixture. If I were actually to go in here and create a new Blueprint and search for DMX, you have this DMX Fixture Actor. And you also have this DMX Fixture Actor Matrix. So I could literally just go in here, do one of these, and literally build it from scratch if I wanted to. It comes with the hierarchy. It comes with the DMX component. But then I can manually add all those components, if I wanted to. I honestly think that is a really long way to do it. So unless you have a super useful reason for doing that, I wouldn't recommend it. Let me save this, in case something bad happens. I also wouldn't recommend naming it New Blueprint. But yeah, so I probably wouldn't do that. And also, that means that I also probably wouldn't drag these directly out of the Engine Content into the level. And there's a couple of reasons for that. But mostly, anything that's in here is subject to updates and changes. And it's also local. So if I drag this out and then I edit this master Blueprint and send this to somebody else, it's not going to use my changes. It's going to use whatever is in their local Engine Content. So not best practice necessarily, to drag them all out. So what is the best way to do this? So you have two options. One is that you can either make a copy of it and put it in your local directory. This is great if you know you're going to make certain changes that are going to be exclusive and you only want to have them. The other option is to make a child. And this is the one that I recommend. So what you do is you right click on it, create a child class. And then we'll just say, OK, this is going to be my live stream sharpy. And so by making it a child, what I'm essentially doing is I'm able to use all that are inside the main one, but able to make local changes. Also, if we happen to-- whatever-- find a bug in the fixture-- if something's broken, we update it. We push that in the next version. Since it's still inheriting, you'll get those changes. Now, that's not 100% across the board. I want to make that very clear. It's possible that something in-- if we change how Blueprint Mode works, you may have to reconnect some wires. But for the most part, it's going to all update nicely. And I also just like this because then you have this nice level of inheritance. It's one of the powerful things about Unreal that I think maybe is not as well understood and used sometimes. But if I were to then make a change to this, it would then filter down to everything. So this gets treated as just what it is, as a parent. It's my parent class. But I can then override it with things locally. And then from there, every time I drag one of these out, I can make even more fine-tuned changes. So it just gives you a level of, I guess, control and structure. So what I recommend is I actually make a different child class for every type of light that I'm going to be using. So for example, in addition to this sharpy, if this wasn't the only moving head that I had and I actually had a different one that was whatever-- let's just say this one was a beamy. I don't remember how to spell it. These two lights are going to have different properties, right? There going up different zoom values. They're going to have different max intensities. They may have different things. So in order to define that nicely, I'm going to make two different child classes. So I duplicate this one over. And I would just say, OK, this one is a beamy. Now, I can define these separately. So I can say, OK, sharpy, your max intensity is actually-- these are in candelas. So just know that. And we could say, all right, this beamy light, you actually don't go that high. We'll leave you at default, 2,000 or whatever it is. And so that way, I can have two different versions of this. But they all have the same functionality. And then I could even make it even more granular inside the Editor, if I wanted to. And I could have two identical copies and just say, OK, you're going to run at high quality. And you're going to run low quality. And so it's just really, really nice. I can make global changes. And that's how you do it at the class level. So that might have been a long explanation. VICTOR: Well, it's important. PATRICK: Yeah. Well, again, it's one of those things where, if you make these decisions earlier, you will run into less problems later. And it's something that when you're like, how do I affect all of them? And then you're like, oh shoot, it's in Engine Content, that kind of thing. VICTOR: Something a programmer would learn immediately, right? PATRICK: What's that? VICTOR: It's something a programmer would learn immediately, right? But if you come into the engine as a creative-- PATRICK: Yeah, exactly. Sometimes, I feel like-- yeah, when I'm talking to a comp sci major, they're like, well, duh. But yeah, you've got to remember most of our people are artists. So they don't know this, myself included. I didn't a lot of this stuff prior to working in Unreal and in game engines in general. So we have our sharpy light. So now, we have our proper child. But just in the interest of time, so I don't keep making copies of things and you guys just watch me copy, I'll just use these ones out of here. Just know that's a no-no usually. So we've got those back. And then we've got our stack matrix back. So now, I want to be able to tell it what these things do, who they are, that kind of deal. So I know, just because I've done this for-- I've been working on DMX for like a year now. I just know these things are going to work. But I'll show you why I know that, I guess. So this one, the reason this one I know is going to work is because it matches the channel step and it has the right components that match what I did inside my patch. So I know it has these things on it. So by default, this one comes up a lot. A sharpy just has a color wheel. There's no color mixing on it, whereas a lot of modern lights do have some sort of color mixing. So if I wanted that functionality, I would have to modify this and add it to it or do something else. So I'll show how that works. But first, let's just go with the default. But the most important thing I need to tell this thing really is what is the patch reference that follows this. So I made that one. It was called live stream, right? And then when I select it, here are the fixtures that I patched earlier. So I'll just put it on Sharpy 1. And then technically, that guy is good to go now. So you can get this idea that this could actually be a fairly slow process, if you have hundreds of these things, to go in here and have to manually tell it each time where is it. So we don't actually ship this with the Engine. But I made this publicly available. And it's a nice little utility widget. And it's very, very simple. I won't go into too much how it works. But essentially, I can grab all of these fixtures in order. So it's going to go in selection order as best I can tell. And I can patch all these things in one go. So I have to tell it first what library and what is the first fixture that I'm going to use. And then I can say, OK, address them incrementally, go to the next one each time, or address them all the same as this one. Or I can do address and rename, which is nice because then it's going to grab the name out of the patch also and rename it in the world, which is more than likely what I want. So all that really does, though-- it's just a fancy for each loop, essentially. But going through, and it's just going to go through and incrementally do each one of them. So super handy, but you could always just go and do it manually. And same thing with this matrix, I just go in and I could do it manually and just pick Livestream and Matrix. It does the same thing. So just a couple of things to note on the structure of these because it is a little different than the old version-- previously, you didn't see the patch on the root. You actually had to scroll down and click on that component. We now have that available on the root. You have these options as far as quality level. So in this version, Francis-- again, can't say thank you enough-- went through and got rid of the old system, where we were basically just using a mesh to create the beam shape and run a really cool raymarched solution. So you got a much, much better quality look to it. But that has definitely a cost, right? So you can define here how many samples do you want to use for it. So if you are incredibly far away from the light, it's almost visually indistinguishable between low and high. So depending on where they are in your stream-- or I'm sorry, in your venue, you may want-- you may just want to do that for performance reasons. So you can define that. You can define the light intensity max, the distance-- the distance is how far does it go before we start attenuating. I know, of course, in theory, light goes on infinitely. I've taken physics. But this is rendering. So we've got to at some point say, all right, when should we stop drawing. And then also, you can set a color temperature. And then you have a couple other settings, like whether it should cast shadows, dynamically occlude. And then these spotlight and pointlight intensity scales are just meant-- you can use both of these, if you so choose, if you wanted to have it flare and do something else. And that was just a little handle for that. But I generally don't use them. I just stick to these things. So on these components though, they also have settings. But again, I probably wouldn't want to touch it here because then it's just going to do it on that one light. I would want to make sure I go back and do that on my class. So if I was actually going to make an adjustment to the dimmer and say, OK, I want this to cap at a lower value, I'd want to do it here. That way, it does it for every light type-- light that is deriving from this type. Same thing with-- let's just say, for example, like this frost one, if I'm not going to use it, I can disable it. So that way, it's not going to do any calculation with that if we don't need it. But for the most part-- and then also we can add a component to it, too, if we wanted to give it some extra functionality. So if, for example, this light had color mixing, I could add this color component to it because it comes only with the color wheel by default. So if you scroll down in here, there's a DMX section. And it should have these options for you of the other things that you can add I've noticed that-- and I don't know if this is just because of the version that I'm running-- that sometimes certain ones will actually pop up here in this Custom section, like this Gobo Spin. I know it's definitely a DMX component. But as soon as you add it, it seems to pop into it. So I'm not exactly 100% sure what that is. If you are unsure, you can always search for it, right? We love search boxes. That's kind of our jam, I feel like. All right, so we've got this guy. He's addressed. He's ready to go. He's got some basic settings. So now, let's make him do something. So what I actually use to control-- I actually use this ChamSys MagicQ. Since I don't have a lot of real estate, I'm going to do most of that work off screen. But it's essentially just it's a free-- well, this version is free. They also make consoles. And they also make other nicer things. But this one, they give you a certain amount of universes that you can use for demo mode and for reviewing things. So I had already patched a show in advance. But in order to make this work, I'm just going to go back-- and yeah, it's easier for me to match these, honestly, to what I did on the ChamSys. So in that case, these actually were in the universe 2. And the sharpy was actually the first one in the-- hold on, actually, all these were in universe 2. And this was actually the first one. And where was my matrix? Was it 101? Which kind of makes sense. OK. So in case you guys are wondering what I'm actually doing, I just wanted to make these numbers here match the ones that I'm using, so I don't have to reprogram the MagicQ, too. All right, so the lights only work either when you're in Play or Simulate or obviously in Standalone Game, all right? So in this case, I'll just pop into Simulate, so I can still do some editor stuff as well. And so then I can start to play with this light. So again, I'll show it. But then I'll move it, just because I don't have a lot of real estate. But I'm actually just adjusting what I'm doing the same way that you would on any other console. And so you can keep as much of this window as possible. So we can see a few things about it, like what's happening here. So it does start to-- it does have this nice little fall-off. But if I were to adjust this distance, I can cap how far it goes or increase it. Now, buyer beware, with great power comes great responsibility because the further out that it has to go, the more it keeps drawing. This is just general graphics optimization things. But you can make these adjustments to them. And same thing-- now, the intensity is set to like 5,000, which is somewhat ridiculous. So if I was like, no, it's really more like 2,000, I can make those adjustments on it as well. But that's the basics of how you would just get this guy going. And then again, because this is in Scott's Color Wheel, that's cool. And then we also support gobos, which are the beam shaping part, which is the really interesting stuff, I think. This is what makes, honestly, this new system, I feel like, look so much nicer than the old one. The old one, if you were to look at it dead-on, you would never really get this effect because it's just a double-sided mesh. It was not really possible to get this nice look of like looking down the barrel of a fixture. So that's the main change that I felt like was so obvious because before, if you were just sitting there and the light would tilt down and sweep across the camera, you just wouldn't really get this effect, which is super nice. But I mentioned earlier that I like to have zoom on this fixture, even though this fixture in real life doesn't. However, if you were going to-- if it's just a virtual show or something like that, you could definitely-- you can definitely do it. So all I would really need to do is go in-- and so on this fixture type, right now, I have focus hooked up to focus. Now, we don't necessarily do anything with focus right now. So I'm just going to use that channel and remap it to zoom. So all I'm doing now is I'm saying, hey, if I send focus on this thing, don't send it to the focus attribute. Send it to the zoom attribute. So now, when I pop into Simulate again and do the same thing-- wait, I'll dial this up-- so now, you can tell already it's using the parameter, right? So the zoom settings here start off fairly ridiculous. I can't remember where those values came from. But I'm going to adjust them down, just in the interest of keeping it a little bit more sane. So you might notice that these numbers seem reversed. That is intentional because typically, on a console, when you first-- zero values are lower. And I guess the way zoom is described is backwards of what you would think. So that's why they are backwards. You can put them the other way. It's not going to hurt anything. But it's just, if you want it to match with a console right to the box, it's probably better to leave it that way. But you could remap it, if you felt like it. OK, we'll pop back into Simulate. So now, we have a little bit of a normal thing going on. And now, I can adjust my focus. And it's going to adjust the zoom here. He also did a pretty nice job of-- like I said, so we actually took the publicly available gobo values. So we can go through and use these beam shaper things for it. He also simulated what would happen if you do a scroll. So these things have the ability to do a gobo scrolling, which is pretty cool that it's supported because that's somewhat what it would look like, if it was actually scrolling across the lens. Yeah, and then he also did a little bit of a shake thing, too. And like I said, it supports the color wheel because this one is a color wheel function type of light. Oh, and then he also did strobe, right? So you could always just turn it on and off by yourself. But he's actually added a dedicated strobe channel. So he tried to emulate-- we're not actually looking at the real thing. We're just looking at the documentation, what it should do. So that's the really down and dirty simple how to get this light working. So similarly with these LED pars, since they're already patched as well, I can play with them. So I'll just turn those on and do RGB dimmer. So there we go. All right, cool. So same thing-- I'm just doing it on my console over here on the right. But these are actually color mixing. So instead of using the color wheel, I'm actually able to adjust exactly how much of each color I want to have in them. And then they also have an intensity master on them as well. So by default, these things also have-- you can see they have a zoom. They have a strobe on it. I'm not using them. But you could use them, if you wanted to. And then the last one is going to be this matrix. So the matrix is a little bit different, in the fact that we actually made a procedural generating system for this because we made the assumption, at least in this case, that it's usually going to be a grid, right? So it's either going to be 1 by something, or 5 by something, or whatever it happens to be. So by defining in here what fixture you're using, it has the information about how many cells are in it. So then on the base level, we can say, all right, what is the overall dimension of this light, and width, and height, and depth. And we can say, generate a preview mesh. And so then it will generate this mesh of what that fixture would look like. So it's a 5 by 5 grid in it. And if I change this and make it bigger, that'll work as well. I could also make this 10 and make oddly shaped things. It just depends on-- obviously, if you're going for realism, you would get the real word measurements and do it. And then it's the same thing. It's got intensity setting, all these other things. So it's patched. That one's good to go. We can pop into Simulate. And same thing, where's my Cupix. I think it's this one. Yeah, there we go. Cool. And same thing, these are color mixing. So you can dial in as much or as little as you want. Or if I throw a red flick on it and do include elements, yeah, something like that. So again, they show up as individual cells. So it's kind of cool, actually. I like these matrix-style things. It's a nice thing that we didn't have in the previous version. It just wasn't really easy to do before. So now, we've made it pretty simple, I think, in that aspect. So talking about modifying these-- because again, if you're into doing previs, you probably know a lot more about these lights than even I do. So there's a lot of customization that you can do now that before was somewhat much more complicated. So now, literally, you can just come inside the class itself and define what you want the meshes to be. So if I was going to swap this out with something else, I could just change what the base, the yoke, and the head are. There's also a separate one for the lens. So you can use our lens, if you want, or you could swap it out. And an example of that would be we count this other wash-light fixture because they have a different look. If you look at this, the front of it, you'll see the individual lights rather than just having like a lens on them, so to speak. So this one just uses a different lens in here type than this one does. But also, you can also affect some other things depending on what it is you're trying to do. So on this matrix, for example, not every light has this octagonal-type shape. So I could actually swap that out, if I wanted to, as well. Since, again, I just drug it right out of here, I probably don't want to do that because I'll modify it for the Engine Content for every other project that's referencing it. So what I'll do-- again, I believe I already made one of these. So I'll just drag it out of here. I've done it a bunch of different times. Matrix 1, sure. So now, I can edit this one. And so this one looks like a copy that I actually-- oh, yeah. And so on this one, we had-- actually, this was an undefined one. So you can see there's nothing in any spots. So I'm not going to use that one because I don't want to recreate it from scratch. Static matrix style-- yeah, there we go. That one looks better. OK. So you can see how these different materials apply to it. We have a lens material and a beam material. So if I go to this matrix lens material and open it up, you'll see what I'm talking about. So if I put it in a cube view, so that's what each cell is going to look like, more or less. But if I wanted to, I could pick a different type of lens. So we give you a few different options. So I'll just throw maybe a circle one because, if you're using Cupix or something like that, it might look like that or whatever. It's just you can honestly pick-- let's see what else we have-- something like that. Or it could be something even crazier. You can just put a logo on it, if you want. I guess it defaults to circle. But I kind of like the-- I'm actually a fan of the other one, the boxier looking one. Yeah, I like this one. It's got a thin little edge around it. Yeah, it's going to bug me about that. So right, because I actually modified it. So again, I don't know if that was obvious. But that's what happens, in this case, where I'm trying to modify Engine Content and it's being referenced somewhere else. So I probably wouldn't do that if you don't know what you're doing. You might want to actually make sure that you leave these alone. And again, you make it in a material instance, in that case. All right, so that's the basics of getting these in, patching them, modifying some certain parameters of them. So I'm just trying to think if there is anything specific about these. Oh, right, we talked about adding that color component. So if I had another fixture that didn't have that, for example, on it, what I would want to do is-- again, on the copying class that I made, I would add the other component. So I would go-- and I'm looking for color. So I'm just going to add the color component to it. And then this would give me this option for adding a color mixing component to it. So if it has a color wheel, great, we could keep it. We could just disable it. It just depends on, again, what the light can do. And then we'd be able to link this red, green, blue to something in the patch. Something I know that's come up a few times is people have asked, well, some lights mix in cyan, magenta, and yellow. But if I change these, it doesn't do anything. And that's really because this doesn't, by itself, do anything. It's literally just a reference, like what's coming in here. So if I have a light that is coming in red, green, and blue and I'm just sending it to cyan, magenta, and yellow, there's no logic in here. And these are just names. So you'd actually have to modify the Blueprint itself, if you wanted to actually make this work because, even though technically red and cyan are inverses of each other, it's not just the same as putting the value in its inverse because 100% red to 0 would just be 0. So it's actually a different format than that. There's nothing that would prevent you from doing it. You just have to put that logic into the Blueprint. So if you wanted to do that-- if I look at the actual light fixture itself, so you can see what's inside of it, the Blueprint is very, very simple at this point. There's not a lot going on here. We initialize the fixture. We do occlusion if it's checked. And then literally, we update it. And that's pretty much it. So if you wanted to do an edit, this is the place you would do it at because this is where we're defining, OK, what's coming in and here's what's getting pushed to the fixture. So just as a different example-- so I'm just going to copy and paste this one, rather than do a child, so I can see still what's inside of it. But this value per attribute that's coming in is actually going to be different depending on what the fixture is. But it's in this part here that we could actually determine what we want to have happen. So if we knew for a fact that we were going to have red coming in and we wanted to change it to do some math and then pass it back to change it, to invert it, or something like that, this is the area that we would do it in. So if anybody was trying to make cyan, magenta, yellow happen, that's the spot you want to do it in. And then I think that's it. I definitely want to cover some of this pixel mapping stuff. Oh, I'd like to cover a couple of other things. But I don't want to-- VICTOR: We've got time, Patrick. We're only an hour in. PATRICK: Yeah, I know. VICTOR: Would you like to answer some of the questions in regards to these topics first? PATRICK: Yeah, I feel like I see a bunch of stuff over there. So yeah, was there anything that you saw that was popping towards the top or something like that or recent? VICTOR: Yeah, since we've got some time, we can go through some of these. And then we'll dive into the pixel mapping. PATRICK: Sure. VICTOR: This was discussed in chat but, RawBengal asked-- PATRICK: Hey, Rob. How's it going, man? Yeah, I know Rob. VICTOR: Parentheses fixed received DMX rate, how does that relate to the actual rate packets that are coming in from console? Don't you just process packets as they come from the protocol? PATRICK: Interesting. So technically speaking, network timing is way faster than DMX would ever be, right? And actually, technically, on network received is faster than tick even. And so if we were to actually process that every time, we'd just be doing a lot of duplicitous processing work. So our guys came up with this nice system internally that, rather than just doing it at the fastest rate possible, DMX technically can't go any faster than 44 anyway. So we can actually set a global speed limit as far as, all right, how fast do we really need to update everything. And technically, if you're coming out of GrandMA, I think it's even only coming at 30. So what that would actually do is it would be able to have you be able to limit, if you wanted to, even further and try and match things. But internally, what's actually happening is everything is-- especially if you're using our fixtures, we use this on fixture patch receipt. So what this actually does is it takes all the DMX that's coming into the buffer. We'll actually check to see, OK, does the value that I'm updating match this particular patch that I'm going to try and update? And if not, ignore it. And it's really a speed thing in order to do that. It's actually pretty nice because, in the past, there was another node that was-- shoot, I can't remember what it was called-- on protocol received. And I think we actually got rid of it. Oh no, it's still there, on protocol received. And basically, that was always grabbing the entire buffer. And then you'd have to filter through it. And so this is already doing it automatically. So for us, yes, we receive it as fast as it can come in. But then we shrunk it down and say, OK, if it can only be done at 44 hertz, how quick do we actually need to update this? And so we pushed things together. So if you get 10 zeros in a row, we don't process 10 zeros. We just wait, buffer it. And then it's like, OK, this is the value that we're sending, and then send it. And since everything's working off interpolation anyway, it just works much, much better. So hopefully that answers that. VICTOR: deadmau5 asks, hopefully in future versions, we'll have the option to enable or disable the spot flash pointlights in the C++ fixtures without having to turn their intensity down to 0 to save a wee bit of perf. PATRICK: Wait, say that again? That last part? VICTOR: Hopefully, in the future versions, we'll have the option to disable the spot flash pointlights in the C++ fixtures without having to turn their intensity down to 0 to save a wee bit of perf. So I guess the solution now is to turn intensity to 0. But if we can actually turn-- PATRICK: Yeah. Well, I think what he's referring to is we have this thing in it now where this toggle light visibility, which essentially what it does is-- yeah, once the dimmer is actually all the way down to 0, it kills the light completely. And then yeah, you get back all that performance, right? And so this brings up an interesting topic, just in the fact that why are these-- what makes a light expensive to render. And really, what it is-- because even though we have pointlights and spotlights on, if it's not casting shadows and it's not doing occlusion, it's not really that expensive at that point. It's just going to update like the part that it hits, its color. And that's not really that expensive of a process. But for us, the really expensive part is the beam itself. And that's based off a number of samples and this complicated math as to what goes into that. And that's why we give you that control over this quality level. But at the end of the day, all this stuff is just materials inside of Unreal, right? So something that I've have been playing around with-- if you actually want to dive into it and if you're nerdy like me, there's this material instance for the beam. And here is the actual masters themselves are in here. So if you open up the Beam Master, you can actually see what all it's doing to create this nice looking beam. And it's definitely more complicated than I would have been able to write. But as far as materials go, it's not too bad. But what is actually determined is quality level is actually this node here. And then I believe it's used one other time here. So this is actually the main one. This one over here is just to do some jittering to try and hide, I guess, part of-- do some of the blending to make it nice looking. That one's not quite as relevant. But this one right here is the one that really determines what is going on, how many samples are we using to make this light look nice. And it's just something I've actually done in a personal project is actually written some other code to modify this. Really, you only need a lot of samples when the beam is extremely narrow or it's got something in it. So a quick just example on this because this is something that's just new that I've found out-- so if we zoom this beam way down-- I mean, probably even thinner than this-- that's when the quality becomes more obvious. So if I drop this down to low, you can see it gets noisy and crunchy, especially at the most narrow parts. But when you're up higher, further away from it, or, even better, looking straight through it, it's not as obvious, especially depending on what your intensities are and what you're doing. So you can actually modulate that differently maybe than we are, if you want to. And so I think if people are really looking to try and get some more perf out of it, that's where I would tackle it. But as far as turning on and off components, you can do it. I mean, there's nothing necessarily that prevents you from-- because right now, we're not even using the pointlight, I don't think. You can just turn them off. I actually, in mine-- generally speaking, because you'll notice if these are facing-- let me grab the actual light. I did it again. If they're facing down-- if you have a lot of these, this gets kind of obnoxious. They will be all over it. So actually, in mine, I actually just go in and turn off the spotlight component. That way, when I'm lighting them up in the world, I don't get hundreds and hundreds of these-- oh, I did the wrong one-- light balls on the ground because it will get-- all of a sudden, your scene will be very, very bright. And it may just not be very easy to do because, at runtime, of course, if we do something, we're going to turn it back on. But that way, it's off when you're in the Editor. So cool. Another question maybe on any of this stuff? VICTOR: Yeah, for sure. A little bit on the same topic-- cmndrmusic asked, how many fixtures could reasonably be driven by the engine on a single computer? PATRICK: That really depends on the settings of the fixtures. But we've done some tests internally. So especially if it's something like matrix fixtures, or magic panels, or something like that, where there's not a lot of beam-- I have another-- let me save this. I have another level in here that I do my tests on. This is what I'll do. So I have like 120 of them here. And this will actually run at 30 FPS at 1920 pretty handily because it's all CPU. Now, something you will notice when you're doing this kind of stuff is, in Editor, not so much because we're drawing all the widgets and stuff for the UI. You'll notice a lot more-- so again, this gets a little nerdy. But you'll notice a ton more game time when you are in Editor versus when you are in Standalone. So if you're getting hit on your game time because you're just processing too much DMX stuff through Blueprints and the UI, if you go into Standalone, it'll be like almost negligible. Usually, where I find, though, most people get hit is on the GPU. And that is based off-- it depends on how many lights are in the scene, what the widths are, and how much overdraw you have because that's really just the main source of this is it's all translucency being added. But that's why I was saying, if you're running into that, dropping the quality level drops the number of samples. So it's being added less times. So if you go in and modify that material-- I literally just did some tests on it. And maybe I'll actually do a separate thing, where I show how I did it. But I just clamp the range so that, OK, if the beam is very narrow, make the quality high. If the beam is wide, make the quality low. And so that way, when they're overlapping and they're really wide, it's not that bad. It's almost indistinguishable. And so it's a nice way you can get some perf back there. So hopefully, that helps answer that. But it really just depends. I have the other demo level that-- I guess I could show that one off. Why not?-- where the fixtures actually came from. So I have a different MagicQ file for that. So let me just quickly save. VICTOR: I can also add-- if you're looking at Patrick's statistics here for performance, Discord does eat up about 20% to 30% of his GPU at the moment. PATRICK: Yeah. I mean, there's a lot of factors here. I run dual monitors. I run everything at terrible resolution. And as you can see, there's a bunch of junk open on the bottom that probably shouldn't. But yeah, it really just depends. If you want to do proper benchmarking on it, we recommend definitely run it in Standalone and pick the res you want. Try not to do DPI scaling. And you'll get a much better metric for trying to do stuff. All right, but if I go into this and I just plug in the selected viewport-- and let's see here. Oh, I think this one I turned everything on Ultra. But I mean, so you can see like our frame time is decently high. We're hovering here a little bit. But still, I mean, that's a decent amount of lights, I'd say. And again, a lot of it just depends on, from there, what are they doing, how much overlap is there, stuff like that. So just by default, if I take these and start zooming things out, you'll definitely notice that time start to creep up pretty rapidly, depending on how much they are overlapping. But in a lot of cases, it's pretty good. There's-- I can't remember-- maybe about 200 or so in this scene. So again, it's at a slightly lower res. I can do a 1920 x 1880. And this is windowed. But I mean, it just depends. We're still hovering above 30 with all this other gack running. So it's pretty good, honestly. But distances is matter too, right? So all these are probably set to relatively modest draw distance probably, if I had to guess. Yeah, 1,500, right? So if you put all these to 10,000, then yeah, it's going to take a little. So hopefully that helps. VICTOR: DJ_MidKnight asked, can you apply a custom gobo projection? PATRICK: Yes. So that's a really good question. Thank you for bringing that up. So all of our lights-- oh, sidenote-- we also included some fun little stage props. I don't know if anybody noticed they're in here. I know there seems to be some discussion on whether or not pipe and drape is actually a lighting thing. But we'll leave that alone. But yeah, these are also in here as well-- so some trusses, some corner blocks, and just some little pieces that make your stage look nice. But if you were going to add a custom gobo-- so right now, if you look at the Blueprint for the moving head and look at the gobo component, you'll see what we have is actually to a clean disk and a frosted disk. So this is the way we deal with frost is, rather than using a blur function, which is super expensive, we just create a frosted version and a clean version. So if you look at it, what it actually is, is it's just a strip of all the gobo textures in a line. So that's how we can also do the fade or slide between them. So you can either create this on your own, if you feel like it, or-- again, big ups to Francis. He wrote this Bake Disk Textures tool for you. So it's actually an Editor Utility Widget. So if you run the widget, you'll get this nice little thing here. And so you have to make your effect table ahead of time, like what it's going to-- and that might be a longer topic than this. But if you look at effect table that is provided, this is how we control this. So we have this gobo table and gobo wheel table. So if we open it up, this shows what this thing is doing. But here are the texture assets that we're using. And then you can use his Baker widget to bake out your own strip. And there's one for colors as well. So same thing-- our colors are based off these color swatches. And then we just bake them into a little strip, which would show up on the color wheel one. Same thing-- so you could also do that as well, if you have a known color wheel that you wanted to. One thing to keep-- yeah, you'll notice on this one, the size of it is very small. Again, that's for performance reasons. But on the gobo, you might want to make it a little bigger, just so you can get a little more resolution on what these things are when they're being projected onto the ground. Cool. And also, maybe I just realized something else I didn't mention. But we also have sample assets for pyro, sample assets for lasers, fireworks, water fountain. And if you want to see just a quick demo of all these in action, there's actually a DMX template project. So when you first launch the engine and you can pick First Person Shooter and stuff like that in the game one, inside the [INAUDIBLE] one, there's a DMX sample. And it's just the guys recorded in some DMX. And it just plays back in Sequencer. That way, you don't have to have a console hooked up, or something like that, to make it work. VICTOR: Cool. I didn't actually know that. PATRICK: It's brand new, yeah. I would show it, except I don't really want to show my launcher. But yeah, so I can do one more. And then I can pop in the pixel maps. VICTOR: Sounds good. Let's pick one last one then. ridderhasp asked, when using ray tracing, the light beam goes through objects when using volumetric fog. Is there a way to fix this without being hacky? PATRICK: Probably not. Honestly, I don't really run ray tracing that much. But more than likely, we're just drawing a mesh or a ray march, I guess. But essentially, it's going to go through objects unless we specifically do something to have it not do it. But again, if it's going straight down, super simple. But if it's on an angle like and you're getting a cut off at an angle, then probably not. But it's something you could definitely look at. But similarly, just if you turn on shadow casting and occlusion, it just depends on how many lights you have, if you can get away with it. I would say that plus ray tracing, you're probably in for a bad time, if you have hundreds of them. But if you only have 10, sure, maybe you could. Cool. VICTOR: All right. Yeah, let's go into pixel mapping. And then if you have more time in the end, we'll get to some of the questions in a bit. PATRICK: Yeah, yeah. We can press on in that. So yeah, pixel mapping is super cool. It's a new feature that we put in. And really, what I wanted to show off was just how it works in general, and then maybe a virtual production use case, because I think this is where I'm seeing a lot of good use case for this. So yeah, this is my old test bed. I was playing around with some strip lights. And this is the octobeam. And these are what the lasers look like when they're just in level not doing anything. So for pixel mapping, again, all you need to do is create a pixel mapping asset. So I will just make one from scratch again. I'll call this Livestream Pixel. And when you open up, you're going to get this new-- let me close some of these tabs here-- this new window that launches up. And again, if you are at all familiar with pixel mapping is, this stuff should look very familiar-- a grid, some stuff you can do. But how you interact with it varies from program to program. So the first thing that you'll notice is we have some different options for what you can put on it. By default, we just start with a texture. But you can also use a material or a UMG widget. Now, as you might imagine, what in the world-- how would a material-- exactly. The important part is they need to be in the UI domain. So if you don't know what that is, don't worry. You're not necessarily alone. But inside of material, you will specify what type of domain it is. Is it surface, decal, function, whatever? We need to have it be UI. Why? Because materials by nature don't necessarily have to be bound to two dimensions. So this way, we're like, OK, we know it's going to be a certain size. And we could do some certain things with it. So they need to be user interface if you're going to use material. If you're going to use a texture, it's just going to take whatever the size of the texture is. So I made this simple panner material. It's just a noise with some speed controls and some stuff that I could do. And so if I put this guy in here-- I'm just going to do it, so we get a little bit of movement. Just a little more, actually. So this actually has a size because, again, materials don't have a size. It's all just based on whatever they're covering. So you actually have to tell it how many pixels should it be using. So then from there, we can start defining what do we want to map. So the most simple one is a DMX screen. You drag this thing in. And it has a little handle, so you can draw. It's just going to create a grid of x by y cells, and then just help with that data based on what I said. So if I pick the remote universe 30 and go back and open up a-- so we'll pause that. And I'll open up the Activity Monitor. And once I hit Play, I guess it'll probably populate. Actually, you know what? I'll use the other one. That way, I know exactly what it is. And I'll set this to 30. I'm going to start running out of room, 1920 by 1080. All good. So yeah, if I hit Start, I should be able to get what. What I'm going to send, I should be able to see it over here. But what I'm noticing is I don't think I have any controllers that are set up that high. So it might actually not work, in this case. But we'll press on. So if I just click this Show Addresses, it'll show me what the address of each cell is. I could also have it show what universe it should be as well. It is just whatever. You can size it to whatever size you want. And it's just going to spit out whatever happens to be in that cell. So it's not actually using anything with the patching system. It's not actually doing anything with that. It's literally just going to be sending the raw values. So if you just had a super simple grid or something like this, this might be the way you want to do it. If you are going to be using fixtures, which is more than likely the case, you have a couple of other options. And I'll try and get the window bigger again. So you can actually drag out a fixture group and then define, OK, like what pictures do I want to have inside of it. So if I pick that Livestream one that I made earlier, I can grab these individual LED fixtures and put them in here and arrange them. So I would say like this and like this, right? So now, I have these three fixtures. And they would do whatever color is going across them. So you get a little visualization down here of whatever you have selected. So if I select the group, you can see, so this is the value that would be going out based on this. So if I go back and I set my monitor back to 20-- that's where those are patched at-- I should get some-- I'm not getting my information out right now. I shouldn't need to have Receive on. But I'm wondering if it's getting stomped on because I'm sending values from my MagicQ. Oh, you know what? Aha, all right, I do think I know what's going on here. But anyway, I'll come back to that issue. So this is what you would do if you had him in a group. So you're going to-- you can then just take the group itself and drag it around. It doesn't actually like scale the things inside of it. It's just more meant like a handle, so I could do that. So I can put that guy up there. And then the other option we give you is for matrix fixtures. So if we take that Cupix 5 by 5 matrix example that I had, and then tell it, OK, we are this in the 5 by 5, then we'll get that layout, too. And it'll tell you which numbers they are. So something to note-- this layout is based on what we set earlier in the patch. So if we go back to this asset, where I defined this, this is what defines what it does. So if instead we want to do-- you know what? Actually, this one does one of these, I say this and go back and update it. I think I've got to like-- huh? I think I just have to pick something up and pick it again. Oh, it doesn't-- it's not doing it. That's a bummer. That should do it. That should change the sorting order of it. VICTOR: Sometimes, it's useful to-- PATRICK: Oh, you know what it is? I'm just stupid. It is 5, 6, 9. It is doing it. So previously, it would go 1 through 5 and then 6 to 10 this way. So it is. It's thinking back and forth. I just had a brain fart there for a second. So if I call it back over-- yeah, OK, 1 through 5, 6 through 10. All right, perfect. I was like, I know they made that work. So that's how you determine the sorting order. The only real difference on this one is, when you bring it in, we don't know what the matrix is going to be beforehand. So you do have to map these colors to tell it what it is. At some point, I think we'll probably figure out a better way to do that. But for now, you've got to do that. So these other things-- these extra channels are in case what we talked about before, where maybe there's a dimmer channel in there that we're not using. So we could add this extra cell attribute and say, OK, there is a dimmer in here. And we just want to make sure it's always sending 255. But because when it's calculating this step of output, we're only using RGB. We can only sample RGB. We can't sample other colors. And this has come up a lot of times. If I have a picture that's RGBA, why doesn't it use the A? Well, we don't know how much amber is required to make colors. So unless you have a CIE chart and a super fancy formula for us that matches that exact fixture, we can't know that because, in computer graphics, everything is just RGB. We don't need ambers, or whites, or multiple blues to create colors. We only need three. So you can do this stuff on your own. However, there is no magic formula to convert RGB to RGB Amber or RGB White. It just doesn't exist. So you have to use a chart. And it would be something fairly complicated. That means that there are generic formulas. But I guarantee they won't work for every case. But if you had RGB dimmer and you just wanted to send dimmer all the time, this is how you do it. If you had-- like, per cell there was an extra channel. And then if you had a whole matrix fixture and you wanted to make sure you're accounting for that in your channel step, you could do it here as well. So that's the main idea of how this works. And then you can-- like I said, this controls whether you're sending or receiving DMX. So one thing that I want to do before I go too much further actually is I'm actually going to-- I have a couple of LED tube lights that I'm going to show how I would send DMX data to those. But in this case, since it's going through my router and it's not on the same local PC, I actually have to change my plugin setting here to use the actual Ethernet card rather than just loop back internally. I want to make sure it's using that and not sending out something else. So that's something that has come up in the past for me, is I want to make sure that I'm sending to these things. Normally, you probably wouldn't have your fixtures on Wi-Fi. But because of COVID and demo, we're going to do it. So what I actually have here are a couple of these-- these are actually Voyagers. They're made by Digital Sputnik. And they're like an insanely bright for my camera. And it's like 83, I think, RGB nodes. And it also has a temperature control. So it's got a four channel. And we can actually use these in combination with pixel mapping to do some interesting just lighting and various effects. So in prep for this, I already made one. So let me make sure this is stopped. And so this Pixel Mapping 1 should have these in here. So here was just some tests and stuff that I was doing earlier with a different setup. But these are these two. So I have two of these Voyagers, right? And so it's an 83-pixel thing. And it just makes it a little strip like this. And that's actually what I'm going to use. So once I hit Play, you can already kind of see it and working sort of. So obviously, exposure settings-- like, wow, Patrick, that doesn't look like it's doing anything. That doesn't look anything like it, right? So important things to note-- camera exposure still matters. But you can imagine something like this for virtual production, where you would have maybe several of these in front of your talent or near them. And you can get this nice little scrolling effect as if it's like, oh, they're walking through a forest or whatever it happens to be. Now, a lot of times in entertainment, we just use these for effects, but especially in things like film and things like that, this is extremely powerful because LED walls are extremely expensive. This thing is like $500. So I could buy a ton of these, get some nice glow and stuff from the front, and not have to build maybe that front or whatever. And you can use any different type of light for this kind of thing. But on the note of that exposure thing, we give you a master brightness control. So I can actually dim this sucker way down. And so then you might actually be able to see a little more of the finer nuances in the color, depending on what's going on. If you're seeing some skipping or lagging, it's from sending ArtNet over Wi-Fi. I don't recommend that. But it's a pretty cool effect that we can do with this. And the guys, like I said, at Digital Sputnik was super nice to be able to send us a couple of these and play around with them. So what I'll do just for the sake of example, we can go back to the logo. And then you can see the clearly defined black regions in here that you would get from this being on here. So depending on where I move it, I'm going to get different levels of what's happening. OK, that's super cool. I love it. What else can I do with this? So knowing that this can be a texture, why couldn't we do the scene capture? So that's what I would anticipate most people are thinking, if they're thinking virtual production. So if you notice the Editor chugging, you are not-- your eyes are not deceiving you. Having the Pixel Mapper open is quite heavy on the Editor. Now, if you're running it in Standalone or doing something like that, it's fine. It's literally just because it's drawing real. So just a note on that-- if you're going to run this in Virtual Production and you intend to run this on an editor machine or something like that while you're doing other things, be wary. Maybe put it in Multiuser. Maybe put it on another machine because if you leave this window open and it's doing this and you're playing, you will notice a considerable hit. So just as a side note. But for the sake of what we're doing-- so all I did is I'm using a regular scene capture. I'm going to get some water, bleh. Regular scene capture, 2D-- I set up a render target and picked-- I think I just used the default settings. So now, wherever I move this thing, it's going to draw to this texture. So if I go back into my Pixel Mapper and grab that texture, which hopefully should be named RT_something, right? Perfect. So now, I have this texture of that render target coming in. So I could scale these lights appropriately and put them in the scene. And sure, let's do something like that. And I'm going to hit Play. So now, I should get some light color that's going to match the scene coming from these. So one important thing to note about this is what you're doing, as far as color temperature and color space, everything color matters. So before you get too crazy with just throwing things in here and putting colors on them, it's super important to know what color temperature you're using and do some little basic calibration stuff because, especially when you're working in film and television, that stuff, if you're going to try and use it to light talent, is going to matter a lot more than if you're just aiming lights in the camera for a show. So for example, it's kind of tough to see again. This comes out fairly white-looking. And at first, I was thinking there's actually like problem. I was like, huh, I wonder if our algorithm is bad. But what I actually didn't know right away is that these lights actually don't use a dimmer. This is isn't a dimmer channel at all. It's actually color temperature. So if I set this to 0, you can see how amber it gets. It's adjusting the color temperature based on a scale from 2,600, I think, all the way up to 56K. So if I put this at 255, it's going to be at 56K. So it's literally sampling the exact same thing. But internally, the light has a mechanism to determine color temperature. So this is pretty critical to just note, if you're doing this kind of stuff. So if you're using really nice lights like these, or RE lights, or sky panels and things like this, they'll have calibrated color modes. And so you don't have to think about this much stuff. You say, hey-- you ask the DP, what temp are we at? OK. You set it. And then you go and everything should match because, as I was talking to you about earlier, I literally thought there was a problem. But then I had to look at my little chart here. And I was like, no, if you're at 2,600, that's pretty average. That's actually pretty correct. And so I just use that as a little reference check in my head. It's like, OK, that's what's happening. But if you ever want to do a sanity check, just throw out color bars or something like that to make sure, OK, this looks great on camera for what I'm doing. But other than that, it's pretty cool. So the cool thing about this, though, like I said, it's like, all right, it's just using that scene capture. So if I were to go and go to my HDRI backdrop and swap this out for something that's a little more colorful, boom, we get the same effect from the light as well because all it's doing is it's just going to render that scene capture here. And now, we get this thing. So you can't see my one on the ground, but it's a little green looking. So I got two of them that I have in here. So super, super powerful stuff. And actually, I'm moving the other one. Let me do this one. So depending on where it gets, it's going to start to dim down considerably to match what is happening inside the scene. So really, really fun stuff. And this is definitely something I think a lot of people have seen in other demos and stuff like that, where people have written this custom logic. And now, we provide that just as an engine feature. But yeah, I was thinking about, well, can I use this for other things, too? Does it have to just be these things? And of course, the answer is, yeah sure, why not? So you could-- in the case of this, for example, this doesn't necessarily have to just drive colors. We're using colors. But it could be anything. It could be motor winches. It could also be actually like gameplay elements. And so I was just toying around with it on another project. But I can take this and read it back and use it to drive something. Cat ragdolls, exactly, something like that. I just saw that pop up. So that was pretty funny. Yeah, why not? Because at the end of the day, it's just values. So if I look at it like, right now, I'm not playing anything. So there's nothing coming in. But if I do this-- actually, 20's the other one. You've got to be on the right mapping. Material, there I go. I'll play this. And so now, I'm getting all these values coming in. And so yeah, I could use this to drive whatever I wanted to. So it's pretty fun stuff to play around with. I'm really excited about what they've been able to come up with for this. And there will definitely be some more improvements. We do our best to make this UI feel nice, and responsive, and stuff. But there's definitely a few changes that I think we're going to make going forward. But I think Pixel Mapping is still technically beta, I want to say. So I haven't had any major problems with it. But at the same time, you may encounter some bugs. I do of one, for sure. So if you start dragging in this box, you'll notice the range seems way out of whack. It is not correctly normalized. So just know that it should be based on whatever your max value is for DMX, all right? So that is one that I know about. But other than that, it's been pretty nice. And again, you can set up multiple mappings. You can use different fixture setups and configs. And there's a bunch of Blueprint nodes to control all this stuff as well, if you want to. Cool, so how much time do we have left? VICTOR: We've got some time. I do have a couple of questions I'd like to go through. But if you're good to stay on for another-- I don't know-- half hour or so? PATRICK: Yeah, sure, absolutely. VICTOR: Cool. PATRICK: Yeah, I want to get as much of this out as possible. VICTOR: Yeah, let's do this. We're here. We're live. PATRICK: I've got a knowledge dump. It's like, all right, I'll go in the wild to see some people do some stuff. VICTOR: Did you have anything left that you wanted to go through before we dive into the questions? PATRICK: Maybe just one other little thing because I made a video a while back about how to control other objects with DMX. And that has changed somewhat in this version. And it's actually become much, much easier to do. So just for the sake of it, I'll just create just a regular-- so I'll just call this DMX Receive-- I before E, right. That still looks wrong. I don't know. So all we need in order to look for a patch is a DMX component on it. But inside the graph-- like I said, before we had this like on protocol received. And there was all this stuff on that you had to do. We actually made it so much easier to just receive information. So in the same-- I'm going to use the same node that we used inside the fixture as well. So I'm going to add an on fixture patch receive event. So what this is going to do is say, OK, if the patch that we're looking for-- if this matches, we're going to do some logic with it. And this has made everything so, so much easier, I feel like, to work with than the old way of doing things because now we don't have to worry about filtering and these other kinds of things. So for example, something that has come up a decent amount of times is like, all right, we want to whatever. We want to-- I don't know-- control something else with RGB. So if I just grab-- I'll just grab like a simple LED bar. And so now, I have a patch that is associated with this. Now, I can actually do this nice attribute map. And I can just do a find. And I can say, hey, with the red. I want you to do some kind of logic here. And it's going to be based off whatever the red channel is from here. And it's just so much easier than the other way of doing it. In my other video, it was so complicated to do this kind of stuff. And now, we're just going to get a value out of whatever red is like for this particular patch. And so that's how, in the octobeam thing here-- so I've got to load up another show file. But if somebody had asked me before, how are you actually controlling it? Because I did do a little video where I was like I want to have it fly up and down. And I was like, I want to control this now with DMX. So on my little MagicQ here, I had some default things that I was doing with it. But I wanted to be able to control how does it go up and down and do this kind of stuff. So in order to do that, I had to just be a little clever, like, all right, I want to use just something simple that I know. So red, green, and blue was what I came up with for that. And inside this control Blueprint, basically I use the same thing. So I'm using this on patch receive. I'm getting the values. And then I'm using red, green, and blue to do something else. So I use that to set my location. So here, I'm just remapping the range because position could be anything. So I just wanted to match it to something that could be useful. But this is exactly how I did it for the same thing. So honestly, it's so nice because before, yeah, you definitely had to do a lot more stuff like this. And it was just kind of a mess. This just made it so much easier. Big thanks to the guys for actually doing that for us. So if I turn on this receive again, in theory, I should be able to affect this. Oh, you know what? I'm a liar again. I've got to do this, so I can do some things internally again. I was like, huh, it doesn't seem like it's doing anything. So I had this default position for this guy. But if I wanted to like move it, all I really did was just make a red, green, and a blue for this guy. So then I could just adjust where I wanted it to be in space. So I used 16-bit bodies, so I could get a little more use out of it. But that was the idea. And then I made another thing, so I could turn the top on it. And then most of the other things that I did are just using the existing things that we ship now. We have the washbeam lights. So if I grab the-- I think I used XB as the thing. So I could do D and just whatever. So those were that. And I don't know. It was a lot of fun to do. It gave me a little bit of just fun to be able to try and create something different that wasn't your normal fixture with it. And then same thing, I just mapped that to just a dimmer channel, so I could-- that's actually the Pyro asset that we ship with it. So I had a lot of fun with it. And then you'll see the laser. Again, I think I just mapped it to a color. I did the exact same thing. So it's just like-- oh, actually, that's that laser, I guess. But yeah, so if you're trying to use Blueprints to do other things, this is now the preferred easy method of doing it. So cool. Now, I can take some questions. VICTOR: All right, we've got plenty. So if we are not able to tackle some of them, I'll make sure to send them all to Patrick. And if any of them were valuable, we will go ahead and answer them on the forum announcement post that you can find on forums.unrealengine.com. Go to Events. And that's where you find all of the announcements for our live streams. So greentoppings asked, so when does an equivalent OSC subsystem come out? PATRICK: Aha!, That's an excellent topic. So in the future, that is on the road map. So where this is actually going to apply-- and I don't want to get derailed too much from DMX on this one. But since it is still in this live events controlled area, inside of 4.26, you have this option now. There you go, under your plugins and do remote control API. And this is what I was talking about yesterday. And so I won't-- and then this remote control web interface is something that will come to the market place. It might actually be out, but if not, really, really soon. So what this gives you is this miscellaneous remote control preset. And so if I do Remote Control Preset 1 2 3, whatever it is, inside here, if I open one of these up, you'll notice, on the right-hand side, I get the option to expose properties or any object inside of Unreal. So let's just say it was the-- I could expose this rotation location and whatever, visibility. And so you get this nice little grouping of those properties. So if I come out of Edit, you lose the eyeballs. But I can actually just use this as a nice little hot control spot, which is kind of handy just by itself. But this actually becomes exposed to a web server as well. So inside my output log, it's probably bugging me about it somewhere in here that it's doing it. But this is also going to be the route in for OSC, hopefully MIDI and the ArtNet DMX also. So you'll be able to just quickly say, OK, I want to bind this position to this channel and ArtNet or this channel and MIDI or this float in OSC. So that is something that is on our roadmap and on our radar. I can't give exact times or dates or anything, but it's coming. VICTOR: All right. AndyFilms1 asked, when we get to Pixel Mapping, can you ask if we can attach a Live Link controller to the light to control its position in real-time via something like an optitrack system? PATRICK: Ah, interesting. So I guess the-- I'm a little bit confused about the pixel mapping part of that because-- pixel mapping, you have to light based on a location in the environment. So if you were to move the scene capture, I guess that would pick up what's happening based on your movement. But it might be something that you have to-- I think you'd have to think about that a little bit, what you actually want to have happen in that case. But there's no reason that you couldn't do something like that. No, I was just thinking in my head because, if I just moved it slightly, would I even be able to tell the difference? Probably not if it's like an environment, right? But since it's capturing anything that's in the environment, what would happen, though, is, if you had say whatever, hopefully not a cube but something more interesting that went in front of the camera and went across the viewport, you would see that. And that would affect the lights that are mapped to that area. In theory, I don't think you would move the lights around positionally. You would just have them set up how they would be in my head. VICTOR: RawBengal asked another question. It feels like the DMX library includes both fixture definitions and patches. Can these concepts be separated or shared, since we might want to reuse the fixture definitions a lot but a patch is really per show? PATRICK: Yes. So Rob, you're going to really like this. So literally, if I just create a new blank DMX library-- you know what? Whatever. And it's like completely blank here. I can actually just go in here and Control+C Control+V from one to another. You can do it from different projects. And I've actually done it between different versions. And so yes, you can keep these fixture definitions and drag them in and copy and paste from other projects, if you want. We don't have our own system of specifying it, though, because we were hoping people would lean on GDTFs honestly, if they want to use real-world fixtures. So you probably just create a GDTF for it and there you go. But yeah, copy and paste for the win is exactly right. I was like, I had no idea if that would actually work initially. And it works in the same project. And if I open up another instance of Unreal, I can just copy and paste into that one, too. So it works pretty good. VICTOR: The amount of times I come across that the solution is Control+C plus Control+V has been surprising. PATRICK: I know. I had my doubts because I did make-- in one case, I may-- I'll just delete that guy. With the Magic Panel, that was a fairly annoying one to do. The first time I was like, gosh, I don't want to do it again. And so I just literally grabbed it and copied and pasted it in another browser. I was like, oh, that worked. Great, perfect, done. So cool. VICTOR: Let's see... finalpixels_ asked, is DMX fully compatible with in-display Quadro cards, et cetera? We're getting tearing, and random stutter, and lag. PATRICK: So I would be willing to say that that has little to do with DMX and is likely to do with the lights themselves because the actual DMX-- we're not synchronizing it over live link right now. So if it was receiving on each individual machine, that would just be up to how accurate is the timing between them. So I will say this. I don't know how accurate that actually is. We've all seen it, where especially if you have ArtNet fixtures and things like that, there's delay. They're not necessarily 100% in time. And if we're only updating ArtNet at 44 hertz and your stuff's been locked at 60, I can definitely see there being some room for error in there. But more than likely, it's not so much the DMX is being received at different times. It's how the beam is actually being drawn across them that may not be synchronous. So that will take a little bit of troubleshooting to find out where that thing lies. But as of right now, we don't push DMX over live link. So there wouldn't necessarily be a mechanism for that. However, what I would probably do, if I knew I was doing an in-display project is I probably would send DMX to the master, and then use internal protocols, like cluster events or something else, to push the updates to the nodes. That way, I can make sure, OK, that part I know for sure is synchronous. Rather than sending DMX individually, it's a separate node. I think that is probably not going to work as well. So just a side bar. VICTOR: Earlier during the stream, Epicoptimist asked, in the DMX template, the lights utilize a level sequence to animate. Is it better to program the animations in dot2, or another LED program, or use the level sequences? PATRICK: Oh, cool. So actually, I totally forgot about this part of it. You can record DMX into level sequences. So that's actually what we did. So I'll run through that expeditiously quickly. All right, so if you create a new-- actually, I don't even need to create a level sequence. You use Take Recorder. So if you're not familiar with Take Recorder-- actually, I guess that probably gave me-- let me remove this monitor here. So now, we have the ability to record in. There's a separate type of DMX track. So if you go to add a track and you have the DMX plugin enabled, you'll see this DMX library track as an option. But you don't actually even have to set anything up here ahead of time. If you just open up Take Recorder, which, again, is a plugin-- I don't believe it's enabled by default. So Take Recorder, you just turn that guy on. And then you'll add your source. So I'll say, all right, I'm going to a DMX library. Pick which one. So in this case, I don't even know what I'm using anymore. I've got too many of them. Livestream is on the other level. I had the octobeam working. So I'll just go with that. So then from here, you can define what patches you want to record. So you can either add them manually, which sounds like a big headache to me. Uh oh, I don't think it liked that. VICTOR: There we go. PATRICK: Hey. It didn't like my clicking. Yeah, that's kind of pain. Or you can do this Add All Fixture Patches. Click that, it's going to add every patch that you have in that library as an option of something to be recorded. You can tell it to record in the subscenes. But I think that part actually doesn't work properly for DMX. It does work for other things but not for DMX. And so then, OK, cool, we're ready to go. So I can actually set your rate and stuff, if you want to. So let's do this. It's enabled. Good, OK. So we'll pop in to Simulate, so we can see hopefully that it's doing something. Yep. OK, all right. And then I'll Record. So that's going to go 3, 2, 1. Right. So now, we're plotting keyframes. So if I do this-- so now, it's going to start plotting keyframes only for the things I change. So once it stops, you can see it stops recording because I haven't made a change in value. So then if I tell it to bounce, then it's going to just start recording tons and tons of keyframes. Right now, I'm just triggering sequences I've already programmed. So cool. All right, so let's just say that that was good. So we'll stop. Now, we want to go back and review this recording. This part burns me almost every time. I'm glad I remembered. So right now, if I were to just go back and review this and hit Play, I get some weird results. The reason is I'm still listening to DMX coming in as well. So I need to pause receive. And then I can come in here. And again, if I pop back into Simulate and I hit Play and play this back, I should get back exactly what I recorded. So that's where I snapped it down. And there's where this is going. And I then stopped and was yakking about something. And then I turned on the bounce and whatever. And so this is super, super cool because then you could have somebody who recorded a show. And you don't have to be there for it. So when you click it down, you can see where all the keyframes are and what's going on. And it's a pretty performant. Flo, the master from Geodesic, wrote some pretty awesome optimizations for this. So it's actually extremely efficient playing back because, as you can imagine, if you have hundreds of lights and each one of these has dozens of parameters inside of it, it can get pretty unwieldy really fast. But he did a pretty awesome job optimizing it. So yeah, that's how the CMX sample was made, though. So they actually ended up recording it in from a console. And then it's just plays back. That way, he didn't have to have a console to use the sample. VICTOR: That's awesome. And you can also edit them afterwards. PATRICK: Yes, you can. So by default, when you-- obviously, if you've used Take Recorder before, you'll know they're locked by default. So it may seem like you can't do anything. That's just because the sequences are locked. But then from there, yes, you could actually just move keyframes around. And everything should be good to go. Let me just see something. Yes, OK. Awesome. So I'm using a slightly ahead version of this. So I build from source code. If you're using the Launcher version, it may be slightly different behavior in here, but it's pretty much the same thing. But if you go from Source, it will look identical to this. I can't remember.-- I think it nested in a subscene in the main version. But now, we've taken that out. Cool. Anything else? VICTOR: Yeah, we've got a few more. You got time? PATRICK: Yeah, totally. Let's keep going. VICTOR: BenevolentDreams asked, earlier, you guys were going over the timing data. The audio guys are working on the quartz timing stuff. Is there a way to tie the two together to get lights to do things on beats? PATRICK: I don't see why not. I mean, I don't specifically know I guess what he's referring to, which maybe that's just my ignorance. But again, since they're all Blueprint's, using the logic that I used for this as an example, yeah, there's no reason that you couldn't write something so that, OK, if this is happening, do this thing. For sure. Hopefully, that answers that a little bit. Might be a little vague. But yeah, I don't know exactly what the hooks are for that quartz system. VICTOR: I'll ping the audio guys and see if we can get-- PATRICK: Yeah, now you've got me curious because I know there some audio reactive Blueprints floating around on the Internets. And I definitely used those to hook them up to lights. So yeah, you can definitely do it that way. VICTOR: I'm letting them know about it right now. PATRICK: Cool. VICTOR: Let's see. plnrnd asked, do you support black lights or just LED lights? PATRICK: I'm a little confused by that question. Did they say input or output? VICTOR: That was the question. PATRICK: OK, I'm not sure. Yeah, I'm not really-- if that was on Pixel Mapping or what that was for. It was at the end of the stream. So I would think so. OK, yeah. I mean, I think black light, LED light-- I don't know. I'm not sure about that one. VICTOR: Let's see we've got a few more. PATRICK: The answer is always yes. It just depends on how much work you want to do. VICTOR: Right. When you have the source code-- PATRICK: Yeah, I hate to say it that way. But yeah, that's how it is. It's like, well, you can kind of do whatever you want. You could technically write another version of Unreal inside of Unreal, if you really wanted to. But I don't know. VICTOR: DocanZa asked, can you show us how you made the strip lights in your sandbox map? PATRICK: Oh yeah, totally, sure. So all I did, in this case, was I created a patch for the strip light. So I'll just show you what it looks like. So it's all just based on what you define inside here. So in the LED strip, I just told it that's 5 by 1 instead of being 5 by 5 or something like that. And then when you take the static matrix light out of here, once you tell it what it is and then give it some dimensions, then you can generate the mesh. So I just told it that it's 300 by 20. But if I made it 20 by 20, it's going to be this nice, small little-- and if you don't like those things-- well, a couple of ways to fix it. Let me pop into Game mode. So then you see it's really skinny now? But yeah, so if I just grab that thing again and put it back to 300 and regenerate the mesh, then we've got that again. So that's all it is. You just have to, I guess, be cognizant of is it this way or this way because it may affect what you did in the patch. If you told it, OK, it's an x-- it's 1 by-- it's 1x by y, you may want to have it go a different direction. That's how you do it. And they're pretty cool. Actually, they're pretty nice looking. VICTOR: Grid21 asked, can you override the lighting program if you wanted to freestyle your DMX for an extra touch? PATRICK: Yeah. I mean, well, because obviously you have this override of your send and receive. So you could just literally stop receiving, if you wanted to do something on top of it. Or I mean, I guess the other possibility would be here-- would just be if-- you can always read some logic as well to sit on top of it because we have all kinds of Blueprint nodes for everything you would ever want in DMX, for the most part. So you could definitely read the incoming signal and modify it in some fashion. Yeah, definitely. VICTOR: Dendrolis asked earlier, do the fixtures actually cast lights on other actors? And can it render without volumetrics, like an FOH system? PATRICK: You definitely could turn off the beams if you wanted to, yeah. So the main reason that we have the beam shader is just because, internally, if you weren't using the beam shader and you're using just a default light-- let me go back to my ambient and my dark one. So if you just pull in a spotlight, for example-- whatever, I can just describe what I'm talking about. But the beam itself coming out of a spotlight-- what determines what it looks like is actually the fog. It has nothing to do necessarily with the light part itself. So you have to play with the grid pixel size and deal with atmospheric height fog and this kind of stuff. But what we noticed was just since that's what's driving it, there is no way to actually shape that currently. Light functions don't affect fog. It only affects what it hits. So that's why we have it. But if you don't want the beam to be shown and you just want to have it just cast light, absolutely you could just go into the Blueprint and just literally remove the beam instance material or just modify the shader to not draw that. So actually, in my-- not here, but in some of the other setups, I've actually gone in and modified the master material. Let me see. Where is light fixture materials, master, master, right? So I mean, essentially, it's just going into this missive, right? So I literally just put in an inhibitive. Inhibit and multiply here. And balance guy in here. And go like that, right? So now, I have like a master inhibitive to this. So I just cut off the beam. Or I could put it to something very small so that it would not draw as much beam. And you get more stuff on the floor. That's totally valid as well. I will put it back, though. VICTOR: I think that was the last question. And we are almost out of time here. PATRICK: Good. Well, that's really good. VICTOR: There were some other-- I know y'all asked some other questions. If it's not related to the topic or Patrick's expertise, then they unfortunately aren't-- they don't get asked on the stream. So we get all the questions. Yeah, but unless I know Patrick is potentially able to answer them, then just receiving a sorry I don't know is not too interesting. That was really good. PATRICK: Probably a lot of those because nobody knows everything. VICTOR: Unreal Engine 5, it's coming. I don't know what else to tell you. PATRICK: Oh yeah, yeah, that's tough. VICTOR: I know everyone's excited. Patrick, thank you so much for coming on stream today. Chat, please give it up for Patrick spending quite a bit of extra time here as well, just answering most of your questions. That's super exciting. If you joined us from the start today, thank you so much for watching. We hope you enjoyed the stream. Make sure you give us some feedback in the survey that we'll go ahead and drop the link in chat for you all. Let us know what you'd like to see in the future, what kind of topics, as well as features and things that you'd like us to cover, also how we did, what we could do better, et cetera. Just go ahead and speak the truth right in there. If you are new to the Unreal Engine community, make sure that you visit unrealengine.com. You can download anjo for free. It's right in the Epic Games launcher, if you already have that. And you can get started immediately. I do want to make a shout-out to Unreal Online Learning. We have about 160 hours of content right now, where you can follow along from getting started into more in-depth courses into some of the features and topics-- general game development topics, but, of course, specific to Unreal. If you are a member of a community and you're producing content already, make sure you let us know what you do. If you've seen this from the beginning, we do air the news spotlight as part of our live streams. It also goes up on YouTube. And we pick spotlights from the community. And so if you go ahead and submit projects, whether it's on the forums-- we check Twitter, Unreal Slackers, which is, by the way, our unofficial Discord community, great place to learn, share, and discuss everything Unreal. We're also looking for new countdown videos. They are 30 minutes of development captured from the editor. Speed that up to five minutes and send that to us separate together with an image of your logo. And then we'll go ahead and composite that together with the little countdown. It's cool. It's a good way to get some attention for your project repeatedly on the stream. If you stream on Twitch like we do, make sure you use the Unreal Engine tag as well as the Game Development category. That's the best way for us to find you, as well as other people interested in watching you stream and work with Unreal Engine. It's quite cool. We're going to go ahead and make sure we raid someone after the stream here as well. Make sure you follow us on social media. And if you are watching this on YouTube, make sure you hit that notification bell so that you get all of our updates and everything else that we release there. We do have a lot of things that don't go up and Unreal Online Learning, such as these live streams, our webinars, all of our content from our events like Unrevealed Virtual Production. We also have 50 videos from Unreal Fest Online that we did earlier this year. There are loads and loads of content over there. Next week, we are doing the Year In Review stream with Tim Sweeney. And so if you're excited to come and join us for a little bit of a recap of the year, we're also going to have Brian Karis as well as Grayson Edge and a little bit of a surprise at the end. So I would highly suggest you tune in for that. It's going to be same time next week, Thursday at 2:00 PM Eastern time. And I'm quite excited. I can't tell you more than that. But tune in. It's going to be great. Patrick, anything else you'd like to leave our viewers with? PATRICK: No, I mean other than-- I was just going to say we really appreciate any kind of feedback and information you guys can give us. I know I'm in contact with a large portion of the community. But it's by no means all of it that's in this space. So if you have ideas, suggestions, this is by far never-- it's never the last version, right? There's always more stuff to come. So if you have some other stuff, definitely reach out and let us know. We're always up for trying to make our product better. VICTOR: You can add us @UnrealEngine on Twitter. But the best place for feedback is the Feedback for the Unreal Engine team on our forums. That's what I'd recommend. Awesome. Patrick, thanks again so much for coming on the stream. I hope I get to see you at some point again here. PATRICK: Yeah, totally. I'd love to do it again for sure. VICTOR: Awesome. And with that, I wish you all a great weekend and a great rest of your week, as well as a good weekend. And then I'll catch you all next week, same time, same day. Take care everyone. Bye-Bye.
Info
Channel: Unreal Engine
Views: 44,562
Rating: undefined out of 5
Keywords: Unreal Engine, Epic Games, UE4, Unreal, Game Engine, Game Dev, Game Development
Id: -oIePxpasXk
Channel Id: undefined
Length: 137min 50sec (8270 seconds)
Published: Mon Dec 14 2020
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.