digesting Animal logic USD Lab part1

VFX facility Animal Logic has released USD ALab, a free USD asset that company describes as “the first real-world implementation of a complete USD production scene. see promo video below.

I gave it a try in lastest Houdini19.5 and Solaris. the scene crashed random or was superlaggy. I gave a shot with Karma and Arnold renderer. the experience in Lops is still aweful and lots features are still missing, just frustrating.

i open the scenin GafferHQ, they experience is quite and feels supersnappy. the downside, USD is still not full supported. so i decide to write some scripts to convert USD files into native gaffer shaders inside of gaffer. I am planning to great a modular converting tool to transfer shader between Arnold, Cycles or the upcoming opensource release of MoonRay from Dreamworks animation.

i will post more progress as i go along

Houdini and Arnold tips 1

a tip especially for Windows Houdini Users.

Programs do not show the shell running in it on the Windows operation system, unlike Linux. in some cases getting a pop-up window from Houdini tells what’s wrong. but most of the time you don’t get anything. you don’t what’s going on, especially when you dealing with GPU rendering.

for example with Arnold renderer you get warnings, errors, hints and tips directly into the shell, like here:

you make Houdini star in shell-like in windows by adding this line into your Houdini env.

HOUDINI_TEXT_CONSOLE = 1

it will make your life much easier!

using Arnold Core under windows

if wanna use arnoldCore with a command line or 3rd party DCC like GafferHQ, you need to install Arnold SDK. it’s a zip archive, you just unpack it and you are done. But to be able to use in Gaffer or command line you want to add the unzip folder to the Window environment.

look for the Environment options with windows search like here.

  • open the options window for the system environment :

  • Click on the Environment Variables bottom:

  • Click on New under User variables and variable :

  • add a variable name: “ARNOLD_PATH”
  • add variable value: path to your unzip folder like “C:\users\xxx\arnold”
  • also, add 2nd variable “ARNOLD_ROOT” as the value pointing to the same location. this way any application will find the Arnold Core and other tools like txmake etc..

Apple M1 chip for VFX production

Apple M1 chip for VFX production


First a disclaimer, this is my own opinion and only mine.
Many people ask me if the Apple silicon CPU/GPU is good for CGI or VFX productions and is it the future?
First, let’s have a look at the concept of the silicone chip from apple.

Macbooks and Macbooks pro with the M1 chip have 20+ battery life, which is 3-4 times more than Intel laptops or previous MacBooks. Is the M1 so much better than the Intel or AMD chips? mmhh , maybe or is the Battery so much better? I don’t think so, it’s still the type of battery.
What really makes it stand out is the concept of CPU and GPU design.
The M1 CPU has its own Memory onboard without the need to move data forth and back from a memory on the mainboard, which already saves electric power usage. next, the GPU cores, which also handle graphics display are also on the same chip. This means data don’t need to be transferred through the mainboard to a graphics card, which needs a high frequency to be fast. High frequency also needs more power and cooling, that’s the next power savings. the M1 design also has shared memory, meaning CPU and GPU use the same memory, unlike a regular computer, which saves extra work shifting data from CPU memory to GPU memory, also power savings.
Properly the biggest energy saving comes from the different CPU cores. M1 chips have different CPU cores. The regular CPU cores like in Intel or AMD chips and lower power CPU cores. These simpler and slower CPU cores only need a fraction of the power of a regular full-featured CPU core. And that’s the key. 95% of laptops used are for writing, office work like excel sheets, watching movies or surfing the internet, tasks which the low-power CPU can easily do. And that’s the main reason why the battery lasts so long. If you do raytracing all the time, your battery life will be in a similar range to intel used laptop.


So, the concept of M1 Chips is, having multiple processing units for different purposes on 1 chip. CPU cores, low-power CPU cores, GPU cores and AI cores (Nvidia calls its AI chip Tensor cores) are on the chips which a unified memory. This means the 128GB of Ram, like on the M1 Ultra Chip, can be fully used by the GPU cores for graphics or heavy jobs like raytracing. That’s huge! If you wanna have 128GB graphics card memory with Nvidia or AMD cores you need to invest 14k$+ just for graphics cards plus the costs of a PC with a proper mainboard and cooling system. The downside of the concept is, that it’s not flexible and you can’t upgrade the memory or graphics cards. But to be honest, how many times have you been in the store and bought more memory these Days?

Overall the concept sounds promising and I think it’s the future for now. This concept is not new, the O2 workstation from Silicon Graphics had the same concept, and so did the Nintendo 64 video game console. It didn’t turn out to be successful. At the time, the speed improvements of the intel chips were so huge, that they outrun any benefits of the O2 design.

In their current state, the M1 chips hold up pretty well with Intel and AMD CPUs and beat anything in the same price class. Of course, you can outrun the M1 chips with a high-end desktop and water-cooling, if you wanna do rendering but at what cost? Also, the M1 chip still can’t compete with the full beefed-up 3090 Nvidia GPU card in terms of rendering speed. The M1 is designed as an all-purpose workhorse and extremely fast one, but it has a big memory advantage.
Video processing for example is unmatched, it profits from the shared memory, no need to shuffle insane data of a 4k or 8k video between memory types. At the moment, the M1 chip powerful alternative to Intel’s CPU dominance and competition is good for the consumer.
A workstation computer the apple silicone chips is a worthy alternative. Even more so once the software gets converted native M1 are applications and take full advantage of the system. Rumours have it, that’s intel and AMD work on similar architecture. the future looks bright!

The M1, M1 pro and M1 max share the same architecture, just different amounts of core and memory. The ultra chip is basically two M1 max chips glued together and data exchange is so fast, it works as one.

The apple silicone can is also attractive as a server or render-farm system. the low-power usage and small form factor are efficient, you don’t need big motherboards with fast bus lanes, which bumps up the cost of cooling and power. a huge factor in this area.

The question remains, what is the future? will the default PC chips stay dominant or will the ARM architecture chip design, like Apple M1, take over? From a technical standpoint, the ARM architecture is the most efficient way for running a computer system. Having the right CPU/GPU unit for the right job is power efficient and cheaper. The downside, it’s very complicated to write complex software for this kind of system. If AMD comes out with 512 core Threatripper that would be not very power efficient but extremely efficient for software development. It will triumph over power efficiency. Nevertheless for mobile or small devices ARM architecture will be standard just because the power saving is so impactful.

It will rule Desktop machines properly too because having a large amount of full CPU cores unit has its physical limits. Extreme CPU cores need a large mainboard, a lot of electrical power and cooling. We have already reached the physical limit of how much we can compress the CPU into a smaller space, 5mn.(nano-meter). Smaller is impossible because electric photon touch it’s other and you get the correct information you need anymore.
On the other side, new software languages and AI improving constantly which helps with software development for abstract parallel processing. I think ARM is the future and it will interesting to see what kind of ARM system the competition bring us. (Intel,Nvidia,AMD ).

Bubble Soup Rendering with Arnold

I’ve picked up an idea from my social media stream, rendering a bubble soup. for this example, I used the idea from Entagma’s tutorial using a flip simulation for bubble soup movement.  

the Flip simulation is quite simple and needs fixes to get correct with UV Distortion, but focused on the rendering part. the idea is quite simple using Fluids Dynamics to distort the UV on a sphere. a texture mapped on a sphere the UV’s to drive the thickness of thin-film shader. I used the default ThinFilm feature of regular Arnold Shader. This makes the setup super simple, all you need is Spheres is distorted UV’s.

the rendering from Arnold GPU is a little slow for GPU rendering but the Arnold CPU is extremely fast, the render time for HD was 12 seconds on superslow Xeon CPU. it’s by far the fastest thin-film rendering on the CPU, I’ve seen so far. 

raw rendering. I need only AA sample of 1. below is transmission albedo, it quite graphics look on its own.

it almost looks like infrared images from Nasa of Jupiter. 

for the next iteration is will great the type animation / noised structure within the shader only. it should be easy to re-recreate the dynamics with noise fields.

The following Standard Surface shader settings were used to create a soap bubble.

Base: 0
Specular: 1
Specular Color: 1 1 1
Specular Roughness: 0
Specular IOR: 1.0
Transmission: 1
Transmission Color: 1 1 1
Coat: 1
Coat IOR: 1.5
Thin Film: IOR 1.4
Thin Film Thickness: 500 [nm]


the thickness values will be replaced by the thickness attribute multiplied by 500.

Basic AOV and Lightgroups passes with Arnold and Houdini19 Solaris

I made 2 minutes video on how to create AOV passes with Arnold in Solaris. I am using the Arnold ROP node to deal with the Variables names and LightPath expression for my own passes in LOPs

here 2 minutes video on how to create Lightgroups asses within LOPs (Solaris). in Houdini 19

Here’s a simple kick trick to get a list of AOVs and LPEs. The -laovs flag lists all the AOVs in the loaded scene, but if you give kick no input, you’ll get a list of all built-in AOVs defined by Arnold. this only works when you have arnoldSDK installed.

For example, on Windows, run :

kick -laovs -i Null  

On Linux or macOS, run :

 kick -laovs -i /dev/null

Available aovs:

kick -laovs -i Nul
Available aovs:
    Type:    Name:                        LPE:
    --------------------------------------------------------------
    VECTOR2  motionvector (~)
    RGBA     RGBA                         C.*
    VECTOR   N (~)
    FLOAT    Z (~)
    RGB      direct                       C[DSV]L
    RGB      indirect                     C[DSV][DSVOB].*
    VECTOR   Pref (~)
    RGB      albedo                       C[DSV]A
    RGB      emission                     C[LO]
    RGB      diffuse_direct               C<RD>L
    RGB      background                   CB
    RGB      denoise_albedo               ((C<TD>A)|(CVA)|(C<RD>A))
    RGB      sss_albedo                   C<TD>A
    RGB      specular_albedo              C<RS[^'coat''sheen']>A
    RGB      diffuse                      C<RD>.*
    FLOAT    cputime (~)
    RGB      diffuse_indirect             C<RD>[DSVOB].*
    RGB      sss_indirect                 C<TD>[DSVOB].*
    RGB      diffuse_albedo               C<RD>A
    RGBA     shadow_matte
    FLOAT    volume_Z (~)
    RGB      specular                     C<RS[^'coat''sheen']>.*
    RGB      coat_direct                  C<RS'coat'>L
    RGB      specular_direct              C<RS[^'coat''sheen']>L
    RGB      specular_indirect            C<RS[^'coat''sheen']>[DSVOB].*
    RGB      volume_direct                CVL
    RGB      coat                         C<RS'coat'>.*
    RGB      coat_indirect                C<RS'coat'>[DSVOB].*
    RGB      coat_albedo                  C<RS'coat'>A
    RGB      sheen                        C<RS'sheen'>.*
    RGB      transmission                 C<TS>.*
    RGB      transmission_direct          C<TS>L
    RGB      transmission_indirect        C<TS>[DSVOB].*
    VECTOR2  AA_offset (~)
    RGB      transmission_albedo          C<TS>A
    VECTOR   P (~)
    RGB      sheen_direct                 C<RS'sheen'>L
    RGB      volume                       CV.*
    RGB      sheen_indirect               C<RS'sheen'>[DSVOB].*
    NODE     shader (~)
    RGB      sheen_albedo                 C<RS'sheen'>A
    RGB      sss                          C<TD>.*
    RGB      sss_direct                   C<TD>L
    RGB      volume_indirect              CV[DSVOB].*
    RGB      volume_albedo                CVA
    FLOAT    A (~)
    FLOAT    ZBack (~)
    RGB      opacity (~)
    RGB      volume_opacity (~)
    FLOAT    raycount (~)
    UINT     ID (~)
    NODE     object (~)
    FLOAT    AA_inv_density (~)
    RGBA     RGBA_denoise (~)
    --------------------------------------------------------------
    (~) No opacity blending