1 00:00:00,539 --> 00:00:03,539 foreign 2 00:00:09,540 --> 00:00:14,880 hello and welcome to the final section 3 00:00:13,259 --> 00:00:18,180 of pycon 4 00:00:14,880 --> 00:00:20,039 we'll be beginning with a talk by Sam 5 00:00:18,180 --> 00:00:21,800 Bishop who 6 00:00:20,039 --> 00:00:24,660 is going to be telling us a bit about 7 00:00:21,800 --> 00:00:26,460 blender and 3D art 8 00:00:24,660 --> 00:00:29,640 they're a professional software 9 00:00:26,460 --> 00:00:31,980 developer an amateur rocker scientist 10 00:00:29,640 --> 00:00:33,239 which I'm told is less impressive than 11 00:00:31,980 --> 00:00:36,360 it sounds 12 00:00:33,239 --> 00:00:38,640 they love python Jango cats working on 13 00:00:36,360 --> 00:00:41,820 software and Hardware 14 00:00:38,640 --> 00:00:45,010 and everything space 15 00:00:41,820 --> 00:00:48,539 take it away Sam all right 16 00:00:45,010 --> 00:00:50,399 [Applause] 17 00:00:48,539 --> 00:00:53,760 okay 18 00:00:50,399 --> 00:00:55,079 so I'm Sam Bishop I'm a freelance 19 00:00:53,760 --> 00:00:57,300 software developer and a consultant as 20 00:00:55,079 --> 00:00:59,460 well I'm also working on space robots at 21 00:00:57,300 --> 00:01:01,680 Tetra orbital I am here to talk about 22 00:00:59,460 --> 00:01:03,960 blender and python contact details are 23 00:01:01,680 --> 00:01:05,760 on the bottom of the slide there so if 24 00:01:03,960 --> 00:01:07,619 you want to reach out to me you can get 25 00:01:05,760 --> 00:01:10,220 to me there and we'll start with the 26 00:01:07,619 --> 00:01:12,240 obvious question what is blender 27 00:01:10,220 --> 00:01:14,760 for those of you who aren't familiar 28 00:01:12,240 --> 00:01:16,979 blender is a one of the older open 29 00:01:14,760 --> 00:01:19,740 source projects initial work started 30 00:01:16,979 --> 00:01:21,600 with ton Rosenthal in-house engineer at 31 00:01:19,740 --> 00:01:23,939 Neo Geo which was a Dutch Animation 32 00:01:21,600 --> 00:01:26,580 studio and this work started in the 33 00:01:23,939 --> 00:01:28,080 December of 1993 the first working build 34 00:01:26,580 --> 00:01:31,740 he had that had any kind of feature at 35 00:01:28,080 --> 00:01:34,140 all was in 94 in 95 they had their first 36 00:01:31,740 --> 00:01:37,320 useful version of it and the world got 37 00:01:34,140 --> 00:01:38,939 its first visual look at blender in 1998 38 00:01:37,320 --> 00:01:42,299 when they released it as shareware for 39 00:01:38,939 --> 00:01:43,979 the SGI Erics operating system which is 40 00:01:42,299 --> 00:01:45,600 probably something that some of you have 41 00:01:43,979 --> 00:01:48,060 never even heard of 42 00:01:45,600 --> 00:01:49,200 um but after the various Tech bubble 43 00:01:48,060 --> 00:01:52,500 things happened around the end of the 44 00:01:49,200 --> 00:01:55,439 year 2000 some bankruptcies happen some 45 00:01:52,500 --> 00:01:58,259 corporate trading happens and in 2002 46 00:01:55,439 --> 00:02:00,960 ton is successful in spearheading a 47 00:01:58,259 --> 00:02:03,060 public campaign to gather funds and open 48 00:02:00,960 --> 00:02:05,700 source the project by buying out the 49 00:02:03,060 --> 00:02:07,500 intellectual property and interestingly 50 00:02:05,700 --> 00:02:09,239 the name blender actually comes from a 51 00:02:07,500 --> 00:02:11,819 song by Swiss band yellow from their 52 00:02:09,239 --> 00:02:14,640 album baby which was used by Neo Geo way 53 00:02:11,819 --> 00:02:17,520 back in the day as part of showreel 54 00:02:14,640 --> 00:02:19,680 um and since being open sourced blender 55 00:02:17,520 --> 00:02:22,800 has grown significantly over those 21 56 00:02:19,680 --> 00:02:24,239 years and it has gained notoriety with 57 00:02:22,800 --> 00:02:26,700 things like its open movie projects 58 00:02:24,239 --> 00:02:28,459 which have developed a significant Show 59 00:02:26,700 --> 00:02:30,780 reel of blender's capability for itself 60 00:02:28,459 --> 00:02:32,400 and highlighting what can be done with 61 00:02:30,780 --> 00:02:34,560 open source software and helping push 62 00:02:32,400 --> 00:02:36,360 forward new releases of blender several 63 00:02:34,560 --> 00:02:38,220 of these movie projects have involved 64 00:02:36,360 --> 00:02:40,200 developing brand new features for rent 65 00:02:38,220 --> 00:02:41,640 and green and other capabilities blender 66 00:02:40,200 --> 00:02:43,800 did not have at the start of the 67 00:02:41,640 --> 00:02:45,900 decision to make that movie one of the 68 00:02:43,800 --> 00:02:48,120 ones that isn't on that slide involves 69 00:02:45,900 --> 00:02:49,700 doing rotoscoping and real-time visual 70 00:02:48,120 --> 00:02:51,780 effects overlays 71 00:02:49,700 --> 00:02:53,519 there are many features that blender has 72 00:02:51,780 --> 00:02:56,099 pushed forward or significantly improved 73 00:02:53,519 --> 00:02:58,920 as part of this active use cycle where 74 00:02:56,099 --> 00:03:01,140 they decide we are doing this and they 75 00:02:58,920 --> 00:03:03,300 have to make it work the third one in 76 00:03:01,140 --> 00:03:05,340 the top right there cindel was actually 77 00:03:03,300 --> 00:03:08,099 sintel sorry it was actually 78 00:03:05,340 --> 00:03:10,560 a test bed for the Alpha version of 79 00:03:08,099 --> 00:03:12,300 blender 2.8 and so they were using the 80 00:03:10,560 --> 00:03:13,800 development preview for the entire 81 00:03:12,300 --> 00:03:15,360 development of this movie making sure 82 00:03:13,800 --> 00:03:17,640 that every feature that they added and 83 00:03:15,360 --> 00:03:20,340 changed in 2.8 was going to be useful 84 00:03:17,640 --> 00:03:22,560 for real users when they released and 85 00:03:20,340 --> 00:03:25,080 it's a pretty impressive thing for them 86 00:03:22,560 --> 00:03:27,180 to have been doing this for 21 years and 87 00:03:25,080 --> 00:03:29,159 blender has a lot in it and I've only 88 00:03:27,180 --> 00:03:30,420 got 30 minutes so I'm going to try and 89 00:03:29,159 --> 00:03:31,620 not leave you feeling like this has 90 00:03:30,420 --> 00:03:33,060 happened I'm going to try and actually 91 00:03:31,620 --> 00:03:36,120 leave you feeling like you could pick 92 00:03:33,060 --> 00:03:38,099 this up and do things because current 93 00:03:36,120 --> 00:03:39,140 blender has a lot in it I was not 94 00:03:38,099 --> 00:03:42,360 kidding 95 00:03:39,140 --> 00:03:43,920 blender has a absolute ludicrous amount 96 00:03:42,360 --> 00:03:45,780 of tools inside of it it has tools for 97 00:03:43,920 --> 00:03:48,120 modeling sculpting rigging animation 98 00:03:45,780 --> 00:03:50,159 visual effects a non-linear video editor 99 00:03:48,120 --> 00:03:52,440 like Adobe Premiere is actually inside 100 00:03:50,159 --> 00:03:54,360 of blender it has multiple rendering 101 00:03:52,440 --> 00:03:56,700 engines it has physics simulations for 102 00:03:54,360 --> 00:03:59,040 rigid bodies cloths fluids hair and fur 103 00:03:56,700 --> 00:04:00,720 particles and smoke and in addition to 104 00:03:59,040 --> 00:04:02,819 all of the 3D capabilities you can see 105 00:04:00,720 --> 00:04:05,940 right there it has 2D Vector animation 106 00:04:02,819 --> 00:04:07,620 capabilities and editing in a 3D World 107 00:04:05,940 --> 00:04:09,959 so you can actually take your 2D vectors 108 00:04:07,620 --> 00:04:12,239 and move them around in 3D to do all 109 00:04:09,959 --> 00:04:13,500 kinds of crazy awesome stuff and you 110 00:04:12,239 --> 00:04:14,640 just saw a customization of the 111 00:04:13,500 --> 00:04:16,699 rendering there when they did the 112 00:04:14,640 --> 00:04:19,799 wonderful sort of Van Gogh effect 113 00:04:16,699 --> 00:04:23,100 and it is just an insanely powerful 114 00:04:19,799 --> 00:04:24,419 package and it is also insanely flexible 115 00:04:23,100 --> 00:04:26,759 in a moment you're going to see 116 00:04:24,419 --> 00:04:28,440 customizations to the UI and extensions 117 00:04:26,759 --> 00:04:30,300 to the physics engine where people have 118 00:04:28,440 --> 00:04:31,979 started pushing it and customizing it 119 00:04:30,300 --> 00:04:33,540 and scripting it and in that case adding 120 00:04:31,979 --> 00:04:35,820 new widgets to control it like a gear 121 00:04:33,540 --> 00:04:37,199 stiff to make that swipe turn into a 122 00:04:35,820 --> 00:04:39,600 road through a whole dynamic tree of 123 00:04:37,199 --> 00:04:41,880 nodes they've customized and 124 00:04:39,600 --> 00:04:43,500 overall it is one of the most powerful 125 00:04:41,880 --> 00:04:46,979 software packages I have ever worked 126 00:04:43,500 --> 00:04:48,419 with you know it is insane and it has a 127 00:04:46,979 --> 00:04:50,520 python interface which you can see right 128 00:04:48,419 --> 00:04:51,960 there that is a capability that does not 129 00:04:50,520 --> 00:04:54,300 come stock he has written his own script 130 00:04:51,960 --> 00:04:56,340 there and that is actually puppeting 131 00:04:54,300 --> 00:04:58,740 that model in real time using that Xbox 132 00:04:56,340 --> 00:05:01,500 360 controller like a virtual Puppeteer 133 00:04:58,740 --> 00:05:03,240 powered by python and speaking of that 134 00:05:01,500 --> 00:05:06,240 python let's have a look at what python 135 00:05:03,240 --> 00:05:08,040 is inside of blender so python in 136 00:05:06,240 --> 00:05:09,660 blender is actually a full python 137 00:05:08,040 --> 00:05:12,900 installation just like if you went and 138 00:05:09,660 --> 00:05:14,880 downloaded python 310 off buyer.org and 139 00:05:12,900 --> 00:05:16,680 actually had it installed by itself it 140 00:05:14,880 --> 00:05:19,259 has its own complete python environment 141 00:05:16,680 --> 00:05:20,940 an interpreter site packages it comes 142 00:05:19,259 --> 00:05:22,979 bundled with several major python 143 00:05:20,940 --> 00:05:24,900 packages from Pi Pi it does ship with 144 00:05:22,979 --> 00:05:26,160 numpy and it has a built-in version of 145 00:05:24,900 --> 00:05:28,199 that and a number of other libraries 146 00:05:26,160 --> 00:05:30,419 which help it do significant amounts of 147 00:05:28,199 --> 00:05:32,580 data processing that it needs to do 148 00:05:30,419 --> 00:05:34,320 thousands of geometry pieces all the 149 00:05:32,580 --> 00:05:36,600 time when it's doing things for your 150 00:05:34,320 --> 00:05:39,180 animations or rendering or anything else 151 00:05:36,600 --> 00:05:41,039 you do with it and it has its own C apis 152 00:05:39,180 --> 00:05:43,020 which are bundled up into a python 153 00:05:41,039 --> 00:05:44,639 package that is the blender API which 154 00:05:43,020 --> 00:05:46,139 they pre-bundle into that python 155 00:05:44,639 --> 00:05:49,320 environment when they ship you blender 156 00:05:46,139 --> 00:05:50,220 and so there is a lot going on but at 157 00:05:49,320 --> 00:05:52,680 the end of the day when you actually try 158 00:05:50,220 --> 00:05:54,660 to use it as a user there are three ways 159 00:05:52,680 --> 00:05:57,380 you use it as a user you're either using 160 00:05:54,660 --> 00:05:59,820 it via scripts or packages or add-ons 161 00:05:57,380 --> 00:06:01,560 add-ons are basically the blender word 162 00:05:59,820 --> 00:06:03,720 for a plugin we'll get to some of those 163 00:06:01,560 --> 00:06:05,520 in a moment the packages are just like 164 00:06:03,720 --> 00:06:07,199 Pi Pi just like any other python 165 00:06:05,520 --> 00:06:08,880 environment you can download and install 166 00:06:07,199 --> 00:06:10,259 I'll show you a thing to help with that 167 00:06:08,880 --> 00:06:12,180 later it is a little bit clunky to try 168 00:06:10,259 --> 00:06:13,500 and do it by hand but it's not too hard 169 00:06:12,180 --> 00:06:14,759 to use just like any other python 170 00:06:13,500 --> 00:06:16,080 packages once you know the right place 171 00:06:14,759 --> 00:06:17,400 to do it 172 00:06:16,080 --> 00:06:19,080 but let's start with the scripting 173 00:06:17,400 --> 00:06:21,419 because it's the easiest 174 00:06:19,080 --> 00:06:23,460 so I've got a really simple script here 175 00:06:21,419 --> 00:06:25,500 now this script is just going to do us a 176 00:06:23,460 --> 00:06:27,840 little four by four grid of Cubes it's a 177 00:06:25,500 --> 00:06:30,060 nice simple demo it just shows two for 178 00:06:27,840 --> 00:06:33,060 loops and a really simple one blender 179 00:06:30,060 --> 00:06:34,500 API call there the bpi.ops.mesh dot 180 00:06:33,060 --> 00:06:35,160 primitive it just Chucks a cube in the 181 00:06:34,500 --> 00:06:36,720 world 182 00:06:35,160 --> 00:06:38,160 so I'm going to Chuck that script into 183 00:06:36,720 --> 00:06:38,880 blender which will look something like 184 00:06:38,160 --> 00:06:40,979 that 185 00:06:38,880 --> 00:06:43,080 and then I'm going to run it and get 186 00:06:40,979 --> 00:06:44,639 something like that which is a very 187 00:06:43,080 --> 00:06:46,020 simple demo it's not visually 188 00:06:44,639 --> 00:06:47,940 interesting but it does show the core 189 00:06:46,020 --> 00:06:50,160 principle you just Chuck it in run it 190 00:06:47,940 --> 00:06:51,419 and there you go so let's do something 191 00:06:50,160 --> 00:06:53,100 more complicated let's try and make it 192 00:06:51,419 --> 00:06:54,600 more visually interesting what we'll do 193 00:06:53,100 --> 00:06:56,340 is we'll make a bigger grid and we'll 194 00:06:54,600 --> 00:06:58,259 rotate them so that way we'll actually 195 00:06:56,340 --> 00:07:00,180 have a preceding effect where all of 196 00:06:58,259 --> 00:07:02,039 them move so that they have corners 197 00:07:00,180 --> 00:07:04,139 aimed towards the origin and we get a 198 00:07:02,039 --> 00:07:05,639 nice kind of a mosaic effect we'll take 199 00:07:04,139 --> 00:07:07,259 some trigonometry at the bottom of that 200 00:07:05,639 --> 00:07:09,180 existing Loop we'll make it a bigger 201 00:07:07,259 --> 00:07:11,520 grid and we'll grab that script and 202 00:07:09,180 --> 00:07:13,380 we'll Chuck it into blender again it'll 203 00:07:11,520 --> 00:07:15,479 look something just like that and then 204 00:07:13,380 --> 00:07:16,740 when you run it what you'll do is you'll 205 00:07:15,479 --> 00:07:19,560 get something that looks more like that 206 00:07:16,740 --> 00:07:21,840 so you can see that as you approach that 207 00:07:19,560 --> 00:07:23,340 zero point on those Crossing axes it 208 00:07:21,840 --> 00:07:25,160 aligns towards the center and we get 209 00:07:23,340 --> 00:07:28,080 kind of this Mosaic progression effect 210 00:07:25,160 --> 00:07:30,000 it's again a fairly simple script but 211 00:07:28,080 --> 00:07:31,440 you can see how that small addition at 212 00:07:30,000 --> 00:07:33,840 the end of that little bit of 213 00:07:31,440 --> 00:07:35,639 trigonometry gives us something visual 214 00:07:33,840 --> 00:07:38,400 and you can sort of start to think well 215 00:07:35,639 --> 00:07:40,139 what else can I do okay well let's take 216 00:07:38,400 --> 00:07:41,759 this up to a third dimension we're on a 217 00:07:40,139 --> 00:07:43,740 3D package after all let's do something 218 00:07:41,759 --> 00:07:45,960 3D rather than just kind of a 2d looking 219 00:07:43,740 --> 00:07:47,699 thing so we've got another layer to our 220 00:07:45,960 --> 00:07:49,259 for Loop we've got three dimensions in 221 00:07:47,699 --> 00:07:50,940 play now and instead of aiming the 222 00:07:49,259 --> 00:07:52,740 corners because it looks a bit better in 223 00:07:50,940 --> 00:07:54,479 3D to do it this way I switched over to 224 00:07:52,740 --> 00:07:56,099 aiming one of the sides towards the 225 00:07:54,479 --> 00:07:57,599 middle so rather than having sort of 226 00:07:56,099 --> 00:07:59,280 awkward edges and Corners sticking out 227 00:07:57,599 --> 00:08:00,900 it's a bit easy to see what it looks 228 00:07:59,280 --> 00:08:03,360 like when the sides are just aimed 229 00:08:00,900 --> 00:08:05,280 towards the middle and again we'll take 230 00:08:03,360 --> 00:08:07,139 the simple script it's just got one more 231 00:08:05,280 --> 00:08:09,000 nested slightly different trigonometry 232 00:08:07,139 --> 00:08:11,759 at the end we'll grab that script we'll 233 00:08:09,000 --> 00:08:13,319 pop it into blender we'll run it and 234 00:08:11,759 --> 00:08:15,840 then we get something like that which is 235 00:08:13,319 --> 00:08:17,520 a five by five grid and we've got that 236 00:08:15,840 --> 00:08:18,720 spread out in space you can see the 237 00:08:17,520 --> 00:08:20,340 inside there you can see how they're 238 00:08:18,720 --> 00:08:22,500 running through and how they all as it 239 00:08:20,340 --> 00:08:24,960 turns around angles and aims them all in 240 00:08:22,500 --> 00:08:26,580 there again very simple script did not 241 00:08:24,960 --> 00:08:31,379 take long to sit down and just whip this 242 00:08:26,580 --> 00:08:32,700 up very basic nothing complicated now 243 00:08:31,379 --> 00:08:34,260 let's try and make something a little 244 00:08:32,700 --> 00:08:35,700 bit more visually interesting these have 245 00:08:34,260 --> 00:08:37,200 been very basic demos I'm just chucking 246 00:08:35,700 --> 00:08:39,539 cubes in the world and it's not the most 247 00:08:37,200 --> 00:08:40,560 interesting thing to look at so let's 248 00:08:39,539 --> 00:08:41,940 try and make something more visually 249 00:08:40,560 --> 00:08:43,979 interesting we'll take the same thing 250 00:08:41,940 --> 00:08:46,440 and modify it again so what we'll do 251 00:08:43,979 --> 00:08:49,200 this time is we'll skip anything on the 252 00:08:46,440 --> 00:08:50,100 inside of that Cube because it is a cube 253 00:08:49,200 --> 00:08:51,120 that we're making at the end of the day 254 00:08:50,100 --> 00:08:53,279 it's a grid of points in 255 00:08:51,120 --> 00:08:54,779 three-dimensional space but it's full 256 00:08:53,279 --> 00:08:56,820 let's get rid of the inside we don't 257 00:08:54,779 --> 00:08:59,100 need it and then what we'll do is 258 00:08:56,820 --> 00:09:00,720 instead of using cubes we'll use cones 259 00:08:59,100 --> 00:09:04,019 we'll get a more interesting outside 260 00:09:00,720 --> 00:09:06,600 look and what we'll do as well is we'll 261 00:09:04,019 --> 00:09:08,220 move it so that it squished together and 262 00:09:06,600 --> 00:09:09,779 then that squish together will overlap 263 00:09:08,220 --> 00:09:12,060 and give us like a solid object that we 264 00:09:09,779 --> 00:09:13,740 could do something like say 3D print or 265 00:09:12,060 --> 00:09:16,260 put it in the world and make it look 266 00:09:13,740 --> 00:09:17,519 like a real object and we'll take that 267 00:09:16,260 --> 00:09:19,140 slightly modified script which is 268 00:09:17,519 --> 00:09:20,580 otherwise pretty much the same as the 269 00:09:19,140 --> 00:09:22,740 one we just did the big spread out one 270 00:09:20,580 --> 00:09:24,300 but a couple of parameters modified and 271 00:09:22,740 --> 00:09:27,540 one thing swapped for another 272 00:09:24,300 --> 00:09:30,060 so we'll Chuck it in blender again and 273 00:09:27,540 --> 00:09:32,160 what we get when we run it is we get a 274 00:09:30,060 --> 00:09:33,839 thwomp sort of looking spiky Cube thing 275 00:09:32,160 --> 00:09:35,580 which is definitely more visually 276 00:09:33,839 --> 00:09:37,500 interesting than something that we had 277 00:09:35,580 --> 00:09:39,300 earlier but again it's just a very small 278 00:09:37,500 --> 00:09:41,100 modification to a series of iterations 279 00:09:39,300 --> 00:09:43,019 and it's easy to sort of play around 280 00:09:41,100 --> 00:09:44,279 with and start getting a feel for how 281 00:09:43,019 --> 00:09:46,080 you can make more complicated things 282 00:09:44,279 --> 00:09:47,700 with these scripts I've got a script 283 00:09:46,080 --> 00:09:50,399 demo at the end that really shows off 284 00:09:47,700 --> 00:09:52,500 how you can stack these things and 285 00:09:50,399 --> 00:09:54,480 that's at the end so let's go into the 286 00:09:52,500 --> 00:09:58,320 add-ons so 287 00:09:54,480 --> 00:10:00,360 CA is a node-based geometry plugin 288 00:09:58,320 --> 00:10:02,040 an add-on technically 289 00:10:00,360 --> 00:10:03,959 um that I wasn't actually able to run on 290 00:10:02,040 --> 00:10:05,640 Apple silicon so it is a great one I've 291 00:10:03,959 --> 00:10:07,740 used it before I've had to grab the 292 00:10:05,640 --> 00:10:09,060 gifts off their GitHub repo show off the 293 00:10:07,740 --> 00:10:13,380 capabilities 294 00:10:09,060 --> 00:10:15,720 um it is a useful set of over 250 nodes 295 00:10:13,380 --> 00:10:17,220 that you can link together and I'll 296 00:10:15,720 --> 00:10:20,480 explain this nodes and linking stuff in 297 00:10:17,220 --> 00:10:23,880 another in the next slide next demo bit 298 00:10:20,480 --> 00:10:26,160 and those allow you to build a series of 299 00:10:23,880 --> 00:10:28,500 events changed together that take data 300 00:10:26,160 --> 00:10:30,180 in process that data produce outputs to 301 00:10:28,500 --> 00:10:31,920 the end of that chain that give you 302 00:10:30,180 --> 00:10:32,880 various forms of geometry you can see in 303 00:10:31,920 --> 00:10:34,440 a couple of those gifts if your 304 00:10:32,880 --> 00:10:36,060 eyesight's good enough that you're 305 00:10:34,440 --> 00:10:37,740 manipulating these properties and things 306 00:10:36,060 --> 00:10:39,480 change about the geometry in the world 307 00:10:37,740 --> 00:10:41,220 because you have direct access to those 308 00:10:39,480 --> 00:10:42,480 properties just like if you were running 309 00:10:41,220 --> 00:10:43,500 a script going in and calling the 310 00:10:42,480 --> 00:10:46,200 function with a different variable 311 00:10:43,500 --> 00:10:47,880 except those are accessible to you in 312 00:10:46,200 --> 00:10:51,240 the UI with nice and easy to manipulate 313 00:10:47,880 --> 00:10:53,279 sliders so showing this off a bit better 314 00:10:51,240 --> 00:10:54,959 will be sphere shock now spur shock is 315 00:10:53,279 --> 00:10:58,140 named spiritual because that's Russian 316 00:10:54,959 --> 00:10:59,820 for grasshopper and it's a plug-in for 317 00:10:58,140 --> 00:11:01,440 blender which was designed to create a 318 00:10:59,820 --> 00:11:03,420 similar capability and it is the older 319 00:11:01,440 --> 00:11:05,880 of these two plugins a similar 320 00:11:03,420 --> 00:11:07,680 capability to the node-based editing 321 00:11:05,880 --> 00:11:09,240 feature of rhino which is a CAD software 322 00:11:07,680 --> 00:11:12,180 package a proprietary one that most 323 00:11:09,240 --> 00:11:13,500 people haven't used but it is a very 324 00:11:12,180 --> 00:11:16,079 powerful way of linking everything 325 00:11:13,500 --> 00:11:17,760 together in this visual processing way 326 00:11:16,079 --> 00:11:19,200 and 327 00:11:17,760 --> 00:11:21,540 they just basically copied the name and 328 00:11:19,200 --> 00:11:22,740 picked a different language so it gives 329 00:11:21,540 --> 00:11:24,600 us these nodes and you can see them down 330 00:11:22,740 --> 00:11:25,740 the bottom and what I've done is I've 331 00:11:24,600 --> 00:11:27,720 started with the simplest one I can 332 00:11:25,740 --> 00:11:29,579 think of give me a box and then I asked 333 00:11:27,720 --> 00:11:31,380 it to go and make that box a rendered 334 00:11:29,579 --> 00:11:35,040 object in the world with a nice little 335 00:11:31,380 --> 00:11:36,420 pink pink plastic nice and simple uh now 336 00:11:35,040 --> 00:11:37,260 okay I've just got a box what can I do 337 00:11:36,420 --> 00:11:39,779 with it 338 00:11:37,260 --> 00:11:41,399 um let's bevel the edges of my box I've 339 00:11:39,779 --> 00:11:43,620 grabbed the bevel node I've chucked the 340 00:11:41,399 --> 00:11:45,300 bevel node into the script chain and 341 00:11:43,620 --> 00:11:47,040 then set some properties and it's 342 00:11:45,300 --> 00:11:48,240 beveled my box 343 00:11:47,040 --> 00:11:49,740 um okay it still looks pretty simple 344 00:11:48,240 --> 00:11:52,040 I've just rounded the corners off okay 345 00:11:49,740 --> 00:11:55,860 let's do something more 346 00:11:52,040 --> 00:11:58,200 a inset Chuck in the inset node and then 347 00:11:55,860 --> 00:11:59,399 perform an out inset which is a little 348 00:11:58,200 --> 00:12:00,600 funky until you understand the math 349 00:11:59,399 --> 00:12:02,579 behind it but 350 00:12:00,600 --> 00:12:04,380 it pulls these edges out and inserts 351 00:12:02,579 --> 00:12:05,940 them slightly and it gives us this kind 352 00:12:04,380 --> 00:12:07,440 of cut crystal looking effect which 353 00:12:05,940 --> 00:12:09,000 looked a lot nicer when I played around 354 00:12:07,440 --> 00:12:10,079 with it but it was a bit hard to see on 355 00:12:09,000 --> 00:12:11,579 the screen when I did it in like a 356 00:12:10,079 --> 00:12:13,500 translucent Crystal 357 00:12:11,579 --> 00:12:15,360 so I just stuck with the pink plastic 358 00:12:13,500 --> 00:12:16,920 but it's a good demonstration of how you 359 00:12:15,360 --> 00:12:18,540 can chain these things together quite 360 00:12:16,920 --> 00:12:20,160 simply and play around with them and 361 00:12:18,540 --> 00:12:22,019 manipulate them until you start to get 362 00:12:20,160 --> 00:12:24,000 something you like the look of now 363 00:12:22,019 --> 00:12:26,459 that's just the basics of using these 364 00:12:24,000 --> 00:12:27,959 kind of node-based tools where these two 365 00:12:26,459 --> 00:12:30,120 add-ons are interesting is that they 366 00:12:27,959 --> 00:12:32,519 have the ability to have python plugins 367 00:12:30,120 --> 00:12:34,980 inside of them so you can write Python 368 00:12:32,519 --> 00:12:37,620 scripts pull those into these two 369 00:12:34,980 --> 00:12:40,500 add-ons as nodes and make your own nodes 370 00:12:37,620 --> 00:12:42,959 with python so in this case here I've 371 00:12:40,500 --> 00:12:45,300 got a very simple demo I've got a python 372 00:12:42,959 --> 00:12:46,920 script this spershock attractor here I'm 373 00:12:45,300 --> 00:12:48,779 going to pass the data from that into a 374 00:12:46,920 --> 00:12:51,180 pipe and then I'm going to turn that 375 00:12:48,779 --> 00:12:52,860 pipe into a mesh with some properties 376 00:12:51,180 --> 00:12:54,360 there I've picked a bronze material just 377 00:12:52,860 --> 00:12:57,000 for example to keep it different can't 378 00:12:54,360 --> 00:12:58,440 keep making everything pink so I've got 379 00:12:57,000 --> 00:13:00,060 that script here and that's what that 380 00:12:58,440 --> 00:13:01,560 script looks like there's some stuff in 381 00:13:00,060 --> 00:13:03,959 the doc string at the top that tells 382 00:13:01,560 --> 00:13:04,920 spur shock what the inputs and outputs 383 00:13:03,959 --> 00:13:06,959 need to be 384 00:13:04,920 --> 00:13:10,200 and then there's just the script for the 385 00:13:06,959 --> 00:13:12,360 rest of the block there now when I load 386 00:13:10,200 --> 00:13:14,639 that in and I run that chain of nodes in 387 00:13:12,360 --> 00:13:16,620 searchok what I get is I get a little 388 00:13:14,639 --> 00:13:18,779 fractal attractor there rendered in 389 00:13:16,620 --> 00:13:20,220 bronze it's not fancy it's a fairly 390 00:13:18,779 --> 00:13:21,660 straightforward sort of application I 391 00:13:20,220 --> 00:13:23,160 just found a function that made some 392 00:13:21,660 --> 00:13:25,079 points in a line that I liked and 393 00:13:23,160 --> 00:13:27,060 chucked it in and made some stuff with 394 00:13:25,079 --> 00:13:29,459 it now 395 00:13:27,060 --> 00:13:31,200 that's one tiny example but there are 396 00:13:29,459 --> 00:13:32,579 more because you can build a whole 397 00:13:31,200 --> 00:13:35,760 library of these you can make a whole 398 00:13:32,579 --> 00:13:37,920 package of extensions to spurtshock and 399 00:13:35,760 --> 00:13:39,420 sawka based on this principle you can 400 00:13:37,920 --> 00:13:41,940 build your own library of functions for 401 00:13:39,420 --> 00:13:44,220 yourself and import them into blender 402 00:13:41,940 --> 00:13:46,800 for these plugins to use you can extend 403 00:13:44,220 --> 00:13:48,000 the plugins and there are existing 404 00:13:46,800 --> 00:13:49,639 extensions there are people who have 405 00:13:48,000 --> 00:13:52,380 made libraries already like spiritual 406 00:13:49,639 --> 00:13:54,180 open 3D and spiritual Beamish that have 407 00:13:52,380 --> 00:13:55,920 expanded the capability of spershock and 408 00:13:54,180 --> 00:13:57,959 given it more power than it has out of 409 00:13:55,920 --> 00:14:00,180 the box and 410 00:13:57,959 --> 00:14:02,820 that node-based editing can go a long 411 00:14:00,180 --> 00:14:03,839 way so what about getting some basic 412 00:14:02,820 --> 00:14:05,160 data in there there's been a couple of 413 00:14:03,839 --> 00:14:06,899 people this weekend talk about data 414 00:14:05,160 --> 00:14:08,220 visualization in 3D and various things 415 00:14:06,899 --> 00:14:09,779 like that so let's have a look at some 416 00:14:08,220 --> 00:14:10,980 of the data visualization options if you 417 00:14:09,779 --> 00:14:12,240 have a bunch of data and you think you 418 00:14:10,980 --> 00:14:14,579 could do something pretty with it in 419 00:14:12,240 --> 00:14:16,740 blender well there's multiple blad-ons 420 00:14:14,579 --> 00:14:18,779 and plugins again so here are three 421 00:14:16,740 --> 00:14:20,820 example ones these seem well supported 422 00:14:18,779 --> 00:14:22,980 they ran when I checked them blender 423 00:14:20,820 --> 00:14:24,899 plots blend database and data effects 424 00:14:22,980 --> 00:14:26,459 but I'll get back to burn to plots at 425 00:14:24,899 --> 00:14:29,519 the end but I'm going to demo blendfig 426 00:14:26,459 --> 00:14:30,899 which is yet another one so 427 00:14:29,519 --> 00:14:32,339 what I've gone is I've just used the 428 00:14:30,899 --> 00:14:34,019 same lorentz thing again because I had 429 00:14:32,339 --> 00:14:36,300 it handy and I'm like well yeah I can 430 00:14:34,019 --> 00:14:38,120 ask for more dots great more dots and 431 00:14:36,300 --> 00:14:40,740 then I've asked it to do a scatter plot 432 00:14:38,120 --> 00:14:42,000 so with that scatter plot down there at 433 00:14:40,740 --> 00:14:44,760 the end it's just going to do the 434 00:14:42,000 --> 00:14:46,380 rendering of our scatter plot now it 435 00:14:44,760 --> 00:14:47,820 looks pretty boring right now 436 00:14:46,380 --> 00:14:50,040 it's not the most interesting thing I 437 00:14:47,820 --> 00:14:52,199 think it looked better in bronze but it 438 00:14:50,040 --> 00:14:53,940 is more well defined so okay what can I 439 00:14:52,199 --> 00:14:55,560 do with that well I'm going to use 440 00:14:53,940 --> 00:14:57,600 blender's built-in equivalent just for 441 00:14:55,560 --> 00:14:58,860 chalk and saw car because after the 442 00:14:57,600 --> 00:15:00,120 success of these plugins the blender 443 00:14:58,860 --> 00:15:01,620 developers were like you know that's not 444 00:15:00,120 --> 00:15:03,899 a bad idea maybe we should have a thing 445 00:15:01,620 --> 00:15:05,760 that does that and so they it built 446 00:15:03,899 --> 00:15:07,320 their own and now we have three options 447 00:15:05,760 --> 00:15:08,940 on this table all of which have 448 00:15:07,320 --> 00:15:10,800 different capabilities and strengths and 449 00:15:08,940 --> 00:15:12,660 weaknesses there are things that you can 450 00:15:10,800 --> 00:15:15,180 do in Saw car that are not in blender 451 00:15:12,660 --> 00:15:19,079 built-in geometry nodes or in Search 452 00:15:15,180 --> 00:15:20,760 oxnodes and vice versa for all three so 453 00:15:19,079 --> 00:15:22,320 what I've done here just to show off 454 00:15:20,760 --> 00:15:23,880 these geometry nodes is I've just taken 455 00:15:22,320 --> 00:15:25,320 that mesh because what I got from the 456 00:15:23,880 --> 00:15:28,040 scatter plot was just a straight line of 457 00:15:25,320 --> 00:15:31,500 dots connected with you know lines 458 00:15:28,040 --> 00:15:33,120 and I've asked blender to treat it as a 459 00:15:31,500 --> 00:15:34,920 curve and then I've asked blender to 460 00:15:33,120 --> 00:15:37,440 take a stop shape from its default 461 00:15:34,920 --> 00:15:39,959 primitive box and turn that star shape 462 00:15:37,440 --> 00:15:42,180 into a pipe via extruding a curve with 463 00:15:39,959 --> 00:15:45,120 the mesh and then I've asked it to cover 464 00:15:42,180 --> 00:15:47,279 it in a like a blue edge light sort of 465 00:15:45,120 --> 00:15:48,300 cyberpunk sound texture looks kind of 466 00:15:47,279 --> 00:15:49,980 kind of when I get that it's kind of 467 00:15:48,300 --> 00:15:51,959 like a bit of a black hole kind of a 468 00:15:49,980 --> 00:15:52,980 collision sort of a look which looks a 469 00:15:51,959 --> 00:15:54,540 bit better when you kind of have less 470 00:15:52,980 --> 00:15:55,620 clutter around it 471 00:15:54,540 --> 00:15:57,000 um 472 00:15:55,620 --> 00:15:59,100 but these are just the tips of the 473 00:15:57,000 --> 00:16:01,800 iceberg there is so many plugins out 474 00:15:59,100 --> 00:16:03,420 there thousands on GitHub hundreds of 475 00:16:01,800 --> 00:16:05,160 thousands of scripts that have been 476 00:16:03,420 --> 00:16:06,959 written over the years there is an 477 00:16:05,160 --> 00:16:08,339 absolute mountain of content out there 478 00:16:06,959 --> 00:16:09,180 for blender 479 00:16:08,339 --> 00:16:11,040 um 480 00:16:09,180 --> 00:16:12,360 some of these are more useful to you as 481 00:16:11,040 --> 00:16:13,860 a beginner trying to get started and 482 00:16:12,360 --> 00:16:16,800 learn than others which is why these two 483 00:16:13,860 --> 00:16:18,959 are the first ones so open with IDE is a 484 00:16:16,800 --> 00:16:20,880 really tiny one script file you can just 485 00:16:18,959 --> 00:16:22,800 load it like a plugin and then you get a 486 00:16:20,880 --> 00:16:24,360 button that opens those scripts that I 487 00:16:22,800 --> 00:16:26,519 was demonstrating earlier in something 488 00:16:24,360 --> 00:16:29,100 like vs code so you can get intellisense 489 00:16:26,519 --> 00:16:30,899 autocomplete you can install the blender 490 00:16:29,100 --> 00:16:32,940 environment and it can actually know 491 00:16:30,899 --> 00:16:34,380 what those packages contain which makes 492 00:16:32,940 --> 00:16:36,660 it a lot easier to edit bigger scripts 493 00:16:34,380 --> 00:16:38,220 like the one at the end and then there's 494 00:16:36,660 --> 00:16:40,199 a script that you'll easily take care of 495 00:16:38,220 --> 00:16:41,699 pip installing for you because as I 496 00:16:40,199 --> 00:16:43,079 mentioned earlier that self-contained 497 00:16:41,699 --> 00:16:44,759 environment can be a little hard to work 498 00:16:43,079 --> 00:16:46,380 with sometimes especially if you have 499 00:16:44,759 --> 00:16:48,120 multiple copies of blender for some 500 00:16:46,380 --> 00:16:50,639 reason like having multiple long-term 501 00:16:48,120 --> 00:16:52,560 stable ones because say a plugin might 502 00:16:50,639 --> 00:16:55,079 not work which can happen in the open 503 00:16:52,560 --> 00:16:56,880 source world as we all know so 504 00:16:55,079 --> 00:16:58,680 having an easy way to not muck around 505 00:16:56,880 --> 00:17:00,480 and reliably go in and make sure that 506 00:16:58,680 --> 00:17:01,980 that version of blender has that 507 00:17:00,480 --> 00:17:05,280 particular python Library you want to 508 00:17:01,980 --> 00:17:07,199 use is a really handy thing to do so 509 00:17:05,280 --> 00:17:08,760 let's look at a few we can actually use 510 00:17:07,199 --> 00:17:10,199 again some of these are add-ons and some 511 00:17:08,760 --> 00:17:12,480 of these are packages that you would 512 00:17:10,199 --> 00:17:14,100 have to pip install their documentation 513 00:17:12,480 --> 00:17:15,540 covers that but I just wanted to show 514 00:17:14,100 --> 00:17:17,160 off a few really useful ones that you 515 00:17:15,540 --> 00:17:18,720 can play around with without needing to 516 00:17:17,160 --> 00:17:22,020 know the ins and outs of blender super 517 00:17:18,720 --> 00:17:23,699 well so there's geometry script which 518 00:17:22,020 --> 00:17:25,380 can automate creating those geometry 519 00:17:23,699 --> 00:17:26,939 nodes I showed earlier if you want to 520 00:17:25,380 --> 00:17:28,380 play around with building a big sequence 521 00:17:26,939 --> 00:17:29,760 of them you might want to make that 522 00:17:28,380 --> 00:17:31,260 repeatable so that you don't make a 523 00:17:29,760 --> 00:17:32,820 mistake when you blow it all the way and 524 00:17:31,260 --> 00:17:34,380 try and make it again so you can 525 00:17:32,820 --> 00:17:36,480 automate that Creation with this library 526 00:17:34,380 --> 00:17:37,860 then if you do play around with it by 527 00:17:36,480 --> 00:17:39,419 hand and you want to kind of reliably 528 00:17:37,860 --> 00:17:40,799 reproduce that well there's a library to 529 00:17:39,419 --> 00:17:42,600 go the other direction there's node to 530 00:17:40,799 --> 00:17:44,880 python which will take a set of nodes 531 00:17:42,600 --> 00:17:46,740 and turn them into Python scripts so you 532 00:17:44,880 --> 00:17:48,179 can play around in either direction and 533 00:17:46,740 --> 00:17:50,039 still keep these things for working out 534 00:17:48,179 --> 00:17:51,840 future versions there's things like a 535 00:17:50,039 --> 00:17:53,400 solar system simulator someone was like 536 00:17:51,840 --> 00:17:55,200 I can't want to make some stuff orbit 537 00:17:53,400 --> 00:17:56,760 but I don't really know how to animate 538 00:17:55,200 --> 00:17:58,679 it for that and I'm like well okay I'll 539 00:17:56,760 --> 00:18:00,360 do the physics and so they put in a 540 00:17:58,679 --> 00:18:01,740 kiplarian integrator and did all the 541 00:18:00,360 --> 00:18:04,200 physics there with some python libraries 542 00:18:01,740 --> 00:18:05,280 that they install as well and what you 543 00:18:04,200 --> 00:18:07,020 have is the ability to just Chuck 544 00:18:05,280 --> 00:18:08,340 objects into a blender environment give 545 00:18:07,020 --> 00:18:09,780 them the correct parameters and then 546 00:18:08,340 --> 00:18:11,220 blend it just orbits them for you you 547 00:18:09,780 --> 00:18:12,720 don't have to do any hard work it's nice 548 00:18:11,220 --> 00:18:13,679 and simple 549 00:18:12,720 --> 00:18:15,480 um 550 00:18:13,679 --> 00:18:17,100 and speaking of complicated things done 551 00:18:15,480 --> 00:18:19,320 simple molecular Dynamics and other 552 00:18:17,100 --> 00:18:21,480 visualization thing so you can load up a 553 00:18:19,320 --> 00:18:23,460 bunch of chemical data on say a smaller 554 00:18:21,480 --> 00:18:25,799 molecule or a complete protein as is 555 00:18:23,460 --> 00:18:27,720 visualized there in the GIF and it will 556 00:18:25,799 --> 00:18:29,280 do a full demonstration of that 557 00:18:27,720 --> 00:18:30,600 including using some math behind the 558 00:18:29,280 --> 00:18:31,860 scenes to work out when things should be 559 00:18:30,600 --> 00:18:33,360 moving around in sort of a random 560 00:18:31,860 --> 00:18:35,580 rounding motion like some of these 561 00:18:33,360 --> 00:18:37,200 things do apparently and that adds some 562 00:18:35,580 --> 00:18:39,960 of its own geometry nodes in there as 563 00:18:37,200 --> 00:18:41,160 well so another powerful plugin to do 564 00:18:39,960 --> 00:18:43,559 this kind of visualization of 565 00:18:41,160 --> 00:18:45,059 complicated information to a more simple 566 00:18:43,559 --> 00:18:46,860 version of the information there is 567 00:18:45,059 --> 00:18:49,500 things like a music visualization plugin 568 00:18:46,860 --> 00:18:50,640 so you can visualize music into your 569 00:18:49,500 --> 00:18:52,260 environment as either a background 570 00:18:50,640 --> 00:18:54,360 effect or tied into something else 571 00:18:52,260 --> 00:18:56,220 that's just one of their quick demos and 572 00:18:54,360 --> 00:18:57,480 again there are so many of these out 573 00:18:56,220 --> 00:18:58,919 there that once you start looking you'll 574 00:18:57,480 --> 00:19:00,660 probably find something that does what 575 00:18:58,919 --> 00:19:03,120 you kind of want or shows how you can 576 00:19:00,660 --> 00:19:04,980 start working it out yourself in 577 00:19:03,120 --> 00:19:07,740 particular there is an absolute plethora 578 00:19:04,980 --> 00:19:10,080 of procedural content generation plugins 579 00:19:07,740 --> 00:19:11,640 and add-ons for blender and not to 580 00:19:10,080 --> 00:19:13,679 mention how many of the various python 581 00:19:11,640 --> 00:19:15,299 libraries you could use to sort of 582 00:19:13,679 --> 00:19:17,160 Cobble together your own procedural 583 00:19:15,299 --> 00:19:18,720 generation tools as well this tree 584 00:19:17,160 --> 00:19:22,740 generator here I actually cover in more 585 00:19:18,720 --> 00:19:24,419 detail in a 2001 sorry 2021 pycon Au 586 00:19:22,740 --> 00:19:26,220 talk about procedural content generation 587 00:19:24,419 --> 00:19:27,900 which mentions a few other blender 588 00:19:26,220 --> 00:19:29,059 add-ons that can do procedural content 589 00:19:27,900 --> 00:19:31,440 as well 590 00:19:29,059 --> 00:19:32,940 and if you do get really into all of 591 00:19:31,440 --> 00:19:34,500 this and you do actually want to start 592 00:19:32,940 --> 00:19:36,419 showing off to the world how you're 593 00:19:34,500 --> 00:19:39,299 doing this all the time there's actually 594 00:19:36,419 --> 00:19:40,860 a Discord plugin so you can put your 595 00:19:39,299 --> 00:19:43,320 current what am I doing in blender into 596 00:19:40,860 --> 00:19:46,140 a Discord 597 00:19:43,320 --> 00:19:47,340 um and after showing all of those things 598 00:19:46,140 --> 00:19:48,960 I'm going to use a slightly more 599 00:19:47,340 --> 00:19:50,100 visually interesting demo because all 600 00:19:48,960 --> 00:19:51,840 the demos up to this point have been 601 00:19:50,100 --> 00:19:53,760 pretty simple I mean sure that your 602 00:19:51,840 --> 00:19:54,900 fractal with the blue was nice but I 603 00:19:53,760 --> 00:19:57,179 think we can go a little bit better with 604 00:19:54,900 --> 00:19:59,460 the time we have left so uh one final 605 00:19:57,179 --> 00:20:00,600 demo I'm going to pull in numpy and I'm 606 00:19:59,460 --> 00:20:02,580 going to use that blender plots Library 607 00:20:00,600 --> 00:20:04,320 I pointed out earlier because it does 608 00:20:02,580 --> 00:20:05,700 generate plots slightly differently to 609 00:20:04,320 --> 00:20:07,260 the other libraries which is useful for 610 00:20:05,700 --> 00:20:08,940 what I want to do in a moment and then 611 00:20:07,260 --> 00:20:11,340 I'm going to use the palatable Library 612 00:20:08,940 --> 00:20:13,559 which I've installed via Pi Pi which is 613 00:20:11,340 --> 00:20:14,760 a library full of plot gradients for 614 00:20:13,559 --> 00:20:15,960 when you're generating different plots 615 00:20:14,760 --> 00:20:17,580 and want to color all your data 616 00:20:15,960 --> 00:20:19,140 correctly so I've gone and pulled out 617 00:20:17,580 --> 00:20:20,760 one of their particular color gradients 618 00:20:19,140 --> 00:20:22,440 and I'm giving it a nice name so that I 619 00:20:20,760 --> 00:20:23,760 could play with it later and I'm 620 00:20:22,440 --> 00:20:25,020 chucking in a simple little helper 621 00:20:23,760 --> 00:20:26,760 function I use quite frequently to get 622 00:20:25,020 --> 00:20:28,919 myself pairs from an iterable so if I 623 00:20:26,760 --> 00:20:30,600 have one two three four it'll return a 624 00:20:28,919 --> 00:20:32,520 set of tuples to me so I've got one two 625 00:20:30,600 --> 00:20:34,080 two three three four handy sometimes 626 00:20:32,520 --> 00:20:36,720 when you want to kind of build lists of 627 00:20:34,080 --> 00:20:37,799 things like this so now I'm going to 628 00:20:36,720 --> 00:20:39,419 give myself another function that's 629 00:20:37,799 --> 00:20:41,700 going to Generate random points between 630 00:20:39,419 --> 00:20:43,080 two spheres so if I've got a big sphere 631 00:20:41,700 --> 00:20:45,419 and then a smaller sphere it'll give me 632 00:20:43,080 --> 00:20:47,520 a random distribution of dots in the 633 00:20:45,419 --> 00:20:49,260 space between them which you'll see what 634 00:20:47,520 --> 00:20:51,000 that's for in a second so it does a 635 00:20:49,260 --> 00:20:53,220 bunch of numpy stuff some trigonometry 636 00:20:51,000 --> 00:20:54,419 and it gives me those random points now 637 00:20:53,220 --> 00:20:55,919 I'm going to have to get some more 638 00:20:54,419 --> 00:20:57,240 information from those points I'm going 639 00:20:55,919 --> 00:20:59,220 to have to work out how to aim them 640 00:20:57,240 --> 00:21:00,720 somewhere so what I'm going to do is I'm 641 00:20:59,220 --> 00:21:02,760 going to do some more trigonometry with 642 00:21:00,720 --> 00:21:05,460 numpy and I'm going to work out how to 643 00:21:02,760 --> 00:21:07,260 rotate in the world for blender to aim 644 00:21:05,460 --> 00:21:08,640 something from that random Point towards 645 00:21:07,260 --> 00:21:10,559 a direction that I want to point it in 646 00:21:08,640 --> 00:21:12,960 and so we've got that function now added 647 00:21:10,559 --> 00:21:14,460 to the script here and then what we'll 648 00:21:12,960 --> 00:21:15,960 do is we'll tie them together so I'm 649 00:21:14,460 --> 00:21:18,059 going to generate a list of pairs of 650 00:21:15,960 --> 00:21:19,320 adjacent colors and that's just going to 651 00:21:18,059 --> 00:21:21,240 give me a nice little list of tuples 652 00:21:19,320 --> 00:21:22,860 then I'm going to get a list of how many 653 00:21:21,240 --> 00:21:23,640 things I want to put at each step of my 654 00:21:22,860 --> 00:21:25,500 script 655 00:21:23,640 --> 00:21:27,480 that's just a little step sequence of 656 00:21:25,500 --> 00:21:29,220 powers and then I'm going to get a list 657 00:21:27,480 --> 00:21:30,419 of Upper and Lower bounds for those 658 00:21:29,220 --> 00:21:32,340 spheres so that I get kind of a 659 00:21:30,419 --> 00:21:33,720 progressive stacking effect and then I'm 660 00:21:32,340 --> 00:21:35,340 just going to do a single for Loop here 661 00:21:33,720 --> 00:21:37,799 and I'm going to generate multiple plots 662 00:21:35,340 --> 00:21:39,419 I'm going to generate the points rotate 663 00:21:37,799 --> 00:21:40,799 them so that it knows where to go and 664 00:21:39,419 --> 00:21:42,419 then scatter plot them using that 665 00:21:40,799 --> 00:21:44,220 blender plot library to do the scatter 666 00:21:42,419 --> 00:21:45,780 plot and when I Chuck it all into 667 00:21:44,220 --> 00:21:48,419 blender and just hit the render button 668 00:21:45,780 --> 00:21:50,520 to see it with the preview I get this 669 00:21:48,419 --> 00:21:52,919 and it doesn't look particularly 670 00:21:50,520 --> 00:21:54,000 impressive in black and white but when 671 00:21:52,919 --> 00:21:55,559 you see how it turns out with the 672 00:21:54,000 --> 00:21:59,400 gradient I think it actually looks quite 673 00:21:55,559 --> 00:22:01,020 good uh and that was about two hours it 674 00:21:59,400 --> 00:22:02,400 wasn't particularly hard to work out how 675 00:22:01,020 --> 00:22:04,200 to put this together once I sort of 676 00:22:02,400 --> 00:22:06,240 realized I could do the scatter plot and 677 00:22:04,200 --> 00:22:07,980 muck around with the colors and just 678 00:22:06,240 --> 00:22:10,140 play around with it in the space it it 679 00:22:07,980 --> 00:22:12,419 can be pretty simple to start stacking 680 00:22:10,140 --> 00:22:13,799 the things you know into these kinds of 681 00:22:12,419 --> 00:22:15,140 contexts and coming up with really 682 00:22:13,799 --> 00:22:18,059 interesting things you like the look of 683 00:22:15,140 --> 00:22:20,400 so with all that in mind that's the last 684 00:22:18,059 --> 00:22:21,659 of the demo there and hopefully you 685 00:22:20,400 --> 00:22:23,280 don't feel like you've just watched a 686 00:22:21,659 --> 00:22:25,020 tutorial that skips the middle steps 687 00:22:23,280 --> 00:22:26,820 hopefully you do feel like you can 688 00:22:25,020 --> 00:22:28,799 actually try to you know start doing 689 00:22:26,820 --> 00:22:30,360 some of these things because these are 690 00:22:28,799 --> 00:22:32,640 fairly straightforward starting steps 691 00:22:30,360 --> 00:22:34,880 and there is of course time for 692 00:22:32,640 --> 00:22:34,880 questions 693 00:22:36,390 --> 00:22:45,419 [Applause] 694 00:22:43,620 --> 00:22:47,460 thank you Sam does anyone have a 695 00:22:45,419 --> 00:22:48,659 question oh and I do have it open in 696 00:22:47,460 --> 00:22:50,880 blender if you want to see it and 697 00:22:48,659 --> 00:22:53,059 actually see it fully in blender 698 00:22:50,880 --> 00:22:53,059 foreign 699 00:22:54,260 --> 00:23:00,000 that was great uh is there a limit to 700 00:22:57,299 --> 00:23:01,500 what uh sort of imports you can put in 701 00:23:00,000 --> 00:23:03,299 um is there capability for adding 702 00:23:01,500 --> 00:23:04,860 machine learning rights oh definitely 703 00:23:03,299 --> 00:23:06,360 there are a number of add-ons out there 704 00:23:04,860 --> 00:23:08,100 that do things like machine learning on 705 00:23:06,360 --> 00:23:09,840 data sets and one of the things that 706 00:23:08,100 --> 00:23:11,580 people have started doing is using 707 00:23:09,840 --> 00:23:13,740 machine learning to process the 708 00:23:11,580 --> 00:23:15,179 environment you saw there the what in 709 00:23:13,740 --> 00:23:17,340 that early video that was showing off 710 00:23:15,179 --> 00:23:18,900 the 3.6 release that show reel included 711 00:23:17,340 --> 00:23:21,419 someone who'd used a machine learning 712 00:23:18,900 --> 00:23:23,520 software package to emulate the van 713 00:23:21,419 --> 00:23:25,020 Gogh's style Isle of painting in the 714 00:23:23,520 --> 00:23:27,360 rendering layer so that the environment 715 00:23:25,020 --> 00:23:28,919 was done in regular geometry but when it 716 00:23:27,360 --> 00:23:31,260 was rendered out it kind of had that van 717 00:23:28,919 --> 00:23:33,120 Gogh swirly little line effects applied 718 00:23:31,260 --> 00:23:36,720 at the final rendering pass layer 719 00:23:33,120 --> 00:23:36,720 awesome cheers 720 00:23:43,740 --> 00:23:51,780 is it possible to uh from end to end 721 00:23:47,880 --> 00:23:54,840 Control Blender from a python script 722 00:23:51,780 --> 00:23:56,520 yes as in without like touching the 723 00:23:54,840 --> 00:23:57,659 interface at all yes just completely 724 00:23:56,520 --> 00:24:00,480 there's actually a full head loss mode 725 00:23:57,659 --> 00:24:02,159 oh perfect which gets a significant 726 00:24:00,480 --> 00:24:03,900 amount of use so it's it's not like a 727 00:24:02,159 --> 00:24:06,200 niche feature like the Chrome headless 728 00:24:03,900 --> 00:24:08,700 was for a while it it actually gets used 729 00:24:06,200 --> 00:24:10,140 extremely Often by people doing large 730 00:24:08,700 --> 00:24:11,820 renderings if you are doing a batch 731 00:24:10,140 --> 00:24:13,679 rendering for a movie you may be 732 00:24:11,820 --> 00:24:14,640 rendering thousands of frames what 733 00:24:13,679 --> 00:24:16,440 you'll do is you'll set up your 734 00:24:14,640 --> 00:24:18,840 automation pipeline to farm that job out 735 00:24:16,440 --> 00:24:20,640 and you'll use the blender command line 736 00:24:18,840 --> 00:24:23,220 interface to say render this particular 737 00:24:20,640 --> 00:24:25,320 frame from this file and so they do 738 00:24:23,220 --> 00:24:27,620 heavily use it and fully know that it 739 00:24:25,320 --> 00:24:27,620 works 740 00:24:27,960 --> 00:24:32,100 yeah yeah you could pass a script in and 741 00:24:30,059 --> 00:24:33,419 run the script from the outside generate 742 00:24:32,100 --> 00:24:35,220 this and then render it out if you were 743 00:24:33,419 --> 00:24:36,960 to add all the extra camera positioning 744 00:24:35,220 --> 00:24:38,820 information and set everything up 745 00:24:36,960 --> 00:24:40,260 correctly I didn't really want to show 746 00:24:38,820 --> 00:24:40,919 that because that kind of requires a lot 747 00:24:40,260 --> 00:24:42,780 of 748 00:24:40,919 --> 00:24:44,100 understanding of the way the 3D spaces 749 00:24:42,780 --> 00:24:46,380 work with stuff like rendering and 750 00:24:44,100 --> 00:24:47,880 textures and lighting and it's a bit 751 00:24:46,380 --> 00:24:49,740 more than I thought was sort of 752 00:24:47,880 --> 00:24:50,940 appropriate for 30 minute demo when you 753 00:24:49,740 --> 00:24:53,159 know something like this is actually 754 00:24:50,940 --> 00:24:54,960 quite straightforward to show but at the 755 00:24:53,159 --> 00:24:56,520 at the same time positioning a camera 756 00:24:54,960 --> 00:24:58,500 correctly in the world lighting it 757 00:24:56,520 --> 00:25:00,240 correctly and and showing all the detail 758 00:24:58,500 --> 00:25:02,460 can be you know significantly more 759 00:25:00,240 --> 00:25:03,720 tricky than just having it open and and 760 00:25:02,460 --> 00:25:05,340 being able to just sort of pan it around 761 00:25:03,720 --> 00:25:07,919 so that people can see how it's built up 762 00:25:05,340 --> 00:25:09,240 of the layers because you can see that 763 00:25:07,919 --> 00:25:10,140 the different layers get stacked 764 00:25:09,240 --> 00:25:12,000 together 765 00:25:10,140 --> 00:25:14,100 creating this sort of progressive effect 766 00:25:12,000 --> 00:25:14,900 as it sort of moves out through the 767 00:25:14,100 --> 00:25:17,100 stack 768 00:25:14,900 --> 00:25:18,900 again it was fairly straightforward to 769 00:25:17,100 --> 00:25:21,179 sort of Chuck together once I saw one of 770 00:25:18,900 --> 00:25:21,840 these libraries do a scatter plot 771 00:25:21,179 --> 00:25:24,320 um 772 00:25:21,840 --> 00:25:24,320 yeah 773 00:25:24,480 --> 00:25:27,980 more questions there's still some time 774 00:25:32,220 --> 00:25:36,260 one I can try and render a proper one 775 00:25:39,299 --> 00:25:42,900 um 776 00:25:40,039 --> 00:25:43,860 is there support for 777 00:25:42,900 --> 00:25:45,960 um 778 00:25:43,860 --> 00:25:47,460 sorry words 779 00:25:45,960 --> 00:25:50,360 hmm 780 00:25:47,460 --> 00:25:50,360 uh 781 00:25:50,940 --> 00:25:56,760 what was I asking it's gone 782 00:25:54,000 --> 00:25:59,039 um having like a time-based animations 783 00:25:56,760 --> 00:26:01,380 oh definitely to have it you know moving 784 00:25:59,039 --> 00:26:02,640 and animating yeah absolutely there was 785 00:26:01,380 --> 00:26:05,820 actually one of the slides had a video 786 00:26:02,640 --> 00:26:07,140 sorry a gif from one of those packages 787 00:26:05,820 --> 00:26:09,179 that has that kind of functionality 788 00:26:07,140 --> 00:26:10,679 built in uh let me just jump back to the 789 00:26:09,179 --> 00:26:12,659 presentation and I might be able to 790 00:26:10,679 --> 00:26:14,360 quickly jump to it without taking too 791 00:26:12,659 --> 00:26:18,299 much of the time that's left 792 00:26:14,360 --> 00:26:20,580 we should have further back here 793 00:26:18,299 --> 00:26:22,260 that one there is actually doing a 794 00:26:20,580 --> 00:26:23,820 time-based animation for the music 795 00:26:22,260 --> 00:26:25,740 passed in 796 00:26:23,820 --> 00:26:26,700 um as well as that one's doing it based 797 00:26:25,740 --> 00:26:31,500 on the data from the chemical 798 00:26:26,700 --> 00:26:32,940 information and the add-on here yeah 799 00:26:31,500 --> 00:26:34,440 there we go so the blender plots Library 800 00:26:32,940 --> 00:26:36,240 does actually have the capability of 801 00:26:34,440 --> 00:26:39,720 doing time-based animations in there as 802 00:26:36,240 --> 00:26:42,840 well so that and all the way back at the 803 00:26:39,720 --> 00:26:45,120 very early one on or car that one on the 804 00:26:42,840 --> 00:26:46,679 top right corner actually is doing it 805 00:26:45,120 --> 00:26:48,059 with the timeline running down the 806 00:26:46,679 --> 00:26:49,320 bottom so that is actually Computing 807 00:26:48,059 --> 00:26:52,020 some of those properties based on the 808 00:26:49,320 --> 00:26:53,820 current frame of the timeline set up so 809 00:26:52,020 --> 00:26:55,200 it's using that frame to determine some 810 00:26:53,820 --> 00:26:56,760 of the properties that it passes into 811 00:26:55,200 --> 00:26:57,900 the math 812 00:26:56,760 --> 00:27:00,659 so 813 00:26:57,900 --> 00:27:02,760 no no it really isn't because like I 814 00:27:00,659 --> 00:27:04,799 said blender has so many features inside 815 00:27:02,760 --> 00:27:06,539 of it that you you will routinely forget 816 00:27:04,799 --> 00:27:08,159 that it's got those things like I do 817 00:27:06,539 --> 00:27:10,140 have to keep remembering it has a full 818 00:27:08,159 --> 00:27:12,539 Adobe Premiere style non-linear video 819 00:27:10,140 --> 00:27:14,760 editor inside of it because 820 00:27:12,539 --> 00:27:18,140 why would it need that oh it needs that 821 00:27:14,760 --> 00:27:18,140 to composite a complete movie 822 00:27:23,820 --> 00:27:27,900 I think we've still got about two more 823 00:27:25,140 --> 00:27:30,440 minutes so feel feel free I'm enough for 824 00:27:27,900 --> 00:27:30,440 one more question 825 00:27:30,840 --> 00:27:35,580 do you know some examples of movies made 826 00:27:32,700 --> 00:27:38,159 with blender oh yeah yeah it was uh this 827 00:27:35,580 --> 00:27:40,559 slide right here uh they've done the 828 00:27:38,159 --> 00:27:41,940 more than these there's actually several 829 00:27:40,559 --> 00:27:43,500 extra ones 830 00:27:41,940 --> 00:27:45,720 um this was just the nine ones that fit 831 00:27:43,500 --> 00:27:47,480 prettiest when I sort of tried to find a 832 00:27:45,720 --> 00:27:49,320 set that looked nice on screen together 833 00:27:47,480 --> 00:27:51,600 they've done a number of these I think 834 00:27:49,320 --> 00:27:53,640 they're up to about 15 now these are all 835 00:27:51,600 --> 00:27:56,760 short movies uh the one in the middle 836 00:27:53,640 --> 00:27:58,380 was hoping to get enough funds raised to 837 00:27:56,760 --> 00:28:00,600 try and make a feature-length movie that 838 00:27:58,380 --> 00:28:03,000 didn't quite pan out but they definitely 839 00:28:00,600 --> 00:28:04,500 did make a absolutely spectacular set of 840 00:28:03,000 --> 00:28:05,760 fur shaders for that cheap 841 00:28:04,500 --> 00:28:08,039 [Music] 842 00:28:05,760 --> 00:28:09,600 really like you look at the difference 843 00:28:08,039 --> 00:28:11,760 in definition between the fur in the 844 00:28:09,600 --> 00:28:13,260 sheep in the center and the fur in the 845 00:28:11,760 --> 00:28:14,700 fuzzy animals in the top frame above it 846 00:28:13,260 --> 00:28:16,500 and and there's a significant 847 00:28:14,700 --> 00:28:18,539 Improvement in terms of being able to 848 00:28:16,500 --> 00:28:19,919 both artistically control the fur as 849 00:28:18,539 --> 00:28:21,960 well as have it be a higher definition 850 00:28:19,919 --> 00:28:24,299 and less shortcuts necessary to render 851 00:28:21,960 --> 00:28:25,980 it but again more rendering power with a 852 00:28:24,299 --> 00:28:27,840 more recent movie too so they kind of 853 00:28:25,980 --> 00:28:29,700 could cheat a little bit but yeah 854 00:28:27,840 --> 00:28:31,260 blender has a lot of these examples out 855 00:28:29,700 --> 00:28:33,000 there I believe it has been used at 856 00:28:31,260 --> 00:28:34,980 least in part in a number of major 857 00:28:33,000 --> 00:28:36,240 movies I don't have those memorized off 858 00:28:34,980 --> 00:28:38,640 the top of my head I just know I came 859 00:28:36,240 --> 00:28:40,679 across them in the list of examples 860 00:28:38,640 --> 00:28:42,299 um I wanted to more focus on ones that I 861 00:28:40,679 --> 00:28:45,299 knew wouldn't accidentally get any video 862 00:28:42,299 --> 00:28:46,919 de-listed from the internet 863 00:28:45,299 --> 00:28:48,480 because these are all Creative Commons 864 00:28:46,919 --> 00:28:50,400 licensed 865 00:28:48,480 --> 00:28:54,720 thank you Sam for this wonderful 866 00:28:50,400 --> 00:28:56,840 combination of programming and art 867 00:28:54,720 --> 00:28:56,840 um 868 00:28:58,340 --> 00:29:04,580 thank you here is your customary mug and 869 00:29:01,980 --> 00:29:04,580 thank you card