I haven't posted here much, but I'm hoping to do a weekly post of what work I've been doing each week. Seeing as I haven't done a blog post for a while, I'll cover a few things I've been working on in the previous months. Does that sound fun? I don't know, but you've already loaded the page now, so you may as well read a bit more.
An interesting little experiment in Blender I did a few weeks ago is something I'm calling 'Scene Nodes'. Blender used to have something called the 'Oops Schematic View' in the Outliner, which allowed you to view your 3D scene in a visual, node based way, showing the relationships between your assets. This feature never made it into the revamped Blender 2.5 so I thought I would have a go at recreating it with Python. Partly, that was because I just thought it would be fun (it was 50% fun, 30% googling, 15% deciding what colour each node should be and 5% crying) but also because I thought that if it proved to be popular I might develop another add-on to sell on the Blender Market.
The result above shows all the different objects and materials in my scene and also the relationship between them. 'Cube.001' (orange) is the child of 'Camera.001' (grey) and also a parent to 4 objects (orange) and a lamp (yellow). I got it working so that not only could you press a button to generate this node setup, but that duplicating nodes would duplicate the actual object, deleting a node would delete an object and changing the connections between objects would change the real object's parenting.
Before you go rifling through you wallet to find money to throw at the screen* (because you obviously love the sound of it, not because you're misguidedly attempting to throw loose change into my eyes), while it was quite fun to do, I'm not entirely sure that there's enough interest in it for me to make it an add-on. My last add-on wasn't really cost effective, considering the development time vs monetary return. I'm not ruling out making it an add-on, but I don't think it's a 'high-priority' project.
*and people say I'm a fantasist.**
**If anyone of importance is reading this, I'm lying, no one has ever called me a fantasist. It was just a joke, which we (I) here at www.RayMairlot.co.uk deeply regret.
Experiments with Unity:
I've also been making a game with a friend, not in Unity as the title might suggest, but in Flash. Flash might get criticised a lot, but for making a cross-platform game it really makes a lot of sense (to me). However, I'm well aware that several sites are moving away from flash, at least for video delivery, so I thought I would make some investigations into other game engines, just in case the day comes that Flash content is no longer run by web browsers.
I decided that I would try out Unity as it has a free version and I got to grips with one of the tutorials. I wasn't best pleased to find my simple tutorial scene of a ball rolling over a plane, collecting yellow diamonds, came to an eye-watering 170MB. God help me if I try something complex*. Maybe I can cut that size down somehow, but at least it does cross-platform publishing pretty easily.
*Dear God, I know you're busy, but please help me squash these megabytes. If you help me (for free) I'll tell everyone it was you that helped me and I think that will be great exposure for you. Thanks, Ray.
I had originally thought that if I wanted to learn Unity it would be better if I already had a working game in Flash, so that when trying to re-create it in Unity I wouldn't have to be worrying if the logic of the game was correct, only the conversion of AS3 to C# (one of Unity's coding languages). I made a little Tetris game in Flash, but having seen the large file size Unity creates I was put off from actually trying to convert it. I realised that Flash is still the better option for me, but that Unity was a viable alternative if I really needed it.
That's not to say making the Tetris game was a waste of time; it helped me a lot with realising how to implement OOP concepts properly, which I can put to good use in the game I'm making in Flash.
All in all, quite a few experimental projects, but now I'm back to my main one, which I may start to reveal soon. Or not, know one knows. If people say they know, they're lying.
Unless that people is me.
I released a new video on youtube last week (inspired by this), the first in nearly a year. I think I can safely say it went down rather well, getting featured on BlenderNation, which helped it gain 10,000 views in just a few days.
As usual, this project went on longer than I wanted, growing from an idea of just showing the actual fluid part to deciding that it needed some context, meaning I felt I should add some type of scene, rather than just some bricks in blank space. I thought I should at least show the bricks appearing (I managed to resist having a submarine surface, I'll leave that for another day ;) ), and to have them appearing from somewhere I added a brick pile.
Annoyingly, the 'build up' part' was actually more challenging than the fluid as I had a few problems rendering. The build up is done with particles that are affected by an 'explode' modifier, and despite displaying correctly in the viewport, the render would only read a few frames of the particle cache before getting 'stuck' and no longer update. I presume this is a bug and not a dependancy graph issue as it's only the render which doesn't work, but narrowing down the problem to a small enough sample to be able to submit it as a bug may be challenging.
I tried several python solutions to try and get the frames to update properly, such as using a script to render each frame individually (with various pieces of code intended to update the scene between frames) or even generating a new blend file for each frame, each one offset by one frame, which another script would then render. None of these solved the refresh problem. It was annoying, because the build up obviously wasn't the main part of the video, but it was holding everything up, which made me question if I shouldn't include it in favour of a quicker release. I decided I had spent too much time on it already to not include it so I pushed ahead with my 'last-resort' method. The brute force, feel my wrath, this-is-definitely-going-to-work-and-nothing-will stop-me method.
Every project usually has several fallback solutions, when the easiest "Click one magic button and it works! Yay!" solution doesn't work you fallback to the next possible method, all the way down to "I'm going to have to do this frame by frame, aren't I". Normally it never gets to the last one, there are enough fallbacks that one ends up working, but unfortunately, in this case their were no other solutions to fall back on.
I knew that if I updated the current frame manually it would then render that frame correctly... Which meant...I would have to update, render and save every frame by hand. For 70 frames.
Now, it didn't turn out quite that bad, I realised that if I saved out a new blend file for each frame I could at least get a script to render all of those blend files, and with shortcuts and the 'increment file name' feature it only took a few minutes. But that doesn't make it fun. And less fun when you realise after saving all 70 files that the texture paths are relative and the locations of the blend files have just changed...
Suffice to say, this isn't exactly an acceptable method for a tutorial (which will follow in a few weeks). "Bye the way, don't want to worry you, but we're going to be doing it all by hand" probably wouldn't go down too well. Both viewers and I expect that the tutorial is going to offer some kind of shortcut to the method. Otherwise, what's the point in the tutorial? We can all look at something and go "Well, sure, I could probably do it by hand, placing different objects on different frames" (or animating on each frame or whatever technique is necessary for that effect), but who would want to?
Now, even if I did manager to report and get it confirmed as a bug, the fix wouldn't be in an official release of Blender for a few weeks. So I'll have to investigate another method. I have a few ideas and it's not uncommon for a few methods to get tweaked or changed inbetween the teaser video and the full tutorial. Looking at something afresh a few weeks after the initial video release helps that.
I also had someone ask if it could do fire so I had a play around with that too. Or at least particles, as this method currently requires a mesh to work:
It's certainly satisfying having a successful video release, it makes all the difficulties completely worth it. On one hand it's a bit weird to see my technique out 'in the wild', with some people already putting it to use, and on the other it's nice to see that it garnered so much interest, becuase that's never guaranteed.
Though it is a bit annoying that people aren't always completely clear that they got the technique from someone else and end up recieving praise for their 'creativity'. It doesn't matter too much though, ultimately other people's lego fluid videos will end up acting as an advert for the tutorial I release.
And anyway, they haven't quite worked out all my secrets ;)
In the last post I said I would talk about the Futuristic Car 2 project, but, well, enough time passes between these posts that I'm not always working on the thing I said I would be. I certainly was working on the other project, and I will definitely write about it at some point, but not today. It's always nice to have a little break from longer projects, it's easy to start to get sick of a project if you work on it solidly for too long so I reverted back to something I haven't worked on for over a year: The Rollercoaster project.
This time around I've mainly been working on updating the materials, which has been really quite fun to get back to, and feels relatively easy compared to the other project's myriad of objects, hierarchies and scripts. The materials didn't have to be updated, there's plenty of other things that aren't finished, but in the year since they were first created an anisotropic shader was added to Cycles. I thought I would at least update some of the brushed metals to use them. But of course, I ended up doing a lot more than that.
Here's a nice shot of the wheel the wheels on the rail and the base which connects them to the 'coaster:
Some of these materials have already been updated further, so there's a bit less wear and tear on the purple bolts and the gold wheels now have a bit of dirt on them.
This kind of detail, the worn edges, the subtle bumps and dirt maps are all unfortunately fairly irrelevant. The rollerocaster will be going fast enough that motion blur will hide most of this work, but I can't knowingly release something that's meant to be realistic if I know I could have made it better. Besides, it does at least give me a nice asset to show off in my portfolio even if the final video doesn't quite make the most of the work I've put into it.
With that in mind, I'm working on a few tricks to render a slightly closer camera than the original tracked footage might appear to allow to show at least a bit more detail...
Just a quick 3D re-doing of an old illustration:
I had wanted to call this 'Robot vs Hoover' but I think it's only the UK and a few other places that use the word hoover, which is a brand name, as the alternative word for vacuum cleaner. For the sake of international understanding the name had to change. It was a big sacrifice.