Thursday, 31 August 2017

A Warehouse Sale in Singapore: the mass production of freedom tshirts

Recently the parents took me to see one of the huge Robinsons warehouse sales in Singapore out at Expo, where I encountered vast mountains of GIORDANO shirts like never before. For the uninitiated, in Singapore Giordano has long-established itself as the main purveyors of generic low-cost casual wear - with an outlet in practically every other HDB centre. Even I probably have had a few Giordano basics in my childhood wardrobe, because Giordano is so ubiquitous that people sometimes even think they must be a Singaporean company (they're actually from HK). I don't know who designs these shirts, but if you just want the cheapest possible basic cotton shirt and have no care for fashion or aesthetics or things with meaningful messages on them, then this is the place for you. You know, a $5 tshirt that basically says "I absolutely do not care whether the words on my shirt makes any sense at all in any context whatsoever because I do not care about the useless practice of wearing shirts to express my individuality and personality".

[This is also not to be mistaken for Things which are so bad until they're good again. No, this is not exciting, trendy, or radical clothing. No, these are just generic words printed onto a generic shirt and then sold in staggeringly vast quantities in Singapore]

Now the strange thing about all these Giordano shirts was that... THEY WERE ALL FREEDOM THEMED! Yes, a mountain of FREEDOM shirts in Singapore.

Here are a few of them:

20170902_103934

OKAY... WE ARE FREE TO CHOOSE...
BUT WHY ARE ALL THOSE PEOPLE RUNNING?
WHAT ARE THEY RUNNING FROM???

20170902_103923

OK... I'LL TRY TO KEEP CALM...
BUT..... IS THERE REASON NOT TO BE CALM?
IS IT RELATED TO THE "STAYING FREE" PART???

20170902_103914

I DON't KNOW GIORDANO, WHY DON'T YOU TELL ME?
OR AM I SUPPOSED TO ASK THESE FISHIES?
DO THE FISHIES KNOW FREEDOM?
WHAT IS FREEDOM???

Maybe they had a meeting and then they thought about how Singapore and Singaporeans are always concerned about freedom. Maybe they were chortling to themselves as they designed it, "Oh these Singaporeans! They are so going to love our insightful and subtle commentary on the state of freedom and free speech in Singapore in our new line of freedom shirts!". Or who knows, maybe the designing of the shirts was done by a hapless designer being forced by the dollar to churn out more and more nonsensical mass produced tshirt designs which the designer knows will never be thought of or valued as a credible creative product and as the poor designer sheds a tear for the demise of his or her creative integrity he or she types into Illustrator: WHAT DOES FREEDOM MEAN?

I wish I had taken more pictures of all of the designs but the Dingfather pulled me away and told me to stop mocking the freedom shirts by laughing so loudly.

Saturday, 19 August 2017

Blender Cycles: 12 Ways to Reduce Render Time

Recently my challenge was to produce 2000 x 3 frames for the production of three holograms. At 50 minutes per frame, 6000 frames would have taken a frightful 208.333333 days to render out on one already relatively speedy laptop. On the slowest mechanised computating potato in the household (5+ year old Macbook Pro), it would have taken several hours. But the real issue was not the complexity of the scene, but the way in which I had initially constructed the scene, and the necessary render settings.

After several weeks of editing (and frantically googling "HOW TO REDUCE RENDER TIME"), here is a compilation of ways that I used to reduce my render time (CPU) for a single frame from a horrible 50 minutes to 1-2 minutes. Its not an exhaustive list, but I thought it would be useful to WRITE IT ALL DOWN NOW in case the Future Debbie completely forgets everything after the hard slog of trial and error of the last few weeks..

1. Duplicate Linked Object Instances the right way




This may seem pretty obvious but I think it needs to be on the top of every list. The right shortcut to duplicate an instance of an object is ALT-D not SHIFT-D. SHIFT-D produces a completely new object with no reference back to the data of the original object. A linked object shares the same object data, so any edits you make to the first object will make all the other linked objects change as well. When you're in a hurry it is easy to accidentally type Shift-D instead of Alt-D, but this has the potential to make a serious impact on render time.

2. Link Object Data




Let's say you completely can't recall if you used Shift-D or Alt-D to duplicate your objects. If you go to Mesh you'll be able to see how many linked objects are currently using the same data. If your mesh is unique and unlinked, first select what is going to be the master, then all the other objects you want to have using its data, and press Ctrl-L whilst the mouse is over the 3D view. You'll get the "Make Links" dropdown menu and you should select Object Data to link the objects. Other links for materials, groups, etc can also be made using this shortcut.



Note that if for some reason you do accidentally select different objects which aren't at all similar, note that all the latter objects will be changed to have the object data of the master object anyway...



In general, I personally found it useful to assign my materials really crazy colours in the viewport so that I could see at a glance which objects were the same and which were not.

3. Clamp Direct and Indirect




Usually you end up turning up the samples for a scene because there are too many 'fireflies' and noise, but clamping values can quickly remove these stray white dots which appear on the render. Clamping sets the very lightest (brightest) samples to a maximum value so it removes those stray white fireflies, but in the process, it will reduce the bright "pop" or light sheen that you might have wanted to achieve with certain glossy materials.

If you set Clamp too low, it will also cause the ENTIRE scene to be too dark/dimly lit, especially if you are using HDR for Environmental Lighting, so don't set the Clamp too low. The general advice is to start from a high number like about 10 and then work your way down to see what works for your scene. I was able to set Clamp Direct to about 4 and Clamp Indirect to about 6 and still achieve acceptable results. As for the overall "dimming" effect the Clamp will have on the scene, you can simply increase scene brightness through the compositor with a Color Balance node, or you can simply do it in post.

4. Subdivision surface




Subdivision surface is a modifier commonly used to create a smooth surface mesh from a blocky linear polygon mesh. It is done by splitting up the faces of the mesh into even smaller faces in a way that gives it a smooth appearance.

It is worth checking if you have stupidly set a subdivision surface of VERY MANY iterations for something incredibly trivial, tiny but also incidentally heavily duplicated in the scene...

5. Decimate






Did you subdivide your terrain into unwisely tiny bits and then handsculpt it with a 5px clay brush?? If there is complex modelling or you've applied Subdivision Surface to a mesh and are now regretting it, you can undo your CPU-killing subdiv-happy ways by decimating the meshes that you don't need smoothing on! Add the Decimate modifier to reduce number of faces.

6. Simplify




Let's say you're just rendering a preview for yourself and its not the final render. You can quickly set the global max Subdivision Surface and Child Particle number here under Scene > Simplify. Just remember to uncheck the Simplify box when you're producing the final render.

7. Delete unnecessary terrain




Set up Blender so that you can see several angles of your scene at the same time, along with the timeline if you need to scrub through it quickly. Go into Edit mode (Wireframe) and highlight the excess terrain that never appears in Camera view for the entire timeline using either B (to draw a box) or C (to paint it with a circular brush). Make sure you're viewing in the Wireframe mode though, because if you're viewing in Solid you'll only be able to select the vertices that you can see, rather than all the vertices in that area regardless of whether you can see them or not.

The most handy shortcuts in 3D view are the 0 and 7 button:
0 is Camera View
7 is Top view
5 to toggle between Perspective view and Orthographic view



The resultant landscape will look a bit weird like this but you'll save time not rendering all the bits. But do keep the bits which you'll need for the light bouncing off to produce a realistic scene.

8. CPU/GPU Compute and Tile Size




If you have a Nvidia graphics card, you'll still need to enable it in Blender's User Preferences in order to use GPU, which can drastically cut down your render time. When GPU works, its like magic. GPU can be dramatically faster than CPU but is also limited by the total amount of VRAM on the card - so once it hits that limit the rendering process will simply fail (memory error). Also I had to dramatically rein in my expectations - I have always insisted on using desktop replacement laptops rather than a desktop for portability (especially for my kind of work) - but one has to consider that laptop GPUs generally aren't as powerful as the ones in desktop GPUs in terms of VRAM, No. of CUDA cores, and overall speed.



It is generally said that the tile size should either be a perfect squares or factors (ie: divisible fraction) of the final resolution (having smaller bits of tiles left over is wasteful) but I think a lot more testing would be required to determine for the type of scene and type of CPU/GPU. Generally, if you reduce tile size too small, it incurs more overheads of switching between tiles. You should experiment with the numbers and see what works for you...

What worked for my scenes (Intel Core i7-7700HQ @ 2.80GHz / Nvidia GeForce GTX 1060 6 GB GDDR5):
For CPU an ideal Tile size seems to be around 16x16 or 32x32
For GPU an ideal Tile size seems to be 312x312

9. Number of AA Samples / Progressive Refine


The number of AA (Anti Aliasing) samples will increase render time exponentially, and this was largely why my first renders were taking 50 MINUTES PER FRAME even on the best laptop in the entire household! How many samples are enough samples? How do you find out how many samples are good enough for you, visually?

Under Performance, there's an option for Progressive Refine which will progressively show you the overall image at each sampling level. It can be slower to have to complete the entire image together but you can also stop it when you think the image is good enough. Its useful to eyeball it until you find out what number of samples you are happy with, then just use that number and uncheck progressive refine so it will be faster.

10. Resolution, Output File Location, and Output Quality




When you "double" the size of the image, you're actually making it four times as large and your image will take 4 times the CPU/GPU to compute! When making a preview and not the final render, you can set resolution to 50%. But don't forget to uncheck it when you are doing the final render!!! (ARGH!!!)



Make sure that you have set the correct Output file location. If you are opening the blend file for the first time on a new computer, MAKE SURE YOU HAVE RESET THIS. Blender does this thing where it doesn't tell you the output folder/drive doesn't exist - it will happily render but only tell you at the end of the process that it had no place to save the file.

Below that there's also the compression/quality setting for it. For a preview you can set it lower but remember to set it back to 100% for the final render.

11. Selective Render / Animated Render Border




Whilst in Camera view (Shortcut Num-0) within 3D view, if you use the shortcut CTRL-B, you can demarcate the "Selective Render" border (which appears as a red dotted line) in camera view. To release this Selective Render Border, its CTRL-ALT-B.

Ray Mairlot's extremely useful Animated Render Border allows you to selective render an object moving through a scene, or to even create an animated border that can be keyframed.

When using this add-on, the final output is a frame that will still be the size of the entire render resolution, but only the selective render area will have an image and the rest will be alpha transparent.

12. Use a Render Farm


Ok so after I shaved scores of minutes off the render time to 2 minutes per full resolution frame, I realised that 2 minutes x 6000 = 8.33333333 days - and that was 8.33333333 days that I certainly did not have! There are limits to what a great laptop with a good graphics card can do. When the computer is rendering - you can't really use anything else that taxes the graphic card or processor when its rendering, so it basically disables the computer for the duration of the render.

So.. there was no other way around this - I had to use and pay for a render farm. I tried out Render Street, TurboRender and Foxrenderfarm as they were the farms which came up when you search for Blender Render Farms.

The basic process for all of them is:



- Pack external data into blend file (tick the option to automatically pack)
- Upload a zipped copy of the blend file
- Choose your render settings
- Pay the render farm some money (for slower render) or LOTS OF MONEY (for faster render)
- Monitor render progress and render quality through web interface
- Magically download completed rendered files in record time

[Do however note that the Animated Render Border add-on mentioned above in this list will not work with the render farms, but you can write to most of these render farms regarding desired plugins and they will let you know if the add-ons and plugins can or cannot be installed]

A more comprehensive review of render farms coming up in the next post...

Wednesday, 16 August 2017

Render Farms: Which Blender render farm is the fastest and most intuitive?

There comes a time when you can no longer delude yourself over the notion that your trusty personal computer will be able to render your frames for you within this lifetime. You can't wait half a year to finish rendering your Blender Showreel. You can't wait 8 days to finish a render that you need tomorrow. And you've also got no time, money or space to build your own render farm. So you'll just have to pack up your work, hand over the files to a render farm, and fork out all that cash...

...AND THEN GET READY TO BE AMAZED AT HOW IT WILL CHANGE YOUR VIEW OF 3D WORK WHEN YOU KNOW NOW THAT YOU CAN RENDER ANYTHING INSTANTLY!!!

MORE TIME BLENDING, LESS LAGGING!! Yes, there's a likelihood that your wallet might be crying after this, but your time and CPU-time savings will probably be worth every penny that you pay the render farm. It means less of "rendering for 8 hours overnight and only then discovering you have some BIG FAT PINK MISSING TEXTURE in the middle of your render and realising you'll have to wait for ANOTHER 8 HOURS as your computer turns into an overheated whirring pumpkin again"! It means you can be more experimental in your 3D modelling work since you know you can just generate a test preview cheaply and quickly. It means that you can have all of the frames for your animation rendered out without you feeling tempted to be stingy on the number of frames, quality, or resolution.

Here are some notes of my attempts to find a decent render farm - and to get up and running with that render farm in the shortest amount of time possible. I think that the factor of "BEING ABLE TO RENDER IN SHORTEST AMOUNT OF TIME WITHOUT GETTING LOST IN A WEBSITE" is pretty important. And having NEVER used a render farm before until this point, I signed up to RenderStreet, TurboRender, and Foxrenderfarm simultaneously and sought to find out which would reveal itself to be (1) the most intuitive to use and (2) the quickest to deliver the renders.



RenderStreet




RenderStreet is a Bucharest-based render farm with a deceptively simple interface that doesn't look slick but... IT WORKS. They focus on just Blender and Modo unike the other render farms which also cater to 3DSMax and a whole range of other archivis as well as video rendering. RenderStreet's services come in two modes: On Demand which is charged at $3/CPU Hr, and One which is a flat $50/mth for CPU only rendering (which is actually extremely reasonable). The Render.st One plan is clearly very good for everyday jobs which are not rushed but they have a limit on the total render time for a frame - which is 1 hour (take note that they won't reject your job until the actual render time runs to 1 hr, so once you see that your render exceeds an hour it is best to cancel it and save yourself the weight). I was flabbergasted at the speeds provided with the On Demand version but the costs can quickly stack up. I also liked how they render frames from an animation sequentially so if you stop, you can easily just pick things up again from that specific frame. I also really LOVE their video preview feature which allows you to preview and download your rendered frames in MP4 video format which I find very useful in checking animation output.

Debbie's review: Would definitely use again for professional work if I had the budget.
Impressively fast renders, generates automatic video previews, also has an affordable "everyday plan" option.


TurboRender




TurboRender is a Russian render farm with a clean and logical interface, with very prominently located live chat which is useful for when you have to ask them stupid questions like "is Frame Pitch the same as Frame Step" (answer: yes it is). I really liked that there were humans replying to me (as first time user) over every question I had on the process. Their price point seems lower than Render.st's On Demand, and their speed is decent but not blindingly fast (obviously in this cpu/gpu game the speed is money). They're probably a good intermediate render farm to go to for everyday jobs that aren't rushed, as their rates are very affordable. They divide your frames into blocks and task different servers with different 100 frame blocks. The issue with this is that unlike Render.st you won't be able to preview your rendered frames sequentially along the way, as the different servers take different amounts of time to finish their individual blocks of 100 frames. But when the job is done they will email you and you can download it all. However in terms of feedback their website has the best. You can see a panel with the progress of your files on every server, and I think it was a good part of their design to include the live chat agent with a real human on every single page. It can be a little hard to stop or edit a process once it has been started though - and you might have to use the chat agent to ask someone to help you, but their staff are very responsive (instant response).

Debbie's review: Would definitely use again for personal work as it seems incredibly affordable.
Great and reassuring live feedback on progress of job, and very responsive staff on live chat.


FoxRenderFarm




FoxRenderFarm is a Chinese Shenzhen-based render farm with a plain interface that is a little more tricky than the previous two render farms (Confusingly, some error messages may be in Chinese). I did a small test render with them but didn't continue after a while because I was won over by Render.st. However its clear that in a pinch they would also do the job, but their interface is significantly less intuitive than Render.st and TurboRender. You'll also need to chat with the service agents to understand if you're doing it right or wrong. Someone from FoxRenderFarm also did drop me an email a day later to ask me if I needed help in resuming the job.

Debbie's review: Requires more than just intuition to figure out how to use the site unlike the prior two.
Would need to speak to helpdesk to get started.




See also:
Blender Cycles: 12 Ways to Reduce Render Time