First there was Mr. Dmitry. He worked at a company and they needed some software for people to work together. They needed some software. Yes. So he is from here. Which continent is this? Europe. Europe and this country is Ukraine. Ukraine. He is from Ukraine and he created the software and he gave it away to the world for free. That's called open source. Then came Mr. Sid. He also lives in the same continent? Europe. Europe. He lives in Netherlands. Netherlands. And over here. He wanted to start a company and he thought it would be a good idea to help other companies that are using the same software that Mr. Dmitry made. And so, get lab started and they became a team. So, do you have any questions? Is Mr. Dmitry... This one? Yes. Dead? No, he's not dead. I met him in Mexico. He's still alive. Yes. Any other questions? Um... Is this Get Lab? Get Lab... The software... Mr. Dmitry had started about five years ago. But... Get Lab, the company that they both started together, about three and a half years old. Do you know somebody else that's three and a half years old? What?  And if I'm sending any questions from you? I'm three and a half years old. People are in Get Lab and like, why are there so many? We have 160 people. And it's because we have a lot of work to do. But actually, we have even more work to do so we're still hiring more.


Go ahead, please. Hubert? Yes, Mr. President. How are you feeling? Well, I'm just fine. And how are you? Pretty good. Happy Thanksgiving. Well, a happy Thanksgiving to you and the Lady Bird. My goodness. Everything sounds good from down there. Fine. We got a little confusion. It says McNamara says that if you want to go to Pittsburgh, Jake says that his last word was that you'd pick up our Senator Sparce. Now, here's our situation. I thought it would be, we're going to talk over some reviews of the next session on money and generally speaking, withholdings and things of that kind. And I thought it would be desirable to do it with some of the leadership. McCormick will not fly, so Halbert and Boggs are going to be here from the house in four days. We've got airplanes bringing them in. Mansfield is at Sarasota. And Dirksen is at Sanford. They're going to need to be picked up at 10 o'clock in the morning. I thought it would, it's not anything you need to do at all.  We didn't arrange it that way. But Mansfield just said, well, his wife's with him. And I guess he's afraid to leave her in Florida, afraid somebody to pick her up and run off with her. And I guess he heard you down there too, probably. I'm a little scared about my wife. But anyway, I thought it would be a good thing if you didn't have plans to mess up, to give you a chance to kind of lead them in and feel with them and talk to them by picking Mansfield up at 10 o'clock and Dirksen at 1030 and coming over here about the middle of the day. Now they're going to stay all night. I'd love for you and Muriel to do the same if you want to. It's not important. It's not a critical thing. It's not a crisis. There's not any reason for it. We haven't even announced it. We didn't want to until we could be firm on it.  I'm going to bring in George Mayhon from one direction. I don't want something that'll call Jerry Ford to criticize. But I thought it would give you a good chance to talk to them and get both of them stealing and exploring without lobbying with them, but it would give you a chance to do it if you wanted to. Now Cross says that he wants to dispatch one of the jet stars to pick you up to go to Pittsburgh. Jake wants to pick these other folks. So we need to know and they seem to think there's some confusion between what you told Jake and what Cross told McNamara. Let me just tell you what the situation was. I had planned to go up to Pittsburgh and I thought that one of us elected souls ought to be up there for that gathering of Scranton and Schaper and all these people coming in and old Dave Lawrence was a good old Democrat for many years. And then I've got to go to Minneapolis for the wedding of my Freddie Gates, my friend's daughter, on Saturday morning. And I thought that was what my original plan was. But I didn't quite understand the meaning of this meeting in Texas. So what do you say when that's where I belong? Well, I don't want to get you in trouble and I don't want to be responsible for anything that you've arranged that gets you out and gets you in trouble there. But what we're going to do roughly is take about five, six billion out of programs for this year and reduce them. And we're going to explain to them where we think it ought to be reduced. For instance, this morning we're taking about 20% out of your road program. Well, let me ask you this, Mr. President. What I had hoped that I might be able to do if it wasn't in convenience everybody was to go to Pittsburgh and fly right down after that ceremony down to Texas and getting there about 150.  Well, I think if you're going to come, the value of your coming has come with the two senators not to come from Pittsburgh because you can't talk anybody into anything coming over from Pittsburgh to Johnson City. That's just a long dash. I'd go on to Pittsburgh and arrange it and we'll just roughly tell you all we're going to tell them it's not anything of any great moment. I thought that you might try to bring about a little unity by being the boss of Mansfield and Dirksen. So here's what you all think about next year. What do you think we're going to do? What do you think we ought to do? Try to get them to talk a little bit privately and get the group because it's just fortuitously we were all in Florida. That was my thinking. Yes, sir. Mr. President, that's what I will do. And if you want to, I'll ask, I know Marvin's going to the General, but if you think we ought to get some other people, I will get some other people. No, I'll do it this way and I'll come down. I'll be in Texas. All right. Will Muriel be with you? Yes, Muriel will. Would you want a plane to go to Minneapolis that night? We'll have to go to Minneapolis really that night. All right. Okay, then we'll work it out that way. You can leave here at 6, 7 o'clock in the evening and go to Minneapolis. We're going up for our friend's wedding up there.  You bring them over and then we'll have a plane, my plane here or something. We'll take you to Minneapolis. All right. Now, will you get a hold of Man's Steel and Dirksen? Do you know where they are? Yes. Well, they people do here at the city service. All right. Now, it's 9.15. You'll have to leave.  Where are you? Miami or Keywood? Miami. 9.15. You have to leave there to pick them up at, not later than 10. It's Sarasota and the other one at 10.30. Yep. We'll have that all worked out. Now, what I want to do, the main part of this, I thought is that it's going to give me a little chance to spend the night with George Mahon and try to get the house thing and I thought you might work on the Senate thing a little with them and I would lead them instead of direct them. I'd just make them say to me what they want to do. All right. And I think you'll find they don't want to do much. And Scotty Reston, you see his columns? Yes, I sure. I saw it the other day. He says, well, it's in Texas papers this morning, but he says that Gardner says that we just, our administration of all of our programs is something terrible. I thought Gardner had done an awful good job. I'm surprised that Gardner would say that. He just takes a quarter, two out of context, but survivor is really unloading on us. Yes. He called the press conference and told them how terrible they all were and if they didn't start agitating and putting the heat on us and the pressure, that it would be terrible. I think we've got to have a real feel. What's your feel about poverty next year? What do you think we ought to do? Roughly, our budget, the first two years we were in office, was under 100 because of defense expenditures. This year, our budget will run 127 billion. So we're up from 99. What we were going to do was 90. We're up from 99 to 127. Next year, it'll run 140. At the moment, we have requests for 90-some-odd billion from the services. We think that the minimum we can get it down to is probably 75. But we either going to have to have, I think it's going to shock the people when we tell them we've got to have 140 billion on the budget. Now, if we hold things as they are, except defense, that's what it'll be in that neighborhood, 135 to 140. I don't know how much they talk about this defense spending. I don't know how much. I think that one of our problems is the criticism they've made of our programs. My own inclination would be to go along with poverty, something along the line we did this year. Exactly. But they haven't spent it very well even more. They ought to cut out some. Well, we'll get to talking about that. But they're spread too thin. They ought to concentrate. Now, here's the people we talked to. If you've got a minute. Yes, sir. We talked to Hayden. He would not give any specific reaction to over the phone. We talked to Russell. He said that he would give us support for an intensive cost reduction program if the cuts were made across the board in the entire budget. The grumbling over specific cuts but balanced cutback would be supported in the present climate. He says that when we say that we're going to have no new starts in the Corps of Engineers that's going to cause grumbling. He says the highway trust fund will cause grumbling. But that's all the positive. That's the summary of his conversation. You see how constructed they all are. Magnuson says I'm taking these leaders now on the chairman of the committee. Take 300 million out of economic opportunity. Take a few whacks out of NIH, five percent. Cut a little from impacted areas. Take a whack out of NASA. Stretch out SST but go on select bone as a contractor. Refer new starts. Go ahead with the ongoing program. Don't cut any power. Stennis, he's certain some cutting has to be done. Divide cuts between the administration and Congress. He wouldn't have no comment on health. Very difficult to cut impacted areas. Reluctant sport of deferral of new starts. It would make sense. That's Stennis. Holland, no reason to spend congressional add-ons on DOD. Cut off at National Institute of Health. Cut impacted areas. Keep Apollo but cut post Apollo. SST, slow down. Delay new starts. Cut navigation, irrigation, head of flood control. REA, cut to budget request. FHA, cut operating loans, substantial cuts and about holding back any NIH. In back today, REA must not be cut. Might as well slow down. Governor Wallace gets accredited anyway. Senator Russell Long delay 130 million add-ons but not if it affects Louisiana. NIH, aid to airports. So he does no good. Slow down the entire construction process. We've got all these governors and highways pretty popular and contractors and labor and everything. But I believe that that's the most wholesome area that we can make the cuts. Although, I notice the risk is against the cutting and months against cutting. Republicans are really against cutting where we can cut the trust for them. They want to make money. Yeah. They want to cut the office of economic opportunity and health and so forth. One of the things Senator Allen says the opportunity can't stand the whale of a slash and a complete reworking. McCormick said, hold on, hold on, hold on, hold on, hold on. McCormick said, hold back and the impacted area is. The Albert says, do some trimming in poverty. Forge that can cut five hundred million out of them and startoon the office of education. It's very popular. But, well, you weren't doing a job? I swear I can't understand that. You can say that God that she ought tohang on. That's what we get to try to get them to keep them into other outfits.. Yeah. Not being asked though, I don't know. This is the most effective.


This is Witchbase news for Friday the 14th of April 2023 I'm CMDR Buur An Elite Dangerous news this week Frontiers CM team are taking Elite Dangerous to the Science Museum in London and you can join them Tickets to this year's Elite Community Meet go on sale There's some more top tier guidance on unlocking Guardian equipment And after an accidental post on Galnet news We get a glimpse at what could have been As always if you enjoy our videos please do hit the like button And if you haven't already be sure to subscribe and click the little bell So you don't miss any of our Elite Dangerous content And if you'd like to help directly support our work here at the pit You can also join our Patreon links to that and everything else are below You may remember last week we featured the infographic guides To unlocking and obtaining Guardian modules and weapons Created by CMDR Radiomio If you missed it they're linked below this video again for you This week that valuable work has been supplemented And added to very nicely by CMDR Greybeard Seawolf Who is creating pictorial guides to activating specific Guardian sites The images are clearly labelled and carry a key Identifying all the points of interest Whilst giving clear instructions on what to hit at the site In what order and what to look out for in the way of potential threats As well as how to deal with those threats Whilst Greybeard's guides are linked to specific Guardian locations The information contained in them and the site's layouts Are largely transferable to just about any Guardian digging that you might be doing So should prove useful no matter what site you find yourself at The images which are presented in the style of aerial reconnaissance photos Are being posted to Greybeard's profiles on Twitter and Mastodon Which you'll find linked below this video This kind of information is always useful to have to hand So it's definitely worth bookmarking it all Even if you're not planning to use it right away It's interesting I think that Guardians and all things Guardian Are seemingly very much on the forefront of CMDR's minds at the moment I'm curious to know if this particular elite dangerous zeitgeist moment Will ultimately lead anywhere Just a heads up the Hutton Truckers announced last night that Tickets for this year's Elite Community Meet Being held on the 19th of August 2023 at the Hilton St Ann's Manor Hotel In Wokingham are now on sale Priced at £25 the tickets include a buffet lunch And entry to the main hall between 10am and midnight The event will be raising money for the charity's special effect And hearing dogs for deaf people And whilst it's not obligatory Should you wish to stay at the hotel hosting the event Then the team have managed to negotiate a special preferential rate For the event's attendees You'll find links to the Elite Dangerous Community Meet Website and social media feeds In the description below this video If you want to bag yourself some tickets Frontier developments announced yesterday That their community team are attending an exhibition At the Science Museum in London And taking Elite Dangerous along with them The exhibition called Science Fiction Voyage to the Edge of Imagination Is about the history of science fiction in popular culture And its influence on real science And features props from shows Such as Star Trek, Star Wars and Doctor Who The exhibition actually runs at the Science Museum In South Kensington in London Until the 20th of August this year But in part celebration of Star Wars Day And the exhibition recently receiving an extension To its limited run It'll be hosting an evening of special events On the 4th of May this year And it's that specific event That Frontier and Elite Dangerous will be present at If you want to get along to the evening celebration Then you'll find the Science Museum website Linked in the description below this video In case you missed it There's been a community goal running For the last week in the live game Centred around the assassination of the former CEO Of the Federation-aligned Kane Massey Mining Company Johann Fleischer Fleischer's assassination was reported on Galnet On the 4th of April And circumstantial evidence at the time Linked the killing to the owner of Rival Corporation Torval Mining Senator Zemina Torval As Zemina Torval's title clearly states She is a member of the Imperial Senate And the apparent assassination of a Federation-aligned CEO By an Imperial-aligned company Headed by an Imperial Senator Immediately raised tensions Leading to the outbreak of a proxy Imperial-Federation conflict Between the two corporations In the Tavagi system When this Thursday rolled around Bringing with it the traditional Weekly cycling of community goals and events The outcome of the conflict was a close run affair With both factions only reaching the second Of their identical goals The Federation faction however Had marginally more bonds handed in on its behalf And so it won the war The Galnet news story that accompanies The federal successes in the conflict States that as a result of their win Federation forces were able to take control Of the Imperial Megaship The orchestral Falcon At which point the assassin was handed over The story still leaving the reader with the impression That whilst the evidence is still circumstantial The Feds still believe Torval was responsible What is particularly interesting however Is that at the same time the Galnet news story Broke declaring the Feds as the winners Frontier accidentally also released the Galnet news story That they'd intended to publish Had the conflict instead Gone in favor of the Empire and not the Feds In that version of events It's fairly apparent that Torval is not the culprit And that whilst the individuals motives Are not yet fully understood The Empire are just as keen to get to the bottom of it As are the Feds Is it possible that a force or forces unknown Are attempting to stoke the furnaces of war Between the Federation and the Empire Will we now see a similar setup Where the Federation are implicated As aggressors toward the Empire Further pouring fuel on the fire And inciting combustion It honestly doesn't sound too difficult Of a task as Imperial Federation relations Are always somewhat of a tinderbox Even when they are getting in along But if someone is attempting to set them At each other's throats Then who are they And what do they seek to gain From such a conflict A conflict let's not forget That would at the moment at least Be taking place against the backdrop Of an all out invasion of the bubble By an aggressive alien species Will you be heading to the Science Museum To see Elite Dangerous and the Frontier Community Team Do you think the Guardians and their AI Are yet to be important to Elite's future And if it isn't the Imperials or the Feds Just who do you think has the means And something to gain from their squabbling Let us know in the comments below That's it for now Thanks very much for watching We'll be back later this week with more videos Until then 07 Commanders follow the Greens on the way out And do keep clear of the toast rack We very much look forward to seeing you next time


Hey guys, welcome back skits on series episode 3 here bit of a bonus video I was falling behind on the videos get into forehead on the the coding side So trying to catch up with this bonus video the topic today is going to be mostly just command line arguments how that works in assembly It's not very straightforward At least it's not very cross-platform. I'll say that Then we're going to take a look at making some of these utilities from Unix like RM touch and CH mod from a scratch in assembly We're going to actually use those from now on in the series. So we're making our own tools here. Also, it's kind of crazy This is our third video. We haven't even covered how to print stuff out yet Yeah, we're already implementing utilities that we're going to use for the rest of the series. So kind of crazy We're gonna be doing some code golf Not the fake code golf that they do on like the internet where they just take stripping languages with like random letters meaning different things and calling that code golf I mean, we're gonna actually minimize the number of bytes being executed by a computer That's real real like IRL code golf And lastly, we're gonna disassemble our executables kind of can we can see like what's going on Like how did the a set the assembly organism translate our English into zero than one? So that's pretty cool. I I thought at least so in the system 5 a bi I covered this in the previous video very briefly but The initial process stack is very straightforward and very clear when you pass in arguments into a function Even if we get to main in C, this is how the stack is supposed to look you're supposed to have In RSP so I should say the register sorry the leprechaun whose name is RSP He's flipping switches and he's flip switches such that that number inside him that he's controlling is I don't know 50 obviously it can't be 50 has to be multiple of like 8 or 16 or whatever But let's say it's 50 just for a simple math here at address 50. That's the stack and In that at that first location there should be a number which indicates the number of arguments that you've passed in So let's say you pass. Let's see your command was echo high you your hacker your type didn't echo High and so that's two arguments one is echo one is high and the first argument is echo second is high and The argument count is too so at RSP there would be the value of 2 and then there'd be echo 8 bytes away And there would be high 8 bytes above that and then you'd have 0 8 bytes beyond that That's kind of how it works very simple The problem is is that just if I a bi it's supposed to control all these different OSes But and it does control Linux, but the guys on free BSD are on drugs. I don't know they made RDI Point to this not RSP and literally it's coin flip half the time Literally half the time not even when you install the OS like half time when you run software RSP points to argument count half the time it doesn't and that made me absolutely crazy I was trying to figure this out figure out why that was I couldn't figure it out Thankfully I posted to the free BSD for men to really smart guys figured it out for me again. Why on earth? They're allowed to violate a bi like that beats me All you have to know though is that if you're programming for Linux use RSP the point to RGC If you're programming for free BSD point to RDI because RSP only points there half the time for whatever reason And don't worry we're gonna implement this in such a way that no matter what you're compiling these things on if you get the Repository yourself it will automatically pull your OS and it will automatically include the right the right value for this We're gonna have like a variable to encode this register So that's cool Better example here, let's say you wanted to use LS You wanted to type on your console LS dash LA and LS by the way, you know, it's obviously it's a program It's a binary and here's where it's found on Linux at least on my machine And so this is how the stack looks before main is even called This is when the start label is finally, you know reached Obviously, there's two arguments. So at RSP in our previous example of address 50 And you know of leprechaun value 50 This is the value at Address 50 then you back to leprechaun. What's your number 50 add 8 to that? So just 58 in memory that would be address that there would be another number there That number happens to be another address at that address call it X There are three bytes The first one is the ASCII value for L then S and then a null byte That's what's called a null terminated string. It ends in a zero. That's what you do on C at least how you end the string That's how you get to how long the string is without including the number of letters ahead of time So it's you know, pretty cool to do it. And anyway, that's address X go back to the leprechaun What's your number 50 add 16 to that? That will be another number in memory at that address 66 At that go to go to that pointer and you'll have a this you'll have a negative sign and L and a and then a null These are all ASCII values. Here's the table if you're curious Go back to the leprechaun. What's your number 50 add 24? So address 74 in memory There will be a zero That means you're out of Out of arguments or you can just count this value is to this one's one this one's two you're done But anyway, if you didn't want to count you have a zero there just in case So that's how that works Kind of very straightforward only caveat is this is for Linux. You'd have to use RDI on free BSD That's how that works. So now let's go right ahead and implement some this is just a core functionality for these three Utilities so I use RM mostly to delete files. So just a single file here RM XYZ We're gonna replace that with recycle XYZ where millennials we have to recycle obviously that uses the unlinked syscall That's how you delete stuff on Unix. Then we're gonna implement touch X was that's how you make files We're gonna that's how I use it. That's how I use it at least I use it to make files I'm gonna replace that with spawn XYZ using the open syscall also the closed syscall And then lastly I use chmod predominantly to elevate files that are not executable to be executable So I do chmod plus X in fact, I've used that for every single binary. We've made in the series so far So I'm gonna replace this string with this Again, it's just gonna handle making things executable and making a single thing executable So not a full featured utility for sure, but definitely a minimal one So and that's gonna use the chmod syscall. That's you know the same name as the program itself. So Let's get into that right now Let me open up the Computer here. Okay Let me first show you all those Functions, so I got a couple functions here that you can use. They're all in the repository First one is file close, closes files, file delete, deletes files, open, opens files The last one is chmod that changes the permissions on a file. So how does this work? Well They're all kind of the same function with this with a little bit of difference here and there They all do this. They all save certain registers rcx and r11 and then they restore them afterwards in reverse order r11 rcx Why do they do that? It's because syscall Screws up those registers. Why does it do that beats me? Who cares? But yeah, you have to make sure that at least for us We're trying to preserve all registers in all functions. That's our our a bi that we're making here that everything is saved That's not a return value in our case. You can see here a return value is rex So I'm even though we're gonna change rex in the program I'm not gonna save and restore rex because I actually want to use it as an output in this case rex You can see here returns zero on a success and negative one on a fail and that's not my doing That's the syscalls doing that these OS Programmers already implemented that kind of return value in the syscall itself. So we don't have to worry about that Anyway, yeah, all we do is we save registers. We move the syscall ID into rex This will vary on Linux and VSD, but don't worry It will work on your computer if you're running it properly. It will pull the right value Then it will say the it will restore registers that we just saved and then return to the previous part of the code And that's how all this works. The only caveat would be on file open is that it doesn't return Success and fail it returns a file descriptor or a fail so in rex so when you when you work on like Unix you have to have a file descriptor to interact with the file. Well, you don't have to have it, but it's nice to have one So let's say you want to open a file and and or make a file called ransomware.exe right you want to email your friends this ransomware Anyway, in that in that file when you open it with this this command you're gonna pass in the file name a No terminated string here ransomware.exe Ending with a null byte. You're gonna pass in some flags and permissions and stuff And then you're gonna run this command and it will return this is called return a file descriptor Let's say 15 and then from now on whenever you want it right to that file or read from that file or interact with that file Anyway, you don't have to refer to it by its path File name dot exe you could refer to it by its number 15 and then when you're done actually You can close the file here You can see we close a file with a file descriptor so you can just whenever you're done with the ransomware file You just pass 15 into this function and it will close for you You don't have to have the path anymore just the number so it makes it a little bit easier You can now store a File in a register as opposed to having to store it somewhere in memory right a character Right you have to put in memory or as you can put a number in a register So that's pretty cool at least anyway, that's how the functions work for 10 minutes in here I want to show you the examples Did I show you something first? Okay before we get to the examples. I want to show you What's the motivation here? So I'm gonna show you two examples for each one one That's kind of just the bare minimum program and then like an actually code golfed version So we're not like one that the boomers will approve of that's very organized And when that's literally stripped down for bites as far as I can get it So you can see how this compares with Linux and free BSD Linux files Linux programs are massive compared to these DIY ones look at even Look at so we get 96,000 bytes versus a hundred and forty two bytes That's just a massive difference even RM come between free BSD Which is much better than Linux and our version. It's still a factor of 100 We are 100 times smaller than RM and granted We're not handling all the fancy flags and help and version stuff that the RM utility does We're just making it able to delete files But still it's pretty neat that we can do that in in one percent the amount of bytes as What free BST is using and free BSD is four times better than Linux. So that's just crazy to me, right? With that out of the way, let's get into the actual Programs here, so I have a couple of examples as I mentioned I have two for each one Let's take a look at the CH mod just kind of like the boomer version of this That's example a Let's take a look at just the code here and it's they're all kind of the same setup I'll go over just just one or two to show you how this works Actually, I'll go over all three just because it's it's very straightforward So we're including a couple things one is the syscall the things is all the numbers like That are different for different OSes So that's kind of how we're going to encode for both free BST on Linux Then we have our two syscalls We have one CH mod and one exit that these are functions that we've included that handle the syscall processing And here's the whole the whole code the first thing we do is We check for two arguments if you remember at address RSP So or RDI on Linux or free BST was supposed to encode where the What with the number of arguments was so let me go back to our thing So here at RSP that was supposed to have the number of arguments in it and we want it to be two We want to be able to have a second argument, which is a path We want to be able to change permissions or do whatever that requires a path in the second argument So we need this value to be two and then once we have the value of two We're going to access RSP plus 16 to actually get that value to get that multimated string So let me go back Here you can see we're checking if that byte at that address in memory on the stack is Two if it's not two as in you didn't pass a value or you passed way too many values You didn't pass a path or you passed way too many paths We're just going to jump to fail and that's going to set an error value of one and then leave the program If it was to as in you use the program correctly, it's going to not jump to fail It's going to do this. So what it's going to do is it's going to you Pull from RSP plus 16 or on free BST RDI plus 16 An address To a null terminated string a pointer to a string and put that in RDI then it's going to put the Execute permissions which we've defined in our in our other file. Don't worry about what that is Into RSI and we're calling CH mod. This is just inputs for the syscall I talked about in the previous video then all we do that at this point. We're done This made the function executable already this CH mod. We're done. The question is what's next now? We have to leave the program and so I'm making a return value of zero here I'm jumping to leave which is down here or exiting So now if you were to check the return value of the function It would be zero if it was a success it would be one if it was a failure. So that's how that works And let's just show you that it works Let's make a file. Let's use touch Brands somewhere And you can see let me look at the permissions It has just read permissions for the most part you can see and it's white. So it's not executable Now If I run the program and now have a binary, right? I can run that binary. That's our that's our function on ransomware Now if I look at this you can see ransomware is now read. It's now executable. So the function works Now let's go to our next example Example C this is going to be Touch so it's a little bit harder because it involves opening a file and then closing it If you want to be, you know, nice about stuff Let's open up the code ISM In this case as I mentioned before we have one more include we have a file open and file close But other than that, it's pretty much the same thing. But again, we have the same, you know comparison for two arguments Excuse me and Our first thing we do is we open the info file You can look at all of us how it works, but I'm very boring. We open the info file with certain flags and some permissions Then we so file open remember that returns the file descriptor in Rx So you can see here it returns that value in Rx. We move Rx to RDI. That's the input parameter for file close So now we can actually close the file that we just opened and this combination of things will have opened a file aka Created it. We've given it permissions or create file flags I hope this is a typo. Let's change that and Then we've closed that file. Now all we have to do is leave So again, it's the same logic to leave as before with that out of the way Let's let's run that and show you that it works. So We now have a binary so now we can do binary ransomware I can't spell And now you can see we have a ransomware file. The program works Let's now go to the last example that thing that was e Yep Let's open up the code. This is very easy. It's just removing a file in this case We have our file delete function I just talked about as well as the exit syscall and again, it's the same logic the only difference is in this case We're not checking, you know, we're not opening a file We're just deleting it straight up via the path. And so we're moving that No terminated string that address that pointer into RDI Calling file delete and then leaving so very simple nice and easy prove that it works. Let's make a ransomware file again You can see there it is and now we can create the binary there That is run binary on ransomware and you can see ransomware is gone. Nice and easy very cool Last thing I want to show you was this code golf version. Just saw the last one. Let's just keep it easy here example 3f This is a much smaller execute, but it does exactly the same thing. Let's open up code asm In this case, we have no includes why bother. This is this. This is our code golf attempt So we're trying to cut down bites. So why bother including Functions that we can just inline those functions, right? So we're not including anything anymore Now also why bother checking? I mean, we're trying to save bytes here. Let's not check for Proper inputs, right? We were checking for having two arguments. Let's screw that Let's say the user is smart enough to only pass in two arguments. Let's not even bother checking So we get rid of that part now. We're just leaving the file. We're moving that value directly from the stack that address To the RDI pointer and moving the syscall ID for delete into RAX and then calling syscall That's all it all this is and then we're exiting calling syscall. There's no error handling here There's no input processing here. Nothing like that. It's just the bare bones Well, last thing is that we can see we used the we didn't use the full RAX register We didn't use RAL. Why is that? It's because the number I think the value versus unlink on On on on FreeBSD is like 10 and I think on Linux. It's like 87 or something And so those values both fit into eight bits so we can just use the low low eight bits Register that's called AL and so that saves some bytes for us And we can do that both for the unlink syscall as well as the exit syscall I think that's one on FreeBSD and 60 on Linux again both those values can fit in eight bits So nice and easy. Now if I run that and Then I show you the file size you see this binary is like I said before only a hundred and thirty-two bytes Yeah, it works if I make ransomware and Then I show you that it exists and then I run the binary on ransomware It works. It leads the file and this is only with 12 bytes of actual instructions And that's what I want to talk about last is after we've talked about, you know, the going from assembly into You know binary like this Can you go backwards? Right? And the answer is absolutely. Yes And that's what we're doing here So for that DIY RM Utility here's what the binary looks like if you were to hex dump it without ending this as what this means Here's what you get this right column. That's just the ASCII stuff screw that ignore this whole column So the first 40 bytes hex or 64 bytes decimal that is the elf header Then the next 38 bytes hex or 56 bytes Decimal that's the program header those things are 120 bytes of just garbage that tells the OS how to open your program And what to do you can see 78 in helpful spots? That's indicating, you know, the address that you should actually start at in which case this is 71 2 3 Or sorry 71 2 3 4 5 6 7 8. Here's the start address, right? That's what that number is in coding Anyway, you only have 12 bytes of instructions and here they are all laid out And I've broken down what the op codes are to kind of get a feel of what's going on here So the easiest thing that we've got going on is we have two sys calls in the third position and in the last position and The code for sys call is just a straight up number. It's 0 f 0 5 and you can see those values Here and here That's nice and easy the next one is a little bit harder But not so much harder that is the instruction that we're using in the second and in the fourth slot That's moving an immediate value into an 8 bit or a 1 byte register in this case It was register al for both and what you do is you take b 0 hex and you add A number which Indicates the register you're talking about in our case register al the number for that is just zero So that's your first value b 0 that's what this comes from and this comes from that just means i'm talking about register al here And we're putting an al that's this ib that means an immediate byte And that byte is just sys unlink Or sys exit depending on which one you're talking about in our case for free bsd that value is 10 And if you look 0a is hexadecimal for 10 And then since exit on free bsd that was 1 and here you can see we've passed in the immediate byte of 1 0 1 Now what if you weren't talking about al what if you're talking about register bl So see al had a register kind of value of 0 But bl had a register value of 3 and so if you go back here to change this code from Move al to sys unlink to move bl sys unlink it would be b 3 0a Say that works because we just added 3 to b 0 You can do that for any of the registers that are in this table like that Obviously it gets a little harder with these so don't look at those but for the first eight you can do that Okay now The last one actually I should say the first one is the hardest That is the 64 bit version of the move instruction and we're moving a value from memory into a register And it's it's a little bit harder, but not so much harder. So the first of the easy parts, right? See this 8 b Well that straight up is right here. So that just encodes. Hey, I'm doing a 64 bit move instruction in this way 8 b leave that there. That's the second bite fine The next thing that's easy is this 10 that's hexadecimal for 16 if you look There's our 16 So that's where that comes from What about the other two bytes? What about 48 and 7f? Ha, this is some some tough stuff. So the first one is what's called the rex prefix This is all because this processor was like Not made for this purpose. This is like a 16 bit processor. That's been transformed to a Pretty big processor which then was extended to a 64 bit version. And so it's it's all over the place But anyway, how does rex? You know prefixing work. Well, I have that here So that's a bite the first four bits are always going to be zero one zero zero and the last four bits are Based off these four rows here in our case These are all zero the first one because we're using 64 operands. It's going to be a one So in our case the total number is zero one zero zero one zero zero. So zero x 48 That should be familiar because that is the first bite in our instruction That was the rex prefix Okay, lastly the 7f. This is cool. This is actually encoding Two different things. It's encoding this and encoding this And also it's encoding. It's getting us ready For this not encoding it but getting us ready for that. And how does that work? Actually, it's super cool That is what's called the mod rm encoding. And so here's how this works. Look at the table. That's pretty much how how it's set up So we're using rdi for both on free bsd. Let me go back So on free bsd. Remember this sys argc start pointer. That was just a variable that I made up to refer to rdi on free bsd and rsp on linux. So in on free bsd both the Destination which is this one and the source operand are both rdi. Keep that in mind Also keep in mind that the number that indicates rdi is 1 1 1 So the way this works is Also keep in mind Also keep in mind that this placement that we just talked about was 16 16 fits in eight bits Everything between negative 128 and positive 127 fits in eight bits. So we are one bite So we're going to be in this row for which the mod value is zero one So for this mod value, we have but we have zero one Then the two registers are the same. They're going to be rdi for both. Remember that was for both one one one or seven You just talked about that. So our total Op code or sorry, I guess bite here is this zero one one one one one one or break that down. It's zero x seven f That should be familiar because that is this So even these hard instructions They can be broken down they get a little bit harder You know the more and more stuff you end up doing But you can always break it down and figure out what every instruction is talking about Even without using some kind of disassembling software You can do this with just, you know The the documentation So it's very very easy Last thing I want to mention just a very pro tip here because it had me going for a loop for a while um, this is Let's say you didn't have eight, you know eight bits You had we're sort of having one bite you have four bites this placement Well, those bites are not going to be in the order you expect with the low bite on the far right The low bite will be first Which maybe you would expect that maybe you wouldn't I didn't expect that and so You know if you pass in the value that can't fit into an eight bit Displacement, let's say you pass in 128. It's not going to fit That that value that eight zero value for 128 that's going to be in The first slot of the displacement not the fourth slot of this placement If that makes sense great, if not I would who cares to just try to help the one guy That's going to help so anyway with that out of the way. I'm pretty much done with the video Not a very long one today. Um, we now know Mailing arguments command line arguments We also know how to implement some basic utilities using syscalls like rm touch and ch mod And we're going to use those for the rest of this series You know in my code If you look at the run.sh I'm using ch mod plus x every single time from now on We're going to be using our own version of that. Don't worry and then lastly We talked about code golf and also how to decode Instructions based off their binary numbers into what they're actually doing on the processor.  I mean, sorry a discord server I'll put a link in the description. You guys can check it out and we can we can hang out there I can give you out these uh these note sheets. So Anyway, thanks for watching. Have a nice day


Hi everyone, Joe for jazby's case breaks.com coming at you with a 2019 Panini Optic football hobby pack Donner's Optic football hobby pack number 10 with two of those NT spots being given away Now this particular break I know it doesn't say it in the title because the next one doesn't have this promo But in this particular pack we are giving away those five extra spots the next one We're not so big. Thanks. Everyone take advantage of it here So there'll be three different dice rolls one where I'm giving away five spots within this pack break Second dice roll will be names and teams for the break and the third and final dice roll will be given away those NT random team spots And that'll unlock pick your team four So a little some layers there But just keep buying these spots and we'll eventually get all of it done All right, so now let's give away five extra spots after eleven times top five after eleven one two three four five six seven eight nine ten and eleven in final time after eleven we've got Han Han Steve Han and Han some Extra spots going your way. Congrats to Han and Steve We'll put those little rooftop symbols next to your names carrot. I think they call them carrots And now let's do the break itself new dice new list for the names and there here's all 32 teams are in Let's roll it and randomize names and teams two and a two for the hard way one two three and four two and a two for the hard way for the teams two Three and four. All right. There's the first half of the list right over there And there's the second half of the list right over here, and let's just print and rip And we'll get to that third and final dice roll as quickly as possible Got Melvin Gordon the third to two ninety nine and Montez sweat Chargers edition of Melvin Gordon going to Han. All right. I think too crazy there. Let's flip back over here Let's gather everybody's names from top to bottom third and final dice roll and Let's roll a nice mark. Thank you. Let's roll and randomize it six and a five eleven times So just the top two after eleven will get into that big random team for NT football That'll fill pick your team for we got to do a couple more of these packs though Maybe sell some spots straight up and then we'll get there. Thanks everybody once again six and five eleven times one two three four five six seven eight nine ten and Eleventh and final time after eleven See you the top two is going to be a lot a lot of sad faces here, especially from three that three spot on down sad times Top two though happy times for Han and Steve There you go after eleven times congrats to you we'll see you in that team random later tonight jasmine's case race.com


So, good morning. Hello, everybody. It's great to be here among our fellow Blender users in Blender Conference 2022. We are all here, I suppose, because we're fans of creativity. And sure, we may express it in different ways, from sculpting characters to modeling environments to even building custom pieces of code to help other users out. All of those things, however, stem from a creative mindset. And for us, in Team OtherWorks, we decided to express our creativity through creating a whole new fantastical world called OtherWorld. My name is Athanasius Velisaris, and this is my co-director, who just happens to be my brother. And just to give you a little bit of our background, I used to work as a freelance character artist for games. And Michael was into all kinds of 3D from modeling to his current preference, which is real-time tech art. For the past two years, however, we decided to put our skills and knowledge of 3D into the test and make an animated short a snippet of the work that we wanted to show to the world. So, take a peek. Long as you're not there to see it. Thank you so much. So, just to be clear, what you saw was the work of just two people. Other than voice acting, we had no outside help. Obviously, I mean, I can't do a girl's voice. But the animation was lit and rendered in Unreal Engine 2, sorry, 4.27. But the bulk of the work, including modeling, animation, rigging, sculpting, most simulations, and some of the effects were made using Blender. So, let's dive right into it and see how it was made. So, right off the bat, we knew that we didn't have all the time in the world. So, we would have to resort to using some third-party assets to help us along the process. And those were the more generic assets like the walls, some desks. We did, however, want to create our own unique assets that are closer to the camera or that are so unique that no third-party library like Quixel, it's what we were using here, has. The challenge was to create assets that were nice and stylized while at the same time matching the color and the texture to the third-party assets, so not having them look out of place. Now, the process for creating props is very well documented for real-time applications for us. We use a base asset, and from that we derive two assets, a game-ready asset and a high-poly asset. We use custom normals and we also bake normal maps, so that's where the high-poly is useful. But what about the environment? Well, for the structures we used a modular workflow. And specifically for the walls, we just added some extra loops to facilitate vertex painting. And basically we blend between two materials. You see here the brick and the wall on top, the placer. And we use a noise texture plus vertex painting to blend between the two. But what about the exterior of the library? Well, in order to duplicate shapes effectively, Blender has had the answer for years. The array modifier. Well, it was, though, a small problem. We wanted to take advantage of Unreal's dynamic instancing. And for that reason, we couldn't just build something in Blender and then import it into Unreal without losing some performance. Instead, what we did was study Blender's array modifier and recreated one-to-one in Unreal using blueprints. And it includes both relative offset, constant offset, and pivot offset instead of object offset. And it can produce linear arrays. It can produce radial arrays. And you can also stack it up, one array after the next one, to have a more complex effect. Okay, so it wouldn't be a library without book selves. The book selves themselves were a challenge since it could be pretty tedious to hand-place all the books one by one. Had geometry nodes been introduced when we made this, it would have made things a lot simpler. However, we had to resort to using Unreal's blueprints to populate the book selves with books. That way, we could also take advantage of Unreal's dynamic instancing system as well. Now, geometry nodes exist, so here's the idea of how we made all this in case you would like to recreate something similar. So, first of all, a lot of parameters are exposed to the artist, as you can see, and these are not even all of them. At the bottom, there are randomization parameters from book collections here called bookdoms to percentages of angle books, sliding books, and stuff like that, from more generic ones like the gap between the books and several angle thresholds. So, the script takes all these parameters as input and generates random seeds for the various categories and starts placing all the books one by one. The first book is always spawned randomly, and for every subsequent book, it first determines if it should look similar in appearance to the previous book that's being part of a book collection or if it should be a new random book with completely new settings and stuff. So, after that is done, the tilt of the books is calculated. The script will randomly decide whether it wants to... whether it wants to straighten the books, start sliding the books downwards, or use a new random tilt. For the first case, it looks at the tilt of the previous book and adds a recovery angle until the last book is perpendicular to the self. For the second case, the opposite is done, meaning that it subtracts a tilt from the previous book until the last book lays flat on the surface of the self. Then, we have to calculate the position of the book. This was a little bit trickier and required some basic trigonometry knowledge. Three possible occurrences are being accounted for here. The first one being that the second book, as you can see here, is shorter than the first book, and the height is determined by the bounding box after the tilt has been applied. The second case is that the second book is taller than the first book, and the third case is that the third book is taller than the second book, but shorter than the first book, essentially a smaller book being tucked between two taller books. As I said before, we have the bounding boxes, so the formulas came out pretty straightforward. This is the formula for the first case, and as you can see, D is the distance that is required for the second book to have its upper left corner to rest on the side of the first book. Before proceeding to the next book or self, the script will store both the dimensions and the tilt, and then it will also check if the width of the self has been exhausted or not. The bookstacks outside the book selves were created following very similar approach. However, since the pivot point of the books was at their bottom left, it had to be mathematically shifted, as if it was at their center. All right, so the opening of the animation does have a lot of clouds. Unreal calculates volumetrics through translucent camera-aligned planes, and that's a common technique for many real-time applications, real-time engines. Newer versions of the Unreal Engine have a ray-marked atmospheric cloud system, but we won't be talking about that today. We will instead be talking about clouds that you can just drag and drop anywhere in your scene at any height and have them work. And these clouds take the shape of bounding volumes that contain a pseudo-volume texture. A pseudo-volume texture is essentially a sprite sheet. It sprites X resolution, gives us the resolution of the width of the volume, it sprites Y resolution, gives us the resolution of the Y axis of the volume, and the number of sprites gives us the vertical, the height resolution of our cloud. But how do we go about making a pseudo-volume texture? Unreal has unbuilt-in tools, however, I personally prefer Blender. See, these are the Metables. The Metables are an awesome technique to actually model fluffy, stylized, looking clouds pretty easily. And once you do that, the next step is to convert them into a mesh and then take a cube, squeeze it real thin, and start taking intersections. Essentially, in order to make the sprite sheet, we have an orthographic camera that's looking down, take each and every single one of the Boolean intersections, and then write them into a sprite sheet. Add some procedural verenoid noise, some gradient noise for the opacity and the little wisps, and you have clouds in Unreal Engine at any height. So characters, there were a lot of them for just the two of us, but nothing special was done in the creation of them. The process of creating a character from sculpt to UV unwrapping is pretty streamlined. Instead, I would like to take this time to just spotlight two add-ons that really helped us out. They are the Hair Tool and the Gorman Tool from Bartos Teperek. Does anyone know of these tools? No, I'm surprised. Hair Tool is an amazing tool for creating real-time hair, both procedurally and manually. Gorman Tool allows you to pretty much design using the clothing that you have in your mind, and then it converts it into a mesh and applies proper settings for stitching and simulation. From then on, you can convert into a hole, a closed hole, and start baking on top. All right, rigging. Rigging was a roller coaster of a ride. When we first began the animation, we knew that we didn't have all the time in the world, so we would have to split the difference between weight painting, a tedious process, and building controls, also a tedious process. For the faint of heart, please be careful when looking at the next slide. This is a trigger warning. This is how the initial rigs looked like. Just an FK spine with some IK limbs. Now, this rig is technically usable, just not very animation-friendly. You had to counter-animate everything. After that, I took a good look at myself in the mirror and said, maybe I should implement controls. So that's what we did. We actually implemented proper torso controls, twist bones for the arms and legs, hand controls, and we even updated the IK to work. At the same time, however, I took a tutorial course from CGDive on Rigify, and I fell in love with how easy it was to create awesome rigs. From that point on, all the rigs that we created were made with Rigify. You see the R2 characters here. We also integrated into Rigify our own custom facial rig. Now, what this facial rig does have is that it can receive any kind of controls that you want, and it is also a universal rig that we will be using in the animation for all our characters and that will be used, hopefully, in the projects following this one. It does, however, Rigify, does, however, come with some caveats, and let me show you one of them. This is obviously a character that's not from the animation. It's a character that we created for one of our game side projects. But it does question-stretch a lot, so it does display one of the issues. The first issue is that this, if you are very observant, doesn't look like this one. In Blender, you can select which bones inherit scale and which do not. However, once things are baked down and exported, they will have to necessarily inherit scale and have the result look like this. Piling on top of that, we also have a huge, very complicated hierarchy, and this is just a deformed hierarchy, no extra bones here, and it's very difficult to work with something like that. So how do you go about solving those issues? Well, for the hierarchy, there is an awesome add-on that automates the process of creating a game-ready deformation skeleton called UEFI. It's called UEFI, but in our experience, it will work for any engine, Godot, Unity, doesn't matter. It samples your MetaRig and then creates a game-ready rig based on that. It inherits location, rotation, and scale from Rigify's built-in deformation bones. The problem is, the deformation looks even worse on the right. So how do you go about solving that? Well, what we tried in the animation is to use an alembic geometry cache.  However, this is not a solution, this is a workaround, so we had to use something more substantial. So what was a common technique that most people used? The answer is flattening the hierarchy. If you flatten the hierarchy, you get what you see in Blender viewport in your game-ready viewport. However, this comes at the cost of the hierarchy, and you may be asking, why is the hierarchy important? Well, if you try to implement post-processes in a real-time application such as games, and post-process animations are IKs, slow correction, RMIKs when climbing, and of course Unreal has its own control rig, it becomes way more difficult to work with a flattened hierarchy than it has to be. So what's the solution to that? Well, we developed an in-house add-on called Scalify. Scalify actually creates lift bones for each UEFI bone, and then skins the mesh to the newly created bones. See, since they are lift bones, they have nowhere to inherit scale too, and in that way you can have both post-processes and squash and stretch. What's awesome about Scalify is that you can select which bones get Scalified and which don't. So you can have the limbs and the spine be Scalified, whereas bone-dense areas such as the hand and the face do not have necessarily to be Scalified. All right, animation. No, animation was pretty forward. It's mostly hand-kid. We did, however, get ourselves our hands on a rococo motion capture suit, and we decided to implement some motion capture. Here I am on the top left doing the movement that looks kind of like the movement I did. Sorry, motion capture, however, did come with its own issues, and retargeting was in the foreground. Now rococo does provide an inblender add-on for retargeting. However, for our workflow and our needs, it didn't work exactly the way we wanted. So we decided to implement a custom IK retargeting technique. Have a look at it just as a reference. So first step is to actually get our characters into t-pose. A-pose is great for sculpting and modeling and works excellent, but when you're importing from rococo or rococo's motion library or Mixamo or any motion capture library, you will most likely almost 100% find that the imported skeleton is in t-pose. So get your character into t-pose, it's the first step. Then you import, and once you've imported the source skeleton that has the motion capture data, we add an NLA layer on top and scale it there. So this is an additive layer. The reason why we do that is so as to be able to swap the base layer with another animation and still have the proper scale applied to our source skeleton. And this is key in creating proper IKs for our character. All right, now for the arms. It's a very simple process. You just parent the IK target to the hand bone and the pole target to the upper arm bone. You do the exactly same thing for the legs. You parent the IK target to the foot bone and the pole target to the thigh bone. They will get you pretty good results. So for the head and neck, just a simple copy rotation in local space will suffice. As you can see here, the mix is set to before original. We'll talk about that a little bit later. For the torso, we just parent it to the pelvis. Just to be clear, all of those child off parentings happened at frame zero, which is usually AT pose when importing a motion capture skeleton. But what about the spine? Do we use copy rotation? Do we use child off? The answer is that it's not that simple. See, different skeletons, regardless if they are source skeletons or your own character skeletons have different amounts of bones in their spine. So some may have four, some may have three. Newer versions of Unreal support six. And it's not easy to just move from our source skeleton to our target skeleton. So what do we do? Well, something pretty common among animation control rigs is the lower torso and upper torso controls. So what we do is insert two intermediate bones. One that's parented to the very top of the spine and one that's parented to the very bottom of the spine. We then have the upper torso controls, control, track the upper one and the lower torso control track the lower one. Tracking only includes rotation and that's exactly what you need. And if you have set up the two controls properly, this will work pretty fine. This technique can even be used for clavicles. Now clavicles, of course, can work with copy rotation. It's just way more time efficient to just add an intermediate bone at the end of your control rig's clavicle and have it parented to the shoulder bone of the source rig. And what's great about using child off constraints is that you can fix the silhouette and the pose of your character while still reading directly from your source skeleton. And why that is important is because you have proper timing and spacing instead of just making it down in an NLA action and using additives to fix it in addition to what you have in your base animation, which may spoil the timing and spacing of your motion capture data. All right. So after the animation has been done we also need to animate the hair and the clothes. To do that we decided to use simulation and to be more specific, bone physics. Now while Unreal does provide a built-in solution to do that we decided to bake it in blender so we can have more artistic control. Even if blender doesn't provide a built-in solution like Unreal does it does provide us with all the right tools to create our own. Essentially our workflow goes something like this. First we create hitboxes for all the bones we want to simulate. These hitboxes are messy so roughly the shape of the affected region of the bones. Then we enable rigid body physics for them and create rigid body constraints to connect them together creating a chain. Then we have the bones copy the movement of the hitboxes either by using child off constraints or copy rotation constraints. A kinematic hitbox has to be created for the rest of the body as well so we can have accurate collisions. This is a very tedious task and having to do this for every bone for each action will require a lot of time and doesn't allow for fast iterations. To help us with our workflow and expedite the process we developed a tool, an atom that automates a lot of these things. What it does is it goes to the first frame of its action and connects the hitboxes we previously created to their appropriate bones. Enables rigid body physics for them, creates the correct constraints, puts all the appropriate settings and all we have to do is hit bake and just wait for a couple of seconds for the bake to be done. This tool also allows for easy selection of the hitboxes and the bones so we can bake them and also allows us to disconnect them so we can move on to the next action. It also allows us to control the stiffness and the dubbing of the spring rigid body constraints. We have body animation, we have secondary animation and we talk about the facial expressions of the characters. While most of the work was animated by hand we wanted a faster solution both for additional animation for this project but also for our future projects. Using Apple's ARKit as well as any other application that allows facial motion capture performance to be captured in 52 or so shape keys is one of the easier ways of adding facial animation to a character. As we mentioned before we use a universal facial rig for all our characters. So what we did is using this rig we recreated all the shapes of these 52 shape keys as skeletal poses instead. But why sacrifice fidelity that way you may ask? Well as long as we use this rig for all our characters the poses can at least to some extent be transferred between them. To help us with our workflow we developed another tool. Now what this tool does is it samples the shape key data and transfers it to the skeletal actions and poses of our rigged character. Now how does it work? First we give it a list as you can see over here of which actions correspond to which shape keys. Then the addon creates it populates the NLA track as you can see on the left with tracks that each track being one action. Then it sets the influence type to combined. Then for every frame and for every shape key it samples the value of the shape key and translates that to the NLA track influence. This can be done in real time so the results can be viewed right away and then can later be baked into an independent action. Another cool feature of this addon is that it can create a duplicate mess of the rigged model but with all the skeletal poses baked as individual shape keys instead. So we can use the shape key version of our character to capture the data and later using the same addon transfer it back to the rigged character. Okay, last but not least let us talk a bit about the effects of the animation. After Oliver the dragon dives down from the broken dome window he spews a jet of fire into Colonel the bad guy. To do this after setting all the appropriate animations and collisions we set up a particle system which we then used to drive a fluid simulation. Okay, so we have the flamethrower like effect but how do we use this in Unreal? Well, Blender allows for fluid seams to be cast into a format called VDB which we can then import back into Blender and using the volume to mess modifier as you can see here transform it into a geometry cast which we can then export as an Olympic geometry cast into Unreal. However, as you can guess doing that we lose all the volumetric properties of the original fluid simulation so we have to recreate a material that approximates the volumetric like look. So first we applied a volumetric Voronoi texture that we created using the same slicing method we created for we used for our clouds to introduce some noise. Then we applied this flow map we applied it try plain early so we can simulate the swirling of the fire. Then we applied some Fresnel effects we added color and we have our final result. So the last part is lightning and there is a lot of lightning in the animation and a lot of different techniques that we used to create it. However, the one that works with basically any sparks in a drag and drop fashion is the following. First we model the arcs and we use curves with a custom bevel. The reason why we would do that is so as to be able to control procedurally the resolution of its curve. In real time applications performance is always an issue. We create the main curves, it's the ones that you see in the center here, and the flyaway curves which are less probable to be visible. We convert it into a mesh and then unwrap in a 15 column sheet. We'll see why in a little bit. But we actually unwrap the main ones on the left as you see and the secondary ones on the right most part of the sheet. So this is the material. The material's first step is the probability that an arc is visible and this will help you with the blinking effect of electricity. We have three strips that actually scroll from left to right and on the left most side they act in a subtracting fashion and on the right most side of the material they act in an additive fashion. So in that way the main arcs will most likely be visible while the secondary arcs will most likely be invisible. We then used some textures to add displacement similar to how you would do it in blender even next we'll have it if it doesn't already and we also add a large offset to create the wild electrical look. We then use a multiplier matrix texture. So this is basically we add to the 15 columns 10 rows and stretch them so as to fit the entire UV sheet. So what this texture does is scroll vertically in a step manner and assigns to it of the arcs a different multiplier of intensity giving it some uniqueness. We don't think you yet. And this is how the final effect looks like and actually it can work with any kind of shape we use it at multiple parts in the animation it's just a shader that you just drag and drop. And now I can thank you. Thank you guys. First of all I'd like to thank blender for having us. It's honestly a huge honor for me for us. I guess we got a little time so does anybody have any questions that they want to answer? Yeah, sure. You know what's funny? He has memorized this question to answer you. Well, I haven't really just thought that it could be a question that's going to come up. We mostly just used the normal FBX export that blender provides. Just make sure that if your model phase is front in the blender viewport it's going to phase front in Unreal. And if I'm not mistaken front is minus Y and in Unreal it's X. But we also used another add-on. I think its name is Blender to Unreal. I don't really remember the guy that made it. It's still an experimental mode that allows for bad export we mostly used it for third-party assets that we imported into Blender so we can fix pivot points and normals and bake some textures put some sockets in Blender so we don't have to do that in Unreal. Yeah, and we used that add-on to export the props but the characters are exported and the effects and the alignment sequences using the defaults that Blender provides. Any other questions? Well, I took the course for Rigify. Yes. But we actually have built the there are actually many more techniques to export. You can have an add-on counter animate basically the scale so as to have the same scale in hierarchy and skip the extra bones that we added. But for us since we actually when we built this add-on, the it didn't exist. The course from Citidive had just been introduced and it didn't have the extra modules that he added later on. So that's why we chose to stick by our own add-on. Any more questions? Does it cover you? Yep. Thank you. Right, same thing. Yeah, okay. Alright, thank you. So, yes. So, yes, that's a valid question. Well, in our animation we decided that we wanted to work in 30 frames per second for the animation. So everything was baked in 30 frames per second. However, we decided that we wanted to work in 30 frames per second for the animation. So everything was baked in 30 frames per second. However, I have found that you can tell unreal from not mistaken the frame rate of the Olympic gas. And it will, I mean, if you're working at 60 FPS it will not play it double the speed. It will just interpolate. I mean, if I'm not mistaken it will hold the frame and for two frames if it's on 60 FPS and you import the 30 FPS Olympic gas. Did I cover your question? Yeah, we decided on 30 FPS. So we did the simulations at 30 FPS. Yeah, but I'm not really sure how it's going to work with other frame rates, but because we only did the renders at 30 FPS. The sequences in Unreal were actually unlocked because we had some slow mo effects and well, it's still buggy to use that with locked frame rates. What I have found out is that Olympic don't really care about the final frame rate of the project. If it's imported as a 30 FPS it could play as if the project was playing at 30 FPS. It's a frame rate agnostic as far as far as I know. Any more questions? Right. Essentially it's just let me just it's Unreal's native solution for volumetrics. It's the pseudo-volume texture, that's how they call it. Essentially it will try to recreate something like a science-distance-filled kind of shape, but it will use set sprites to do that. What the camera sees in that demo is a top-down opacity of each slice. What we're doing here is basically taking a mesh, slicing it in different parts and then making that the volume texture. Unreal has built-in tools that can work even in VR to create a volume texture, but this is the workflow that I use for Blender to make things more stylized, more solid a little bit. Any more questions? Yeah? Yes, in Blender. Well, Eevee is great. It's awesome. It sounds like I'm about to insult it now. No, I'm not. I spoke with Clement yesterday. I really admire him. The problem was that it doesn't support all the features that Unreal does. Unreal supports channels for lighting. It supports vertex offset. You can't do that in Eevee right now. So it lacked many of the tools. And even the worst part for me is that while Eevee works in real-time, it renders very slowly. Unreal renders extremely fast when you render, even if you're at the highest preset. So Eevee is great. We actually use it when animating. We use an add-on that converts normal maps to hike maps so as to have a faster iterations and be able to see the shading approximation of the characters in the viewport. We considered it, but in the end of the day we just use it for visualization purposes. Also, if you're using Unreal, free Quixel assets. Yeah. Excuse me. I'm sorry, I didn't hear you. Can you speak up a little bit? Can you speak up a little bit? Yeah. You get Quixel assets, but also you get Niagara, which is an amazing FX module in Unreal. You get basically lights that have many different controls and if you're using it for we could even do the physics theoretically in Unreal. It's so fast to iterate there and iteration is faster in Unreal than it is right now in Blender for our use case. So Niagara, awesome tool. The new volumetric clouds that are ray marks, also another awesome tool. It doesn't exist in Blender right now in Unreal time. And of course, soon, Nannet and Lumen, which are two amazing tools in Unreal that don't work great right now but will be working great in a year from now. If I may add to this answer. Unreal also provides built-in LOD systems and HLOD systems and since we wanted the animation to run in real time as if it was a cutscene in a video game, we wanted to save some performance and outside the main hall of the library where the majority of the animation takes place there are huge buildings and since we mostly used Quixel assets for that it's a lot of geometry there that we wanted to build these to simplify all of that and also use the dynamic insensing system so I think we're out of time so thank you