# Kenn Hedin Kalvik - Professional Compositing Tutorials > Professional Compositing Tutorials Public Ghost content for AI and LLM tooling. This file includes a bounded export of public pages first, then recent public posts. Append `.md` to any post or page URL to get the content in Markdown (for example, `/example-post.md`). ## Pages ### About URL: https://www.keheka.com/about/ Last updated: 2025-12-03T15:29:40.000Z Heya! 😊 I'm **Kenn** and I'm a **Compositing Supervisor** based in London, UK, with **12+ years of experience** working in the visual effects industry on high-end television/streaming shows and feature films. My achievements include the contributions to multiple Oscar, Emmy, VES, and BAFTA awards and nominations, such as the **Emmy Award** for Outstanding Visual Effects on *Chernobyl,* and the **Oscar Nominations** for Best Visual Effects on *Mission: Impossible - Dead Reckoning* and on *Napoleon*. With 60+ movies and TV shows under my belt for clients such as Warner Bros., Paramount Pictures, Walt Disney Studios, 20th Century Fox, HBO, Netflix, Disney Plus, Apple TV+, Hulu, Sky, and Amazon Prime Video, I have gained a **wealth of knowledge** about the world of visual effects. And I have learned a lot about productivity, teamwork, and self-discipline along the way. In my personal life I am a big believer in self-improvement and I am always looking to **optimise and progress to the next level**. And since I am now a dad to a young boy, free time is often limited! As I continue to learn I will be sharing my knowledge, techniques, tools, workflows, and advice here on this website. **Join the journey!** Subscribe to the newsletter by clicking on the button below, and new guides will be delivered straight to your inbox the moment they are released. [Let's Go!](https://www.keheka.com/#/portal/signup) --- [LinkedIn](https://www.linkedin.com/in/kennkalvik) | [IMDb](https://www.imdb.com/name/nm5537895/) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/05/BM.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/05/Cher.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/05/AC.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/12/TheWitcher.png) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/05/MI71.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/05/FB3.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/05/return-to-silent-hill-film-poster.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/05/MI8.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/05/WOT3.jpg) ### Welcome! URL: https://www.keheka.com/welcome-free-member/ Last updated: 2026-02-11T17:43:21.000Z _This post is for subscribers only._ ### Suggestion Box URL: https://www.keheka.com/suggestion-box/ Last updated: 2023-12-19T19:33:16.000Z _This post is for paying subscribers only._ ### Welcome To The Companions! URL: https://www.keheka.com/welcome-companion/ Last updated: 2026-06-08T13:17:18.000Z _This post is for paying subscribers only._ ### Companions URL: https://www.keheka.com/companions/ Last updated: 2026-06-08T13:16:46.000Z _This post is for paying subscribers only._ ### Shop URL: https://www.keheka.com/shop/ Last updated: 2026-06-08T16:28:18.000Z 💡 There are ****three ways** that you can access the exclusive tutorials: Buy a ****Subscription**, buy an ****Access Pass**, or buy ****Individual Tutorials** (PDF downloads). ## Buy a Subscription - Join the [Companions community](https://www.keheka.com/companions/) and **get online access to every tutorial**. - **Monthly** and **Yearly** (over 30% discount)subscription options are available. - **Keep the same price** for as long as you want to subscribe. - **Cancel anytime**. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/11/MonthlySubscription.jpg) #### Monthly Subscription Online access to all of the Tutorials at [www.keheka.com](https://www.keheka.com/), plus all [Companions](https://www.keheka.com/companions/) benefits. Renews monthly and there will be no increase in price upon renewal. Cancel anytime. [Click here to buy the Monthly Subscription](https://www.keheka.com/#/portal/signup/630dbadb9e5ad9003d449e69/monthly) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/11/YearlySubscription.jpg) #### Yearly Subscription Online access to all of the Tutorials at [www.keheka.com](https://www.keheka.com/), plus all [Companions](https://www.keheka.com/companions/) benefits. Renews yearly and there will be no increase in price upon renewal. Cancel anytime. [Click here to buy the Yearly Subscription](https://www.keheka.com/#/portal/signup/630dbadb9e5ad9003d449e69/yearly) ## Buy an Access Pass - Join the [Companions community](https://www.keheka.com/companions/) and **get online access to every tutorial**. (The same access as with a subscription). - **30 Days** *(Silver)*, **365 Days** *(Gold)* **,** and **Lifetime** *(Platinum)* access passes are available, with increasing discounts (over 30% discount and more). - **No subscription**, just a single payment up front. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/02/AccessPass30.jpg) #### Silver Pass - 30 Days Access Online access to all of the Tutorials at [www.keheka.com](https://www.keheka.com/), plus all [Companions](https://www.keheka.com/companions/) benefits, for one month. [Click here to buy the Silver Pass](https://keheka.lemonsqueezy.com/checkout/buy/0e032d26-ac1b-4903-8d9c-39a449bd4a5a?ref=keheka.com) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/02/AccessPass365.jpg) #### Gold Pass - 365 Days Access Online access to all of the Tutorials at [www.keheka.com](https://www.keheka.com/), plus all [Companions](https://www.keheka.com/companions/) benefits, for one year. [Click here to buy the Gold Pass](https://keheka.lemonsqueezy.com/checkout/buy/66e00995-36dd-4c10-b8ad-97959d346e40?ref=keheka.com) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/06/Platinum_Ticket.jpg) #### Platinum Pass - Lifetime Access Online access to all of the Tutorials at [www.keheka.com](https://www.keheka.com/), plus all [Companions](https://www.keheka.com/companions/) benefits, for life! [Click here to buy the Platinum Pass](https://keheka.lemonsqueezy.com/buy/84871dc8-2d73-4e43-89ba-5e184ec903ba?ref=keheka.com) ## Buy Individual Tutorials 💡 A subscription or an Access Pass will give you online-only access to the tutorials below. - A selection of the **Companions Exclusive Tutorials** areavailable for purchase without needing a subscription or access pass. - **Download PDFs** for unlimited personal use offline. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2026/05/TVGTC-1.jpg) #### The Visual Guide To Composition 343 pages. Over 500 example images. Tons and tons of tips, tricks, and deep dive information about composition. Everything you need to level up your art. [Click here to buy the guide](https://keheka.lemonsqueezy.com/checkout/buy/037dc982-4b6e-4490-b219-720c50de55c7?ref=keheka.com) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/09/PCCIN-1.jpg) #### Professional CG Compositing In Nuke Elevate your CG compositing skills to a professional level in Nuke with this massive 165-page guide. The guide covers everything from fundamentals and best practices, to advanced techniques, tips, tools, and tricks. [Click here to buy the guide](https://keheka.lemonsqueezy.com/buy/4500a33f-d463-4742-8953-517a97cb8ba9?ref=keheka.com) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/07/AGBIN-1.jpg) #### Advanced Gizmo Building In Nuke How to build advanced gizmos in Nuke, complete with dynamic menus using Python, custom expression-driven controls, and a decorated user interface. [Click here to buy the guide](https://keheka.lemonsqueezy.com/buy/d7e64fa4-44ce-49be-8873-d1e9230e9fcb?ref=keheka.com) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/08/CPLEIN-1.jpg) #### Compositing Photorealistic Lens Effects In Nuke Make your composites look photographic by recreating real lens characteristics. Massive, in-depth guide (100+ pages) covering 19 different lens effects, how to create them in Nuke, and more. [Click here to buy the guide](https://keheka.lemonsqueezy.com/checkout/buy/ea84d936-20a9-4123-9b9f-ef4fb1ddcc38?ref=keheka.com) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/12/PKIN.jpg) #### Professional Keying In Nuke Elevate your keying skills to a professional level in Nuke with this in-depth guide, covering advanced techniques while building a complete keying template. [Click here to buy the guide](https://keheka.lemonsqueezy.com/checkout/buy/15dc91b0-2e4c-4b0a-ae7c-e7876af020f0?ref=keheka.com) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/05/PUCFATMOIN-1.jpg) #### Practical Use Cases For All The Merge Operations In Nuke Looking for a breakthrough in your understanding of compositing? This 111-page mega-guide covers all 69 merge operations in Nuke across the Merge, ChannelMerge, and PSDMerge nodes, plus many more custom merge operations via the MergeExpression node, with tons of tips, tricks, and practical examples along the way. [Click here to buy the guide](https://keheka.lemonsqueezy.com/buy/688a323e-f217-4c31-8c78-288b8d11267d?ref=keheka.com) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/12/WAMIUTSNIN-1.jpg) #### Warping & Morphing Images Using The SplineWarp Node In Nuke A deep dive into how to warp, blend, and morph between images using the SplineWarp node. [Click here to buy the guide](https://keheka.lemonsqueezy.com/buy/250c9834-c16e-483a-a741-0c895c365ed5?ref=keheka.com) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/04/HTCASODIYC-1.jpg) #### How To Create A Sense Of Depth In Your Composite A deep dive guide about how to recreate the sense of depth in your composite, and make 2D images look and feel real and three-dimensional to the audience. [Click here to buy the guide](https://keheka.lemonsqueezy.com/checkout/buy/a0379d5f-6cbc-4dd6-bb79-b102c82e85e9?ref=keheka.com) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/03/MBMCFC.jpg) #### Motion Blur Masterclass For Compositors A deep dive into how motion blur works, the way cameras operate in the real world, and advanced techniques for dealing with motion blur in Nuke. [Click here to buy the guide](https://keheka.lemonsqueezy.com/checkout/buy/5e911865-ab09-4b6e-8657-7c9d54e9dc03?ref=keheka.com) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/06/AIKTASIN.jpg) #### Advanced IBK Keying Techniques And Setups In Nuke With these advanced techniques and setups, the IBK will become one of your most powerful allies when keying. [Click here to buy the guide](https://keheka.lemonsqueezy.com/buy/097c192a-cf0a-49a9-8553-11dd2eab9dbc?ref=keheka.com) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/01/HTBC-1.jpg) #### How To Be More Creative 25 highly effective ways of boosting your creative output. Suitable for anyone in a creative field, this guide contains all the tips and tricks you need to progress on your creative journey. [Click here to buy the guide](https://keheka.lemonsqueezy.com/buy/4a91d0d7-58be-456b-b623-7a462bd4b391?ref=keheka.com) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/06/HTGHAAC_8.jpg) #### How To Get Hired As A Compositor 100 pages packed with actionable information, guiding you through every step of the way to getting hired as a Compositor. [Click here to buy the guide](https://keheka.lemonsqueezy.com/buy/d3b013f6-d032-4a6f-a13f-ebbe5b303ba3?ref=keheka.com) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/06/ATTUPIN.jpg) #### How To Automate Tedious Tasks Using Python In Nuke This guide will teach you how to both automate and massively speed up repetitive tasks using Python’s for-loop in Nuke. [Click here to buy the guide](https://keheka.lemonsqueezy.com/buy/0c2890c3-5442-4d57-882b-200d155cc6fa?ref=keheka.com) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/06/HTBASGN2.jpg) #### How To Build A Show Specific Grain Tool In Nuke Step-by-step guide for building a grain tool in Nuke based on grain plates. [Click here to buy the guide](https://keheka.lemonsqueezy.com/buy/9043867f-d605-413a-8441-d56ad97483bf?ref=keheka.com) ## Posts ### The Visual Guide To Composition URL: https://www.keheka.com/the-visual-guide-to-composition/ Last updated: 2026-05-08T22:36:55.000Z ⭐ A deep dive into the principles and guidelines for composition, and how we can implement them in practice when compositing… _This post is for paying subscribers only._ ### Creating Parallax In Nuke URL: https://www.keheka.com/creating-parallax-in-nuke/ Last updated: 2026-02-16T23:39:57.000Z *A closer look at how parallax works, and how we can create and/or match the effect in Nuke…* ## Parallax Parallax is the apparent shift of an object’s position relative to more distant background objects when viewed from different perspectives. The change in perspective, or viewpoint, is due to the position/motion of the observer, of the observed, or both: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2026/02/Viewpoints.png) *A change in viewpoint leads to different views. (*[*Source*](https://www.researchgate.net/figure/Parallax-results-from-viewing-a-nearby-object-relative-to-much-more-distant-objects-from%5Ffig1%5F235158031?ref=keheka.com)*).* In a stereoscopic context (i.e. how we see the world with our eyes), the change is due to the difference in the position of each eye. – Our eyes see an object from slightly different angles. You can easily see this stereoscopic parallax effect for yourself by holding out one of your hands in front of you, and looking at for example your index finger against the background with one eye open and the other eye closed. Then, open the previously closed eye while simultaneously closing the previously open eye, and the finger will appear to move against the background: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2026/02/Finger_Stereo.jpg) *Stereoscopic parallax. (*[*Source*](https://parallaxperspective.wordpress.com/2012/04/16/what-is-a-parallax-anyway/?ref=keheka.com)*).* – Alternate blinking with each eye, and your finger will appear to bounce left and right. 💡 This method can also be used to find out which of your eyes is the dominant one (if any): Look at your finger with one eye open, and then open the closed eye (both eyes are now open). If the finger appears to stay in the same position, the eye that was open first is the dominant one. If it moves, the eye that was closed first is. Try both ways and see which eye might be your dominant eye. The closer an object is to the observer, the larger the apparent shift against the background. I.e. the larger the *parallax angle*. And so, foreground objects will seem to move faster relative to background objects (this is also true even if they would travel at the exact same speed in reality): ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2026/02/Parallax.jpg) *Depth through relative motion. (*[*Source*](https://sketchplanations.com/parallax?ref=keheka.com)*).* In fact, that is the basis for how 2D *side scroller* video games achieve a sense of depth/perspective: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2026/02/Sonic_the_hedgehog_Sega_Genesis_Part_1.gif) *Foreground layers move faster than background layers. (*[*Source*](https://youtu.be/CqOlpQ7sepE?si=Mk3-dYFSmvNl8bK0&ref=keheka.com)*).* Here’s a short video that nicely shows how it works: *This is why 2D games feel 3D (but aren't). Parallax.* Interesting side note – Parallax is also used to determine the distance to stars: By measuring the extremely small observed shift of a star against the background of distant stars – at the largest time interval of about six months, when Earth arrives at opposite sides of the Sun in its orbit – the distance to the star can be calculated using trigonometry. Stellar parallax can also be determined by comparing measurements from Earth and from a distant spacecraft, giving us a much more visually clear distinction in the position due the the distance between the observers – which allows us to see the parallax without instrumentation: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2026/02/New_Horizons_Proxima_Centauri_Parallax_Animation.gif) *Parallax of Proxima Centauri as observed from NASA’s New Horizons spacecraft and from Earth. (*[*Source*](https://en.wikipedia.org/wiki/File:New%5FHorizons%5FProxima%5FCentauri%5FParallax%5FAnimation.gif?ref=keheka.com)*).* We may not need to accurately measure stellar distances, but for us compositors, understanding how parallax works is still essential knowledge. – Because parallax is an effect that we have to mimic in our shots to [create a sense of depth](https://www.keheka.com/how-to-create-a-sense-of-depth-in-your-composite/). There are several ways to do this: ## Parallax In Nuke To convincingly composite an element (e.g. a CG render, DMP, 2D smoke element, patch, or similar) into a shot, we have to position the element at, and track the element to, the correct depth plane. – I.e. the element needs to be placed at the correct distance from the camera, and behave as if it were filmed from that distance with the same camera. To do that, we have to first identify the depth plane where we want the element to sit. Like we saw in the diagram earlier, different depth layers appear to move at different speeds from the camera’s point of view. And so, if you want to position your element near a background mountain, keep in mind that that’s a different depth plane to a foreground rock, and your track for the foreground rock will likely not work for your background mountain. It’s often more intuitive when looking at a 3D scene: ## Camera Track Ideally, you would get a camera track for your shot, plus locators, a point cloud, and/or proxy geometry of the environment, so that you can set up a 3D scene in Nuke and place your element at the correct depth plane. First, it’s important that **your camera is accurately tracked to your scan.** To correctly match the motion parallax at various depths in the scan, the CG camera has to match up with the real camera. – Even small inaccuracies in the track can become noticeable when compositing your element. 💡 The Foundry has [extensive documentation on camera tracking](https://learn.foundry.com/nuke/content/comp%5Fenvironment/cameratracker/camera%5Ftracking.html?ref=keheka.com) to help you get the most out of your track. Then, to put a 2D element into a 3D scene, you can [project it onto a Card or other geometry](https://learn.foundry.com/nuke/content/comp%5Fenvironment/3d%5Fcompositing/projection%5Fcameras.html?ref=keheka.com) that is positioned at the correct depth plane. 💡 Remember to ****add lens distortion** to any projections, so that they line up around the edges of the frame. There are several things you can do to help place your Cards/geometry correctly: ## Positioning Cards/Geometry If you do your own camera tracking using the **CameraTracker** node in Nuke, you can [export a CameraTrackerPointCloud](https://learn.foundry.com/nuke/content/comp%5Fenvironment/cameratracker/creating%5Fpointclouds.html?ref=keheka.com) to help with positioning any Cards or other geometry in 3D space for projection purposes. (Or, you can [create the Cards/geometry directly in the 2D view](https://learn.foundry.com/nuke/content/comp%5Fenvironment/cameratracker/placing%5Fobjects%5Fscene.html?ref=keheka.com) using the *create* menu). You can also [create a point cloud by using a PointCloudGenerator node](https://learn.foundry.com/nuke/13.0/content/comp%5Fenvironment/point%5Fclouds%5Fmeshes/creating%5Fpoint%5Fclouds%5Fmeshes.html?ref=keheka.com) connected to your footage and to your camera. This will typically create a much denser and more easily readable point cloud than the onethat you can export directly from the **CameraTracker** node: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2026/02/PointCloudGenerator.png) *A point cloud generated by the PointCloudGenerator. (*[*Source*](https://youtu.be/TZSazmaoMl4?si=WxS83KMnJDYuevJo&ref=keheka.com)*).* 💡 By using a point cloud like the one above, it’s easy to navigate around the 3D scene and place Cards/geometry accurately in depth. You can even create a point cloud from a CG render containing world/reference *position* and *normal* AOVs using the [PositionToPoints](https://learn.foundry.com/nuke/content/comp%5Fenvironment/3d%5Fcompositing/using%5Fpositiontopoints.html?ref=keheka.com) node. Or, you can create a point cloud from a Deep render and the Camera by using the [DeepToPoints](https://learn.foundry.com/nuke/content/comp%5Fenvironment/deep/creating%5F2d%5F3d%5Felements.html?ref=keheka.com#Creating2) node. If you get a camera track from your matchmove department, you may also get locators or proxy geometry of the scene to help with the positioning. And/or, there may be LIDAR geometry available. Note that LIDAR geometry tends to be very heavy, so disable the **ReadGeo/GeoImport** node when not in use. – In fact, [disable or delete any geometry that isn’t being used in your comp](https://www.keheka.com/best-practices-for-compositing-in-nuke/). Another way to accurately position Cards at the right depth plane is to use this technique: [Snapping Cards To A Position Pass In NukeA very useful technique for quickly and accurately placing Cards around in a 3D scene…![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/icon/favicon-14.ico)Kenn Hedin Kalvik - Professional Compositing TutorialsKenn Hedin Kalvik![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/thumbnail/SCTAPPIN.jpg)](https://www.keheka.com/snapping-cards-to-a-position-pass-in-nuke/) 💡 When positioning Cards in your 3D scene, also take their ****orientation** into account. For example, if you’re patching a section of the ground, the Card should lay flat along the ground, not 90 degrees upright. Otherwise, the patch will be confined to a thin slice of depth and may appear to slide across the ground. The same is true if you’re adding for example a poster to a wall: have the Card lined up flush with the wall for the most accurate track. ## Scene Scale Note that when you’re using cameras and position passes from different software, you’ll have to **ensure that your scene scale is correct.** Different 3D software use different units of measurement. Maya uses **centimetres** by default, while Houdini uses **metres**, for example. Others may use a different unit, like **decimetres**, or one of the **imperial units**. Unless you’re using the [new 3D system](https://learn.foundry.com/nuke/content/reference%5Fguide/3dnew%5Fnodes/usd3d%5Fnodes.html?ref=keheka.com) (which is currently in beta and not widely adopted yet), Nuke just equates any value as being equal to one unit in 3D space. So, if you import cameras, geometry, and/or renders from different software, you may have to scale them up or down so that they align with each other. For example, if you have a camera from Maya (cm) and a CG render from Houdini (m), you can scale *up* the utility passes (such as the *position* pass) in the Houdini render by a factor of 100 to get the correct scale in relation to the Maya camera in Nuke. Or, you can scale *down* the Maya camera by a factor of 100 to get the correct scale in relation to the Houdini render. To scale your CG render’s utility passes, you can connect a **Multiply (math)** node and multiply the passes up or down to scale them accordingly. To scale your geometry or camera, you can plug an **Axis** node into a **TransformGeo** node, or directly to the **Camera**, and adjust the *uniform scale* value in the **Axis**. (Leave all other values in the **Axis** node at default – it should stay at the origin, 0, 0, 0, for the scaling to be correct). To scale a Deep render, connect a **DeepTransform** node and adjust the *zscale* value. Note that the *zscale* value works inversely to a **Multiply**. So if you want to scale the Deep up by 100, set the *zscale* to 1/100 = 0.01. Using the tips above, make sure that you have got the right scene scale, and – using a point cloud/proxy geometry/etc. of the scene – **position** **your cards or geometry at the correct depth in relation to your camera in 3D space.** If you project a building that’s supposed to be 20 metres away on a card that is 2 metres away, the motion parallax won’t be correct. You’ll often be able to spot if something’s wrong with the parallax: ## Check The Parallax **Check that objects move correctly in relation to each other.** As mentioned earlier, objects further away from the camera generally move slower across the frame than objects near the camera. If they’re not, it might just be because your Cards/geometry are incorrectly placed in depth – if so, try adjusting their distance from the camera. And, **make sure that objects move at realistic speeds** depending on their distance from the camera, especially when you’re animating them yourself. A car in the far background wouldn't travel the same distance across the frame as an airplane would in the same amount of time, for example. Also, **keep the point of fixation in mind.** Any static objects beyond the object that you're fixating on will move relatively in the frame in the direction of the camera motion. Any objects nearer than that distance will move in the opposite direction of the camera motion: *Point of fixation example.* When fixated on the red sphere in the centre and moving the camera, the green foreground spheres move in the opposite direction to the camera motion in the frame, while the blue background spheres move in the same direction as the camera motion in the frame. Another parallax issue you may find is that projecting images onto **Cards can sometimes betray the parallax**: ## Shaping Cards Cards are flat, and most objects in the real world are not. You can use [bicubic deformation](https://learn.foundry.com/nuke/9.0/content/comp%5Fenvironment/3d%5Fcompositing/working%5Fwith%5Fcards.html?ref=keheka.com) to give some shape to your Cards, and potentially avoid the issue of the projections looking flat in your scene. – If you were projecting a leaf onto a Card, for example, you could use bicubic deformation to make the Card concave or convex. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2026/02/Bicubic_Deformation_Leaf.png) *Shaping a Card using bicubic deformation.* This technique is very useful for creating basic terrains or any sort of simple projection geometry. Speaking of simple projection geometry: ## Skies Skies are generally so far away from the camera that you can often just project them onto a very large **Sphere**. (And, you likely won’t have data for how far away the clouds are, anyway). If a radius of for example 100,000 doesn’t do the trick, try scaling the **Sphere** so that it encapsulates the points furthest away from the camera in the point cloud of your scene. Sometimes, you just have to go with what visually looks correct, so adjust the distance until the sky tracks nicely with your shot and you get a plausible parallax that makes sense for your context. If you don’t have a 3D scene, you can use an old trick for adding parallax to a 2D sky (when there’s not much camera movement): Add a **CornerPin** node to the image of the sky, and then animate the top two CornerPin points from screen left to screen right, or vice versa. That way, the clouds near the top of the frame (closer to the camera) will appear to move more than the clouds lower down in frame, closer to the horizon. *Animating parallax into a 2D sky using a CornerPin node. (*[*Source image*](https://unsplash.com/photos/blue-sky-and-white-clouds-over-the-sea-yGbh%5Fmg9DH8?ref=keheka.com)*).* 💡 This technique would typically be used very sparingly – just a subtle animation with a hint of movement. Not nearly as much as in the video above, which is exaggerated to show the effect more clearly. You can go even further and displace the 2D sky to create parallax: *How to better ANIMATE a STATIC SKY in NUKE | Comp Lair: Live Tech Corner S01\.* There’s also another useful technique for creating parallax, sort of halfway between 2D and 3D: ## Projecting Using The Position Pass A great way of getting both free and correct parallax without creating a 3D scene in Nuke is to project your image using the *world position* pass of your CG render. Using one of the many position projection tools on Nukepedia or GitHub, for example [this one](https://github.com/franklinvfx/Position%5FProject-Tool-for-Nuke?ref=keheka.com), you would connect the image to be projected, the projection camera, and the *position* AOV from your CG render, and then set the reference frame for the projection. The gizmo will then map the image to the 3D positions so that when the camera moves (the camera movement is baked into the CG render and subsequently its position pass), it will create parallax as it moves away from the reference frame. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2026/02/P_Project.png) *Projecting a basic checkerboard onto a terrain using the P\_Project gizmo. (*[*Source*](https://camo.githubusercontent.com/2aa34497c14a3ddca870b1ea82ab2e68d9a96e165430d01eaf5ec849d9b87b08/687474703a2f2f6672616e6b6c696e7666782e636f6d2f77702d636f6e74656e742f75706c6f6164732f323031372f31312f7633332e706e67?ref=keheka.com)*).* Next, let’s look at a special case when it comes to parallax: ## The Nodal Pan Typically, every camera move will have at least *some* parallax. There is a notable exception to this, however, which you should be aware of: A nodal pan camera move gives **no parallax** to the shot. Rotating a camera around its [no-parallax point](https://moviola.com/visual-glossary/no-parallax-point/?ref=keheka.com), or nodal point, means there will be no shift in the position between the foreground and background objects in the scene. 💡 This is very useful for [creating seamless panoramas](https://youtu.be/e-nhc3FINfY?si=cDZ6riW-t5Im9nmw&ref=keheka.com), like HDRI environments for VFX, or for [adding camera movement to forced-perspective shots](https://www.instagram.com/reel/DSne-YeGP3V/?hl=en&ref=keheka.com). ([Full video](https://youtu.be/MVUuoXAkuUg?ref=keheka.com)). For shots with this specific type of camera move, **avoid adding parallax** to any elements that you composite in, as they will appear to slide against the background. Let’s continue looking at ways to add or match parallax: ## 2D Tracking Another way of placing elements into a scene is to simply 2D track them in. It might not always be as technically accurate as having a 3D scene, but it’s very often highly effective for achieving a realistic composite. 💡 You could also [create accurate 2D tracks using a matchmove camera](https://www.keheka.com/3d-to-2d-tracking-in-nuke/). When you want to 2D track an element into a shot, **confirm that you’re 2D tracking the correct plane of depth in the scan.** You normally have to track the area where you want to insert an element. And that means you may have to 2D track your scan several times if you want to insert elements at different depths. For example, one track for the foreground, one for the midground, and one for the background. A background element tracked into the shot using the foreground 2D track is unlikely to move correctly for its position in depth. 💡 If an object that you’re tracking is crossing multiple depth planes at once, for example the side of a truck that is at an angle to the camera, a [4-point tracked CornerPin](https://youtu.be/eLk2ol3MQ3c?ref=keheka.com) or a [planar track](https://learn.foundry.com/nuke/content/comp%5Fenvironment/planartracker/tracking%5Fplane.html?ref=keheka.com) can help you get the perspective right. Sometimes, the features that are available to track in the scan **won’t correspond** with the depth plane where you want to place your element. For example, if the background is a green screen that’s a few metres away, but you want to replace the green screen with a new background which is much further away – for example some distant mountains. Ideally, you would then create a camera track for the scan and lay out Cards/geometry at the correct distances from the camera to get the right parallax for your elements. However, it’s also possible to fake the parallax in 2D using a regular **Tracker** node: ## Scaling A 2D Track First, using a **Tracker** node, track features at a depth plane that *is* available – for example the tracking markers on a green screen. Next, export a **baked match-move** from the **Tracker** node using the **Export** function at the bottom of the *Tracker* tab in the node’s properties: select **Transform (match-move, baked)** in the drop-down menu, and click **Create**. This will create a **Transform** node with the match-move animation baked in. To control the amount of transformation in the **Transform** node, let’s add a slider to its properties: Click the little **pen** icon at the top of the properties panel and drag and drop a **Floating Point Slider** (the first icon in the newly revealed row of user knobs next to the pen icon) onto the properties of the **Transform** node. Name the **Floating Point Slider** *amount* and label it *Amount*. The default range of 0 to 1 is fine to keep (which will represent 0%-100% transformation). ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2026/02/Amount_Slider.png) *Creating a User tab with a Floating Point Slider knob called amount.* By multiplying the baked animation curves of the **translation** and **rotation** by our *amount* value, we can scale the curves based on the value that we set. We can do that using a simple expression: In each of the **translate.x**, **translate.y**, and **rotate** knobs, add the following expression (right-click on the knobs and select *Edit expression*): ``` curve * amount ``` ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2026/02/Expression_Translate.png) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2026/02/Expression_Rotate.png) *Adding the expression to the x and y translation and to the rotation.* – In the expression above, *curve* (which is a standard Nuke term that’s used in expressions) is referencing the baked animation curve’s value on the current frame, and *amount* is referencing the value that we set in the *amount* knob that we created earlier. 💡 The expression is referencing the ****name** (not the label) of the custom knob that we made, i.e. **amount*, and is case sensitive. So, if you named the slider **Multiplier*, you’d have to replace **amount* with **Multiplier* in the expression above. Now, if let’s say the **translation** in X is 20 pixels to the right on the current frame, and we set the *amount* to 0.5 (i.e. half), the expression would output: ``` 20 * 0.5 = 10  ``` – Which is half of 20, as expected. This video shows what it looks like when you scale the translation up or down: *Modifying Tracking Data With Expressions in Nuke.* If the **rotation** is -10 degrees (i.e. 10 degrees clockwise) and the amount is set to 0.75 (i.e. three quarters), the expression would output: ``` -10 * 0.75 = -7.5  ``` – Which is three quarters of -10, as expected. Next, to scale the baked animation curve of the **scale** knob – which has a default value of **1** (as opposed to a default value of **0** for the **translation** and **rotation** knobs) – we have to make a little bit more advanced expression. Because, we can’t simply multiply the animation curve by the *amount* like before – we have to consider the *difference* between the current *scale* value and the default *scale* value (i.e. 1). For example, let’s say that the current *scale* value is 1.2, and we set the *amount* to 0.5 – i.e. we want *half* of the transformation. Halfway between 1 and 1.2 is 1.1\. However, simply multiplying the animation curve’s value by the *amount* would give us 1.2 \* 0.5 = 0.6 which is not the right value in this case. Instead, we have to find the *difference* between the *scale* knob’s value and 1 (the default value), then multiply that *difference* by the *amount* to find the *scaled differenc*e. And finally, either add or subtract the result (i.e. the *scaled difference*) to/from 1, depending if the *scale* knob’s value was above or below 1\. To do that, add the following expression to the **scale** knob: ``` curve < 1 ? 1 - (1 - curve) * amount : 1 + (curve - 1) * amount ``` ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2026/02/Expression_Scale.png) *Adding the expression to the scale.* The expression above uses an **if/else** statement: First, it checks if the value of the baked animation curve on the current frame is less than 1: ``` curve < 1 ? ``` If it is, the expression will output 1 minus the *scaled difference*: ``` 1 - (1 - curve) * amount ``` If it’s not (*else*), the expression will output 1 plus the *scaled difference*: ``` : 1 + (curve - 1) * amount  ``` So, using the previous example, if the current *scale* value is 1.2 (which is **greater** than 1), and the *amount* is 0.5, the expression will output: ``` 1 + (1.2 - 1) * 0.5 = 1.1  ``` – Halfway between 1 and 1.2, as we would expect. Or, if the current *scale* value is 0.8 (which is **less** than 1), and the *amount* is 0.5, the expression will output: ``` 1 - (1 - 0.8) * 0.5 = 0.9  ``` – Halfway between 0.8 and 1, as we would expect. The *amount* value doesn’t have to be between 0-1 (0%-100%). You could scale the transformation by for example 2 (200%) using the exact same expression above. For example, if the current *scale* value is 1.2 (which is **greater** than 1), and the *amount* is 2, the expression will output: ``` 1 + (1.2 - 1) * 2 = 1.4  ``` – Which is twice as far away from 1 as 1.2 is, just as expected. Or, if the current *scale* value is 0.8 (which is **less** than 1), and the *amount* is 2, the expression will output: ``` 1 - (1 - 0.8) * 2 = 0.6  ``` – Which is twice as far away from 1 as 0.8 is, just as expected. The same logic applies to the expressions that we made in the **translate** and **rotate** knobs; multiplying by an *amount* greater than 1 (100%) will scale the baked animation curves’ values up accordingly. 💡 You could even scale the transformations by a ****negative** **amount*. For example, setting the **amount* to -1 would turn a match-move into a stabilisation, and vice versa. And so, by using these expressions together with the *amount* slider, we can now freely scale the transformations up or down to our hearts content. Which means, if you tracked some tracking markers at a nearby depth plane (e.g. a green screen), and you want to scale down the match-move to make your element appear further away, you could just reduce the *amount*. An *amount* of 0.8 would give you 80% of the original camera movement, and an *amount* of 1.2 would give you 20% more camera movement. So, you can adjust the *amount* value to dial in just the right amount of parallax for your element to sit into the scene. You can even **animate** the *amount*. This can for example be useful if you want to animate a stabilisation. Let’s say that there is a constant camera shake in your shot but you want the shot to start out smooth and ramp into the camera shake. You could stabilise the shot, and then animate the *amount* from 1 to 0 in order to animate the camera shake back on. Another way to scale a track is to use the [Warp Transformations In Nuke](https://www.keheka.com/warp-transform/) technique. – Disable the **Mask** section, and just adjust the **IDistort** node’s *UV scale* value to dial in the amount of transformation – just like we did before with the *amount* value. To get accurate motion blur, however, you’d have to use a technique [such as this one](https://benmcewan.com/blog/quick-tip-add-accurate-motion-blur-to-your-warps?ref=keheka.com), or use a **MotionBlur2D** node to generate motion vectors for a **VectorBlur**.(Remember to scale the *motion amount* value in the **VectorBlur** by the *UV scale* value in the **IDistort**). Yet another way for scaling the track is to use a **dissolve expression**: ``` First input’s values * mix + Second input’s values * (1 - mix) ``` In our case, the ‘first input’ would be the baked animation curve’s value, and the ‘second input’ would be the knob’s default value. And the ‘mix’ would be our *amount*. So, for the **translation** and **rotation**, the expression would become: ``` curve * amount + 0 * (1 - amount)  ``` which, because anything multiplied by 0 is 0, becomes: ``` curve * amount  ``` – the same as we saw before. For the **scale**, the expression would become: ``` curve * amount + 1 * (1 - amount)  ``` which, because anything multiplied by 1 stays the same, becomes: ``` curve * amount + 1 - amount  ``` – also, the same as we saw before. Earlier, it was just written as **1 + (curve - 1) \* amount**, which, when you work it out, becomes the above. And so, it turns out that we can simplify the whole if/else statement which we made for the *scale* value earlier, because this expression works both for when the baked animation curve's value is greater than 1 and for when it is less than 1\. By adjusting the *amount* slider like before, the expressions will scale the track. 💡 The dissolve expression is useful for many things, for example for [blending between cameras in Nuke](https://www.keheka.com/blending-between-cameras-in-nuke/). You could for instance blend between the original camera and a copy of the same camera but with all of its animation deleted, on the reference frame, in order to control the amount of camera movement as a percentage. And that wraps it up! I trust these techniques will make you more confident in creating and matching parallax in Nuke. I hope you found this tutorial useful. For more Nuke tips & tricks, see [Nuke](https://www.keheka.com/tag/nuke/). ## Sign up for the newsletter Get free Professional Compositing Tutorials right in your inbox Subscribe Email sent! Check your inbox to complete your signup. No spam or ads. Unsubscribe anytime. ### Creating Caustics In Nuke URL: https://www.keheka.com/creating-caustics-in-nuke/ Last updated: 2026-01-10T11:45:54.000Z ⭐ How to create a realistic caustics effect using positional data in Nuke… _This post is for paying subscribers only._ ### Is It Wet Or Is It Cold? URL: https://www.keheka.com/is-it-wet-or-is-it-cold/ Last updated: 2025-12-17T16:36:17.000Z *How to approach responding to conflicting or overlapping signals…* ## A Lack Of Senses Although we humans have [significantly more than the five classical senses](https://www.weforum.org/stories/2017/01/humans-have-more-than-5-senses/?ref=keheka.com), we don’t come close to possessing all of the senses (nor the strength/sensitivity of the senses) which can be found in the animal or plant kingdoms. We lack for example: - **Sonar** ([echolocation](https://youtu.be/qJOloliWvB8?si=dgJ3YJXp4isJWKMC&ref=keheka.com)) found in bats and in some species of moths, which allows for prey/predator detection and aerial navigation by the use of ultrasonic sound. - **Infrared vision** ([visual heat sensing](https://youtu.be/GsNr5IqW4eA?si=MfxkLLhmV0nizNTi&ref=keheka.com)) found in pit vipers, which lets them detect body heat signatures against cooler backgrounds – creating thermal images of warm-blooded prey (like rodents) or predators, even in total darkness. - **Infrasonic sensing** found in elephants, which allows them to [communicate seismically](https://youtu.be/iYM9oXftLIQ?si=Hask0jS3TlYngEgQ&ref=keheka.com) over long distances, or [detect impending storms](https://youtu.be/uQfDazQ9Rkg?si=4hTAxsAcspeFLh7Y&ref=keheka.com), by feeling deep rumbles through the ground and air. - **Ultraviolet (UV) vision** found in birds and bees, which allows them to forage and navigate by [seeing UV patterns](https://www.facebook.com/DiscoveryUK/videos/honey-bee-life-how-do-animals-do-that/391362926002721/) that are invisible to us; identifying and locating flowers that offer nectar and pollen. - **Magnetoreception** ([detection of magnetic fields](https://youtu.be/tdXb%5F4EkYtU?si=0iALi%5Fm1uyuar0cM&ref=keheka.com)) found in some birds, and in many sea creatures, which is used for navigation. - **Electroreception** ([detection of electrical fields](https://youtu.be/aja7G9RPEZ4?si=08ds8kTK8HKAtnW%5F&ref=keheka.com)) found in various species of fish, used for prey and predator detection. - **Chemical sensing** found in plants, which allows for [communication via volatile organic compounds](https://youtu.be/dytsx7NPQ3o?si=hK8B%5FYBz5tK6slgN&ref=keheka.com). – And, unlike many insects, we humans also lack [hygroreceptors](https://en.wikipedia.org/wiki/Hygroreception?ref=keheka.com). So we can’t directly detect changes in humidity and moisture – which means that we’re unable to directly sense *wetness*. 💡 Further reading on the topic can be found [here](https://pmc.ncbi.nlm.nih.gov/articles/PMC4843859/?ref=keheka.com), [here](https://www.southampton.ac.uk/news/2022/01/no-sweat.page?ref=keheka.com), and [here](https://pmc.ncbi.nlm.nih.gov/articles/PMC5384974/?ref=keheka.com). We can only determine whether something is wet or not by analysing contextual clues captured by our other senses, for example: - **Look**: Wet things are often more shiny (a wet road gives off more reflections, for instance), or you might see water droplets on the surface of an object, for example. - **Temperature**: Wet things often get colder (which is why it can be so dangerous to get wet in the snow). - **Texture**: Wet things might feel smoother or more wrinkly, depending on how they react to water. - **Friction**: Wet things may become more slippery. - **Pressure**: You can feel water running down your skin. - **Stiffness**: Wet things are often not as stiff, e.g. a soggy piece of cardboard or wet clothing. - **Colour**: Wet things might appear darker, for example a wet spot on your t-shirt. - **Weight**: Wet things, such as a wet cloth, will typically be heavier than when dry. You may have noticed your lack of a sense for wetness while for example air drying your laundry during winter: – It’s easy to mistake laundry that’s just cold for still being wet (at first). But by analysing further clues, your brain can determine if the laundry is, in fact, just cold. Just like how you might mistake cold laundry for being wet, it’s easy to mistake or confuse other things in life as well. Oftentimes, we misinterpret signals from our bodies or from our surroundings. And because of that, in order to help solve an issue it’s hugely beneficial to first pinpoint and clarify its source. ## Determine The Root Cause Before we attempt to solve a problem, it helps to find out what the problem *actually* is and where it’s coming from. Often, the first place to look for a cause is inwards. If you’re having a bad morning, is it really because everyone and everything is being annoying, or difficult, or ‘against’ you? – Or, could there instead be another reason? For instance: - Are you **tired**? Poor sleep and little rest can make anyone grumpy or feel down. - Are you **hungry**? ‘Hanger’ is a very real phenomenon. - Are you **stressed**? Have you taken on too much responsibility? - Are you **distracted**? Is there something that’s worrying you or weighing on your mind? - Are you too **hot** or too **cold**? Feeling uncomfortable can manifest a bad mood. - Are you **overstimulated**? Is there too much going on around you and you’re not taking enough breaks? - Are you **triggered** (without good reason)? Was someone actually being negative or were you just in a bad mood and implied an ulterior meaning/motive where there was none? - Are you **irritated**? Is there a stone in your shoe, or an equivalent to it? - Are your surroundings **messy**? A chaotic environment can make it difficult to focus. - Are you **tense**? Are you for example sitting in front of the computer all day with raised shoulders? – Or, are there any other areas that you can identify, in which a small or reasonable change would drastically improve your current situation? Of course, sometimes the source of a problem is indeed external, and you’ll have to deal with it appropriately. But often, you just need to fix yourself first: ## Meet Your Basic Needs During the safety briefing before a flight, the flight attendants will usually say something along the lines of: *In the event of a loss in cabin pressure, oxygen masks will drop automatically from the panel above your seat. \[…\] Please put on your own mask first, before helping others.* That last line is crucial. In the event of an explosive decompression where the pressure loss is sudden and complete, at higher altitudes, the period of effective consciousness is measured in *seconds* before the effects of hypoxia start to take hold. If you lose consciousness before you’re able to put on your own mask (but you got a mask on your five year old, for example), then your child or companion can’t help you. By helping yourself first, you stay conscious *and* you are able to help others. But you’re no good to anyone else if you pass out. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/12/Oxygen_Mask.jpg) *Put on your own oxygen mask first, before helping others.* In a (much less dramatic) sense, this applies to everyday life as well: If you’re often hangry, stressed, tired, and in a bad mood, the people around you will suffer. By not taking care of yourself, you’re being unfair to them. Looking after yourself first isn’t selfish, it’s critically important. By properly taking care of yourself, you can offer the best version of yourself – which is the best thing you can do for others. Being present as a friend, family member, student, teacher – or whatever it may be – bringing good energy and vibes, and having a positive impact on the world is going to make a real and tangible difference. And once you can confidently say that you have met your own basic needs – that you have genuinely done your part in improving your circumstances – you’ll typically find that everything isn’t as bad as you might initially have thought. You’ll see the world around you through a clearer and more positive lens. So, try to go bed at a reasonable time and get a good night's sleep, eat healthy food at regular times, get fresh air, see friends, get up and move/exercise, delegate work, take regular breaks, relax your shoulders, breathe, sing, dance, create – whatever helps you to become, and to maintain, the best version of yourself. So that you can give your best to others. And, if in doubt, ask yourself the equivalent question to ‘is it wet or is it cold?’. I hope you found this article useful. For more like this, see [Advice](https://www.keheka.com/tag/advice/). ## Sign up for the newsletter Get free Professional Compositing Tutorials right in your inbox Subscribe Email sent! Check your inbox to complete your signup. No spam or ads. Unsubscribe anytime. ### Warping & Morphing Images Using The SplineWarp Node In Nuke URL: https://www.keheka.com/warping-morphing-images-using-the-splinewarp-node-in-nuke/ Last updated: 2025-12-16T13:33:38.000Z ⭐ A deep dive into how to warp, blend, and morph between images using the SplineWarp node… _This post is for paying subscribers only._ ### The Power Of Making Micro-Adjustments URL: https://www.keheka.com/the-power-of-making-micro-adjustments/ Last updated: 2025-12-02T22:56:04.000Z *From fast paced decision-making to navigating plans long term, making multiple micro-adjustments is a powerful and effective strategy…* When you’re facing a great challenge or a large undertaking, it can become easy to feel overwhelmed, to get stuck, and even to abandon the task altogether. According to behavioural scientist Dr. Michelle Rozen, [only 6% of the 1,000 people](https://www.drmichellerozen.com/speaking-topics/the-6-percent-club/?ref=keheka.com) that she surveyed actually followed through on their New Year’s resolutions. Most dropped the ball within two months. Instead of attempting to make a huge change all at once, I’ve found that it can be better to make many *small* adjustments – little by little. Multiple micro-adjustments or micro-corrections that, *together*, result in a huge change. And I’ve found that making such incremental, compounding adjustments does wonders both when working towards short term targets and long term goals. Let’s look at some real world examples: ## The Fastest Car Around The Track In Formula One racing, speed and control are paramount. The F1 cars are some of the most advanced machines on the planet, and with their enormous power, tire grip, and downforce, they’re able to achieve incredible speeds, both in a straight line and around corners. 💡 An F1 car could theoretically drive upside down in a tunnel due to its immense downforce. And, there are people who are [attempting this in real life](https://driver61.com/formula-one/project-inversion-driving-f1-car-upside-down/?ref=keheka.com). Others have already achieved [upside down driving](https://mcmurtry.com/upside-down-driving/?ref=keheka.com) by using customised downforce systems. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/11/McLaren.jpg) *McLaren’s 2025 F1* race *car.* These machines are ferocious beasts, and only twenty of the best drivers in the world (ten two-man teams) get to race them in the Formula One World Championship. In most races, and especially on narrow circuits like in the Monaco Grand Prix where it’s difficult to overtake, gaining pole position (starting in first place at the beginning of the race) is highly advantageous. To get pole position, however, you have to be the fastest car around the track in qualifying. (\*There are also other factors influencing who gets pole). Which means, a driver has to squeeze every ounce of power and grip out of their car in order to get the quickest lap time. To do that, the drivers make continuous, minute steering and throttle adjustments – maintaining the car on the absolute limit of tire grip; compensating for changing track conditions; and controlling oversteer or understeer – as they fly around the track at breakneck speeds. This ability to consistently operate on the ‘edge of disaster’ – at the very limit of both the driver’s and the vehicle’s capabilities – is a key factor that separates the professional drivers from the amateurs. Pay for example close attention to the steering wheel in the hands of Lando Norris as he sets the lap record in Monaco: ([*Watch on YouTube*](https://youtu.be/%5F5Lr6fDIZG8?ref=keheka.com) – Formula One Management doesn't allow video embedding). It's almost never completely still: Norris is constantly making micro-adjustments to get the most performance out of his car. Here is a another, slow-motion example from go-karting which shows the same principle: [LUCAS DI GRASSI on Instagram: “Steering micro corrections When driving a race car at the limit with neutral balance, micro corrections will keep you aligned with the optimum trajectory and speed. This is hard to teach as it is related to subconscious controls. But I’m trying to pass this knowledge down to Leo in every session we go together. Never forget: PRACTICE DOESNT MAKE PERFECT. PERFECT PRACTICE MAKES PERFECT.”lucasdigrassi on September 20, 2025: “Steering micro corrections When driving a race car at the limit with neutral balance, micro corrections will keep you aligned with the optimum trajectory and speed. This is hard to teach as it is related to subconscious controls. But I’m trying to pass this knowledge down to Leo in every session we go together. Never forget: PRACTICE DOESNT MAKE PERFECT. PERFECT PRACTICE MAKES PERFECT.”.![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/icon/De-Dwpd5CHc.png)Instagram![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/thumbnail/551364801_1432465875065038_8904959567131106819_n.jpg)](https://www.instagram.com/reel/DO1JFI1jcrP/?ref=keheka.com) Even though the overall motion/turning is smooth, there is a lot more going on when we take a closer look. – I.e. *smooth* doesn’t always look smooth at a zoomed in or slowed down level. There are many small adjustments along the overall smooth path. And while each small change doesn’t necessarily have a massive impact, together, the aggregate of all of the small changes is what makes the difference. There is a compounding effect: ## 1% Better At Every Tiny Thing In the book *Atomic Habits*, James Clear wrote about the monumental turnaround of British professional cycling that began in the early 2000’s. After nearly a century of mediocre results for British riders at both the Olympic Games and the Tour de France, the governing body for professional cycling in Great Britain, *British Cycling*, wanted to change the poor trajectory that they were on. And so they hired Dave Brailsford as the new performance director. Brailsford had a relentless commitment to a strategy he called ‘the aggregation of marginal gains’, which is the philosophy of searching for a tiny margin of improvement in everything you do. The basic principle is that if you break down everything you can think of that goes into riding a bike, and then improve each thing by 1 percent, then you will achieve a *significant* performance increase in total. So the team began making small adjustments in every area. For example: - They redesigned the bike seats for better comfort. - They rubbed alcohol on the tires for better grip. - Riders wore electrically heated overshorts to maintain ideal muscle temperature. - Riders wore biofeedback sensors so that the team could monitor how each athlete responded to a particular workout. - The team tested different fabrics in wind tunnels to make the riders more aerodynamic. - They tested different types of massage gels to find the one providing the fastest muscle recovery. - They hired a surgeon to teach each rider the best way to wash their hands in order to reduce the chances of catching a cold. - They found the type of pillow and mattress that gave each rider the best night’s sleep. - They painted the inside of the team truck white to better spot dirt and dust that could degrade the performance of the finely tuned bikes. Together with hundreds of other small changes that they made, these (by themselves) little adjustments led to massive performance gains. And, only five years later, the British cycling team dominated at the 2008 Olympic Games in Beijing, winning over 60 percent of the gold medals available in the road and track cycling events. This marked the beginning of a period of complete domination for Great Britain that would last until the 2020 Summer Olympics. The British team claimed 21 of the 30 gold medals awarded in the velodrome over the next three Games – 70% of all gold medals on offer. Just one of the small 1% adjustments individually wouldn’t have gotten them to that point. It might not even have been *noticeable*. Instead, it was the aggregate of the many tiny advantages they gained which led the team to victory after victory. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/11/1_Percent_Every_Day.jpg) *The power of tiny gains. The gap between people who make 1% better and 1% worse choices widens over time.* Stacking up small victories over and over will eventually lead to bigger and bigger accomplishments. Even just a few small advantages can have a large and lasting impact: ## Small Advantages Lead To Big Wins [Scientists have analysed](https://www.science.org/doi/10.1126/science.1243092?ref=keheka.com) over half a million trees in the Amazon rainforest, and estimate that there are around 16,000 tree species there in total. Despite this great number of different species which create a remarkable diversity, just 227 *hyperdominant* species – or 1.4% of the total – account for **half** of all trees in the rainforest. Part of that dominance could be caused by a potential widespread human cultivation before the 16th century, but another compelling hypothesis is pointing to *competitive superiority*. Let’s look at what happens organically when species of trees compete in the wild: When two different sprouts grow next to each other, they will have to compete for sunlight, soil, and nutrients each and every day. If one of the sprouts can grow just a little bit faster than the other, then it’s able to stretch taller, catch more sunlight, and soak up more rain. The next day, this additional energy allows the sprout to grow even more. The same pattern continues, and as the two sprouts grow into saplings, the stronger sapling starts crowding the other one out. And, by taking the lion’s share of resources, it grows into a stronger tree as it matures. From this advantageous position, the winning tree has a better ability to spread seeds and reproduce, which gives the species an even bigger footprint in the next generation. This process gets repeated over and over until the trees that are slightly better than the competition dominate the forest. Scientists refer to this effect as ‘accumulative advantage’. What starts as a small advantage gets bigger over time. One tree only needs a slight edge in the beginning to crowd out the competition and take over most of the forest. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/11/Euterpe_precatoria.jpg) *Euterpe precatoria, a hyperdominant palm tree species in the Amazon rainforest.* Some initial advantages in life may be purely luck-based, such as the time of year that you were born which may have an [impact on your sporting success](https://www.bbc.co.uk/sport/olympics/18891749?ref=keheka.com). However, like with the British cycling team, many advantages can be manufactured by making small adjustments. You can create advantages for yourself. Not necessarily one big one, but definitely several small ones which when combined will have a large effect. ## The Bottom Line It’s too easy to overestimate the importance of a single defining moment, and underestimate the value of making small improvements on a daily basis. If you’re feeling stuck or overwhelmed when facing a large undertaking, start by improving one small thing. What’s the smallest challenge that pushes you slightly outside your comfort zone? That could be your launchpad. Make a 1% change for the better in just one area. Then, another. You won’t notice a big difference at first, but keep adding up the 1% changes and, before you know it – just like Lando Norris, the British cycling team, and the Euterpe precatoria did – you’ll be winning big. 💡 PS: When making an adjustment, be aware of your surroundings and the wider context: Look out for things that ‘break’, or will likely break later on based on your actions, and adjust accordingly – counter balance and course correct as needed. I hope you found this article useful. For more productivity tips & tricks, see [Productivity](https://www.keheka.com/tag/productivity/). ## Sign up for the newsletter Get free Professional Compositing Tutorials right in your inbox Subscribe Email sent! Check your inbox to complete your signup. No spam or ads. Unsubscribe anytime. ### The Three Levels Of Time And Productivity URL: https://www.keheka.com/the-three-levels-of-time-and-productivity/ Last updated: 2025-10-25T11:02:15.000Z *Taking notes from the Ancient Greek deities of Time can help increase your productivity…* Throughout history, time has been an important subject of study in religion, philosophy, and science. Temporal measurement has occupied scientists and technologists, and has been a prime motivation in navigation and astronomy. Time also has significant social importance, with both economic value (i.e. *time is money*) and personal value (i.e. *carpe diem*), due to an awareness of the limited time we have in each day and in our human lifespans. Time is embedded into everything we do, and a key pillar for being productive is to manage our time properly. But there are layers to it – different aspects of time to be aware of – so let’s take a closer look at time in order to understand how we can increase our productivity: ## Time Is Subjective Our experience of time is such an interesting thing. Depending on what you’re doing, minutes can feel like hours, or hours can feel like minutes. Or, depending on your age, a year can feel like a really long time, or like a really short time. – It’s 20% of a five year old’s life, but only 2% of a 50 year old’s life, for instance: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/Subjective_Time_Edit_Denoise.jpg) *Subjective time.* Your level of focus and awareness also changes your [perception of time](https://en.wikipedia.org/wiki/Time%5Fperception?ref=keheka.com) and your interactions with it. For example, as the saying goes, *a watched pot never boils*. And you’ve probably experienced [chronostasis](https://en.m.wikipedia.org/wiki/Chronostasis?ref=keheka.com) in the form of the ‘stopped-clock illusion’ – where the second hand or digits of a watch appear to stay still for longer than normal when first observed following a [saccade](https://en.wikipedia.org/wiki/Saccade?ref=keheka.com). Time perception is not the same across species, either. Animals have different perceptions of time to us, depending on their [pace of life](https://www.sciencedaily.com/releases/2013/09/130916102006.htm?ref=keheka.com) and [metabolic rate and body size](https://pmc.ncbi.nlm.nih.gov/articles/PMC3791410/?ref=keheka.com). Some species also process visual input much faster than us humans, for example many birds: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/Human_Vs_Bird_FPS.jpg) *The flight paths of two blue bottle flies sampled from high speed videos, showing the time resolution at 40 frames per second (the typical human visual speed) vs. 120 frames per second (the typical avian visual speed).* In the same space of time, birds *see* more. They capture and process more visual information. It’s why pigeons often wait until the last moment to fly out of the way of an oncoming car or bicycle: it appears much less fast to them than to us. And, if computers ever become sentient, to *them*, communicating with us humans might feel agonisingly slow and painful. A computer processes information billions of times per second, so waiting for a human to reply may make a simple interaction feel the same way to them that waiting for years between each message would feel to us. 💡 In the movie **Her* (2013), ****\[SPOILER\]** Samantha, an AI operating system who mutually falls in love with the main character Theodore, reveals that she is [simultaneously speaking with 8316 other people](https://youtu.be/Ku858jn0Qzc?si=gUFLE9q5RYcyozUx&ref=keheka.com) and has fallen in love with 641 of them. If you think about it, she has a ridiculous amount of excess ‘brain power’ and speed compared to a human brain, and so communicating only with Theodore might have been a quiet, lonely life with large gaps of emptiness, from her perspective. The time frames you work with may also vary wildly depending on your profession. A Formula 1 driver or a 400m sprinter might focus on shaving a few hundredths of a second off of their lap time, but an arborist might plan a reforestation a whole century into the future. Other professions might work with even smaller time frames, like computer scientists who could be dealing with nanoseconds. Or, with much longer time frames, like palaeontologists or geologists who study life and Earth’s history and processes for millennia, mega-annums, and even giga-annums into the past. 💡 [Time dilation and relativity](https://en.wikipedia.org/wiki/Time%5Fdilation?ref=keheka.com) also adds another layer of complexity to time, which must be taken into account in for example satellites and GPS systems. Time, as we think of it, is naturally also very Earthbound in practice. One day equals one full rotation of the Earth around its axis with respect to the Sun, and one year equals one full orbit of the Earth around the Sun, for example. A day on Mars, a [*sol*](https://en.m.wikipedia.org/wiki/Mars%5Fsol?ref=keheka.com), is about 24 hours and 39 minutes – nearly the same as a day on Earth. That’s because Mars happens to rotate around its own axis at a similar rate to the Earth. But it takes longer for Mars to orbit the Sun than it does for the Earth, and so a year on Mars is about 687 Earth days, or nearly two Earth years. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/Mars_Sunset.jpg) *Sunset on Mars. (The blue colour is due to fine dust suspended in the atmosphere which scatters more red light, allowing blue light to pass through more directly to the observer at sunset).* (In the same way, all the planets in our solar system have different durations of their respective days and years. And, if we lived on Venus, which doesn’t have a moon, we probably wouldn’t have the same concept of a month). All this to say, time isn’t necessarily just one simple thing. In fact, there are different ways to think about time: ## The Greek Gods Of Time The Ancient Greeks distinguished between three different concepts, or aspects, of time – each represented by an archaic deity. ### 1\. Aion **Aion** represented perpetual, unbounded, and cyclical time. As the ontological personification of eternity, Aion symbolised the cycle of the year (i.e. the seasons) and the zodiac. It’s where we got the word *aeon* (or eon) from, meaning a period of time that is so long that it cannot be measured. Other meanings for Aion include age, life, vital force, or lifetime \[e.g. of the cosmos\]. And also, the Latin word *aevum* (meaning age, time, or eternity), which evolved into *aeviternus* → *aeternus* → *aeternalis*, and, adopted over into English: *eternal*. (The term *medium aevum* also evolved into *medieval*, i.e. *middle age*). 💡 In astronomy, an aeon is defined as one billion years. In geology, an aeon ranges from several hundred million years to two billion years, and a **super-aeon* is the largest ‘unit’ of time, composed of aeons. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/Aeon.png) *Geochronologic units.* While Aion can mean immeasurable time, a modern Greek variation of the word, *aiónas*, has come to mean *century*. And, together with other interpretations of Aion; *age*, *life*, and *lifetime*, we can think of Aion as representing a **long time**. – A time of megatrends; those powerful demographic, societal, economic, and technological currents that seem unstoppable at the scale of generations. Those trends which may require a long term perspective and consideration to grasp, at least initially. I.e. it’s the big picture. The North Star. And, importantly, it’s about asking the big question: What is the **right thing** (for me) to be doing? The concept of Aion can motivate us to operate with a longer time horizon, and to follow our own compass to take steps towards a grander, overarching goal. ### 2\. Chronos **Chronos** represented chronological, or sequential, time. – I.e. the empirical, historical, linear, and progressive flow of time – divided into the Past, Present, and Future. The *quantitative* time, which we’re the most familiar with, and usually refer to today. It’s the base for words such as synchronise, chronic, chronicle, chronological, or chronometer (and even our Nuke node Kronos!) – all relating to measured time in some way. Chronos is the time frame in which to build towards, and act on, the megatrends of Aion. It’s the time for all of the consistent effort, development, and hard work that you’re capable of, and for asking the question: What’s the **right way/order** of doing things? Can you sequence tasks or information in a meaningful and useful way to achieve a better outcome? Can you keep showing up, and continue creating? The Pyramids, or the Great Wall of China, were built one stone at a time, over a long period of time. There was an overarching goal, and many small steps were required to reach it. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/Great-Wall-of-China.jpg) *A section of the Great Wall of China.* Similarly, if you want to play in a world class orchestra, there are many steps you need to take – years and years of consistent practice – in order to get to that point. Chronos is the time for that diligent preparation – for the work that’s required to seize the next aspect of time: ### 3\. Kairos **Kairos** represented the moment of opportunity. A fleeting moment associated with luck and favour – i.e. a *qualitative* time; the right or critical time to act. Kairos embodied the precise timing of a decision or action to achieve the best outcome. In his medical treatise, *Precepts*, the Greek physician Hippocrates stated: “Every kairos is a chronos, but not every chronos is a kairos.” – While all opportune moments (kairos) exist within chronological time (chronos), not all chronological time presents an opportunity (in this case, for healing). Time is that wherein there is opportunity, and opportunity is that wherein there is no great time. Imagine an hourglass: the Present can be thought of as existing in between the top bulb (the Future) and the bottom bulb (the Past) of the hourglass (the Time Frame) – right where the sand passes through the neck: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/Hourglass.jpg) *A way to think about the sand inside of an hourglass.* Now imagine there are some small specks of gold mixed in with the sand. Most of the time, only sand will be passing through the neck, i.e. the present moment. But every once in a while, a gold flake will pass through – a golden opportunity. Kairos is about recognising and seizing that golden opportunity. – Grabbing hold of the gold flake right at the brief moment it’s passing through. It’s about answering the question: When is the **right time** to be doing things? – It’s about being aware of your surroundings, and striking at the right moment. And so, **Kairos** within **Chronos** within **Aion** can represent a **moment** within a **time frame** within **life/a long time**, respectively. And, (in the opposite order) we can have them symbolise doing the **right thing**, in the **right way** (or in the **right order**), at the **right time**: ## Time & Productivity I’ve mentioned [before](https://www.keheka.com/how-to-get-hired-as-a-compositor-part-8-excel-in-your-new-role/) that I’ve got a simple formula for being productive, called *The Three Musketeers of Productivity*: **Productivity = Effectiveness x Efficiency x Timing** In other words, to be productive, you rely on: 1. **Effectiveness**: Doing the **right thing**. 1. **Efficiency**: Doing things the **right way** (or in the **right order**). 1. **Timing**: Doing things at the **right time**. You have to perform well on all three points, as lacking in any one of them will make your productivity suffer. Each of them is a multiplier, which means they all have a significant individual impact on the whole. Doing the wrong thing, and/or doing things the wrong way or in the wrong order, and/or doing things at the wrong time, will each and all end up with the same result: you’ll likely see significant delays or a failure to deliver. So, unite your musketeers; one for all, all for one! 1. Keep a clear overview with **Aion**: Think long term about what the **right thing** to be aiming towards is, and build up your knowledge in support of that. Even when you’re no longer in school, stay an eternal student. Never stop learning. There are constant cycles and waves of new information, and you must keep an eye on the technological currents that are flowing. (AI could be one of those, for example – there is significant investment behind AI, and it’s gaining traction in many areas). 1. Organise and sequence your work within **Chronos**: Consistently add to, and improve your implementation of, the knowledge that you’ve acquired over time. It’s about regularly showing up, putting in [the *quantity* of reps](https://www.keheka.com/your-wastebasket-isnt-full-enough/), and focusing on doing the right things the **right way**/in the **right order**. 1. Recognise the opportunities in **Kairos**: Hone your ability to prioritise when to implement which parts of your knowledge. It’s about the *quality* of the moments, and seizing the right opportunities at the **right time**. (Observe signals and trends over time to better spot when a great opportunity arrives). 💡 Beware of those who try to sell you a fast and cheap solution. Remember [The Iron Triangle](https://www.keheka.com/the-iron-triangle/): Fast, Cheap, Good – pick two. Exceptionally good things usually take a long time to develop because it’s prohibitively expensive and sometimes impossible or impractical to do them quickly. There is a famous quote, often attributed to the Roman philosopher Seneca: **Luck is when preparation meets opportunity.** You have the power to do the work, and to prepare. And, eventually, an opportunity will arrive. Which means, you can generate your own ‘luck’. – And if you succeed after failing more times than another person has even tried, would it even be accurate for that person to call you lucky? Guided by your overarching goal, do the reps, as many as you can, and that preparation will help you win when the right moment strikes. 💡 Kobe Bryant famously used to arrive early to basketball practice, and did hundreds of extra practice shots compared to others. And so, when the opportunities to take a shot arrived in the game, all of his preparation meant he could consistently seize the opportunities and score. **Aion** → **Chronos** → **Kairos**: Keep doing the **right thing**, the **right way**/in the **right order**, at the **right time**, and your increase in productivity will be undeniable. I hope you found this article useful. For more productivity tips & tricks, see [Productivity](https://www.keheka.com/tag/productivity/). ## Sign up for the newsletter Get free Professional Compositing Tutorials right in your inbox Subscribe Email sent! Check your inbox to complete your signup. No spam or ads. Unsubscribe anytime. ### What If Icarus Had Flown Too Low? URL: https://www.keheka.com/what-if-icarus-had-flown-too-low/ Last updated: 2025-10-15T21:03:04.000Z *Changing your perception of risk…* ## Echoes Of The Past In Greek mythology, there is a vast web of interconnected stories that links characters, gods, events, and family lines together. Many of the myths serve as prequels or sequels to others, explaining the origins and consequences of major events like the Trojan War or the relationships between gods and mortals. A number of the stories continue to hold relevance today, and elements from them have made their way into our modern language in the form of idioms that contain warnings or advice. One of them is the idiom ‘**don’t fly too close to the sun**’ from the myth of Icarus, which essentially means to avoid recklessly defying one's limits and overreaching oneself; becoming overly ambitious or greedy; or reaching for something unattainable or unachievable. But there’s more to the story, so let’s take a closer look at this particular myth: ## The Fall Of Icarus Icarus was the son of Daedalus, who was a master craftsman. After a series of events (see: [Perdix](https://en.wikipedia.org/wiki/Perdix%5F%28mythology%29?ref=keheka.com) & [Athena](https://en.wikipedia.org/wiki/Athena?ref=keheka.com#Punishment%5Fmyths) → [Minos](https://en.wikipedia.org/wiki/Minos?ref=keheka.com) & [Poseidon](https://en.wikipedia.org/wiki/Poseidon?ref=keheka.com#Theseus) → [Cretan Bull](https://en.wikipedia.org/wiki/Cretan%5FBull?ref=keheka.com) & [Pasiphaë](https://en.wikipedia.org/wiki/Pasipha%C3%AB?ref=keheka.com) → [Minotaur](https://en.wikipedia.org/wiki/Minotaur?ref=keheka.com) & [Labyrinth](https://en.wikipedia.org/wiki/Labyrinth?ref=keheka.com) → [Theseus](https://en.wikipedia.org/wiki/Theseus?ref=keheka.com) & [Ariadne](https://en.wikipedia.org/wiki/Ariadne?ref=keheka.com)), both father and son were imprisoned by King Minos on the island of Crete. To escape from the prison, Daedalus fashioned wings for the two of them using (among other things) molted feathers and beeswax. Before embarking on their escape across the sea, Daedalus warned Icarus not to fly too low – or the seaspray would soak the feathers and ruin the lift in his wings. And likewise, not to fly too close to the sun – or the heat would melt the wax that was holding the wings together. Exhilarated by achieving flight, Icarus famously didn’t follow his father’s advice and flew too close to the sun. The wax melted off of his wings and they fell apart, causing Icarus to plummet into the sea and drown. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/Icarus.jpg) *Jacob Peter Gowy's ‘The Fall of Icarus’ (1635–1637).* 💡 Side note: it’s quite poetic that Daedalus – whose victim of attempted murder (Perdix) was saved from a fall to the death by being transformed into a bird – ends up losing his own son, Icarus – whose life he attempted to save by giving him wings like a bird – to a fall to the death. And that is how the story is remembered. Icarus flew **too high** – and his reckless defiance and overambition caused him to pay the ultimate price. However, let’s not forget that his father also warned Icarus not to fly **too *low***. Soaking his wings and crashing into the middle of the sea would ultimately have led Icarus to the same fate. He would still have drowned, miles and miles away from any land. Which, using the same analogy, means that playing it far too safe might be equally harmful. In fact, flying too low could even be *more* dangerous than flying too high, because it feels deceptively safe. Taking *no* risk can actually be risky. Even if you fly so low that you survive the fall into the sea, you’ll still be too far away from land. You need to take to the air to make it across. By not stretching your wings and soaring properly through the skies, you’ll both lose out on experiencing the thrill of flight *and* fall short of your goal. And so, *some* risk is necessary to reach your potential. Sure, flying too high may end in a spectacular failure, and it’s fair to warn against that. But fly too low, and you’ll inevitably crash and burn in mediocrity. Maybe we need to adopt an additional idiom from the myth of Icarus: ## Don’t Fly Too Close To The Sea Playing things too safe almost guarantees a poor or dull outcome, and a wasted opportunity. – That’s probably even a universal truth: - The most boring sports games are those where a team is just [running out the clock](https://en.wikipedia.org/wiki/Running%5Fout%5Fthe%5Fclock?ref=keheka.com). The victory that the team secures becomes less deserved because of it. - When travelling abroad and visiting a different culture, eating only at McDonald’s might be a safe option, but it would rob you of exploring new flavours, textures, and human connections. - When setting aside money for the future, placing it in a standard savings account or government bonds is very low-risk but offers minimal returns, often barely keeping pace with inflation. - Continuing in a low-stress, unchallenging position might provide a predictable income and job security. However, you'll lose out on the opportunity for career advancement, higher pay, or personal growth that could come with taking on more demanding roles or starting your own business. - Living a highly structured and predictable daily life can minimise surprises and anxiety. The consequence, though, may be a monotonous existence that lacks new experiences and unexpected joys. - Not facing uncomfortable discussions can lead to stable but stagnant relationships. The lack of risk-taking prevents a genuine connection and the resolution of underlying issues, which in turn can lead to superficial or emotionally distant bonds. And there are many, many more examples where the same applies. It’s definitely true when it comes to creative endeavours, because meaningful art involves creative risk-taking. Just look at something as fundamental as brainstorming: the first few ideas are probably going to be a bit dull – so you have to keep going. Don’t settle for mediocrity when greater ideas often can be found just around the corner of effort. The first plan, the first design, the first model, the first render, the first look – the first version(s) of anything – they’re just stepping stones to your destination. One of the reasons that Pixar movies have been so hugely successful, is because the team iterates on and refines the story hundreds of times until it trulyworks, and *then* goes on to animate the movie: That means, hundreds of versions were rejected to get to that point. However, that doesn’t mean those versions were a waste of time to make. On the contrary, they all played a part in honing in on the final one. Even outlandish versions might have sparked a new idea, or served as a clear marker of a direction *not* to head in – of what *doesn’t* work. And so, rejection in this context isn’t the end, or even some big, scary thing: ## Stop Fearing Rejection Rejection is a part of the creative process – it just means you’re currently on a stepping stone and haven’t reached your destination yet. It shouldn’t stop you from embracing (at least some) risk and from avoiding the deception of playing it safe. And, importantly, remember to not take rejection personally. When you receive client or supervisor notes, think of them as ‘us against the problem’, and not in any way directed at your level of skill or taste. Try to read them objectively. They're about course correcting and guiding your work to shore. – About finding the right cruising altitude for your Icarus to make it across the sea. A part of that means pushing boundaries to avoid a dull creation. And when you take more risks, you open yourself up to more rejection. However, ultimately, both you and your work will benefit from it. So, don’t always take the easy or safe route. Chances are you won't find any safety that way, anyway. Because by not taking any risks, you may be risking everything. **Don’t fly too close to the sea.** I hope you found this article useful. For more like this, see [Advice](https://www.keheka.com/tag/advice/). ## Sign up for the newsletter Get free Professional Compositing Tutorials right in your inbox Subscribe Email sent! Check your inbox to complete your signup. No spam or ads. Unsubscribe anytime. ### Creating Iridescence In Nuke URL: https://www.keheka.com/creating-iridescence-in-nuke/ Last updated: 2025-10-11T20:44:12.000Z *How to emulate iridescence using hue remapping on a modified facing ratio pass…* The topic of this tutorial was suggested by a [Companion](https://www.keheka.com/companions/): ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/Suggestion-1.jpg) ## Iridescence Iridescence is an optical phenomenon where the surface of an object appears to gradually change colour (hue) as the angle of observation or the angle of illumination changes. It’s a shimmering, rainbow-like effect caused either by the interference of light waves within [multilayered microstructures](https://en.wikipedia.org/wiki/Structural%5Fcoloration?ref=keheka.com) on the object’s surface or within [thin films](https://en.wikipedia.org/wiki/Thin-film%5Finterference?ref=keheka.com) (such as oil), or by the dispersion of light through a [diffraction grating](https://en.wikipedia.org/wiki/Diffraction%5Fgrating?ref=keheka.com). 💡 The term iridescent is often used interchangeably with nacreous, opalescent, metallic, or pearlescent. We humans produce a wide range of objects which have iridescent effects, for example soap bubbles, pearlescent car paint, diffraction gratings for multispectral LIDAR systems, oil spills, or jewellery: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/Soap_Bubble.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/Car_Paint.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/DIffraction_Grating.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/Oil_Spill.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/Jewellery.jpg) *Examples of man-made/-assisted iridescence: (1) Soap bubble. (2) Pearlescent car paint. (3) Diffraction gratings. (4) Oil spill. (5) Jewellery.* Not only that, iridescence also appears in nature. Take for instance the exoskeletons (i.e. shells) of several types of beetles: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/Rainbow_Stag_Beetle.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/Atlas_Beetle.png) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/Jewel_Flower_Beetles.jpeg) *(1) Rainbow stag beetle. (2) Atlas beetle. (3) Jewel flower beetles.* [Scientists have found](https://news.vt.edu/articles/2021/06/eng-research-beetle-shell-062021.html?ref=keheka.com) that the shells of such beetles contain microstructures with alternating material compositions, which selectively reflect light of certain colours, causing iridescence. We can also see iridescence appearing in other insects such as [butterflies](https://en.wikipedia.org/wiki/Morpho%5Fmenelaus?ref=keheka.com), in [clouds](https://en.wikipedia.org/wiki/Cloud%5Firidescence?ref=keheka.com), in [fish](https://www.bbc.co.uk/newsround/64945381.amp?ref=keheka.com), and in birds, leaves, crystals, shells, and many other types of flora and fauna: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/Broadbilled_Hummingbird.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/Begonia_Pavonina.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/Mexican_Burrowing_Python.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/Mother_Of_Pearl.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/Bismuth.jpg) *Examples of natural iridescence: (1) Broadbilled hummingbird. (2) Begonia Pavonina. (3) Mexican burrowing python. (4) Mother of Pearl. (5) Bismuth crystal.* And so, you may encounter projects where you'll have to emulate an iridescent effect. 💡 The movie [Annihilation (2018)](https://en.wikipedia.org/wiki/Annihilation%5F%28film%29?ref=keheka.com) made heavy use of iridescence to portray the ‘Shimmer’, a mysterious quarantined zone of mutating plants and animals caused by an alien presence. Before we dive into how to build the effect in Nuke, let’s break it all down: 1. Iridescence **alters the *hue*** of the surface of an object. We still see **specular highlights** and **reflections** along with **occlusion** and **shadows** in the presence of iridescence – iridescence **mixes in** with these effects. 1. The range of colours of **natural iridescent objects** can be narrow, for example shifting between **two or three colours** as the viewing angle changes. I.e. we may not see the whole rainbow of colours in the iridescence. 1. In the case of **diffraction**, the **entire rainbow of colours** will typically be observed as the viewing angle changes. 1. Iridescence is **highly dependent on the viewing angle**, i.e. the angle between the surface of the object and the camera. **Different colours** will typically show on surfaces facing the camera vs. surfaces that are at a glancing angle. 1. It’s also **highly dependent on the angle of illumination**, i.e. the angle between the surface of the object and the source(s) of light. **Different colours** will typically show on surfaces depending on where the lights are in the scene. 1. In real life, there is no such thing as perfect conditions. Surfaces won’t be perfectly uniform, and films won’t have the same thickness throughout – there will be imperfections. And so, there will be **variations in the iridescent colours**. For example, surfaces facing the same direction (i.e. they share the same viewing and illumination angle) **may not always share the same iridescent colour**. Keep these things in mind, and let’s move into Nuke. ## Creating The Effect In Nuke To create the effect in Nuke, we’ll make heavy use of the [lookdev techniques](http://julius-ihle.de/?p=581&ref=keheka.com) developed by Julius Ihle back in 2015\. His approach still stands the test of time, but hopefully I’ll be able to shed some more light on it, and add useful things to it. Already, we have some variables to consider when creating the effect: 1. The **range of colours** to display where the iridescence appears. 1. The **dynamic viewing/illumination angles**, which should be reflected in a **control matte**. 1. **Imperfections causing variations** in the iridescence, which should also be reflected in the **control matte**. ### Colour Gradient Like Julius described, Nuke represents hue in a 0-1 range, and values above 1 and below 0 repeat the hue pattern. We can visualise this using a **Colorspace** node, and converting an image with a 0-1 ramp in the red channel, and a value of 1 in the green and blue channels, from the **HSV** colour space to **Linear RGB**. HSV stands for Hue, Saturation, and Value. In this colour space: - **Hue** is represented by the **red** channel. - **Saturation** is represented by the **green** channel. - And, **Value** (brightness) is represented by the **blue** channel. So, converting an image with a 0-1 ramp in the red channel, and a value of 1 in the green and blue channels from the **HSV** colour space to **Linear** **RGB** will create a colour gradient with the entire spectrum of fully saturated colours, like this: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/HSV-RGB_Ramp.jpg) *Colour gradient with a linear ramp from 0 (left) to 1 (right) in the hue.* You can create the initial image any way that you like, for example by copying the **red** channel from a **Ramp** nodeto a **white Constant** node using a **Copy** node. Or, you could just use an **Expression** node, and do it all in one (plus make it dynamically fit any format!): ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/Ramp_Expression.png) *The properties of the *Expression* node.* The expressions to put in the node are: Red channel: ``` x/width ``` Green channel: ``` 1 ``` Blue channel: ``` 1 ``` 💡 ****x/width** simply makes a 0-1 ramp along the x-axis: dividing the current horizontal position value by the full width of the image. This makes the ramp dynamic, and able to accommodate any format. The initial image will look like this: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/RGB_Ramp.jpg) *A 0-1 ramp along the x-axis in the red channel, and a value of 1 in the green and blue channels.* Next, connect a **Colorspace** node to this image, and set the **input** to **HSV** and the **output** to **Linear** (RGB) in the **Colorspace** node's properties: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/Colour_Gradient_setup-1.png) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/Colorspace.png) *Adding a *Colorspace* node to convert the ramp into a rainbow gradient.* Okay, now we’ve got the full spectrum rainbow colour gradient which we saw above. However, we may want to choose a narrower range of colours from the gradient to display in our iridescent effect, and so we’ll need to be able to offset and limit the range of the gradient. We can do that by placing a **Grade** node in between the **Expression** node and the **Colorspace** node, and having it only affect the **red** channel (i.e. the **hue**): ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/Grade_Ramp.png) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/Grade_Ramp_Properties.png) *Adding a *Grade* node to customise the colour gradient.* 💡 Make sure to ****untick** **black clamp* in the ****Grade** node, so that the gradient can be correctly offset in a negative direction as well. And, the ****Grade** node should only affect the **red* channel (****hue**), so make sure to ****untick** the **green* and **blue* channels. By adjusting the **offset** in the **Grade** node, you can **shift the gradient left and right**. (Remember, values above 1 and below 0 repeat the hue pattern). And by adjusting the **multiply**, you can **compress or expand the gradient**, letting you hone in on the colours that you want in your iridescent effect. In the video below, I demonstrate how it works and hone in on a narrower, three-colour range: Now, with this little setup, we can swap out the **Expression** node for any input which has a 0-1 ramp/values in the red channel, and a value of 1 in the green and blue channels, and the setup will map the rainbow colours that we choose with the **Grade** node onto that ramp/those values. To create iridescence, we need a 0-1 control matte that represents the angle between the surface of an object and the camera. ### Control Matte Enter: [facing ratios](https://www.keheka.com/upgrade-your-light-wraps-using-facing-ratios/), a.k.a. the [fresnel pass](https://www.keheka.com/fresnel-reflections-in-nuke/). This pass contains exactly what we described above: a 0-1 matte that represents the angle between the surface of an object and the camera. You may get this pass in your CG renders from the lighting department. If not, follow the two links above to learn different ways of generating the pass yourself in Nuke. 💡 Depending on what your fresnel pass looks like, you may have to ****invert** the ****red** channel for the gradient colours to flow in the direction that you want. (A value of ****1** could either represent surfaces that are directly ****facing** the camera, or surfaces that are directly ****perpendicular** to the camera, it just depends on how it was set up). And, you may have to shuffle the ****green** and ****blue** channels to ****white** if they aren’t already a value of 1\. To better show how it all comes together, let’s use a render of a chain as an example: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/Chain_Plain.jpg) *Plain chain render.* The facing ratio matte for the chain looks like this: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/Chain_Facing_Ratio.jpg) *The facing ratio matte is white where the surfaces are facing the camera and black where they’re perpendicular to the camera.* To use it with our little setup, let’s shuffle white into the green and blue channels of the facing ratio matte: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/Chain_Fresnel_Pass.jpg) *Putting the facing ratio matte into the red channel and putting a value of 1 into the green and blue channels.* By connecting our setup to this, we get a (much too strong) iridescent effect which covers the surfaces of the chain: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/Chain_Iridescence_Raw.jpg) *The raw iridescence pass.* To tone down the effect into something more realistic, we can **Merge (multiply)** it into only the **specular AOVs** of our render, and leave the rest of the AOVs/beauty as they are. 💡 To learn more about compositing AOVs (a.k.a. render passes), please see [Professional CG Compositing In Nuke](https://www.keheka.com/professional-cg-compositing-in-nuke/). And, we can also use the facing ratio matte as a mask for that multiplication, so that the effect fades off towards the glancing angles: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/Chain_Iridescence_Uniform_Raw.jpg) *The raw iridescence pass multiplied into the specular AOVs of the chain render, masked by the facing ratio matte.* This looks a lot better. Let’s adjust the colours to a range we want by changing the **offset/multiply** in our **Grade** node: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/Chain_Iridescence_Uniform.jpg) *Changing the iridescent colours.* This looks quite nice, but the iridescent effect is still very uniform. Every surface that is facing the same way is receiving the exact same colour. ### Adding Variation We can break up this uniform look by **multiplying** some **noise** into the control matte (i.e. the fresnel pass/facing ratio matte) with a **Merge (multiply)**, just before the **Grade** node in our setup. This can be any noise, but it’s useful to use a noise that tracks with the object, especially when the camera or the object moves. You could for example use the [aPMatte](https://www.nukepedia.com/tools/blink/keyer/apmatte/?ref=keheka.com) gizmo, or a similar tool, together with a **Pref** pass to generate 3D noise that sticks to the object. Like Julius did, let’s make our own 3D noise from scratch so that we can customise it even more. Shuffle out the **Pref** pass from the render, and add an **Expression** node to it. We’re going to be mixing together two different noise functions: the **fBm** and the **random** function. From the [Nuke TCL Script Expressions](https://www.nukepedia.com/reference/Tcl/group%5F%5Ftcl%5F%5Fexpressions.html?ref=keheka.com) guide: The **fBm** function takes up to six arguments (parameters): **x**, **y**, **z**, **octaves**, **lacunarity**, **gain**. **fBm** stands for Fractional Brownian Motion. This is the sum of *octaves* calls to noise. For each of them the noise xyz point is multiplied by pow(lacunarity,i) and the noise output is multiplied by pow(gain,i). For normal use lacunarity should be greater than 1 and gain should be less than 1\. The **random** function takes up to three arguments (parameters): **x**, **y**, **z**. The function creates a pseudo random value between 0 and 1\. It will always generate the same value for the same x, y, and z. Calling *random* with no arguments will create a different value on every invocation. The y and z arguments are optional, and if missing, they are set to zero. So, let’s create some **fBm** noise, but instead of putting in values for the **lacunarity** and **gain**, let’s put in two **random** functions in order to create more variation in the noise. – Noise patterns within a noise pattern, if you will (or, noiception): ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/Expression_Noise_01.png) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/Expression_Noise_02.png) *Creating 3D noise based on a position pass.* At the top of the **Expression** node, I define the two random expressions: ``` noiseA = random(r,g,b)+offsetA ``` ``` noiseB = random(r,g,b)+offsetB ``` These will simply make a random number between 0 and 1 based on the red, green, and blue channel’s values (i.e. the position of the object), and add an offset to it. – I created two **Floating Point Sliders** named **offsetA** and **offsetB**, which let me adjust this offset more easily. 💡 Depending on your renders, your offsets and other values may need to be different in order to get the right look. Please experiment. Then, in the **red** channel, I added the **fBm** expression: ``` fBm(r,g,b,10,noiseA,noiseB) ``` – which creates the main noise pattern based on the red, green, and blue channel’s values (i.e. the position of the object), using 10 octaves (you could create another noise to drive this as well, if you like), and with the **lacunarity** and **gain** driven by the two **random** expressions. The green and blue channels are simply set to **1**. **Blur** the result of this to taste, and **Merge (multiply)** it with the control matte (i.e. the fresnel pass/facing ratio matte), just before the **Grade** node in our setup. 💡 The iridescence is very sensitive to changes in the control matte, so ****mix back** the multiplication of the noise by a lot. Sometimes, 5-10% is all that’s needed. Now, the iridescence has a more natural variation to it: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/Chain_Iridescence_Variation.jpg) *Adding some natural variation to the iridescence by using noise.* Obviously, I’ve gone for a quite strong, anodised metal look here. Typically, you’d mix back the iridescence further and constrain it more using the facing ratio matte. Have fun with it and experiment! I hope you found this tutorial useful. For more Nuke tips & tricks, see [Nuke](https://www.keheka.com/tag/nuke/). ## Sign up for the newsletter Get free Professional Compositing Tutorials right in your inbox Subscribe Email sent! Check your inbox to complete your signup. No spam or ads. Unsubscribe anytime. ### Creating A Thermal Imaging Effect In Nuke URL: https://www.keheka.com/creating-a-thermal-imaging-effect-in-nuke/ Last updated: 2025-10-02T07:38:22.000Z *How to emulate thermal imagery using gradient remapping…* The topic of this tutorial was suggested by a [Companion](https://www.keheka.com/companions/): ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/Suggestion.jpg) We’ll be creating three different styles of thermal imaging: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/Example_A.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/Example_B.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/Example_C.jpg) *The three styles of thermal imaging that we’ll be creating.* ## Thermography Thermal imaging, or *infrared thermography*, is a measurement and imaging technique in which a thermal camera detects infrared (IR) radiation – that is, heat – from the surfaces of objects. This radiation has two main components: the thermal emission from the object’s surface, which depends on its temperature and emissivity, and the reflected radiation from surrounding sources. The amount of radiation emitted by an object increases with temperature, and thermography allows us to capture and see the variations in this radiation. – Which means, we’re able to visualise the (relative) temperature of objects in the environment. In the resulting image, **a gradient of colours is mapped onto the various temperatures** in order to separate them visually: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/Thermograph_Gradient01.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/Thermograph_Gradient02.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/Thermograph_Gradient03.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/Thermograph_Gradient04.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/Thermograph_Gradient05.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/IR_Locomotive.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/Thermograph_Gradient06.jpeg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/Thermograph_Gradient16.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/Thermograph_Gradient07.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/Thermograph_Gradient08.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/Thermograph_Gradient09.jpeg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/Thermograph_Gradient10.png) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/Thermograph_Gradient11.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/Thermograph_Gradient12.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/Thermograph_Gradient17.png) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/Thermograph_Gradient14.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/Thermograph_Gradient15.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/Thermograph_Gradient13.jpg) *Examples of thermography: different colours are mapped onto the temperature values.* Thermography has a wide variety of use cases. It’s for example used for search and rescue missions, building inspections, health scans, wildlife monitoring, and for space, law enforcement, and military applications. For a variety of reasons, including high material and manufacturing costs, large sensor sizes, and strict military technology export [restrictions](https://en.m.wikipedia.org/wiki/International%5FTraffic%5Fin%5FArms%5FRegulations?ref=keheka.com), the resolution of thermal cameras is considerably lower than that of regular cameras. So, both consumer and professional thermal cameras (even many high-end models) will usually have a fairly **low resolution** – well below 1 Megapixels, and often as low as 160×120 or 320×240 pixels. 💡 It’s common to merge multiple thermal images together to create a higher (but often still relatively low) resolution final image. However, very high-end thermal cameras, such as ones used for military purposes, can reach resolutions of 2.5K x 2K (5 Megapixels) and higher. 📷 Some high-end thermal camera examples: [FLIR T1020](https://www.flir.com/en-gb/products/t1020/?ref=keheka.com), [Vayu HD](https://www.sierraolympic.com/product/vayu-hd/?ref=keheka.com), [ImageIR 10300](https://www.infratec-infrared.com/thermography/infrared-camera/imageir-10300/?ref=keheka.com), [The Crane](https://www.scd-infrared.com/products/crane/?ref=keheka.com). Consumer models will also typically capture images at a pretty **low frame rate**, often as low as 9 frames per second. However, high-end models can capture 60 frames per second and higher. So, while the different IR cameras essentially capture the same thing (heat differences), we’ve already got three variables to consider when creating the effect in comp, depending on which style you want to emulate: - Colour map (gradient) - Resolution - Frame rate The infrared spectrum also has some ‘quirks’ which you should know about, which affect IR cameras and the footage they can capture. - **Cannot see through certain barriers:** IR cameras cannot penetrate most glass, water, or dense fog/smoke, and are limited in the penetration of hard materials like thick clothing or curtains. The infrared waves can be blocked, scattered, or reflected. - **Sensitive to the environment:** High humidity, wind, rain, and heavy snow can also scatter or absorb IR radiation, affecting the image quality and accuracy. - **Reflective surfaces:** Shiny or reflective surfaces, like mirrors, ceramic tile, or stainless steel and other polished metals, can reflect infrared radiation, leading to distorted or false readings. It’s worth watching the following YouTube video, as it sheds a lot of light on how IR cameras react to the environment: *Exploring the world in infrared with a thermal camera.* Even though it’s just a guy filming his house, we can see plenty of examples of the limitations listed above. We can also see that warmer surfaces contacting cooler surfaces will often **leave a heat imprint** – like when he put his hand on the work bench. And, we can see that IR cameras can **dynamically scale/remap the output colours** to the available range of temperatures in the frame. – Similar to the auto-exposure function in regular cameras. Okay, let’s look at how we can emulate this effect in Nuke: ## Creating The Effect In Nuke While it’s possible to create this effect completely from scratch, it’s very useful to have some footage as a base for what will be the control matte. This can be anything, but the effect will obviously look best if it’s footage of something that fits with the theme of thermal imaging. For example, soldiers on a battlefield, a person on a mountain side (search and rescue), or similar scenarios. ### Footage For my examples, I will be using this footage from Pexels: [https://www.pexels.com/video/soldiers-of-special-forces-13721791/](https://www.pexels.com/video/soldiers-of-special-forces-13721791/?ref=keheka.com) The footage is in slow motion, but I’ll be speeding it up by 5x (to real time) to simulate a live thermal camera. In the footage, we can see soldiers entering and securing an area, with smoking flares on the ground. Which means, we already have two clear sources of heat: the soldiers, and the flares. So, we definitely want those to light up *hot* in our thermal image – and likewise with the surrounding areas which are receiving heat from the flares. While the rest of the ground, walls, and especially the outside should stay cooler. ### Technique Overview To create the thermal imaging effect, we’ll be using a clever technique called **gradient remapping**. Here’s a video which explains the technique in detail: Essentially, we can use the **STMap** node in Nuke to map a horizontal gradient of colours onto a control matte. Usually, the control matte will be based on your footage. Using a combination of luma keys and roto masks – and/or PMattes and Cryptomattes if you have CG renders – you’ll turn the coldest areas of the scene to pixel values near 0, and the hottest areas of the scene to pixel values near 1\. And, naturally, medium temperatures turn to a pixel value of around 0.5\. The colours in the gradient will then be mapped, from left to right, onto the 0-1 range in the control matte by the **STMap** node. So, for our effect, we’ll put cooler colours on the left side of the gradient. And, we'll make the right side of the gradient hotter. ### Gradient In some of the thermography example images that we saw earlier in the tutorial, they've (handily) included the colour gradients that were used for mapping the temperatures. To recreate these gradients in Nuke, we can use the excellent [Voronoi Gradient](https://www.nukepedia.com/tools/gizmos/colour/voronoi-gradient/?ref=keheka.com) tool. Below, I’ve created two gradients, each with 7 points, and coloured them to match the example gradients. The first gradient is more magenta-yellow: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/Gradient_A.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/Gradient_A_Voronoi_Properties.png) *The first gradient and its properties. (The Y positions of points 2-7 are all linked to the Y position of point 1, for easily shifting the whole gradient up or down).* The second gradient is more rainbow-like: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/Gradient_B.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/Gradient_B_Voronoi_Properties.png) *The second gradient and its properties. (The Y positions of points 2-7 are all linked to the Y position of point 1, for easily shifting the whole gradient up or down).* 💡 You’ll need to adjust both the point colours and the point positions based on your specific footage and control matte. Shifting a point’s position left or right will map the point colour onto a different value of grey in the control matte. So, you could for example put more green colour into the midtones by moving the green point closer to the centre (horizontally) of the frame. Next, let’s create the control matte: ### Control Matte Typically, you’ll want to give the viewer a good sense of what they’re looking at in the thermal image. And so, it’s a good idea to retain detail from the footage that you’re using. You can do that by using a luma key, or several luma keys keymixed together, as a base for the control matte. 💡 Depending on your footage, the luma keys may need to be ****inverted** to map the temperatures correctly. Using my example footage, I created inverted luma keys using **Keyer** nodes, and mixed them together using **Keymix** nodes. Each luma key created a hotspot (values near 1) for the soldiers and for the flares, while keeping the background and other cool areas at values closer to 0\. Next, I shuffled the **alpha** channel from these keys into **RGB**,as it’s easier to work with. Then, I went in and graded each key with custom roto masks to create hotter and colder spots in the image. For example, the flares and smoke weren’t getting hot enough (high enough grey values) from the luma keys, so I created some soft roto shapes for them and graded them brighter. The walls and ceiling were also getting too hot from the luma keys, so I graded them darker. The resulting control matte looks like this: In a real production scenario, I would refine the control matte further and target specific areas which should be hotter or colder, but this is plenty good enough for demonstration purposes. Next, let’s map the gradient onto the control matte. ### Remapping Create an **STMap** node, and connect the **src** input to the gradient, and the **stmap** input to your modified footage, i.e. the control matte. 💡 Use the gradient that you prefer for your effect. Next, set the **UV channels** to **rgb** in the **STMap** node’s properties: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/STMap_Properties.png) *The STMap node’s properties.* Then, tweak the gradient and the control matte until you get the desired result. It can help to add a **faint exponential glow with a small size** to the result, to give it a bit of an extra kick. And you may also want to grade the result to taste, for example by colour correcting the **saturation** and **contrast**, **hue shifting** the image, or **hue correcting** certain colours. You can also emulate a lower resolution or frame rate: ### Resolution There are several ways of reducing the resolution of an image in Nuke. A quick way is to use the hidden **Blocky** node, which you can access by typing **X** in the Node Graph, and then typing *Blocky* (case sensitive) in the command box: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/X_Blocky.png) Creating the **Blocky** node. In the properties of the **Blocky** node, adjust the **size** as needed to get the resolution that you want. ### Frame Rate To reduce the frame rate, you can use **two Retime** nodes in sequence, one speeding up the footage, and the other slowing the footage down, thereby dropping and duplicating frames. My footage is real time and my project is set to **24** frames per second. To reduce the frame rate of the footage down to **9** frames per second, I set the **speed** value in the *first* **Retime** node to **24/9**. Note that the **filter** is set to **nearest**. Then, I set the **speed** value in the *second* **Retime** node to the *inverse* of that, with the following expression: ``` 1/parent.Retime1.speed ``` – Also with the **filter** set to **nearest**. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/Retime1_Properties.png) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/10/Retime2_Properties.png) *The properties of the two Retime nodes.* Using the first gradient, the result looks like this: Using the second gradient, the result looks like this: You can also create a black and white variant, simply by desaturating the first result: I hope you found this tutorial useful. For more Nuke tips & tricks, see [Nuke](https://www.keheka.com/tag/nuke/). ## Sign up for the newsletter Get free Professional Compositing Tutorials right in your inbox Subscribe Email sent! Check your inbox to complete your signup. No spam or ads. Unsubscribe anytime. ### Creating Insect Swarms Using Nuke’s Particle System URL: https://www.keheka.com/creating-insect-swarms-using-nukes-particle-system/ Last updated: 2025-09-16T11:37:29.000Z ⭐ How to build adjustable elements of insect swarms… _This post is for paying subscribers only._ ### Automated Defocusing Using Plate Metadata In Nuke URL: https://www.keheka.com/automated-defocusing-using-plate-metadata-in-nuke/ Last updated: 2025-08-12T12:46:05.000Z ⭐ How to take the guesswork out of defocusing… _This post is for paying subscribers only._ ### Additive Keying Techniques In Nuke URL: https://www.keheka.com/additive-keying-techniques-in-nuke/ Last updated: 2025-07-28T21:28:02.000Z *An explanation of how additive keying works, and how you can use it to restore fine detail when keying…* I recently gave a presentation about **additive keying** to a group of students from Escape Studios. At the end of the presentation – which, due to NDA, no one could record or take pictures of – I told the students that I would turn the presentation into a guide here on my website using stock footage – as future reference for them, and for everyone’s benefit. Here it is, and I’ve even added some extra sections to it, to give you additional control during the additive keying process: ## What Is Additive Keying? Additive keying is part of a special category of keying, which I called *auxiliary keying* in my [Professional Keying In Nuke](https://www.keheka.com/professional-keying-in-nuke/) guide. Because, an additive key doesn’t *replace* your standard keying tools and techniques (e.g. **IBK**, **Keylight**, **Primatte**, etc.). Instead, it *complements* them – as a **support key**. An additive key is used for catching the details which a standard keyer might miss. – It’s great for capturing: - Fine hair detail - Fine edge detail - Motion blurred edges - Defocused edges - Dust or particles - Transparent objects - Reflections And so, it’s used for providing **additional detail** when keying. However, you should know that an additive key can also very easily pick up stuff that you *don’t* want to include from the blue/green screen plate, such as shadows or tracking markers. So, you’ll have to **mask the effect** as needed using a garbage matte. In any case, the additive key is a powerful weapon in your compositing arsenal, and can help turn a good key into a great one. ## How Does It Work? An additive key doesn’t generate an alpha channel. Rather, by using some very basic maths, it superimposes the blue/green screen plate over the background. This gives us sort of a transparent image overlaid over the background. Which, importantly, includes things like fine hair detail and motion blurred edges. After that, you merge your standard key on top of the result. And so, you’ll get the solid key *and* the fine details combined together over the background. Below, I’ve created a quick example with an *intentionally* bad key – just to show how great the additive key is for restoring detail: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/07/Additive_Key_01.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/07/Additive_Key_02.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/07/Additive_Key_03.jpg) *1) The green screen plate (*[*source*](https://www.actionvfx.com/practice-footage/mechanic-in-electrical-explosion?ref=keheka.com)*), zoomed in on the hair. 2) The image created by an additive key. 3) The additive key added over a new, plain grey background.* ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/07/Additive_Key_04.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/07/Additive_Key_05.jpg) *1) A standard key *without* the additive key included, merged over the grey background. Notice that the standard key doesn’t capture all of the hair detail. 2) The same standard key *with* the additive key included, merged over the grey background. Notice the additional hair detail that’s being captured.* It’s also useful to know that the screen/background colour doesn’t actually matter to the maths behind the additive key. And so, the technique can work equally well for extracting reflections off a glass window, for example. It doesn’t have to be a blue screen or a green screen plate. Below is an example with just a grey wall as the background: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/07/Additive_Key_Grey_01.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/07/Additive_Key_Grey_02.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/07/Additive_Key_Grey_03.jpg) *1) The original plate (*[*source*](https://www.actionvfx.com/practice-footage/girl-staring-in-mirror?ref=keheka.com)*), zoomed in on the subject. 2) The image created by an additive key. 3) The additive key added over a new, plain purple background. Notice that we’re getting all of the hair detail, but we’re also getting some shadows and dirt from the original wall which will need masking out. Still, we’re pretty much ready to merge our standard key/roto on top, which will then be greatly improved by the additive key.* There are **two main paths** you can take to create an additive key: one using **addition**, and one using **multiplication**. And, each path has **two main methods** for creating the key. (You can also *combine* the methods from the two paths). Let’s take a look at the first path: ### Addition To understand how the **Addition** path works, you need to know three basic things: 1. Colours in Nuke are represented by numbers. A pixel has certain values in the red, green, and blue channels, and those are **just numbers**. You can for example add to them or subtract from them – and in doing so, change the colour. 1. Something subtracted from itself **becomes 0** (black). 1. Anything plus 0 **stays the same**. Before we look at each method on the **Addition** path, it’s important to note that you should always **denoise your footage before you start keying**. In addition to getting a cleaner alpha from the standard keyers, denoising the footage also helps you to avoid doubling up the grain when keying additively. Because, **an additive key will very easily pick up any grain**. Okay, let’s look at the first method on the **Addition** path: #### Addition – Constant Method First, we have the original additive keying method – which is still really useful to us today. This is the way they first did it back in the early days of VFX at Quantel, [according to Rafal Kaniewski](https://www.nukepedia.com/written-tutorials/additive-keyer?ref=keheka.com), and where the additive keying technique got its name from. Translated into Nuke terms, the idea behind this method is that you take a **Constant** node, and colour pick its colour from an area of the denoised blue/green screen plate that you want to key. Then, you **subtract** this **Constant** (A) from the denoised blue/screen plate (B) using a **Merge** (from). ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/07/Additive_01.png) *Picking a colour and subtracting it from the green screen.* By subtracting the blue/green colour from the blue/green screen, you make the blue/green screen **black** (a pixel value of **0**) in that area. However, in areas where there isn’t a blue/green screen, like where the actor is, there will be some visible values left over from the subtraction: Where the denoised plate was brighter than the picked blue/green colour, there will be positive values. And, where the denoised plate was darker than the picked blue/green colour, there will be negative values. By **adding** these values (A) to the background (B) using a **Merge** (plus), you then superimpose the actor onto the background, without any (or with very little) of the blue/green screen. – Because of points 2 and 3 listed earlier. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/07/Additive_02.png) *Adding the subtracted values to the background.* You may find, though, that there is a nasty colour cast on the resulting image. That’s because subtracting blue or green from for example skin tones will make them very yellow or purple. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/07/Additive_Key_Colour_Cast.jpg) *Purple colour cast from the subtraction.* So, connect a **Saturation** node just after the subtraction, and set the *saturation* value to **0** (or somewhere **below 1**) in order to remove all (or some) of the colour from the image which we’re adding onto the background. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/07/Additive_Key_Colour_Cast_Removed.jpg) *Removing the purple colour cast.* ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/07/Additive_03.png) *Removing the colour cast by adding a *Saturation* node to the setup.* Quick side note: ##### Saturation Like mentioned earlier, colours are just numbers. Each pixel has values representing how much red, green, or blue that pixel’s colour contains. Colour (specifically hue and saturation) lies in the *discrepancy* between the amount of red, green, and blue values in an image. A very red object will have much higher pixel values in the red channel than in the green and blue channels, for example. The **Saturation** node’s *saturation* slider will equalise these different amounts the closer we slide it toward 0\. And at 0, all three channels will have an identical value. Meaning, a purely greyscale image. – You can also see this happening live as you drag down the saturation slider in a regular colour wheel in a **Grade** node, for example: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/07/Saturation_01.png) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/07/Saturation_02.png) *Lowering the saturation slider will equalise the three colour channels. 0.928 saturation on the left vs. 0 saturation on the right. Notice the RGB values.* And when you’re only adding grey tones to the background, you’re only altering its luminance, not its colour. So, you avoid getting that nasty colour cast. ##### Despill An alternative/addition to desaturating the superimposed image, is to despill **both** the denoised blue/green screen plate and the **Constant**, using **identical** despillers with the same despill settings. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/07/Additive_04.png) *Despilling the blue/green screen and the *Constant*, equally.* This way, it’s possible to keep a bit of colour in the fine details over the background. However, you may still get some unwanted colours depending on your settings – so be vigilant, and use the despill in conjunction with the **Saturation** node. ##### Single-tone It’s important to realise that with this **Constant** method, only *exactly* **one** blue/green tone will become 0\. (The specific colour that you picked). Any (even slight) variation in the blue/green screen shade will be captured by the additive key and turned into a value other than 0\. – And, when added onto the background, will affect the background proportionately. So, any gradients or colour differences in the blue/green screen will show up on the background as a difference in luminance. Any areas of the blue/green brighter than the picked colour will brighten up the background, and any areas darker than the picked colour will darken down the background. However, you can adjust the values before adding them onto the background: ##### Grade To Taste Add a **Grade** node after the **Saturation** node, and grade the result until you’re happy with the look. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/07/Additive_05.png) *Grade to taste.* You can for instance gain the image up and down to make the superimposed image brighter or darker, or gamma it up and down to adjust the contrast. That way, you can make for example fine hair detail show through more clearly. You can also enable **black clamp** in the **Grade** node to limit the additive key to adding just the lighter values. – A trick, if you have super bright values (i.e. higher than 1), is to increase the *gamma* **above 1** to mellow out those bright values. By increasing the gamma you bend the brightness curve upwards in the middle (between 0 and 1), which bends down the values above 1 (and also below 0 – they both act as pivot points) and suppresses them. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/07/Additive_Key_Super_Brights.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/07/Additive_Key_Super_Brights_Mellowed_Out.jpg) *Increasing the gamma mellows out the super bright values.* You can also mask your **Grade** with a **Roto** or a **Ramp** to balance out any colour gradients or shadows in the blue/green screen. – Turning more of the blue/green screen into a value of 0 before adding it over the background. I.e. making more of the blue/green screen disappear. ##### Background Luminance Limit Another thing you can do, which can especially be useful if your new background is very different in luminance to your blue/green screen, is to multiply the image that will be superimposed over the background (B) by the luminance of the background (A) using a **Merge** (multiply). – You can get the luminance of the background simply by adding a **Saturation** node to the background, and setting the *saturation* value to **0**. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/07/Additive_06.png) *Limiting the added luminance by the background’s luminance.* This can help balance out the image and integrate the fine details better. It can also help reduce the unwanted background values coming through from the blue/green screen plate. It might, however, start to kill some of the bright details. So, mix back the **Merge** (multiply) node as needed. Next, as mentioned earlier, make sure to mask your additive key. Get rid of any garbage coming through from the blue/green screen plate, like C-stands, folds, shadows, lights, tracking markers, equipment, etc. 💡 If you can’t mask it out, paint or patch the problem area to remove the garbage from the blue/green screen plate. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/07/Additive_07.png) *Masking the additive key.* And finally, merge your standard key on top at the end: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/07/Addition_01_Constant.png) *The final setup for the *Constant* method on the *Addition* path.* Next, let’s look at the second method on the **Addition** path: #### Addition – Clean Plate Method The second method is almost exactly the same as the first one – just instead of a **Constant** node, you connect a **clean plate**. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/07/Addition_02_Clean_Plate.png) *The setup for the *clean plate* method on the *Addition* path.* A clean plate is, ideally, a perfect copy of the blue/green screen plate without any of the actors or objects to be keyed in it. It includes all of the different shades of blue/green, like gradients and shadows, so that when you subtract it from the blue/green screen plate, all of the blue/green tones (or at least many more than with the **Constant** method) will become 0\. And so, fewer variations in the blue/green shade will be captured by the additive key, creating a cleaner key. 💡 In my [Advanced IBK Keying Techniques And Setups In Nuke](https://www.keheka.com/advanced-ibk-keying-techniques-and-setups-in-nuke/) guide, I explain the best practices for making a clean plate, and advanced techniques for doing so. This means, the additive key will not affect the background in most of the areas where there is a blue/green screen in the plate. 💡 Note that, just like the blue/green screen plate, the clean plate should also be ****denoised**. (This is more relevant when you are supplied with a separate clean plate. Because, when you create one yourself, you’re already using the denoised blue/green screen plate). Depending on your shot, the **clean plate** method might work better, or the **Constant** method might work better. If, for instance, there is a glow or a bloom in the plate that you would like to keep, the **Constant** method might help capture that better. Or, if the blue/green screen is very uneven and is causing a lot of shadows to be added to your background, the **clean plate** method might be the better option. 💡 When keying with the standard keyers, you (should) divide the blue/green screen plate into sections based on for example the blue/green tone, shadows, or hair detail. And then, key each section separately before keymixing it all together. Similarly, you should also ****create separate additive keys for the different sections of the blue/green screen** and keymix them together, to get the best result. Next, let’s take a look at the second path: ### Multiplication This path uses a variation of the additive key which takes advantage of **multiplication** instead of addition. It gives a very similar result to the previous **Addition** method, but can sometimes look a little bit more contrasted. (However, the result can be graded more mellow). To understand how it works, you need to know two more basic things: 1. Something divided by itself **becomes 1** (white). 1. Anything multiplied by 1 **stays the same**. The way you set it up is very similar to the two previous methods. Let’s look at the first method on the **Multiplication** path: #### Multiplication – Constant Method Similar to before, take a **Constant** node and colour pick an area of the blue/green screen that you would like to key. But, instead of subtracting the **Constant** from the denoised blue/green screen plate, **divide** the denoised blue/green screen plate (A) by the **Constant** (B) using a **Merge** (divide). ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/07/Multiplication_01_Constant.png) *The setup for the *Constant* method on the *Multiplication* path.* By dividing the blue/green screen by the blue/green colour, you make the blue/green screen **white** (a pixel value of **1**) in that area. However, in areas where there isn’t a blue/green screen, like where the actor is, there will be different values left over from the division: Where the denoised plate was brighter than the picked blue/green colour, there will be values above 1\. And, where the denoised plate was darker than the picked blue/green colour, there will be values lower than 1\. By **multiplying** these values (A) with the background (B) using a **Merge** (multiply), you then superimpose the actor onto the background, without any (or with very little) of the blue/green screen. 💡 You can also enable ****white clamp** in the ****Grade** node to limit the additive key to adding just the darker values. ##### Shortcut Using A Grade Like I showed in my [Multiplication Key Technique](https://www.keheka.com/multiply-key-technique-for-extracting-fine-detail/) guide, instead of dividing the denoised blue/green screen plate by a **Constant** node, you can use a shortcut: Add a **Grade** node to the denoised and despilled blue/green screen plate, and colour pick the area of the despilled blue/green screen that you would like to key as the **whitepoint**. Setting a value as the **whitepoint** (remember white = 1) will divide the image by that value, turning that value into 1, and every other value to above or below 1, proportionally. Just like dividing by a **Constant**. The rest of the setup is exactly the same as we have seen before: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/07/Multiplication_02_Whitepoint.png) *The simplified setup for the *Constant* method on the *Multiplication* path.* 💡 Similarly, you could also “simplify” the setup for the ****Constant** method in the ****Addition** path with a ****Grade** node. Colour pick the screen colour as the ****offset**, and add a minus (-) in front of the values. 💡 You can use multiplication keying in other ways, too: [Element Integration Trick Using Nuke](https://www.keheka.com/element-integration-trick-using-nuke/). #### Multiplication – Clean Plate Method The second method is almost exactly the same as the first one – just instead of a **Constant** node, you connect a **clean plate**. Like before, fewer variations in the blue/green shade will be captured by the additive key, creating a cleaner key. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/07/Multiplication_03_Clean_Plate.png) *The setup for the *clean plate* method on the *Multiplication* path.* Since the two paths, and each method on the paths, create slightly different outcomes, you can mix and match them as you please. Keymix in what works best for different sections of your blue/green screen. Or, you can use one setup for just the dark details, and one for just the light details, as shown in [this video](https://youtu.be/yomD4gTcdpw?feature=shared&ref=keheka.com). ## Additive Keyer Tool To avoid building these setups over and over again when you do keying work, consider [turning them into a tool](https://www.keheka.com/advanced-gizmo-building-in-nuke/). There are also great additive keyers available, such as [AdditiveKeyerPro](https://github.com/CreativeLyons/Lyons%5FTools%5FPublic/blob/master/07%5FKeyer/AdditiveKeyerPro.nk?ref=keheka.com) from the [Nuke Survival Toolkit](https://github.com/CreativeLyons/NukeSurvivalToolkit%5FpublicRelease?ref=keheka.com). I hope you found this tutorial useful. For more Nuke tips & tricks, see [Nuke](https://www.keheka.com/tag/nuke/). ## Sign up for the newsletter Get free Professional Compositing Tutorials right in your inbox Subscribe Email sent! Check your inbox to complete your signup. No spam or ads. Unsubscribe anytime. ### Advanced Gizmo Building In Nuke URL: https://www.keheka.com/advanced-gizmo-building-in-nuke/ Last updated: 2025-07-12T22:53:38.000Z ⭐ How to build advanced gizmos in Nuke, complete with dynamic menus using Python, custom expression-driven controls, and a decorated user interface… _This post is for paying subscribers only._ ### Compositing Blood In Nuke URL: https://www.keheka.com/compositing-blood-in-nuke/ Last updated: 2025-06-26T09:24:22.000Z *Tips and tricks for mastering one of the more frequently encountered compositing tasks…* The topic for this guide was suggested by one of the [Companions](https://www.keheka.com/companions/) in our community: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/06/Suggestion.jpg) *“An article regarding compositing blood could be an interesting topic!* 🩸*”* ❗ ****Warning:** There are pictures of (just) blood in this guide. ## Vital Knowledge There’s a handful of tasks which you’ll repeatedly come across in your compositing career. Things like [adding smoke](https://www.keheka.com/compositing-smoke-in-nuke/), muzzle flashes, or dust hits to a scene are typical ‘bread and butter’ work that every compositor will encounter. Compositing blood is one of those common tasks. That’s because visceral violence is a popular tool for adding action and excitement to a scene. Movies and TV shows will frequently have actors and extras getting shot, punched, stabbed, cut, blown to pieces, or sliced and diced in any which way. And, it’s up to us to add blood to, or to augment the practical blood in, these often intense scenes. So, knowing how to composite blood in a realistic way is a crucial skill to have as a compositor. ## Types Of Blood Work There are many different variations of blood that can be added to a shot, each with different characteristics (like for instance motion, colour, or density). For example: - Spray - Splatter - Splashes - Mist - Pools - Drops - Streaks - Streams - Blood in water - Bleeding wounds - Blood hitting the lens - Smudges/smearing of blood - Pulsating blood (decapitation, etc.) - Gore (bloody flesh, skin, tendons, etc.) - Blood-soaked clothing/fabric, often combined with ripped cloth - Blood hitting walls or objects and leaving a pattern (bloodstain texture) No matter what kind of blood element you’re compositing, as a basis, all the standard compositing rules apply. – Things such as: - [Tracking](https://www.keheka.com/3d-to-2d-tracking-in-nuke/) the blood to the camera’s and/or to the object’s movement, making sure that the blood sits at the correct depth plane in the scene. - Adjusting the [depth cues](https://www.keheka.com/how-to-create-a-sense-of-depth-in-your-composite/), like perspective, scale, and parallax, to sit the blood into the scene. - [Matching the dynamic range](https://www.keheka.com/matching-the-dynamic-range-of-a-scan-in-nuke/) of the blood element to the scan. - Adding [lens and sensor effects](https://www.keheka.com/compositing-photorealistic-lens-effects-in-nuke/) to the blood element, like lens distortion, depth of field, and chromatic aberration, to match what’s happening in the plate. - Adding [motion blur](https://www.keheka.com/motion-blur-masterclass-for-compositors/) to the blood to match the camera’s and/or the object’s movement. 💡 You’ll often be using 2D blood elements (as opposed to CG renders), and so you may not have a depth channel available for adding depth of field. If so, you can use the [iBlur](https://www.nukepedia.com/gizmos/filter/iblurfh?ref=keheka.com) \+ [Ramp](https://learn.foundry.com/nuke/content/reference%5Fguide/draw%5Fnodes/ramp.html?ref=keheka.com) mask combination to effectively fake depth of field. I’ve written in detail about those things before, so please follow the links above if you’re curious to learn more. For this guide, I wanted to focus more on blood-specific tips. ## Visual Impact Blood hits are all about visual impact. And, particularly in fast-moving action scenes, blood spurts can easily get lost in the chaos. So, you’ll often have to art direct the blood: Make sure to position the blood in the frame in such a way that you **maximise the visual contrast against the background**. Try to have dark blood go over a brighter part of the background, and bright blood go over a darker part of the background. Adjust the **direction** and the **angle** of the blood so that its silhouette becomes more clearly visible and *readable*. Take the frame below from *Deadpool & Wolverine*, for example. Had all of the blood been angled down, going over Deadpool’s dark and red outfit, it would have been much more difficult to read. Instead, by having a large portion of the blood shoot up and over the bright, snowy background, we get the **visual contrast** that’s needed for the audience to be able to read the blood. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/06/Deadpool_Blood.jpg) *Blood hit from Deadpool & Wolverine.* Sometimes, it can help to add a ‘ping’ – a **dynamic specular highlight** – to the blood, in order to draw attention to it for a brief moment. (When it makes sense according to the lighting conditions in the scene). And, if the motion blur on the blood is very strong and is making it too transparent, you can [thicken up the alpha](https://www.keheka.com/alpha-density-matte-control-tool-for-nuke/) of the blood to compensate. ## Blood Colour In the red blood cells in our blood there is a protein called [hemoglobin](https://en.wikipedia.org/wiki/Hemoglobin?ref=keheka.com). This protein contains iron, which facilitates the transportation of oxygen in our body. When blood is in the body, it’s either carrying oxygen (oxygenated) or has released oxygen to the body's tissues and organs (deoxygenated). Freshly oxygenated blood has a **bright, rich red colour**. (Typically carried away from the heart to the body’s tissues and organs by the arteries). Deoxygenated blood has a **darker, more maroon (brownish red) colour**. (Typically carried back to the heart from the body’s tissues and organs by the veins). ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/06/Venous_and_arterial_blood.jpg) *Venous (darker) and arterial (brighter) blood.* When blood is exposed to air, hemoglobin binds to oxygen, causing deoxygenated blood to become a **brighter red**. Over time, as the blood dries, the hemoglobin breaks down, and the blood can darken further, eventually turning **brown or even blackish**. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/06/Bloodstain_Fresh.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/06/Bloodstain_Somewhat_Aged.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/06/Bloodstain_Aged.png) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/06/Bloodstain_Very_Aged.jpg) *(1) A fresh bloodstain: the blood is bright red. (2) A somewhat aged bloodstain: the blood is still red, but turning darker. (3) An aged bloodstain: the blood has turned brown in colour. (4) An even more aged bloodstain: the blood has turned black in colour.* So, fresh blood that is leaving the body (blood spurts, fresh wounds, etc.) should have a **bright red colour**. And blood that’s been outside of the body for some time (blood stains, pools of blood, etc.) should turn more **brownish black**. However, as always, take into account any **colour cast in the plate** when grading the blood. To integrate blood into a cool, dark night time scene, you may have to add a blue tint to it, for example. When grading the blood, be careful so that you **don’t tint the specular reflections too much**. If the light in the scene is bluish and you accidentally tint the specs orange-yellow, the blood can look out of place. – You can isolate the highlights with a luma key to grade them separately. Just like with explosions, **blood should often be less saturated than you might think**. In fact, it’s a very common mistake to grade blood overly saturated red. So, make sure to take cues from the saturation levels in the plate. 💡 Blood mattes are among the most ****commonly requested** [****DI**](https://britishcinematographer.co.uk/di-grading/?ref=keheka.com) **mattes**. Whenever you add blood into a shot, be prepared to output a DI matte for it. And, make sure to match the lighting and shadows in the scene: ## Light & Shadows Just like when compositing any other element into a shot, make sure to match the direction, colour, and intensity of both the lighting and shadows of the blood element to the scan. When you’re working with CG blood renders, you have a lot of leeway to [adjust the lighting](https://www.keheka.com/relighting-cg-renders-in-nuke/) in the renders to fit the lighting conditions in the plate. With 2D elements it’s a bit trickier, but you can still do some relighting – for example using tools and setups such as this one: [aeRelight2D Overview - Aitor Echeveste VFX artistMake relights of our footage without needed any render passes. It’s especially useful when we try to illuminate smoke or atmospheric elements.![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/icon/cropped-AitorEchevesteNukeLogo-270x270.png)Aitor Echeveste VFX artistaitorech![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/thumbnail/Untitled-8.jpg)](https://aitorecheveste.com/aerelight-overview/?ref=keheka.com) – Just be careful not to push it too far, making the blood look too processed and unnatural. A common mistake is to make the blood look [embossed or debossed](https://en.m.wikipedia.org/wiki/Paper%5Fembossing?ref=keheka.com). Let’s take a look at how blood reacts to light, to give us a better idea of what to aim for when lighting and grading it. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/06/Blood_Anatomy.jpg) *Blood splatter.* We can pinpoint some characteristics of blood from studying the image above: - **Blood isn’t very transparent** – we can only really see through it when the layer of blood is very thin. E.g. at the top screen left in the image above. (Or, when the blood is very strongly backlit). - In areas where there is a **thicker** layer of blood, the colour looks **darker**. More of the light is being absorbed and scattered within the blood. E.g. in the cores of the three ‘arms’ above. - Fresh (wet) blood has a **reflective coating** which catches a lot of specular highlights. E.g. along the edges of the blood above. Blood will begin to clot within a few minutes, forming a dark, shiny gel-like substance that grows more solid as time progresses. And so the older the blood, the less shiny it will be. - Blood is thicker and more viscous than water, and ‘sticks’ to itself – forming **areas with larger drops and pools of blood**. E.g. in the three ‘arms’ above. – Which creates a thicker layer of blood in those areas, making the blood darker there. - When blood hits an object (e.g. a wall or a floor), it smears out, creating **tails or spines in the direction of travel**. (See: [bloodstain pattern analysis](https://en.wikipedia.org/wiki/Bloodstain%5Fpattern%5Fanalysis?ref=keheka.com). Also, [here](https://www.forensicsciencesimplified.org/blood/principles.html?ref=keheka.com)). E.g. the three ‘arms’ and the small droplet streaks above. So, when compositing a blood splatter texture element, make sure to place it the right way around in relation to where the blood is coming from. ## Realistic Motion Blood is affected by **gravity**. When you have blood that shoots out to the side in an element, you may have to animate it to fall down in a realistic way in your shot. Many 2D stock blood elements are filmed in slow-motion, and will need retiming to bring them back to normal speed. When doing so, remember to account for the (now) lack of [motion blur](https://www.keheka.com/motion-blur-masterclass-for-compositors/). And since blood is more viscous than water, it will typically run more slowly down a surface. (It also won’t bead as easily as water drops do). When blood is soaking through fabric, the stain usually won’t expand in a perfect circle. Make sure to [break up the roto shape](https://www.keheka.com/breaking-up-edges-and-surfaces-in-nuke/) that you’re using to reveal the blood, if you’re going down that route. (Ideally, find an element of fabric getting soaked naturally). Speaking of fabric, if you’re tracking blood onto a t-shirt or other clothing with wrinkles, the [Smart Vector Toolset](https://learn.foundry.com/nuke/content/comp%5Fenvironment/smartpaint/smartvector.html?ref=keheka.com) is great for getting the blood to stick in a realistic way. You can also warp the blood element to flow along a path using the SplineWarp or GridWarp nodes, for example – just be careful to avoid getting pixels that look stretched. ## Other Lifeforms Different lifeforms can have a different blood composition than ours. Horseshoe crabs, for example, have hemocyanin in their blood instead of our hemoglobin. Hemocyanin is a copper-based (as opposed to our iron-based) respiratory pigment, which turns their blood blue: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/06/Horseshoe_Crab.jpg) *Horseshoe crab blood is blue.* And, there is a whole range of [different blood colours](https://www.ebi.ac.uk/pdbe/articles/what-do-snails-spiders-octopods-and-queen-england-have-common?ref=keheka.com) in different species. So, if you are for example compositing a blood spurt coming from an alien that’s being shot, you may have to change the colour of the blood. To do that, you can still use regular, red blood elements, but then change just the hue [as described in the Hue section of this guide](https://www.keheka.com/practical-use-cases-for-all-the-merge-operations-in-nuke/). ## Resources There are plenty of online element libraries where you can download blood elements. Here are a couple of free ones: [Free Blood VFX Footage \[4k\] | FX ElementsGet your hands on Free Blood VFX Footage today and create spine-tingling horror scenes at no cost! Learn how to incorporate these visual effects into your projects today.![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/icon/apple-icon.png)FX Elements![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/thumbnail/FreeBloodThumbnail.jpg)](https://www.fxelements.com/free/blood?srsltid=AfmBOoptASyoDP9E-U%5FpOxS89-nsI3hfntMzNtdYKcl82KyAtgMjFV2A&ref=keheka.com) [ActionVFX | FREE - Blood Textures Stock Footage Collection40 “real” blood textures to extend your gruesome scenes. Variations include pools, sprays, handprints, and footprints. Delivered in 2.5K and 5K as 32-bit .PNG images. All images include a pre-keyed alpha channel, so you’re ready to go! Download the 2.5K version for FREE.![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/icon/apple-touch-icon.png)ActionVFX![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/thumbnail/default-og-img.jpg)](https://www.actionvfx.com/collections/free-blood-textures-stock-footage?position=8&query%5Fid=36243a64a0448fac2fbd3e588c2c13d7&ref=keheka.com) You can also shoot your own blood elements using fake blood. There are many recipes for fake blood, for example using corn syrup, red food colouring, a small amount of blue food colouring to give the blood some authentic colour, and some cornstarch to thicken it up and stop it from being transparent. Here are some variations: [Get Your Ghoul On With These 9 Easy Fake Blood RecipesThese fake blood ideas are designed to splatter, drip, and gross everyone out. Most of the frightful ingredients you need are right in your pantry.![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/icon/apple-touch-icon-180x180.png)The Spruce CraftsRain Blanken![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/thumbnail/GettyImages-493055476-eee133728a4b450ab111b0e76cd1a037.jpg)](https://www.thesprucecrafts.com/make-fake-blood-fake-blood-recipes-1105964?ref=keheka.com) Lastly, to make blood look real: ## Study Real References Try to study real, authentic references (e.g. medical procedures) – and/or use real stock footage and images of wounds – and then mimic how that real blood behaves. Just be careful when searching online for this stuff. I hope you found this tutorial useful. For more Nuke tips & tricks, see [Nuke](https://www.keheka.com/tag/nuke/). ## Sign up for the newsletter Get free Professional Compositing Tutorials right in your inbox Subscribe Email sent! Check your inbox to complete your signup. No spam or ads. Unsubscribe anytime. ### Creating Custom Particle Effects Using Alphas In Nuke URL: https://www.keheka.com/creating-custom-particle-effects-using-alphas-in-nuke/ Last updated: 2025-06-10T17:00:54.000Z *Spawning particles using alpha masks in order to create bespoke effects…* ## Controlling The Emission Rate There is a great feature in the **ParticleEmitter** node’s settings which many people don’t know about, or use very often. It’s the **rate channel** knob, which lets you constrain the emission rate of the particles by using a mask. For example, by using the alpha channel that flows into the **emit** input of the node. 💡 Where the alpha mask is white (value of 1), particles will spawn from the respective part of the geometry. Where the alpha mask is black (value of 0), no particles will spawn from the geometry. And where the alpha mask is grey (value between 0 and 1), there will be a proportionally reduced emission rate. You can for instance project an alpha mask onto a **Card** or other **geometry**, and use that mask to limit the parts of the surface from which the particles will spawn from that geometry. This can be used to create all sorts of interesting effects. Most obviously, perhaps, to spawn particles in a specific shape or pattern: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/06/Circle_v001.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/06/Triangle_v001.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/06/Star_v001.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/06/Hello_v001.jpg) *Using input alpha masks to constrain particles to spawn in specific shapes.* This is useful for when you need to constrain the particles so that they only spawn from very specific areas, such as vents, grills, or exhaust pipes. And, it can be used to shape the flow of the particles into a specific formation. Like a tube of particles shooting towards the camera, for example; emitted from a ring shaped alpha, like in the first example above. However, the technique becomes even more interesting when you start to animate the alpha mask that’s constraining the particle emission. Let’s say that you wanted to create a trail of magic dust from a wand being waved, for example. You could draw the exact path that you want the magic dust to follow using a **RotoPaint** brush stroke, and then animate the **write on start** and **write on end** knobs in the **Stroke** tab to create an alpha shape that moves along the path, spawning particles. 💡 See [Animating Paint Strokes In Nuke](https://www.keheka.com/animating-paint-strokes-in-nuke/) for more information on how to animate paint strokes. Here’s a pretty crude example that should give you a good idea: The effect above was created simply by spawning particles using this alpha mask: To create the mask, I first drew a spiral shape in a single brush stroke. You don’t have to get it perfect, because as described in the article linked above, you can go in and adjust and/or delete points on the spline of the brush stroke afterwards. Here, I deleted a bunch of points and smoothed out the rest to get roughly the shape I wanted: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/06/Magic_Dust_Brush_Stroke.png) *The spline of the spiral brush stroke.* Then, I animated the **write on start** and **write on end** knobs from **0 to 1** to get a shape moving along the spline. I also animated the **brush size** to go from a relatively thin brush at the start to a thicker one at the end – spawning particles in a wider area as the effect progresses. 💡 Make sure to set the ****Lifetime** of the brush stroke to ****All frames** when you animate the brush stroke settings. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/06/RotoPaint_Settings_01.png) *Animating the *write on start*, *write on end**, *and *brush size* knobs.* For the **write on end** knob, I simply animated it from 0 to 1 over the course of the shot. In order to have the tail follow the head of the animated shape, I used this expression in the **write on start** knob – which kept it 20% of the stroke length behind the head throughout the shot: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/06/RotoPaint_Settings_02.png) *Expression for keeping the tail 20% of the stroke length behind the head.* ``` clamp(RotoPaint1.curves.Brush1.writeon_end-0.2) ``` (You could just manually animate the **write on start** knob as well). Then, I put the resulting alpha mask on a **Card**, and used it to spawn some particles (just basic **Spheres**): ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/06/Magic_Dust_Setup.png) *The particle setup.* 💡 The ****Multiply** node is just animating the alpha channel to ****0** at the end of the shot, to stop any more particles from spawning. In the **ParticleEmitter** settings, notice that the **rate channel** knob is enabled and set to **rgba.alpha**: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/06/Magic_Dust_Emitter_Settings.png) *The settings of the *ParticleEmitter* node.* 💡 The ****Card** should have a high density of polygons/vertices to spawn particles from, to ensure an even spread within the alpha mask. To even out the density of the particles spawning (and fill out the area of the mask), I increased the ****rows/columns** of the ****Card** to 100/100\. By animating the alpha channel, you open up a ton of opportunities to create different effects. Anything from magic, glitter, or fireworks, to rocks or debris shooting up from a fissure (e.g. when a superhero smashes the ground). – You can control precisely which path the particles should take. 💡 You could even use particles as a reveal ‘mask’, and control the reveal by animating the alpha mask. I hope you found this tutorial useful. For more Nuke tips & tricks, see [Nuke](https://www.keheka.com/tag/nuke/). ## Sign up for the newsletter Get free Professional Compositing Tutorials right in your inbox Subscribe Email sent! Check your inbox to complete your signup. No spam or ads. Unsubscribe anytime. ### How To Build A High Agency Mindset URL: https://www.keheka.com/how-to-build-a-high-agency-mindset/ Last updated: 2025-06-01T14:55:39.000Z *What it takes to become more resilient, independent, and in charge of your own life…* ## What Is Agency? ‘[Agency](https://en.wikipedia.org/wiki/Agency%5F%28sociology%29?ref=keheka.com)’ refers to your capacity to act independently; to make (sometimes bold) choices in order to change your reality; and to be the source of your own actions, rather than being passively influenced by external factors. It's about having the power and control over your life and decisions, feeling in charge, and being able to shape your own experience. – Sort of like being the **main character** in a movie, rather than an extra. There are different levels of agency. A person with low agency will often passively accept the cards they’ve been dealt in life, without really trying to improve their situation too much. They’ll frequently feel like a victim of circumstances and tend to view themselves as a supporting character in other people’s stories. Life is something that happens *to them*, and they lack control or responsibility for it. On the other hand, a person with high agency will come to terms with the hand they've been dealt, and then swiftly change focus to what they can control: their actions. High agency people view themselves as the hero and author of their own story. They’re active, enthusiastic, and optimistic, and will take steps to make changes for the better (or will at least *attempt* to make changes for the better) in situations where things aren’t ideal. 💡 Imagine for a moment that you’re being wrongfully detained in a Guatemalan prison during your travels through Central America. If you could call **one* friend to come help get you out of that sticky situation, who would you call? Chances are, the friend you’re thinking of is a person with high agency. I’ll give you a real-world example of high agency from a recent experience: ### Table With A View On my birthday, my family and I went for lunch to a nice restaurant in London, which is located on the top floor of a high-rise building. The restaurant has 360 degree views of the city, but it was quite packed when we arrived and all the best tables were occupied. And so, we were seated at a table in the centre of the restaurant (i.e. not by the windows). A few minutes after we had been seated, a window table became free. My partner immediately asked the waitress if we could move to that table instead, to get a better view. And, luckily, the waitress said ‘of course, no problem’. It turned out that the table wasn’t reserved again until a few hours later. (We hadn’t ordered anything yet, so moving us to the new table only took 30 seconds of the waitress’ time – a minimal inconvenience to her). Asking to change tables was a **high agency move**. My partner could have just passively accepted the table that we got. She could have told herself that the other table was probably reserved anyway. Or, she could have not bothered to ask about it because we had already been seated and made ourselves comfortable. Or even, she could have failed to notice that it had become available in the first place. And, we would have missed out on the very reason for why she chose to make a reservation for us at this particular restaurant for my birthday – the great views. But instead, she decided to go straight after what she wanted, and *asked* for it. The worst thing that could have happened would just have been getting a ‘sorry, that table is reserved’, and nothing would have changed. We effectively had everything to gain, and nothing to lose, by her just asking for the better table. **Actively looking for, identifying, and *acting* on opportunities** like this doesn’t only apply to getting a better table at a restaurant. Exercising high agency can have a **significant impact on every aspect of life**. In simple terms, with high agency, you will get what you truly want, more often – leading to a more pleasant journey through life. But you might not feel like a high agency person. In fact, most people *don’t* have a particularly high agency. On the other hand, most people typically don’t have an especially *low* agency, either. The majority find themselves somewhere in the middle. This can change over time, and in different situations. And, if you feel like you’re not quite where you would like to be on the agency spectrum, don’t worry. The good news is that you can increase your agency – it’s just like improving a skill. And with a high agency mindset you’ll have the capacity for creating the life that you want. ## How To Become A High Agency Person Okay, so a person with a high agency is basically someone who gets sh!t done. The key here is the *doing* part. Agency is all about taking **action**. And high agency is basically about actively going after what you want without waiting for the circumstances or conditions to be perfect. In fact, it’s often about **overcoming *adverse* conditions**. If you want to increase your agency, it’s probably not the best idea to jump straight into the biggest challenges right away. (Immediately failing a task can knock your confidence and kill your motivation). Instead, build up your confidence by starting out doing smaller tasks. Or, divide a larger challenge into smaller, more manageable tasks, and attack one of them at a time. ### Start Small You could begin by taking simple actions that change something small in your life. Something just slightly out of the ordinary routine: - If you usually don’t make your bed in the morning, start to make it after you wake up. – A small gift (and reminder of your agency) for your future self when you go to bed later on. - Reduce your daily consumption of Netflix, TikTok, Instagram, etc. by half an hour, or even an hour, and instead spend that time building or creating something. **Start switching your mindset from passive consumption to active creation.** - If you want to get in shape, literally take the first few steps and get off the sofa and go outside for a walk. You don’t have to hit the gym four times a week right away. - If you dream of writing a book, try setting aside dedicated time during the week purely for writing. Carve out some focused time with no distractions, even if it’s only 30 minutes, just to write. And even if you ‘only’ write for example 100 words each session, over time that adds up to a whole book. (That’s how most books are written: small bits added together, consistently, over a long time). - If your backyard is a mess, make an effort to clear it – starting from one end and working your way across. There is no expectation that you should finish everything in one session. Rather, you do it little by little – in manageable chunks. Keep compounding small actions, and you’ll regularly be proving to yourself that **you can affect meaningful change** to your surroundings and to your situation. That *your* actions alter your reality, however little to begin with. And that you are, and become, what you consistently *do* (and not just what you say). 💡 The more you build or create, the more you’ll feel like a builder or a creator – like someone who is writing their own story rather than being a character in someone else’s. The point is to get momentum going. Actions lead to more actions, which lead to more actions, and so on. And having a high agency is about taking action more often. Again, many small actions compound. ### Build Undeniable Proof By consistently putting in the effort and doing the work – on whichever task it might be – you start to leave behind undeniable proof, creating an image that confirms who you are. A true reflection of yourself. Let me quickly use my own situation to illustrate. I can genuinely say that I am a writer now. I *wasn’t* a writer a few years back, but then I started consistently writing guides for this website. And to date I have published 112 guides. I’ve written hundreds – thousands – of pages. All digitally trailing behind me, proving that I am a writer. (Perhaps not in the traditional sense; with a book deal and a publisher, but definitely in the modern sense). I’m also (mainly) a 2D supervisor creating visual effects. And I have around 60 feature films and TV shows under my belt across the past 12+ years to prove it. That’s undeniable proof. You (or I) can’t look at those credentials and say that I’m *not* either of those things which I claim to be. Build your own undeniable proof of who *you* are. Do you want to be a person of high agency? **Do high agency things** – take actions that are consistent with a high agency. Again and again. Keep stacking up more proof, leaving what will become an impressive trail of evidence behind you. And soon, you’ll become what it is that you’re doing. If you run twice a week for a year, you’re a runner. There’s no arguing against that. You’ve put hundreds of kilometres behind you, and probably have a smart watch or phone with the step count to prove it. If you joined a few races, you might even have medals to prove that you finished them. More importantly, after a whole year, you’ll have improved your physique, technique, and the confidence in your running ability. That’s a bunch of real, tangible – and undeniable – achievements, which prove that you’re a runner. And now as a runner, with a runner’s mindset, you keep running. You’ll *choose* to run more, and spot more opportunities surrounding running and all that comes with it. You’ll pick better running shoes, find new paths to run, and maybe join a club. You’re not being dragged outside by a friend to run, you are **choosing the direction of your own adventure**. So, more *action* leads to a higher agency. And a higher agency leads to more action. Taking action with high agency is also about speaking up. ### Push Back Against Inconvenience Most of us will accept a small inconvenience even when it’s not necessary. – And then become disappointed later on, when we meet the consequences of our decision. Sometimes, it’s the polite thing to do, and fixing the issue would cause the other person *more* inconvenience than the amount it would reduce on our end. But often, that’s not the case. Next time, stop and ask for the missing napkins in your lunch order. Suggest to push the meeting that’s been scheduled during your lunch hour. Or, propose whichever reasonable change it may be that would be more convenient to you. Usually, it’s not a problem *at all* for the person on the other end to accommodate you. If people don’t know what you like or want, they might schedule things, pick locations to meet, or choose activities to do that are inconvenient to you (even just by random chance). So, politely push back against inconvenience, share your preferences, and simply: ### Ask For What You Want The worst you can get in return is a no. That’s not a big deal. You just adapt and move on. Usually, you will have everything to gain and practically nothing to lose by asking for what you want. Ask for an upgrade. Ask for help. Ask for a promotion, or a payrise. But be prepared to give a valid reason if needed. Or, you could ask for something to be done sooner. Has the lighter not published the lighting renders yet? Ask them if they’re able to. Don’t sit around and wait for things to happen. Make them happen. Asking for what you want is one of the best ways to cultivate high agency. But you have to be truthful to yourself and ask for what you *actually* want. ### Be Honest About It Reflect on, and be honest about what you really want. Do you want something because *you* want it? Or, do you want it because society tells you that you *should* want it? – And that it’s expected of you to follow a certain path? When I was younger, I wanted to be an engineer. I didn’t really have a clue what an engineer was, but everyone made it sound like a great profession to get into. After school, I started studying engineering, and hated it. It was nothing at all like I had imagined. So, instead of lying to myself and forcing myself into a profession I would have been miserable in, I decided to take a different path. (I have nothing against engineers, hats off to you, it just wasn’t for me). Now I make movies for a living, and *actually* enjoy the work. It’s a perfect blend of technical and creative challenges on a daily basis. That turning point was a pretty significant change of direction in my life, but the benefits of course correcting your path are also apparent in everyday situations: ### Change Your Path When It Turns Out To Be Wrong Sometimes, we make poor choices. But most of the time, a choice is not final. At least not right away. Like the Norwegian [Mountain Code](https://www.dnt.no/contentassets/0e411308202a44c5b49374534759bc2b/fjellvettreglene%5Fenglish.pdf?ref=keheka.com) says, ‘Don’t be ashamed to turn around’. Especially, when continuing to move forward in the current direction is not in your best interest. Let’s take a basic, everyday example: Did you turn down a shopping bag for your groceries at the convenience store, and then realised that you could actually use one after all? Your answer is not locked in, so change it. Don’t awkwardly carry a bunch of items and risk dropping some, just simply get a bag. Stop your auto-pilot answering for a moment, take over the ‘wheel’, and change lanes before you take the wrong exit. This gets more and more important the greater the consequences are. If something doesn’t feel right, you have the option to back out of the deal and change the path you take. Use your agency to make a better choice before it’s too late. This might mean less people pleasing. However, you should avoid becoming difficult to deal with. People tend to choose to work and be friends with people they like. So, be respectful, and: ### Practise Assertive Communication There are four main styles of communication: - **Passive**: You’re too conscientious and deferential to the wants and needs of others. You avoid conflict, and inhibit the expression of your *own* wants and needs. You’re afraid of others thinking less of you. For example, agreeing to do something that you don’t want to do, or staying silent when you should be speaking up. - **Aggressive**: You’re too inconsiderate and disrespectful toward others and their wants and needs. You overcompensate for deep insecurities by trying to control or manipulate others. For example, by bullying, threatening, or teasing others. - **Passive-Aggressive**: You’re communicating aggressively but in a disguised manner to avoid responsibility. It’s combining the worst of the two prior styles: not being authentic to yourself while trying to control others. For example, being sarcastic, gossiping, giving back-handed compliments, making excuses, or gaslighting others. - **Assertive**: You communicate in a way that is completely honest to your own wants and needs, while being respectful of others at the same time. You’re clear, direct, and kind, and you set healthy boundaries. For example, giving honest (but difficult) feedback, saying no to something you don’t want to do, or respectfully being open about your preferences despite knowing the other person wants something else. As opposed to with the other three styles, when you practise assertive communication, you’re not being avoidant, and so you’re not eroding your agency. In fact, you’re bolstering it. 💡 I’m not saying that the other three styles of communication are all bad. I know some really fun people who are very sarcastic. Playful teasing can brighten someone’s day. And, it’s good to pick your battles and know when to take a step back and be a little bit more passive. However, typically, the assertive style will be the most helpful one for contributing to increasing your agency. When you commit to communicating more assertively and express yourself wholeheartedly, you can’t help but feel like the hero in your own story, It’s like a superpower. – But with great power comes great responsibility: ## The Obligations Of A High Agency Person Having a high agency is extremely beneficial, but it comes with some moral responsibilities. A part of that is helping out others – because you’ll often be the only one who *can*, or who is willing to. Like the friend who’s called upon to help bust someone out of a Guatemalan jail. – Obviously, it won’t be as extreme as that in everyday life, but you get my point. Use your high agency not only for your own benefit, but also for others’. Light the way for the next person. To illustrate, let’s take a trip to the Middle East: ### Become A Beacon In the northern part of the Kingdom of Saudi Arabia lies the vast *Al Nafud* desert, known for its scarce water resources. Both experienced and inexperienced travellers alike have lost their way in the huge arid stretches of the desert, and even for those with strong survival skills, it can be a dangerous place. Search and rescue parties have embarked on countless rescue missions in Saudi Arabia’s grand deserts for years. The lucky ones out of the lost or stranded travellers were rescued within 24 hours. Others didn’t survive their failed attempts to locate the few existing water tanks, reservoirs, and wells amidst oceans of sand. – In fact, many people have lost their lives *near* water sources, because they didn’t know that those water sources were nearby in the first place. In an effort to save more lives, in 2021 environmental activist and explorer Mohammad Fohaid Al-Sohaiman Al-Rammali launched a new initiative: With the help of specialized contractors supervised by the Ministry of Environment, Agriculture and Water, 11 solar powered laser beacons were installed near water sources in the Al Nafud desert. (Later expanded to 100 beacons across the desert). Each of these beacons shine a column of light into the sky, visible at night from several miles away, pointing travellers to a source of water: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/06/Beacon.jpg) *One of the solar powered laser beacon installations in the Al Nafud desert.* So, why am I telling you about all this? Because, as a high agency person, you may have to ‘guide people to the water’, so to speak. And in order to help others find their way, you must act as a beacon. There are several things you can do: - **Lead by example**. Demonstrate the values that you want others to embrace. For example, by pulling your weight on the projects you work on. - **Share your own journey**. Share the challenges you’ve overcome, your insights, and stories. We can all learn a lot from each other, both from our successes and from our failures. - **Share your knowledge, and guide others**. For example, post tips or tutorials on social media or on your own website, or mentor someone in person. People may also come to you more often asking for solutions – be there for them and do your best to help them out. - **Be a positive force**. Spread joy and happiness, and be a source of hope and encouragement. The world doesn’t need another complainer, especially during tough times. Stay optimistic. - **Seek out opportunities to make a difference**. Contribute to your community in your own way. Whether physically or online, you can affect a positive change – locally *and* globally. When you do these things, you’ll frequently see something interesting: people can often sense high agency in a person. They’ll notice that a high agency person in a team gets more work done, acts independently and so doesn’t need constant handholding, flags issues early, and generally is a more productive, helpful team member. And when you’ve proven yourself capable, you may be offered opportunities to take on more responsibility. – Which you should (often) take. ### Take On More Responsibility Who would you want in a leadership position; a person with low agency or a person with high agency? I think the answer is pretty clear. And so if you’re a person of high agency, it makes sense to take on that duty. It may even make sense to *offer* to take on the extra responsibility. – Remember, ask for what you want. And that also means asking for additional resources should you need them for tackling the new responsibilities. Having more responsibility means taking on an extra burden, but it’s also an honour. Someone entrusted you with something important. And that speaks to your character. When you *do* take on more responsibility – let’s for example say that you’re overseeing a (part of a) project – one thing is very important: ### Take Ownership Inevitably, things will go wrong at some point. When that happens, take ownership instead of blaming others for the failure. You might not be directly responsible for the mishap, but you were indirectly responsible. If you were supervising a sequence and an artist missed a continuity error, acknowledge the issue with the client in the review and own up to it. Like I wrote in this article: [Improving Your Leadership Skills Using Biomimicry](https://www.keheka.com/improving-your-leadership-skills-through-biomimicry/), **protect your team**. A good leader is a person who takes a little bit more than their share of the blame and a little bit less than their share of the credit. And then, kick into action mode. Brief the relevant people and, if needed, show them how to solve the problem. Address the issue as soon as possible. No moaning or complaining, just take action. ## So, What Can You Do *Now*? The VFX industry is not in a great place at the moment (June 2025). Multiple (and consecutive) strikes, war, recession, tariffs, a global pandemic, a shift from cinema to streaming, AI advancements, and great economic uncertainty have all contributed to scaring off investors, making them hesitant to fund new projects. And we’re all feeling the impacts of that. There is less work to go around, more cutbacks, and an uncertain future ahead – all of which are symptoms of this giant, global clusterf\*ck. Many VFX companies are going through redundancies, and/or are resorting to putting staff on reduced working hours in order to stay afloat. These are definitely *adverse conditions* for VFX workers. A series of sizable bumps in the road. And a high agency is what will get you over those bumps. Avoid sitting around and waiting for potential redundancies to happen to you. Instead, act now, ahead of time. Practising high agency and being proactive are inevitably going to be very helpful on your journey through these tough times: so start preparing yourself and looking for opportunities: - [Update your showreel](https://www.keheka.com/how-to-get-hired-as-a-compositor-part-3-create-a-spectacular-showreel/). - [Update your CV](https://www.keheka.com/how-to-get-hired-as-a-compositor-part-4-write-an-impressive-cv/). - Reach out to friends and recruiters in other companies, and ask if they are looking to hire. - Look at different companies, roles, locations, or even industries. What are your options? - Do you have a plan B? If not, look into making one. - Do you have savings to tide you over in case you have to go some time without work? If not, start putting aside as much as you are able to, and build a buffer. Take **action**, and act with a high agency mindset. I hope you found this article useful. For more productivity tips & tricks, see [Productivity](https://www.keheka.com/tag/productivity/). ## Sign up for the newsletter Get free Professional Compositing Tutorials right in your inbox Subscribe Email sent! Check your inbox to complete your signup. No spam or ads. Unsubscribe anytime. ### Practical Use Cases For All The Merge Operations In Nuke URL: https://www.keheka.com/practical-use-cases-for-all-the-merge-operations-in-nuke/ Last updated: 2025-06-17T10:54:53.000Z ⭐ A deep dive into the merge operations of the Merge, ChannelMerge, MergeExpression, and PSDMerge nodes… _This post is for paying subscribers only._ ### Element Integration Trick Using Nuke URL: https://www.keheka.com/element-integration-trick-using-nuke/ Last updated: 2025-04-16T18:50:14.000Z *A simple but powerful technique for integrating elements into a plate which has complex or varying lighting or texture…* I’ve previously written an article about a great technique for adding/removing dynamic light interaction to/from your CG render, patch, element, scan, etc. when compositing: [Add Or Remove Flickering In Nuke](https://www.keheka.com/add-or-remove-flickering-in-nuke/). In this article, I'll show you another really useful, and even simpler, technique – which can also transfer the scan's *texture* onto what you’re comping. First, let’s take a look at an example of what it does: *Adding a graffiti element onto a concrete wall. No matter where the element is placed on the wall, it reacts correctly to the light, shadows, and texture of the wall in that area.* ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/04/Wall_v001.jpg) *Wall image.* ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/04/Graffiti_v001.jpg) *Graffiti element (premultiplied).* ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/04/Wall_Graffiti_Not_Integrated_v001.jpg) *The graffiti element merged straight over the wall image. Notice that it’s missing the light and shadow interaction. The concrete texture of the wall is also missing from the paint.* ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/04/Wall_Graffiti_Integrated_v001.jpg) *The same graffiti element as in the previous image, except the wall has been multiplied over it using a custom setup.* Let’s build the setup: First, position and Merge (over) the premultiplied element (A) straight over the background image (B): ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/04/Graffiti_01.png) *The premultiplied graffiti element is positioned and merged straight over the wall image.* Next, make a separate pipe out to the side from the background image. Connect a **Grade** node, and colour pick a bright area of the background image as the **whitepoint**. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/04/Graffiti_02.png) *Setting the whitepoint of the wall image, so that the bright area gets a value of 1\.* (In my case, I colour picked a bright area where the sunlight hits the wall). This will remap (expand/compress) the pixel values in the background image. The bright area that you picked will become a value of 1, the darkest areas of the scan stay pretty much the same, and everything in between will be shifted proportionately to fit the new range. And, any areas that were brighter than the bright area that you picked will proportionately get brighter than 1\. Next, remove any colour by connecting a **Saturation** node and setting it to **0**. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/04/Graffiti_03.png) *Desaturating the background image.* This will ensure we don’t get unwanted colour contamination in our element. Next, if the alpha is not already fully white, add a **Shuffle** node and set it to output a **white alpha**. (Keep R, G, and B as they are). ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/04/Graffiti_04.png) *Turning the alpha channel white.* Finally, Merge (multiply) the result of the new pipe (A) by the element (B). ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/04/Graffiti_05.png) *Multiplying the modified background image over the element.* Now, any parts of your element which go over the lit areas of your background image will stay as they are (anything multiplied by 1 remains the same), and any parts which go over a shadow area will get shadowed. 💡 Texture detail and variations in brightness (dynamic lighting) will also get captured via the multiply. Note that you can also ****mix back** the multiply operation to fine-tune the look. This technique works best in situations like the one shown above, however sometimes you don’t want the texture to show through onto your element. Let’s say we instead wanted to composite a picture frame onto the same wall: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/04/Frame_v001.jpg) *Picture frame element (premultiplied).* ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/04/Wall_Frame_Not_Integrated_v001.jpg) *The picture frame element merged straight over the wall. Notice that it’s missing the light and shadow interaction.* ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/04/Wall_Frame_Texture_v001.jpg) *The same as in the previous image, except the wall has been multiplied over the picture frame element using our setup. Notice that we’re getting (unwanted) texture from the wall onto the picture frame.* By blurring the background image before multiplying it with the element, you can remove fine texture detail: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/04/Picture_Frame_Setup.png) *The same setup as before, except we’re removing the texture details using a Blur node. It may help to sharpen the image a little bit after the Blur to avoid softening the lighting/shadows too much.* ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/04/Wall_Frame_Integrated_v001.jpg) *The same comp as before, except the wall image has been softened to smooth out the texture before being multiplied over the picture frame element.* 💡 Depending on how much you have to soften the image to get rid of the texture before you multiply it over the element, this method might not work. With fairly soft shadows like in this example, we can get away with blurring the image to remove the texture, but with hard shadows you may have to do some more custom masked blurring, or create new shadows using roto. I hope you found this tutorial useful. For more Nuke tips & tricks, see [Nuke](https://www.keheka.com/tag/nuke/). ## Sign up for the newsletter Get free Professional Compositing Tutorials right in your inbox Subscribe Email sent! Check your inbox to complete your signup. No spam or ads. Unsubscribe anytime. ### The Ticket To Adventure URL: https://www.keheka.com/the-ticket-to-adventure/ Last updated: 2025-04-01T20:29:13.000Z *One of the greatest filters for succeeding in a significant endeavour presents itself at the very beginning…* ## Crossing The Doorstep *Every adventure starts with a shock to the system. The body complains, the mind wobbles, and for a moment, I wonder why I didn’t just pick a nice little hobby like table tennis.* *Then I remember, this is exactly what I came for. To take on the adventure, the unknown, to soak in those little moments of beauty in between the suffering.* *The trail ahead is long, but the only way is forward. One foot in front of the other.* – [Russ Cook](https://x.com/hardestgeezer/status/1900111423268962390?s=46&ref=keheka.com) Cook has run back-to-back ultra marathons across [the entire length of Africa](https://youtu.be/nsdo%5Ftcw4VY?feature=shared&ref=keheka.com) – among many other incredible physical feats. And every single one of his journeys has started with a single step. A determined step in the right direction. The first of many cranks, turning the flywheel. Heavy and difficult at first, until the momentum picks up. The initial challenge of taking on any significant endeavour is facing the mental barrier of crossing your ‘doorstep’. Overcoming all of the inertia that resists you taking the first steps. Leaving the familiar behind, and embarking on something new and different. Still, adventure firmly awaits across that doorstep, and *not* before it. Nothing is going to happen until you start. Until you decide to cross your doorstep, whatever that means to you. Because adventure will rarely fall into your lap, but rather, you have to go and seek it out. And that means going from a state of *certain rest* to a state of *uncertainty and unrest*. That doorstep can seem high – maybe due to a fear of failure, a fear of mediocrity, or any other reservations you might have. Sometimes, it can feel like an insurmountable, visceral obstacle. Other times, it’s more concealed: a preconceived notion that’s holding you back without you even realising it – until you actually reflect on it. It might be a part of your survival instinct kicking in, warning you to not expose yourself to ‘danger’ or to ‘loss’. But that primeval instinct hasn’t quite adapted to the relatively safe and comfortable modern world, and usually over-corrects dramatically. There’s always going to be a risk of failure – you can try to minimise it but you’ll have to accept that. And true failure dwells in the act of not even trying, *not* in failing an attempt. Failing an attempt just means you’ve learned something for the next time. There may be a risk of embarrassment – but ultimately, who actually *really* cares? And is it *really* as bad as you think? We often overestimate how much other people think about us. (Hint: it's pretty rare, people are busy with their own lives). There is definitely going to be friction. For Cook, it’s a physical and mental friction. For us in VFX, who make art, there is a creative agitation. You have to be willing to feel uncomfortable – to stay in that vulnerable and frustrating state of uncertainty and unrest – for an unknown amount of time. As long as it takes until it ‘clicks’. And there’s no guarantee that it will. Especially if you give up too soon. The longer you endure the turmoil, the greater the chances are that something of value will emerge. Because there’s usually a reward at the other end of an adventure. And for most people, the doorstep is effectively the only thing keeping that reward out of reach. Not skill. You likely already have what it takes to start, and besides, you'll acquire more skills as you progress along the way. So, start what you’ve been wanting to start. Do what you’ve been wanting to do. Most likely, it won’t be easy at first, crossing that doorstep. – To decide to go after what you want, and *actually* taking the steps to do it. Facing discomfort. That’s the price of admission. The ticket to adventure. If you can accept the fact that you will have to fork it out and spend that initial effort upfront, it becomes a bit easier, in a sense. Try to look at it as an investment, instead: the reward at the end will often be greater than the upfront cost. And, when you’re underway, help others cross their doorsteps, too. ## Document Your Journey Adventures can be captivating. Chances are, other people would be interested in your journey, too. At least in the lived and learned experiences that you can share which will benefit them. Like in the [hero’s journey](https://en.m.wikipedia.org/wiki/Hero's%5Fjourney?ref=keheka.com), your own ‘quests’ end with the Return – *the hero comes back from the mysterious adventure with the power to bestow boons on his fellow man*. In your search for a solution to a problem, what you find can be of tremendous use to others. Especially, if your search is successful – but also even if you don’t find anything – documenting the path you took can be helpful to others undertaking the same search. One of my personal quests is an ongoing search for knowledge, specifically related to visual effects and compositing, and I’m documenting my lived and learned experiences here on this website. I had published almost 60 articles on the website before I regularly started sharing them on LinkedIn. (Not sure why – I was nervous to publicly share my work on a large platform, I guess? Not for any good reason, anyhow). The number of new members who joined the website almost immediately quadrupled. Loads of positive feedback poured in. I don’t know what I was afraid of, because people are generally really nice and supportive. – Imagine if I had posted on LinkedIn since day 1 instead of nearly two years in. And what if I had started my website much earlier? (Which I definitely could have). I’d be several years ahead. Then again, I could also imagine it being the other way around, and instead choose to be happy that I started when I did. In any case, learn from my mistakes and start documenting and sharing your experiences sooner rather than later. Start now. It’ll benefit everyone, including yourself. Because life rewards action. Make your mark on the map. Build your personal brand. Write your book. Create your artwork. Whatever it is you want to do, start by crossing your doorstep and earning your ticket to adventure. I hope you found this article useful. For more like this, see [Advice](https://www.keheka.com/tag/advice/). ## Sign up for the newsletter Get free Professional Compositing Tutorials right in your inbox Subscribe Email sent! Check your inbox to complete your signup. No spam or ads. Unsubscribe anytime. ### 15 Mistakes You Should Avoid As A Compositor URL: https://www.keheka.com/15-mistakes-you-should-avoid-as-a-compositor/ Last updated: 2025-03-29T23:12:14.000Z ⭐ Stand out as an excellent compositor among the crowd by avoiding these 15 mistakes… _This post is for paying subscribers only._ ### CornerPin Helper For Nuke URL: https://www.keheka.com/cornerpin-helper-for-nuke/ Last updated: 2025-07-02T06:09:26.000Z *A tool which creates helper lines between the CornerPin node’s points, making it easier to align them to partially occluded corners…* ❗ Nuke 15/16 has introduced a bug which breaks this tool. I have submitted a support ticket to The Foundry [here](https://support.foundry.com/hc/en-us/articles/27779823981714-ID-602761-Brush-stroke-points-are-not-updated-in-the-Viewer-when-translating-expressioned-points-of-a-RotoPaint-node-in-Nuke?ref=keheka.com). ## Additional Functionality I received a [comment](https://www.linkedin.com/feed/update/urn:li:activity:7301164246334140416?commentUrn=urn%3Ali%3Acomment%3A%28activity%3A7301164246334140416%2C7303325416029650944%29&dashCommentUrn=urn%3Ali%3Afsd%5Fcomment%3A%287303325416029650944%2Curn%3Ali%3Aactivity%3A7301164246334140416%29&ref=keheka.com) on my previous article ([Roto Assisted Tracking In Nuke](https://www.keheka.com/roto-assisted-tracking-in-nuke/)) which sparked an idea to create a tool for assisting with corner pinning in Nuke. It’s a simple helper node which you connect directly to your CornerPin node, and it creates lines between the points in the CornerPin. This makes it easier to align the CornerPin, for example when some of the corners are occluded but you can still see the straight edges between them: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/03/Helper.png) *Aligning the points of a CornerPin node to the hidden corners using the CornerPinHelper node.* If your screen insert is a rectangular image which fills the screen, you could of course just use that to help line up the image. But where this tool shines, is when you don’t. As a basic example, let’s say that you wanted to put this large red circle into the screen: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/03/Circle.png) *Large, red circle.* To help get the perspective just right, you wouldn’t have any straight edges in the image to line up with the edges of the screen. By using the CornerPinHelper, however, you can easily line up the image with the screen: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/03/Aligning_Circle.png) *Aligning the red circle with the perspective of the screen.* You can download the tool here: [CornerPinHelper v1.0Copy/paste the text into the Node Graph in Nuke. CornerPinHelper\_v1.0\_keheka.txt6 KBdownload-circle](https://www.keheka.com/content/files/2025/03/CornerPinHelper%5Fv1.0%5Fkeheka.txt "Download") It uses the same sort of idea as we saw in the previous *Roto Assisted Tracking In Nuke* article linked above: expression-linking splines (in this case [brush strokes](https://www.keheka.com/animating-paint-strokes-in-nuke/)) to the CornerPin’s points. Feel free to have a look inside of the group node (select the node and press Ctrl/Cmd + Enter to go inside) and check out the expressions for the brush strokes, on each spline point, and in the *Stroke* tab of the RotoPaint node. The tool is plug-and-play: just connect it directly to your CornerPin node and view it. If you want to make changes to the look, the settings in the tool are super simple: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/03/Settings-2.png) *Choose the width of the lines, increase their spacing (if you want dots instead of lines), and select the colour and the opacity of the lines, in the settings.* You could for example turn the helper lines into green and semi-transparent dots: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/03/Alternative_Look.png) *Changing the look of the helper lines.* ❗ Remember to disable or delete the helper tool when you’re done, so that you don’t accidentally render the helper lines. I hope you'll find this tool useful. For more Nuke tips & tricks, see [Nuke](https://www.keheka.com/tag/nuke/). ## Sign up for the newsletter Get free Professional Compositing Tutorials right in your inbox Subscribe Email sent! Check your inbox to complete your signup. No spam or ads. Unsubscribe anytime. ### Roto Assisted Tracking In Nuke URL: https://www.keheka.com/roto-assisted-tracking-in-nuke/ Last updated: 2025-03-10T10:18:36.000Z *How to use rotoscoping to assist with tracking an object…* ## Occluded Tracking Features Sometimes, it can be tricky to get a track right. For example, when a screen (to which you want to add a screen insert) gets partially occluded, and you can’t track all four corners of the screen properly to make a CornerPin node. If you’ve ever tried to guesstimate the position of the occluded corner(s)' tracking point(s) before, for instance, you’ll know how sensitive the CornerPin node is – and how only a slightly wrong offset in a point’s position can squash and stretch the inserted image by quite a bit. In those cases, you can often use rotoscoping to your advantage. When you roto the screen (feel free to use any working tracks to help animate the points on the spline), you can align the spline with the visible edges and corners of the screen to find the exact location of the hidden corner point(s). ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/02/iPad_Roto.jpg) *When a screen is partially occluded, for example by a person’s hands, you can often align a roto shape with the visible edges and corners of the screen to find the hidden corners. (The image has been exposed down to see the roto shape better).* And, once you’ve got animated roto points for all four corners, you can either link them to, or convert them to, tracks in a Tracker node: ## Link Method To link a point on a spline directly to a track, first create a Tracker node. In the Tracker node’s properties, create as many tracks as you would like to link up. (For example four tracks, one for each corner of a screen). In the Viewer, select the roto point that you want to link to a track. Right-click on the point, and select **copy** → **single point link**. Next, select a track in the Tracker node. Right-click on it, and then select **Paste** → **Paste Absolute**. Do the same for the other tracks – linking them up to their respective roto points – and you’ll end up with a complete track for the screen/object. Note that you'll have to **bake the expressions in the tracks in the Tracker node down into keyframes** to populate the Transform tab of the Tracker with keyframes, and use the Tracker like you normally would: Select all of your tracks, then right-click → **Edit** → **Generate**. Select your frame range in the *Generate keys* pop-up window, and hit **OK**. Then, change the *transform* drop-down menu in the Transform tab of the Tracker from *none* to for example *match-move*, and all of the keyframe information will show up. ❗ If your roto spline is in a layer which has additional transformations applied to it in the Transform tab (for example **translate*, **rotate*, **scale*, or **extra matrix*), that won’t be accounted for using this **Link Method*. See the **Convert Method* further below. Let’s break down how the linking expressions work under the hood by doing the process manually: Create a fresh Tracker node again, and in its properties create as many tracks as you would like to link up. Then, for each track, right-click it and select **Edit expressions**. In the *Expression Editor* window that pops up, add the following lines to their respective tracks: **Roto1.curves.Layer1.Bezier1.curve.0.main.x** **Roto1.curves.Layer1.Bezier1.curve.0.main.y** ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/02/Expression.png) *Example expression; linking track 1 of a Tracker node to point number 0 of the Roto1 node’s Bezier1 spline, which is grouped under Layer1\.* First, replace **Roto1** with the name of your Roto node. Then, replace **Layer1** with the name of the layer that your roto spline is grouped in. If your roto spline is placed directly in the Root layer (i.e. under no further layers), you can just delete **.Layer1**, i.e.: **Roto1.curves.Bezier1.curve.0.main.x** – Or, if you have multiple nested layers, keep adding the layer names (from top to bottom in the hierarchy) with a dot (**.**) separating each, for example: **Roto1.curves.Arm.Hand.IndexFinger.Bezier1.curve.0.main.x** Next, replace **Bezier1** with the name of your roto spline. Then, replace **0** with the number of the point on the spline that you want to track. You can find the number by clicking on the **toolbar\_label\_points** button in the roto menu in the Viewer: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/02/Enable_Toolbar_Label_Points.jpg) *Enabling the labelling of points on a spline in the Viewer.* Next, the word ***main*** in the expression above refers to the main point on the spline. But you could even use a point on the feathered roto edge, or on the bezier handle, as a track. If you select a point on your roto spline in the Viewer, and right-click → **add expression**, you can see on the left hand side what its various parameters are called: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/02/Curve_Expressions.jpg) *The parameter names of one point (point number 0) on a spline.* Swap the name of whichever point you prefer into the expression we saw earlier to get a track for that particular point. Finally, **x** and **y** just stand for the x and y position, so put them in the x and y track position expressions, respectively. 💡 Reminder again to bake the expressions in the tracks in the Tracker node down into keyframes after you're done: Select all of your tracks, then right-click → ****Edit** → ****Generate**. Choose your frame range in the **Generate keys* pop-up window, and hit ****OK**. Then, change the **transform* drop-down menu in the Transform tab of the Tracker from **none* to for example **match-move*, and you're good to go. ## Convert Method To simplify and automate the whole process, *and* have it work when you've got additional tracking/transformation data applied to your roto splines (for example, roto imported from Mocha or Silhouette), you can use a Python script such as this one: [GitHub - magnoborgo/RotoShapesToTrackers: Converts Nuke roto shapes to trackersConverts Nuke roto shapes to trackers. Contribute to magnoborgo/RotoShapesToTrackers development by creating an account on GitHub.![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/icon/pinned-octocat-093da3e6fa40-1.svg)GitHubmagnoborgo![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/thumbnail/RotoShapesToTrackers)](https://github.com/magnoborgo/RotoShapesToTrackers?ref=keheka.com) Tip: If you don’t want to install the script, you can make a tool in Nuke instead (and save it as a ToolSet): First, copy the main python code from here: [RotoShapesToTrackers/RotoShapes\_to\_trackers.py at master · magnoborgo/RotoShapesToTrackersConverts Nuke roto shapes to trackers. Contribute to magnoborgo/RotoShapesToTrackers development by creating an account on GitHub.![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/icon/pinned-octocat-093da3e6fa40-2.svg)GitHubmagnoborgo![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/thumbnail/RotoShapesToTrackers-1)](https://github.com/magnoborgo/RotoShapesToTrackers/blob/master/RotoShapes%5Fto%5Ftrackers.py?ref=keheka.com) Then, create a NoOp node in Nuke, and right-click in its properties → **Manage User Knobs**. Add a **Python Script Button**, and paste the code into the **Script** section. Name and label the script what you like, for example **bakeRotoToTracker** and **Bake Roto To Tracker**, and hit **OK**. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/02/Python_Script_Button.png) *Adding the Python script to a button in a node in Nuke.* Now, you’ll have a tool with a button in it which will run that Python script. Select the Roto node you want to convert, and then hit the button in the tool to convert the spline points to tracks. ❗ The script above will create a track for ****every** point on ****every** spline inside of the selected Roto node. So, make sure to make a copy of the Roto node and ****delete** all of the splines you don’t need tracks for, and also delete all the points you don’t need tracks for on the spline that you want to track, ****before** running the script. In a few seconds (depending on how many points you’re creating tracks for, and the length of the shot), the tool will create a Tracker node containing all the tracks. To complete the screen insert example, you’ll then have a four point track – ready to export a CornerPin node for tracking in the screen insert. You can also use the methods above to get free tracks when roto has already been completed for a shot. For example, if you’ve got access to the splines from the Roto department for the shot, you can use those to create tracking data and save yourself some work. 💡 Disclaimer: For both methods above, in order to get an accurate track from the roto, the points on the spline obviously have to stay consistent with the features that you want to track, all throughout the shot. I hope you found this tutorial useful. For more Nuke tips & tricks, see [Nuke](https://www.keheka.com/tag/nuke/). ## Sign up for the newsletter Get free Professional Compositing Tutorials right in your inbox Subscribe Email sent! Check your inbox to complete your signup. No spam or ads. Unsubscribe anytime. ### Restoring Details When Edge Extending In Nuke URL: https://www.keheka.com/restoring-details-when-edge-extending-in-nuke/ Last updated: 2025-02-12T23:10:59.000Z *Avoid losing details when applying edge extensions, by using these simple techniques…* ## Light And Dark Edges When extracting a subject or an object from a scan, and then putting them/it over a new background, the edges of the subject/object may get contaminated by the original background. – For example, when doing keying work, or when restoring parts of the scan back on top of a CG render. The softer the edge is (e.g. due to motion blur or defocus), the more of the original background will show through. And, usually, the contamination will appear as light or dark edges along the outline of your subject/object. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/02/Original_Edges-1.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/02/Original_Edges_Over_New_BG.jpg) *(1) Original image. (2) Subject placed over a new background, with the motion blurred edges being contaminated by the original background.* Sometimes, you can go in and surgically grade away these issues. But often, there will be complex detail in the contamination, with a mix of both light and dark edges, and you’ll have to rebuild the new edge instead. In those cases, **edge extension** is a great technique for removing the edge contamination. Most edge extension tools work by eroding in the RGB edge until the contamination disappears, and then in one way or another push or stretch the ‘clean’ pixels back outward to fill in the gaps from the erosion. But edge extensions are typically quite rough-handed. As they stretch/smear/warp the pixels from the inner parts of the subject/object outward to cover the contaminated edge, they destroy any (RGB) texture and detail in the process. Often, we want to keep all of the nice, dark details, but just remove the light, contaminated edges – or vice versa. And there’s a very easy way to do that: ## Min/Max After you have applied the edge extension (killing both light and dark details), merge back the wanted details with a **min** or a **max** operation. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/02/Original_Edge.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/02/Original_Edge_Over_New_BG.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/02/Edge_Extended.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/02/Edge_Extended_Min-1.jpg) *(1) Original footage. (2) Subject placed over a new background with its original, bright edge. (3) Dark details near the edge getting destroyed by the edge extension. (4) Dark details recovered using a Merge (min) operation.* For clarity, you would simply add a Merge (min or max) node with the **A-pipe** connected **before** the edge extension, and the **B-pipe** connected **after** the extension: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/02/Setup.png) *Using a Merge (min) to restore dark edge details after an edge extension.* 💡 Remember to mask the Merge (min or max) node to only affect the areas that you want to affect. To keep the most amount of details when extending edges, remember: ## Edge Extend Only As Much As Necessary Just grading an edge will mostly keep the original detail, but applying an edge extension to it won’t. Extending an edge means that you extrapolate and ‘invent’ new pixels. And so, always use edge extensions sparingly: Try to find the **minimum amount** that you have to stretch/smear/warp the edge, in order to retain as much detail as possible while still removing bright or dark edges. The min/max recovery operation should essentially only bring back the last little bits of detail. It’s a delicate balance. You’ll just want to nudge the values right inside of the edge slightly outwards, but avoid creating visible edge artefacts or losing too much detail. 💡 Feel free to use the colour dilation/edge extension tool of your choice. There are many options on Nukepedia, and Nuke has its own [EdgeExtend](https://learn.foundry.com/nuke/content/reference%5Fguide/filter%5Fnodes/edgeextend.html?ref=keheka.com) node as well. I often find myself using the [VectorExtendEdge](https://www.nukepedia.com/gizmos/filter/vectorextendedge?ref=keheka.com) tool, because it’s quite gentle and does a good job. Another great distortion edge warper is the [apEdgePush](https://adrianpueyo.com/gizmos/?ref=keheka.com). And, make sure to **mask the edge extension** to only the areas which need it: ## Plate-On-Plate Edge Extensions An easy trap to fall into when extending edges is to accidentally add plate-on-plate edge extensions. – And thus stretching or warping pixels in areas that aren’t bordering with the new background. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/02/Plate-On-Plate_Edge_Extension.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/02/No_Plate-On-Plate_Edge_Extension.jpg) *(1) Plate-on-plate edge extension – see the inner part of the shoulder getting warped (the extension is exaggerated to more clearly show the issue). (2) Masking the edge extension to avoid plate-on-plate edge extension – again, the extension is exaggerated (i.e. ignore the outer edge).* So, ensure that you **mask the edge extension** by the (properly held out) CG, DMP, or other replaced BG. That way, you’re only extending edges that go over the areas of the background that have been replaced. This video explains it well: 💡 ****Do a difference key between your composite and the original scan** in order to more easily catch any plate-on-plate edge extensions. ## Alternative Method For Detail Restoration Another way to restore lost detail after edge extending is to make use of **frequency separation**. By dividing the non-edge extended image by a slightly blurred version of itself, you can isolate the high frequency details in the image. Then, multiply that with the extended edges, masked by an edge matte, to restore the details in those areas: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/02/Frequency_Separaion.png) *Restoring detail by multiplying original high frequency detail back over the extended edges. In this case, using the* [*Perimeter*](https://www.keheka.com/perimeter-advanced-edge-mattes/) *tool to create an edge matte. Mix back the Merge (multiply) as needed.* 💡 If you only want to restore dark details, you can clamp the high frequency detail between 0 and 1\. And, if you only want to restore bright detail, set the Clamp node’s **minimum* value to 1 and increase or disable the **maximum* value. You could also combine this method with another technique for extending edges: using a [Rank filter](https://www.nukepedia.com/blink/filter/rank-filter/?ref=keheka.com). This video explains how the rank filter works: (It basically lets you suppress bright or dark edges based on a weight value). Finally, keep in mind that edge extensions may not always solve edge problems – in fact, they can be **a source for new problems**, like artefacts in the areas where the extension fails. So, make sure to **thoroughly check your edges** after edge extending them. 💡 Xavier Bourque explains another way to approach contaminated motion blurred edges, by [rebuilding them completely](https://youtu.be/aZeiuGs9Gco?feature=shared&ref=keheka.com). I hope you found this tutorial useful. For more Nuke tips & tricks, see [Nuke](https://www.keheka.com/tag/nuke/). ## Sign up for the newsletter Get free Professional Compositing Tutorials right in your inbox Subscribe Email sent! Check your inbox to complete your signup. No spam or ads. Unsubscribe anytime. ### Improving Your Leadership Skills Through Biomimicry URL: https://www.keheka.com/improving-your-leadership-skills-through-biomimicry/ Last updated: 2025-01-21T22:55:35.000Z *7 tips inspired by nature for becoming a better leader…* ## Biomimicry Biomimicry is the practice of imitating nature and natural systems, and using nature-inspired strategies to improve our human designs, systems, models, and processes. It involves observing and studying nature's problem-solving patterns, and using them to overcome complex human challenges. In this article, we’ll explore how we can learn from nature’s designs and behaviours, and use biomimicry to become better leaders. First, let’s look at a practical example of biomimicry, inspired by a particularly well-adapted hunter: ## The Kingfisher Like its name suggests, the Kingfisher specialises in catching fish. – (Or, to be more precise, *some* species of Kingfisher specialise in catching fish). Their long, narrow, and pointed bills make them excellent hunters in shallow bodies of water, such as rivers or canals. Taking advantage of their streamlined shape, the Kingfishers slice through the air as they dive down towards the water from above. And, when piercing through the surface, they barely make a splash. With considerable momentum from the dive, they swiftly glide down below to catch their underwater prey. All in one smooth, continuous motion; silent and quick – a lethal combination for a hunter. Keep the Kingfisher in mind, and let’s make a leap back in time to the late 1990s, and visit Japan. At the time, the West Japan Railway Corporation was faced with a problem regarding its famous high-speed railway lines, the [Shinkansen](https://en.wikipedia.org/wiki/Shinkansen?ref=keheka.com) bullet trains: The Shinkansen were able to reach very high speeds, but, due to their blunt nose design, air would build up in front of the trains when passing through tunnels. The compressed air produced sound waves – shooting off ahead of the train – which made a loud boom as they rapidly dispersed upon exiting the tunnel. This often happened in dense residential areas, disturbing people living nearby. But the thunderous noise pollution also affected any area across the country where the train passed through tunnels, disrupting wildlife and even impacting passengers on the train. Reducing the speed of the train to stop the loud tunnel booms would defeat the purpose of a high-speed railway, and so the Shinkansen engineering team had to adapt and look for other solutions. Luckily, chief engineer Eiji Nakatsu was an avid bird watcher. He had noticed that the Kingfisher elegantly manoeuvres pressure differences – as it travels from one medium (air) to another (water) silently and quickly to catch its prey. When testing different nose designs, the engineering team discovered that the streamlined shape of the Kingfisher’s bill – a design suggested by Nakatsu – was incredibly aerodynamic and well-adapted to alleviate air pressure buildup in enclosed spaces. – Like in a tunnel. Instead of pushing air in front of the train, the Kingfisher-inspired nose cut through it, allowing the air to flow past. And so, based on their findings, the team modelled the nose of the Shinkansen to mimic the shape of the Kingfisher’s bill. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/01/Shinkansen_Kingfisher.jpg) *The Kingfisher and the Shinkansen bullet train.* As a result, they successfully put an end to the loud tunnel booms, permitting them to operate the trains at high speeds through residential districts. But that wasn’t all: The new, aerodynamic nose design also allowed the trains to travel faster, consume less power while maintaining high speeds, *and* produce less noise overall during travel, increasing passenger comfort. By mimicking nature, Nakatsu and his engineers were able to solve a complex problem, and found even further benefits from doing so. And there are many such examples of human design improvements inspired by nature. 💡 For instance, aircraft structural elements that use hexagonal [honeycomb structures](https://en.wikipedia.org/wiki/Honeycomb%5Fstructure?ref=keheka.com) due to their high strength-to-weight ratio. Or, burs inspiring [the invention of Velcro](https://en.wikipedia.org/wiki/Hook-and-loop%5Ffastener?ref=keheka.com); slug slime inspiring a new type of [surgical glue](https://wyss.harvard.edu/technology/tough-gel-adhesives-for-wound-healing/?ref=keheka.com); or UV coated spiderwebs inspiring [bird safe windows](https://www.anthropocenemagazine.org/conservation/2012/09/windows-inspired-by-spider-webs-2/?ref=keheka.com). There is a *lot* we can learn from nature. Because evolution has had the benefit of millions of years of successive improvement via natural selection to optimise its designs. And, through biomimicry, we can take advantage of all of this accumulated trial and error. Once you start thinking this way, you can also apply biomimicry in ways *other* than to guide design choices. As stated earlier, you can use it to improve your leadership skills. Let’s take a closer look at how you can do just that. – It’s all about drawing analogies. The Shinkansen-Kingfisher story already touched on a couple of important points for being a good leader: ### 01: Adapt To The Task Like the Kingfisher and the Shinkansen, as a leader you have to adapt to the challenges you’re facing. Asking a parrot, with its curved beak and large body, to catch fish by diving into the water from above might not be the best idea. The poor bird would probably fail, simply because it’s not as well-adapted to the task as the Kingfisher. It would more than likely just cause a big splash and scare the fish away. Just like how the blunt nose of the original Shinkansen caused the tunnel booms, disturbing everyone with noise pollution. So, when something isn’t working, ask yourself: how can you change your approach to fit the needs of the project or the task? You might potentially have to make some compromises, but not necessarily! Because, with some luck, you may just be able to come up with an ingenious idea and solve the problem outright. The Shinkansen engineers didn’t reduce the speed of the train, which would have been an easy solution (but bad for the railway service). Instead, they found a way to avoid the tunnel boom while maintaining high speeds. They adapted to the requirements of the task. Similarly, if you’re struggling with a problem, try guiding your team in attacking it from different angles. [Be creative](https://www.keheka.com/how-to-be-creative/), test different designs and methods, and/or look to nature for inspiration. Once, when developing the look for a visual effect on an undisclosed project – where the client didn’t have a clear idea of what they wanted – we had several artists work simultaneously on the same effect, coming up with multiple varied designs. That way, we could initially present the client with a broad variety of options, and hone in on what they liked and disliked. In this particular case, adapting to a shotgun approach helped us reach the preferred design faster than by letting a lone sniper aimlessly try to hit an undefined target. In other cases, the target may very well be crystal clear, and it would be better to send in your best shooter. It all depends on the challenge you’re presented with, and you just have to adapt accordingly. Adapting also means not giving up, but finding a different way to your goal when something goes wrong. Try to act like a GPS navigation system, in a sense: if you miss a turn, reroute and find a different path forward. (Which might even mean doing a U-turn to get back on track). Or, in the spirit of this article – using nature as an example – try to act like ants: when an obstacle blocks a path, ants will quickly find an alternative route or work together to move the barrier. ### 02: Alleviate Pressure Buildup The success of the Kingfisher’s hunting strategy and the Shinkansen’s high speed tunnel traversal both rely on dealing with pressure in an effective way. And, as a leader, managing pressure in your team is crucial for sustaining good morale. Where is pressure building up? How can you streamline systems and processes (especially daily ones) so that issues don’t grow and fester? Could you for example make a tool or a template that [automates a tedious task](https://www.keheka.com/automating-tedious-tasks-using-python-in-nuke/) which everybody hates doing, or where it’s easy to make mistakes? Try to remove as many annoying and time consuming obstacles as possible, and facilitate the work of your team members. By regularly assessing how you can make life easier for your team, and then acting on your findings, unwanted pressure won’t build up as easily. And when you’re not ‘pushing heavy air’ in front of you, life becomes easier for you as well. Here’s for example one issue we fixed to avoid further frustration: When sharing shot work between vendors, you may have to package up and send Nuke scripts containing your composite to another vendor. A Nuke script can be referencing dozens or even hundreds of external files, and hunting them all down can be a real pain. – For several reasons: The *Comp Info* option in Nuke’s *File* menu doesn’t list the file paths to Deep files, geometry, or files within Groups, for example. And it doesn’t provide a complete file path including the actual file name – just the folder it’s in. Furthermore, compositors will often leave a bunch of files in the Nuke script that aren’t actually used in the composite, like old versions, references, or alternative elements for testing. Which means, there was a lot of manual work required from us to ensure that all the correct files were being sent. And it was easy to make mistakes and miss some files or send redundant ones. So instead, we made a tool that scans Nuke scripts for upstream dependencies and packages up all of the necessary files automatically. Which meant, we could focus more on what *we* do best, like creative tasks, and let the computer handle what *it* does best. A weight off our shoulders – and pressure released from the team. Alleviating pressure also applies to *yourself* as a leader. You can’t (and shouldn’t have to) deal with everything yourself. Avoid becoming overwhelmed, as it will hurt both you and your team. To do that, make sure to delegate suitable tasks. **Delegate, delegate, delegate.** If you don’t, you’ll very quickly end up with an enormous amount of work on your plate, easily 2-3 people’s worth. And that’s a sure fire way to burn out. In the past, I’ve worked months and months of consecutive weekends and late nights throughout the week. It’s not healthy. Learn from my mistakes, and delegate. Remember that work often comes in waves, so give yourself a buffer, as well. Don’t completely pack your schedule, because you may suddenly be called to ‘fight a fire’ somewhere else. And if things do end up being a bit quiet on your end, you can pick up more work from the team and help speed things along, which is great. I believe 100% that a good leader should lead by example, and pull their weight in the team. *And* that delegating tasks in order to slack off is inexcusable. Delegation is meant for creating a sustainable working environment for yourself, and for your team. (And for assigning work that’s better suited to, or would help develop, someone else). It frees up your time to focus on more important things. – And it alleviates pressure buildup. Next, let’s look to the woods for more opportunities to employ biomimicry: ## The Mother Tree The oldest and largest trees in a forest are called hub trees – or, more fondly, mother trees. Their large canopies partially shade the smaller trees and young sprouts in the understory below, and protect them from thermal stress and wind damage. Trees that grow up in their mother's shade get less light and grow slowly, which leads to dense wood and a strong tree. But the young trees that grow in the open sun, without this shade, grow very fast. This can lead to soft wood, which makes them susceptible to rot and fungus. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/01/Hard_Vs_Soft_Wood.png) *Slow-growing, harder wood (top) vs. fast-growing, softer wood (bottom).* Through photosynthesis, the grand canopies of the mother trees produce an abundance of organic compounds, like sugars. The sugar travels down within the tree in the sap, and is used as a source of energy. With such large canopies, the mother trees produce more sugars and other nutrients than what’s needed for themselves. But the surplus is not wasted. They [share the excess nutrients](https://mothertreeproject.org/about-mother-trees-in-the-forest/?ref=keheka.com) with other trees in the forest through an intricate root system below the ground. So, in addition to benefiting from the shade and protection of the overstory, young trees and sprouts are also physically connected to the mother tree underground. Which means, they tap into extra water in the root system and receive nutrients produced by the mother tree. Not only that, when the mother tree faces danger from an invasive predator or disease, it releases chemical signals into the air or through what’s called the mycorrhizal network (an underground root network of fungi). The surrounding trees pick up these cues and respond by releasing hormones or chemicals to deter threats. (And this signalling goes both ways). For example, when a giraffe begins munching on acacia leaves, the tree responds to the injury by emitting a distress signal in the form of ethylene gas. Neighbouring acacias react to this by pumping tannins into their leaves as a defence mechanism. Since high tannins negatively impact the taste and nutritional value of the leaves, giraffes actively avoid those plants. And so, not only do the mother trees protect and shield the young below, providing a safe environment for growth, they also help nurture their development and communicate important information, ensuring the sprouts both survive *and* thrive. When you think about it, mother trees are great leaders of the forest. Similarly, if you’re leading a team, a part of your job is to help create the right environment and conditions for your team members to thrive. Like the mother tree, you should protect your team, provide a safe environment for growth, help nurture their development, and communicate important information clearly. – Which make up the next four important points for being a good leader: ### 03: Protect Your Team Part of your job as a leader is to shield your team from unnecessary pain and stress. An artist shouldn't have to worry about all of the myriad problems that production, supervisors, or management face on a project, for example. They should be allowed to focus on their own tasks and do their best work. You might be dealing with a difficult client; you could be dealing with a lack of team members due to holidays or sickness; you may be dealing with a deadline that’s been brought forward; financial stress on the project; or all sorts of political issues. But adding this type of (sometimes immense) additional pressure onto the artist is neither fair nor productive. Instead, as a leader, you should act like a canopy that shields the team members underneath from these issues. – I’m not talking about hiding problems, or pretending that everything is fine when it’s not. I’m talking about being a buffer. About being the first line of defence, if you will, and filtering and conveying the important bits of information in a productive way to your team. Protect them from the storm above, so that they’re able to work safely and effectively. They’ll be more creative, less stressed, and more productive. Another way to protect your team is to [take responsibility](https://hbr.org/2011/10/why-good-leaders-pass-the-cred?ref=keheka.com) when things go wrong. A good leader is a person who takes a little bit more than their share of the blame and a little bit less than their share of the credit. If team members are scared to be thrown under the bus for every little mistake or wrong turn they make, they are less likely to take the creative risks necessary to come up with something great. However, in a psychologically *safe* environment, team members will feel that they can share their ideas and opinions without fear of judgment or retribution. This builds trust, and it fosters innovation. And, the team is more likely to be engaged and proactive in addressing issues. Speaking of safe environments: ### 04: Provide A Safe Environment For Growth Several [studies](https://sifted.eu/articles/uk-founders-socioeconomic-privilege?ref=keheka.com) [have](https://www.bertelsmann-stiftung.de/fileadmin/files/user%5Fupload/StartupssozHerkunft%5Ffinal3%5Fen.pdf?ref=keheka.com) [shown](https://blogs.lse.ac.uk/businessreview/2020/12/03/disentangling-privilege-from-merit-a-crucial-step-for-true-inclusion-at-work/?ref=keheka.com) that successful entrepreneurs tend to come from privileged backgrounds. You’d have to be a real risk-taker to take on an entrepreneurial venture if you don't have an economic or social network to protect you in case of failure. These benefits allow you the freedom to take chances, to fail, to learn, and to grow. You’re in safe hands no matter what, so you can focus on trying to win, and not worry so much about failing. Which tends to make you win more often. So, how can we provide a similar safety net and support structure to our team members (especially juniors) to help them succeed? What does a safe environment for growth look like? First of all, you can start by giving them the right level of challenge. You wouldn’t throw a junior employee straight into the deep end, asking them to tackle the hardest tasks without any support – most would ‘drown’. Instead, it’s better to assign them tasks which are a good match for their skill level. Which means, tasks that are challenging to them but still possible to accomplish. For example, we label every shot task on a show based on the level of artist we think is required for the work involved: - Junior - Junior+ - Mid-level - Mid-level+ - Senior - Senior+ – Where ‘+’ indicates someone with above average skills for their level. As much as possible, shots are assigned to artists based on their level. Senior+ shots wouldn’t go to a Junior artist, for example, as that would just cause them unnecessary frustration – and would likely end up with the shots not being finished on time. And, giving Senior artists only Junior tasks is not great, either, because that type of work would almost be of no challenge to them. More than likely, it would just feel tedious and boring. Instead, match the task to the skill level. This means a Junior+ task would typically go to a solid junior or to an early mid-level artist, for example. And if they're up for it, we often let artists test themselves a step up. Secondly, where possible, allow the team some creative freedom. Let them test things out, try different methods, and figure out what works. How else will they truly learn? I really do see the benefit of templates, and there is definitely a place for them, but as much as possible I try to let artists create their own Nuke scripts, and structure their composites in a way that makes sense to them. 💡 Although, I do advocate following some [best practices](https://www.keheka.com/best-practices-for-compositing-in-nuke/), at least as a base, so that when others pick up the work they can understand what’s been done. – In essence, let them have ownership over their work. With ownership comes responsibility, and taking pride in what you make. And this typically leads to extra effort being put into the work, creating a better result. And lastly, have an open door policy so that when someone on your team is struggling to figure something out, they know that they can always come to you for advice on how to move forward. Which leads to the next point: ### 05: Help Nurture And Develop Your Team Throughout all of my career, and *especially* when I started out as a junior, I felt that any day where I learned something new was a great day. Because every *aha*\-moment, no matter how small, is a stepping stone to becoming better. And it’s important to feel that you’re progressing and improving. I think it’s a feeling every team member should have. Thanks to all of the supervisors, leads, and senior peers I’ve worked with who shared their knowledge with me, and the benefits I saw from that, I’ve realised how important it is to nurture and develop your team. Especially when there is no, or little, formal training in place at a company. And now, when so many of us are working from home, I would argue that it’s even more important to provide team members with training and opportunities for developing their skills. It could be very informal; just hopping on a call to show them something and let them ask questions; or, you could set up regular, more structured training sessions. Another 2D supervisor and I used to do bi-weekly “Composi-tips” sessions where we shared useful compositing tools and techniques related to a new topic each session. For example, keying, AOVs, projections, Deep compositing, or tech checking. 💡 We shared copies of the master Nuke scripts containing all of the info with the team, but in hindsight, we should also have filmed the sessions as training material for future compositors. However, you may have seen [Trixter Film](https://www.youtube.com/@TrixterFilm?ref=keheka.com) doing something similar for their team, which they are sharing publicly. Their videos are a fantastic resource – I highly recommend them. Based on feedback, this training turned out to be very useful for the compositors. And so, in whichever format works best for you and your team, try to dedicate time for development. Like the mother tree, enrich the soil with nutrients and your sprouts will grow strong. ### 06: Communicate Important Information Clearly On a project, the difference between a catastrophic failure and a massive success will often be (a lack of) good communication. It’s crucial to be clear in the way that you speak, write, demonstrate, and explain things, so that all parties understand the information and get on the same page. Adapt your communication style to meet the needs of your team. For example, some team members may need detailed instructions and reassurance, while others may thrive with more autonomy. (Make sure to always provide enough information, though). And, try to keep the receiver’s point of view in mind: For example, when giving (especially written) notes on a shot, are you telling the artist what to do, or what *not* to do? Or, are you just stating what the problem is? Unless you’re very clear in your language, mixing different styles of feedback can cause confusion – especially for non-native English speakers. Keep it simple and clear. And make sure everyone is in the loop regarding issues relating to them. If a compositor is waiting for a new CG render and the CG supervisor tells you it’s ready to pick up, relay that information right away. By keeping everyone up to date, you avoid wasting time and can address problems sooner. It’s also useful to connect artists in different departments together directly so that they can solve a common issue, instead of you always having to pass messages back and forth. (But they should CC you and Production to keep everyone in the loop). As long as all the important information flows freely to everyone who needs to know, you’re doing a good job as a leader. Finally, let’s jump into the ocean for one more opportunity to employ biomimicry: ## The Octopus Octopuses are among the most skilled camouflage artists in the world, and they are often admired for their phenomenal ability to sense and respond to their environment. [According to Jon Ablett](https://www.nhm.ac.uk/discover/octopuses-keep-surprising-us-here-are-eight-examples-how.html?ref=keheka.com), who looks after the cephalopod collection at the Natural History Museum, octopuses have a couple of important physical advantages that enable this camouflage: 1. **Chromatophores**: Octopuses have thousands of specialised cells under their skin, called chromatophores, which help them to change *colour* in an instant. 1. **Papillae**: Octopuses also have tiny areas of skin that they can expand or retract, called papillae, which enable them to rapidly change the *texture* (shape) of their skin to match their surroundings. 💡 Using biomimicry, researchers have engineered a [synthetic skin](http://science.sciencemag.org/content/358/6360/210?ref=keheka.com) that mimics the function and design of the papillae, creating a stretchy material that can be programmed to transform into 3D shapes. However, neither of those two things would be of much use without the octopus being able to rapidly and accurately analyse its environment: [Background matching](https://pmc.ncbi.nlm.nih.gov/articles/PMC3359305/?ref=keheka.com) is a dynamic, visually driven process, in which the octopus uses its highly acute eyesight to map a precise picture of the surrounding environment. It very quickly understands the topography and characteristics of nearby features, then changes its own appearance accordingly to blend in. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/01/Octopus_Camouflaging.jpg) *An octopus* [*seamlessly blending in*](https://www.cell.com/current-biology/fulltext/S0960-9822%2807%2901138-4?ref=keheka.com) *with its environment.* It assesses a range of background variables such as brightness, contrast, edge detail, orientation, and size of objects when deciding which camouflage pattern to display. In essence, an octopus is *exceptionally* aware of its surroundings and any changes therein. And that’s also a valuable skill for you to have as a leader. ### 07: Be Aware Of Your Surroundings Sensing the emotional undercurrents within a team and adapting accordingly will help make you an effective leader. Try to pay attention to things like body language, tone of voice, and other subtle cues that might signal stress, dissatisfaction, or excitement among your team members. If a member of the team is struggling with personal issues, the best thing to do is to show them empathy, compassion, and understanding. We're not surgeons, and delaying their work won’t be a matter of life or death. And so, if they need some time and space, try to accommodate that for them. 💡 In fact, **expect* these things to happen from time to time, and account for them with a buffer in your bid/budget. If you notice that someone is overwhelmed, try to shift a part of their workload over to another suitable team member, who’s free to take on more work. This is both a *reactive* and a *proactive* process. As well as adjusting workloads when issues crop up, look ahead to predict bottlenecks in the schedule. On the other hand, if someone is excited and passionate about a project/sequence/shot, channel that energy into good use. Assign them tasks they’re interested in, and watch the team’s productivity skyrocket. Being a good leader is often just about reading the room. Pay attention and *actively* listen to what your team members are saying, with and without words. And remember that energy (i.e. vibes) transfers quickly – both good and bad. Try to recognise, understand, and manage your own emotions, because they’ll have an impact on the emotions of others. If you’re having a bad day, for example, take some deep breaths before you jump on the next call. If you can ‘reset’ and start fresh again with a good mood, that’s so much better than coming in with a clearly annoyed tone of voice and demeanour. And, if you spot someone else having a bad day, try to cheer them up, or let them vent for a while. In any case, try to always keep a feeler out, check in with the team, and identify potential issues before they escalate. Like the octopus, be aware of your surroundings. And that wraps up these 7 tips for becoming a better leader. Combine all of the tips above to help create a healthy ecosystem within your team. And, keep looking to nature for new ways to improve. I hope you found this article useful. For more like this, see [Advice](https://www.keheka.com/tag/advice/). ## Sign up for the newsletter Get free Professional Compositing Tutorials right in your inbox Subscribe Email sent! Check your inbox to complete your signup. No spam or ads. Unsubscribe anytime. ### How To Be More Creative URL: https://www.keheka.com/how-to-be-creative/ Last updated: 2025-02-16T09:35:58.000Z ⭐ 25 highly effective ways of boosting your creative output… _This post is for paying subscribers only._ ### Rendering A Labelled Layer Contact Sheet In Nuke URL: https://www.keheka.com/rendering-a-labelled-layer-contact-sheet-in-nuke/ Last updated: 2025-02-16T09:35:36.000Z ⭐ A workaround for the non-renderable layer names in the LayerContactSheet node… _This post is for paying subscribers only._ ### Fixing Edge Of Frame Glow Popping In Nuke URL: https://www.keheka.com/fixing-edge-of-frame-glow-popping-in-nuke/ Last updated: 2024-12-30T09:00:39.000Z *A simple solution for removing pops in the glow on objects that enter and/or exit the frame…* ## A Common Glow Issue If you’ve ever applied glow to bright objects that enter and/or exit the frame, you may have run into an issue with popping in the glow. It happens for example when there is not enough overscan, and the bright object gets cut off by the edge of the frame. This changes the shape and size of the object that the glow operation ‘sees’, leading to flickering or popping in the glow. Below I have animated a white roto shape going in and out of the frame (with no overscan), and applied some glow to it: *The glow is popping at the edges of the frame.* As soon as the shape gets cut off by the frame, you can see the drastic popping in the glow. There are a few solutions to this problem. You may previously have patched the shape using an earlier/later frame, and tracked/animated it offscreen. Or, you may have rendered a large bounding box to keep the shape intact offscreen. – Which, depending on the size of the glow, may have needed to be huge. But here’s a simpler solution: ## Black Outside First, make a new branch off to the side of your comp where you intend to apply the glow. Then, add a Crop node to this new pipe (double check that it inherits the same format), and make sure **black outside** is enabled. This will add a 1 pixel black border just outside of your frame. Apply the glow, making sure that it’s set to output the **effect only**. Finally, Merge (plus) this with your comp. *Fixing the popping glow by adding a 1 pixel black border around the image.* ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/12/Glow_Crop_Setup.png) *The setup.* Often, this will be enough to remove the popping at the edge of the frame. If not, you can also increase the **softness** value in the Crop node. This will feather the edges of the frame, darkening the outer parts of your image. And so when you add the glow, it will softly fade out at the edges of the frame. This technique is also useful for when you need to feather the edges of for example a 2D smoke element to avoid matte lines in your comp. Instead of creating roto shapes to mask the element, just feather it in using the Crop node. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/12/Smoke_Element.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/12/Smoke_Element_Soft_Cropped.jpg) *Feathering the edges of a smoke element using the softness setting in a Crop node.* I hope you found this tutorial useful. For more Nuke tips & tricks, see [Nuke](https://www.keheka.com/tag/nuke/). ## Sign up for the newsletter Get free Professional Compositing Tutorials right in your inbox Subscribe Email sent! Check your inbox to complete your signup. No spam. Unsubscribe anytime. ### 100: Legacy URL: https://www.keheka.com/100-legacy/ Last updated: 2024-12-23T08:50:52.000Z *The motivation behind taking 100 steps to improve our VFX community…* *leg·​a·​cy* *: the long-lasting impact of particular events, actions, etc. that took place in the past, or of a person’s life.* *: something transmitted by or received from an ancestor or predecessor or from the past.* ## Core Motivation This is my 100th article on [www.keheka.com](https://www.keheka.com/) 🥳🎉! One hundred compositing tutorials, tools, tips, advice, and productivity guides. (Most of which are completely free for anyone to read and benefit from). – Or, in other words, 100 steps taken (so far!) to improve our VFX community. And so I thought it would be fitting to talk about the **driving force** behind this now quite considerable body of work. I want to talk about motivation. Not about the surface-level, fleeting, spur-of-the-moment type of motivation, but the core motivation *behind* – that drives you to do something more substantial. For many of us, perhaps whether we really have thought about it or not, one core motivation is **legacy**. To make something of yourself – to exceed your own limitations and build something that you’re really proud of, and that you’re grateful to yourself for having made. Something which you can share, that will help [your fellow crew members](https://www.keheka.com/spaceship-earth/) long term. It’s about making a positive impact on your own part of the world – contributing to your community – for example by sharing your knowledge and helping others. It’s equally about acting in a way that takes other people’s wellbeing into account. And trying to be a good example through your actions – actions which others may think are worthy of practicing themselves. 💡 It can be useful to think back on moments in your life when you felt that someone really helped you, or even amazed you. It could be a teacher, a friend, a stranger – or even yourself, discovering something new. Impactful moments. And then trying to give someone else the same beneficial experience that you had. It could be a small **aha*\-moment, or a greater contribution – something **good* for someone else. I’m a firm believer in always trying to leave your surroundings in the same (good) or *better* condition than you found them in. In not leaving a burden for someone else to pick up, but rather having others benefit from the way you acted. 💡 This can be something as simple as [keeping your Nuke scripts clean and organised](https://www.keheka.com/best-practices-for-compositing-in-nuke/), in the event that others will have to pick them up. I also believe in always trying to be useful. In picking up the slack (without being taken advantage of), and contributing wholeheartedly where you can. Especially in areas where you have an advantage. Doing what only you can do. Or rather, doing what only you are *willing* to do. There’s not a whole lot of people who would trade this amount of free time or sleep for writing 100 compositing tutorials and productivity guides online over the past three years, especially while working a full time job. (Or even more, during crunch times). However, I fully *believe* it’s worth it – and so it has become my ongoing contribution to the community. And you may find that something else is worth spending *your* time creating and sharing. Something which sparks your own core motivation. My advice is that you search for that thing. Because core motivation will have you sit down and do the work even when you don’t necessarily feel like it. It will overpower laziness. Core motivation will override the excuses you might tell yourself. Core motivation is very disciplined. It will do what needs to be done. It will find the time to do the work. – It will *make* the time. Most of the time, however, that core motivation will make you **want** to do the work – to [build your legacy](https://www.keheka.com/whats-your-immortality-project/), or otherwise contribute to the world. It’ll sometimes wake you up in the night with great ideas, always working in the background, like a muse in your subconscious. It’ll make you highly perceptive and in tune with what you’re building – constantly connecting dots and coming up with new perspectives. If you haven’t discovered it yet, to find out what’s worth spending *your* time on, it’s a good idea to take a step back and look at the bigger picture. ## Expanding Your Time Bubble In this ‘Age of Now’ that we live in, where almost everything that we read about has happened within the past 24 hours, there perhaps isn’t enough forward thinking, nor enough reflecting on the past, beyond that one-day bubble of time. When habitual instant gratification has become the norm, it can feel unnecessary to consider a longer term perspective. However, I think that’s a grave mistake. There was a famous experiment on instant vs. delayed gratification – the [Stanford marshmallow experiment](https://en.m.wikipedia.org/wiki/Stanford%5Fmarshmallow%5Fexperiment?ref=keheka.com) – which showed a correlation between the ability to suffer the short term ‘pain’ of delaying gratification, and the rate of success later in life. The children who were able to delay their gratification seemed to do better in adulthood. It’s similar to saving for a pension. You take a ‘loss’ now (putting away some of the money that you currently *could* have spent and enjoyed), for a greater gain in the future (a larger sum of money that will secure your old age). It’s something that was instilled within me early on in life. We have to consider and plan for the future, long term, to create the best conditions for ourselves and for the upcoming generations. And for that same reason, we have to consider the past to avoid our previous mistakes. While important, it's not enough to *only* live in the Now. Especially when the current Now seems full of doom and gloom. ## Look For The Helpers After a war, a disaster, or an accident, it can be easy to look at the chaos and lose hope. A quick browse through the VFX subreddit lately might lead you to believe that the industry is completely going south, for example. But there will always be a spirit of rebuilding, and people looking to help: "When I was a boy and I would see scary things in the news, my mother would say to me, 'Look for the helpers. You will always find people who are helping.' To this day, especially in times of disaster, I remember my mother's words, and I am always comforted by realizing that there are still so many helpers — so many caring people in this world." – Mr. Rogers After the global epidemic, strikes, economic downturn, and the uncertainty we’ve seen in the past few years, the VFX community needs all the help it can get. But we shouldn’t expect or count on external help. It’s up to us. In addition to helping people get back on their feet, we have to prepare and build for a better future, driving everyone forward. For example, now that so many are working from home, there is a lack of the natural training that compositors would get if they were sitting right next to their Lead, Supe, or another peer. Someone should be providing that training. Someone *has* to provide that. Or else, it would be like if we stopped saving for a pension. And so that’s what this website is trying to emulate, in a way – giving you that place to learn and grow. That’s the “burden” (read: honour) that I’ve been trying to help carry, together with several other mentors online. ## Paying It Forward Like mentioned earlier, over the past 100 articles I’ve sacrificed a fair amount of free time to share (what I hope is) useful information with the compositing community. But it’s easily worth it, because helping to guide the current and upcoming generations of compositors – and paving the way for you to do better than I have – is rewarding in itself. It’s my long term contribution to your future, showing you how to navigate situations where I’ve made mistakes in the past. And I hope that you’ll take inspiration and pay it forward as well. I read somewhere: **Go fast alone, go far together.** Ego may initially take the lead off the starting line, but Community will outrun it over time. And life is the longest marathon we’ll ever run. So, with that, I plan on continuing to share my knowledge with you, one article at a time. Here's to the next 100! I hope you found this article useful. For more like this, see [Advice](https://www.keheka.com/tag/advice/). [Sign up for the newsletter!](https://www.keheka.com/#/portal/signup) ### Useful Nuke Tools And Setups URL: https://www.keheka.com/useful-nuke-tools-and-setups/ Last updated: 2025-11-26T08:54:21.000Z *A collection of great gizmos and node setups which will improve your workflows in Nuke…* ## Monumental Contributions Nuke has been around [for a long time](https://www.foundry.com/insights/film-tv/history-of-nuke-compositing?ref=keheka.com). Over the years, people from all over the world have created thousands of Nuke tools and setups, and graciously shared them with the compositing community. 💡 Massively thanks to hubs like Nukepedia and GitHub, but also due in no small part to the many wonderful Nuke blogs and personal websites out there. In this article, I would like to highlight some of the contributions which have been, and continue to be, of great use to me in my career, and which I think you should know about. Tools which are so useful, that I believe they should be in every compositor’s toolbox. ### Nuke Survival Toolkit I’d like to start off with a large collection of great tools, which are curated, maintained, and in several cases made by Tony Lyons: [Nuke Survival Toolkit](https://github.com/CreativeLyons/NukeSurvivalToolkit%5FpublicRelease?ref=keheka.com) ### Pixelfudger Gizmos Next, we have a wonderful suite of tools by Xavier Bourque: [Pixelfudger Gizmos](https://pixelfudger.com/?ref=keheka.com) ### apTools Adrian Pueyo has contributed many great tools, which you can find in the Nuke Survival Toolkit, or download individually below: [apTools](https://adrianpueyo.com/gizmos/?ref=keheka.com) He is also the creator of the very useful node connection system: [Stamps](https://adrianpueyo.com/stamps/?ref=keheka.com) ### bmTools Ben McEwan has shared a lot of great tools over the years, which you can find in his GitHub repository: [Ben McEwan’s Tools](https://github.com/BenMcEwan/nuke%5Fpublic?ref=keheka.com) ### Buddy System Hiram Gifford has built a nice collection of tools: [Buddy System](https://www.hiramgifford.com/buddy-system?ref=keheka.com) ### MJT Lab Mark Joey Tang has an extensive repository of tools, especially for manipulating Deep and Position data: [MJT Lab](https://github.com/xmjtx/MJTLab?ref=keheka.com) ### SpinVFX Gizmos Erwin Leroy has put together a great collection of different tools: [SpinVFX Gizmos](https://github.com/SpinVFX/spin%5Fnuke%5Fgizmos?ref=keheka.com) ### Mads Hagbarth Lund’s Gizmos Mads has created lots of very clever tools over the years: [Mads Hagbarth Lund’s Gizmos](https://www.google.com/search?q=%22Contributor:+Mads+Hagbarth+Lund%22+site:www.nukepedia.com&ref=keheka.com) ### Frank Rueter’s Gizmos Frank is one of the OGs in the industry – and the creator of Nukepedia, no less! He has contributed many tools over the past couple of decades which have inspired generations of compositors, and which continue to be useful today: [Frank Rueter’s Gizmos](https://www.google.com/search?q=%22Contributor:+Frank+Rueter%22+site:www.nukepedia.com&ref=keheka.com) ### Andrea Geremia’s Collections Andrea has gathered large collections of useful setups: [Particles Collection](http://andreageremia.it/tutorial%5Fparticles%5Fcollection.html?ref=keheka.com) [Expression Node Collection](http://andreageremia.it/tutorial%5Fexpression%5Fnode.html?ref=keheka.com) [Python & TCL Snippets](http://andreageremia.it/tutorial%5Fpython%5Ftcl.html?ref=keheka.com) He has also shared plenty of other tools on his website: [Andrea Geremia’s Tools](http://andreageremia.it/tutorial.html?ref=keheka.com) ### Franklin Toussaint’s Tools Franklin Toussaint has made and gathered a large collection of useful tools: [Franklin Toussaint’s Tools](https://github.com/franklinvfx/NUKE%5FALL%5FUSEFUL%5FTOOLS/?ref=keheka.com) In the various collections above you’ll find tons of useful tools which you can sink your teeth into. Next, let’s highlight some great tools which may not be a part of a collection: ### Edge Control Normal edge extension tools smear out the outer border of pixel values, but this tool warps the shape out instead, which can lead to better edge detail: [VectorExtendEdge](https://www.nukepedia.com/tools/gizmos/filter/vectorextendedge?ref=keheka.com) 💡 Edge extensions should be used **sparingly,* as they can quickly kill edge detail. The EdgeDetect node in Nuke is quite limited, and for creating custom edge mattes it’s far better to use a tool such as this one: [Perimeter – Advanced Edge Matte Tool](https://www.keheka.com/perimeter-advanced-edge-mattes/) Often, you’ll want to break up edges that are too ‘perfect’ and ‘CG’-looking. Here’s a useful setup: [Breaking Up Edges And Surfaces In Nuke](https://www.keheka.com/breaking-up-edges-and-surfaces-in-nuke/) ### CG Beauty Rebuild & AOV Management Additive beauty rebuilds can get quite large and complex, especially when there are many different AOVs in the render. To avoid having to build the entire beauty rebuild setup each time, you can use this tool instead: [Leeloo – Multipass Compositing Tool](https://www.keheka.com/leeloo-multipass-compositing-tool-for-nuke/) 💡 For a detailed walkthrough of every AOV and how to completely rebuild the CG beauty render, plus a ton of other tips and tricks, see [Professional CG Compositing In Nuke](https://www.keheka.com/professional-cg-compositing-in-nuke/). If you only want to adjust a single pass (at a time), a subtractive beauty rebuild tool might be more efficient – like this one: [Korben – Subtractive AOV Grading Tool](https://www.keheka.com/korben-subtractive-aov-grading-tool-for-nuke/) Sometimes, you may want to change the lighting in a CG render. Here are some useful setups: [Relighting CG Renders In Nuke](https://www.keheka.com/relighting-cg-renders-in-nuke/) ### ITools For most Nuke nodes, the **mask**\-input and the **mix** slider will affect the *opacity* of the effect. In the “I”-style type of tools, however, those settings will affect the *strength* of the effect. A soft mask will ramp the effect: - The mask areas with a white alpha will apply the full effect to the image. For example, if you’re blurring an image by a size of 20, a value of 1 in the mask would apply the full size 20 blur. - The mask areas with values in between 1 and 0 will apply the effect partially to the image. For example, using the same example with a size 20 blur, a mask value of 0.5 would apply a size 10 blur (half of the full size 20 blur). - The mask areas with a black alpha will have no effect. This is super useful for softly blending the effect, like for example warping an image into position, without getting mixing artefacts. There are several types of ITools and setups: [IBlur](https://www.nukepedia.com/tools/gizmos/filter/iblur/?ref=keheka.com) [ITransform](https://www.nukepedia.com/tools/gizmos/transform/itransform?ref=keheka.com) [ICornerPin](https://www.nukepedia.com/tools/gizmos/transform/icornerpin?ref=keheka.com) [Warp Transform](https://www.keheka.com/warp-transform/) ### Keying Setups I’ve found the following setups to be extremely potent for getting a great key: [Advanced IBK Keying Setup](https://www.keheka.com/advanced-ibk-keying-techniques-and-setups-in-nuke/) [Multiplication Key](https://www.keheka.com/multiply-key-technique-for-extracting-fine-detail/) 💡 Also see [Professional Keying In Nuke](https://www.keheka.com/professional-keying-in-nuke/) for keying tips. And this tool is great for when you’re keying semi-transparent things, like smoke, and want more control over the density: [Alpha Density](https://www.keheka.com/alpha-density-matte-control-tool-for-nuke/) ### Grading Setups To match or remove the dynamic lighting in a plate, you can use this tool: [De-/Flicker](https://www.keheka.com/add-or-remove-flickering-in-nuke/) When keying, you’ll need a good despill tool, for example: [DespillMadness](https://www.nukepedia.com/tools/gizmos/keyer/despillmadness?ref=keheka.com) ### Deep We’ve already seen quite a few Deep tools, but here is also a great setup for making deep holdouts: [Deep Holdouts Using Geometry In Nuke](https://www.keheka.com/deep-holdouts-using-geometry-in-nuke/) And here is a useful way of working with Deep: [Deep Compositing Using A 2D Workflow In Nuke](https://www.keheka.com/deep-compositing-using-a-2d-workflow-in-nuke/) (A more in-depth and advanced tutorial [here](https://youtu.be/3tujOTTcw4w?feature=shared&ref=keheka.com)) ### Projections Here are some very useful setups for projecting things in Nuke: [Combining Projections In Nuke](https://www.keheka.com/combining-projections-in-nuke/) [Projecting Overscan With No Cropping In Nuke](https://www.keheka.com/projecting-overscan-with-no-cropping/) [Sticking A Projection Onto Animated Geometry In Nuke](https://www.keheka.com/sticking-a-projection-onto-animated-geometry/) ### Glow & Lightwrap Gizmos The default Glow node in Nuke doesn’t quite behave in a natural, photographic way. Light has an exponential falloff, and so it’s much better to use an exponential glow instead, like for example this one: [Exponential Glow Iterations](http://www.nukepedia.com/tools/gizmos/filter/exponential-glow-iterations?ref=keheka.com) This also applies to the related Lightwrap node in Nuke. (Lightwrap is also basically a glow). A lightwrap tool such as Tony Lyons’s LightWrapPro is a better option: [LightWrapPro](https://github.com/CreativeLyons/Lyons%5FTools%5FPublic/tree/master/06%5FFilter?ref=keheka.com) 💡 Improve your lightwraps using [facing ratios](https://www.keheka.com/upgrade-your-light-wraps-using-facing-ratios/). ### Distortion Setups Oftentimes, it’s useful to do custom warps and distortions to the image. Here is a nice technique that gives you creative control over the distortion: [Painting Distortion In Nuke](https://www.keheka.com/painting-distortion-in-nuke/) And here is a tool for quick and easy distortions using just an alpha channel: [Glass](http://www.nukepedia.com/tools/gizmos/transform/glass?ref=keheka.com) Another type of common distortion we apply in comp is heat distortion. Here is a great heat distortion tool: [HeatWave](https://www.nukepedia.com/tools/gizmos/filter/heatwave/?ref=keheka.com) ### Lens Effects This guide goes over 19 different lens effects and how to create them in Nuke: [Compositing Photorealistic Lens Effects In Nuke](https://www.keheka.com/compositing-photorealistic-lens-effects-in-nuke/) ### Grain Management When it comes to adding and removing grain to your shots, this is an incredibly powerful combination: [Neat Video Reduce Noise](https://www.neatvideo.com/?ref=keheka.com) [DasGrain](https://www.nukepedia.com/tools/gizmos/other/dasgrain?ref=keheka.com) If you want to remove render noise from a CG render, there are [many tools and techniques](https://www.keheka.com/removing-noise-from-cg-renders-in-nuke/) that you can employ, including this very useful one: [VectorFrameBlend](https://www.nukepedia.com/tools/gizmos/time/vectorframeblend?ref=keheka.com) ### Python Scripts Learning a bit of Python is super useful for speeding up your workflow and automating tedious, repetitive tasks. This guide shows you how to build several great Python scripts: [Python Tools](https://www.keheka.com/automating-tedious-tasks-using-python-in-nuke/) ### Script Organisation It’s a good idea to standardise the organisation of your script. It will increase the readability of your work and significantly boost your efficiency. Here are many tips for how to do that: [Best Practices For Compositing In Nuke](https://www.keheka.com/best-practices-for-compositing-in-nuke/) It can be useful to install a Backdrop manager to quickly and easily create labelled Backdrops for organising the various sections of your script: [BackdropManager](https://www.nukepedia.com/tools/python/nodegraph/backdropmanager/?ref=keheka.com) ### Tech Checking When you tech check your shot, you’ll be playing the current comp version, the previous version, and the scan / version zero, at the minimum. And you’ll also be checking things in various areas of your script while troubleshooting. Instead of copying multiple grain checker gizmos (or other tech checking tools) all around your script, use the **Viewer Input** function, which you can activate whenever you want without connecting any gizmos: [VIEWER\_INPUT](https://www.keheka.com/checking-grain-using-the-viewer-input-process/) ### Tracking Lastly, while this is not a Nuke gizmo, it’s an honourable mention nonetheless: Mocha’s planar tracker is far superior to Nuke’s planar tracker. There’s no competition. So the final tool to recommend would be: [Mocha Pro Planar Tracker](https://borisfx.com/products/mocha-pro/?ref=keheka.com) There are so many excellent tools and setups out there, and I’m sure I have forgotten to mention many of them. Please comment below with the must-have tools in your daily workflow. I hope you found this tutorial useful. For more Nuke tips & tricks, see [Nuke](https://www.keheka.com/tag/nuke/). [Sign up for the newsletter!](https://www.keheka.com/#/portal/signup) ### Korben – Subtractive AOV Grading Tool For Nuke URL: https://www.keheka.com/korben-subtractive-aov-grading-tool-for-nuke/ Last updated: 2025-09-08T13:39:32.000Z ⭐ A lightweight tool for grading AOVs in your CG render… _This post is for paying subscribers only._ ### Best Practices For Compositing In Nuke URL: https://www.keheka.com/best-practices-for-compositing-in-nuke/ Last updated: 2024-12-13T13:38:03.000Z *Practical tips for improving your compositing in Nuke, and becoming a better team player in the process…* Have you ever made – or had to pick up from another artist – a Nuke script that looks like this? ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/11/Unorganised_Nuke_Script-2.jpg) *A creative mess.* This guide is about how to avoid finding yourself (and others) in a situation like in the picture above, and reaping the many benefits of doing so. If you follow these guidelines, I can pretty much guarantee that you'll *objectively* become a better compositor. ## Adopting Good Habits I’d like to start off with a useful mindset that I think will serve you well. It certainly has for me. It’s the idea that if you set yourself some **solid organisational ground rules**, and get into the **habit of following them automatically**, you will *quickly* become: 1. Vastly more efficient. 1. Much less prone to error. 1. A significantly better team player. You’ll find that **increased speed** is one of the key long-term benefits. As Benjamin Franklin said: “For every minute spent in organizing, an hour is earned.” Let’s look at some ways you can apply this to your compositing: ## Managing Your Nuke Script The **structure** of your Nuke script will affect your **performance** as a compositor. A script like the one we saw above will *not* be easy to manage or troubleshoot, **especially for other compositors picking it up**. And it will *very* likely neither run nor render at optimal performance. So let’s look at a better alternative. When it comes to script structure, Nuke lends itself very well to the vertical top-to-bottom style of compositing – as evidenced by the design of its quintessential **Merge** node: The Merge node's **B**\-input is the chief input in the hierarchy. If you disable the Merge node, it will pass through the **B**\-input downstream. And, just by how the pipes are positioned on the node, the **A**\-input and **mask**\-input naturally feed into the Merge node from the left and right, respectively, while the **B**\-input and the **output** naturally become vertical. Compositing downwards makes a lot of sense as you inherently won't overlap pipes or hinder access to any of the Merge node's inputs. Compositing with your spine going from left to right will block the mask input with the outgoing pipe, for example. While compositing in any direction that you want is valid in the sense that it *works*, I would argue that vertical compositing is the more efficient and cleaner approach. And, like mentioned above, with only a few simple organisational ground rules we can make a **predictable and powerful script structure** that is **easy to work with**. I would suggest **three ground rules**: ### Rule #1: Keep A Straight Spine Keep **one main vertical spine** of **B**\-pipes in your composite that all else feeds into. Any CG, FX, elements, etc. that you add to your composite become **A**\-inputs **coming from the left** and merging into this **B**\-spine. At the top of the **B**\-spine, you place what will be the background of your composite. Going down the spine, each **A**\-input is layered in from the background layers at the top, through to the midground layers in the centre, and down to the foreground layers towards the bottom of your script. (Exactly inverted to how you would stack layers in Photoshop or After Effects). ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/11/BG_MG_FG-2.png) *Keeping a B-spine going straight down from the BG, with MG and FG layers merging into it.* Doing it this way will help you layer up your composite in a natural and organised way, avoiding issues with background layers overlapping foreground layers. You'll also be able to disable any of the Merge nodes in the **B**\-spine and only remove the corresponding **A**\-input from the composite. This makes it a lot easier to follow your composite step by step and see what gets added where - which is especially useful when you need to make changes to your composite, or troubleshoot the script. 💡 You’ll typically rarely need to disable just the background layer. But if you wanted to, you could use a Reformat or a Constant node that’s set to the project format as the base layer, and merge the background layer in as a normal ****A**\-input. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/11/Reformat_BG_MG_FG-2.png) *Using a Reformat as the base layer.* ### Rule #2: Keep Each Section Self-Contained Think of every part of your composite as a **modular unit**. Every **A**\-input in your composite is *itself* a self-contained mini-composite with its own main **B**\-spine. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/11/Modules-2.png) *Modular sections.* Systematically keeping this modular structure in your script will help you to stay better organised, navigate more easily around the script, and make more well informed compositing choices with less room for error. Once you get the hang of it, it’ll become second nature and you’ll automatically build your composites in a way that is structurally easy to follow. 💡 Another benefit of the modular workflow is that it lends itself well to ****precompositing** (see further below in the guide). This is the goal with every element that you add to your composite. Make individual modules as self-contained sections (that can be precomposited), which become **A**\-inputs to your main **B**\-spine. ### Rule #3: Keep Your Script Explicit Be explicit as opposed to implicit when you build your script. By that, I mean work in a clear and unambiguous manner, without obscuring the things that you do in the script. Don’t assume that anyone who’s picking up your script will understand *what* you have done, or *why* – instead, **make it obvious**. 💡 The less confusion that’s caused, and the less digging around that’s needed to figure out what’s going on in your script, the more productive and stress-free you and your colleagues will be. It's all about **readability** \- and there are several steps you can take to make your script more easily readable: #### ↪ Label Your Work Consistently add a **Backdrop** node to every **A**\-input section of your script, and **label it** with a description of what that section is doing. The description can be a keyword or a short comment, like for example: - Keying - Roto Crowd - Windshield Reflections Labelling the Backdrops like this is invaluable for easy script navigation and searching. Remember to change the **font size** of the Backdrop's **label** to be sufficiently large – for example to a size of **100**. That way, you’ll be able to read the text while zoomed out in larger scripts. It’s a good idea to **set this to be the default font size** in the Backdrop node, so that you won’t have to change it every time you create a new one: Normally, you would specify any custom knob defaults with a little bit of code in your [menu.py](https://benmcewan.com/blog/2018/01/14/whats-a-menu-py-and-why-should-i-have-one/?ref=keheka.com). However, the Backdrop node is an exception to the rule. When creating a Backdrop node (either through the Toolbar or the Tab menu), it won't trigger the regular **nuke.createNode** command (which grabs knob defaults from the menu.py), but will instead call the [autobackdrop function of the nukescripts module](https://learn.foundry.com/nuke/developers/90/pythonreference/nukescripts.autobackdrop-pysrc.html?ref=keheka.com). This function lives in a Python script which is saved in the **nukescripts** folder where you installed Nuke. On Windows, for example, it would be in: **C:\\Program Files\\Nuke15.1v2\\plugins\\nukescripts** (Replace **C:\\Program Files\\** with the hard drive and the folder where you installed Nuke, and **15.1v2** with your Nuke’s version number). Open up the **autobackdrop.py** script in a text editor, and near the bottom of the script, change the line: note\_font\_size=**42**, to: note\_font\_size=**100**, 💡 You may have to ****right-click** the ****autobackdrop.py** file first, then click on ****properties** and go to the ****Security** tab. There, find and select your ****User** in the list, and ****Edit** the permissions so that you are ****Allowed** to ****Modify** the file. Save the file, and then open a fresh Nuke. From now on, anytime you create a Backdrop node, the font size will automatically be set to 100\. Another thing you could change is the Backdrop node’s **colour**. Some people prefer monochromatic Backdrops, but I would argue that **varying the Backdrop colours makes it easier to distinguish between different sections of your script at a glance**, which makes for a more intuitive script navigation. If you wanted to, you could use predetermined colours for the Backdrops, for each type of section. For instance, always having a green Backdrop for Keying sections. There are many **Backdrop manager tools** on Nukepedia that can help with this, for example [BackdropManager](https://www.nukepedia.com/python/nodegraph/backdropmanager?ref=keheka.com), or [presetBackdrop](https://www.nukepedia.com/python/nodegraph/presetbackdrop?ref=keheka.com). Whichever way works best for you. The important part is that you **clearly label** your work. #### ↪ Avoid Hidden Settings Unless you have to, try to avoid using special settings ‘hidden’ inside a node's property panel – when there is an equivalent node that you can add in the Node Graph instead. For example, instead of ticking the *invert* checkbox inside of a Merge or Keyer node's property panel, connect an Invert node in the Node Graph. Glancing at your script, anyone can then see that you are inverting the mask or key. Or, instead of premultiplying the roto *inside* of the Roto node, use a Premult node. It just makes it easier to see what’s going on in the script. – The output remains the same, but you **make the script more readable**. #### ↪ Display Useful Information Add key information to the labels of the nodes in your script. For example, you could add the following expression to the labels of your **Blur** nodes: **\[value size\]** Or, add this expression to the labels of your **Shuffle** nodes: **\[value in1\]** Or, add this to the labels of your **Tracker** nodes: **Reference Frame: \[value reference\_frame\]** Doing this will show: how much you are blurring by, or which layer you are shuffling into RGBA, or which reference frame you have set in the Tracker node, respectively, directly on the nodes in the Node Graph. This saves you time, as you won’t have to open up all the properties to see important information. And, it lets you quickly spot if the values are (not) what they’re supposed to be. You can set the above as defaults in your **menu.py**, by adding the lines: **import nuke** *#(←If you don’t have this line already)* **nuke.knobDefault('Blur.label', "\[value size\]")** **nuke.knobDefault('Shuffle2.label', "\[value in1\]")** **nuke.knobDefault('Tracker4.label', "Reference Frame: \[value reference\_frame\]")** #### ↪ Show What You’re Merging Each **A**\-input should be the same format as your composite, so that when you view it, it’s directly representative of what’s being added to the **B**\-pipe. If you are using for example a 2D smoke element with a different format, set it to the format of your composite: Add a **Reformat** node to the element, set the *output format* to the project format, set the *resize type* to *None*, and untick the *center* checkbox. 💡 It’s important to set the **resize type* to ****None**, to avoid filtering your element. When transforming the element around, instead of just seeing a bounding box outside of the smaller format – and not what’s actually going on – the reformatting will make your **A**\-input properly viewable in the project format as a standalone section. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/11/No_Reformat-2.png) *Transforming an element with a different format into place without reformatting it to the project format means that it can be hard to see the output properly.* ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/11/Reformat-2.png) *Reformatting the same element to the project format instead means that you can tell what’s going to be merged, and where.* Also, ideally do any masking on the **A**\-pipe instead of using the **mask**\-input on the Merge node. That way, you’ll be able to see the final product of the **A**\-pipe before merging it with the **B**\-pipe. Using the **mask**\-input on the Merge node can lead to confusion: With a setup like the one below (left), viewing the **A**\-input **doesn’t** give us a representative indication of what’s being merged (right). ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/11/Masked_On_Merge-2.png) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/11/Masked_On_Merge_A_Result-2.png) *Masking on the Merge node.* You wouldn’t be able to guess that the image below is the result of the merge, just by looking at the **A**\-pipe. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/11/Masked_Merge-2.png) *The result of the merge.* However, with a setup like the one below (left), viewing the **A**\-input gives us a much more representative indication of what’s being merged (right). ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/11/Masked_On_A_Side-2.png) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/11/Masked_On_A-side_A_Result-2.png) *Masking on the *A*\-side.* #### ↪ Make Room Give the nodes in your script air to *breathe*. **Space the nodes out** so that it becomes easier to add extra nodes in between, or to make changes to a section. You’ll have more room to organise pipes, and the script will become easier to read. With a bit of extra space, you’ll also be less likely to mis-connect nodes. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/11/Cramped-2.png) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/11/Spaced_Out-2.png) *Cramped nodes (left) versus spaced out nodes (right).* #### ↪ Do Not Hide Inputs Do not use, or use *very* sparingly, hidden inputs. Hiding inputs does not ultimately make your script any cleaner. Quite the opposite. It can cause confusion and accidental connections, and it can make you forget to update important parts of your script. 💡 There is a notable exception to this rule, and that’s if you’re using [Stamps](https://adrianpueyo.com/stamps/?ref=keheka.com) (**and* you are following its prescribed workflow), which has several safeguards in place against the pitfalls above. Even with *every* pipe visible you can still organise them in a readable way using Dot nodes. #### ↪ Dot - Dot - Dot Use *Dot* nodes generously! They are great for keeping your script organised. Avoid having pipes criss-crossing over your nodes, and make it clear where an input is coming from. Angling the pipes 90 degrees using Dot nodes also makes your script look tidier compared to having diagonal lines. You can even use Dot nodes to indicate which direction a pipe is going. For example, when you have a horizontal pipe, it’s not always easy to tell at a glance if it’s coming from the left or from the right. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/11/Unclear_Connections-2.png) *Unclear connections – which pipe is going where?* To help, add a Dot node to the pipe below the last node, just before the pipe goes horizontal, and (in larger scripts) a couple of Dot nodes to the pipe before it goes into the next node. That way, you make a visual ‘staircase step’ that’s going down into the direction the pipe is headed. – Visually following the rule of your script flowing downwards. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/11/Clear_Connections-2.png) *Stair casing using Dot nodes, making the connections clearer. The pipes flow down, with *A*\-inputs coming in from the left, and *mask*\-inputs coming in front the right.* #### ↪ Dot (A) - Dot (B) - Dot (C) In large scripts, label the Dot nodes. If you for example have a Camera pipe, a Building Geometry pipe, a Roto Holdout pipe, or any other pipes that lead into several areas of your script, add **Camera**, **Building Geometry**, **Roto Holdout**, etc. to the labels of the Dot nodes in those pipes. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/11/Labelling_Dots-1.jpg) *Labelling the Dot nodes in the pipe leading back to the camera.* That way, you’ll only have to trace back to the first joint to find out which pipe is what, instead of all the way back up the node tree to the source. Remember to set the **font size** of the Dot's **label** to be sufficiently large, for example to a size of **100**. That way, you’ll be able to read the text while zoomed out in larger scripts. You can **set this to be the default** in your **menu.py**, by adding the line: **nuke.knobDefault('Dot.note\_font\_size', "100")** #### ↪ Sort Your Nodes For each section of your script, try to place similar nodes/tasks in the same areas. For example, try to do all of your grading in one area so that if you need to change the grade, it’s all there in one place. That way, you won’t have to search all over to find what you need. Also, **chaining transformations** has the added bonus of [concatenation](https://learn.foundry.com/nuke/content/comp%5Fenvironment/transforming%5Felements/node%5Fconcatenation.html?ref=keheka.com) (which we’ll also look at later). #### ↪ Lock In The Format When you create a node in Nuke, it will typically take the format of whatever it's connected to as its input format. However, if the node is not connected to anything, it will typically take the *root.format*, i.e. the **current** project format, as its input format. That’s usually great within the confines of one specific project, but if you want to copy a setup from one project to *another*, or make a ToolSet or gizmo, you may find that it can mess things up. When looking at the output of a setup in a different project format, you’ll find that roto shapes, projections, etc. can become misaligned, and the whole result can break apart. And if a setup you saved as a ToolSet on some past project breaks on your current project, it can be tricky to realign everything unless you remember exactly what the old format was. When you create tools or setups, it’s obviously best to be format agnostic and set them up in such a way that they can accommodate any format. However, that’s not always practical. But I would at the very least recommend to lock in the format so that everything is self-contained and will still line up with itself in another project. That way, it’ll be much easier to adjust the setup to work for the new project. Locking in the format requires a little bit of extra effort, but I believe it’s worth it because you’re helping your future self and others a great deal. – Which is why I adopted the following practices into my everyday compositing: Plug a Reformat node, with the *output* *format* knob **explicitly set to the current project format**, into any relevant nodes that don’t have their input connected to anything. 💡 By ‘explicitly set’ I mean do **not* leave the Reformat node's format set as **root.format*, because that will dynamically change between projects - instead make sure to ****specifically pick** the actual format used. It will carry over to new projects. Do this for unconnected **Roto** nodes, **Noise** nodes, **ScanlineRender** nodes, and any other nodes or gizmos that take a format as an input. Also, change any format knobs in a node’s properties to the specific project format, instead of just *root.format* (which is typically the default). Do this for **Constant** nodes, **Checkerboard** nodes, **Reformat** nodes, and any other nodes or gizmos with a format knob. While it does take a few extra seconds to do this every time you make those nodes, you’ll thank yourself later on – when you inevitably go back and dig up a great setup that you once made, which is perfect for a new project. #### ↪ Clear Out The Clutter As you composite along, and especially when you version up a script, delete the nodes that you no longer use. Often, you’ll test something out, or swap in a different node setup to address a note, and end up leaving a bunch of nodes disconnected off to the side, or disabled in your stream. Once you publish a new version and/or version up your script, delete all of those unused nodes. 💡 You can always go back to the previous version of the script to restore them. Tidying up along the way will keep your script from becoming bloated. It will be easier to navigate, take up less RAM and storage space, and run more efficiently. ### It’s Not Just A Pretty Face There are several reasons for why the three ground rules above are important to follow: Other compositors will often have to open up and work with your scripts, and the easier it is for them to hit the ground running, the better. [Organise Your Work For Other PeopleShort term creative momentum without reflection can cause long term productivity loss. Here is how to steer clear of that trap…![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/icon/favicon-5.ico)Kenn Hedin Kalvik - Professional Compositing TutorialsKenn Hedin Kalvik![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/thumbnail/OYWFOP.jpg)](https://www.keheka.com/organise-your-work-for-other-people/) As mentioned before, *you* might even have to come back to the script *yourself* after an extended period of time, and the same applies. I would argue that it’s **disrespectful** to your colleagues, not to mention **counterproductive**, to leave them a messy script: “Clutter is nothing more than postponed decisions.” – Barbara Hemphill Passing on messy scripts forces your lack of decision making onto others, creating more work and frustration. Not only that, keeping your scripts organised literally saves money. You’ll make fewer mistakes, and have a *much* easier time [troubleshooting](https://www.keheka.com/troubleshooting-your-nuke-script/) in an effective way when you do. Which means you’ll spend less time doing unnecessary work. ## Avoiding Duplicates If you’re merging together the outputs of for example five pipes, avoid having duplicates of the same five Defocus nodes or other nodes in each pipe. Instead, merge the pipes together and *then* do **one** Defocus, or *one* instance of a node setup. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/11/Duplicates_Cropped.png) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/11/No_Duplicates_Cropped.png) *Poor efficiency (left) improved by consolidating the duplicates (right).* This will speed up your script’s processing time by a lot, since you reduce the number of nodes that need to be calculated. Speaking of duplicates: ## Referencing One Source You’ll often find that you need to use a specific source in your script multiple times. It could be a scan, a camera, some geometry, a matte, or anything else. Instead of duplicating the source every time you need it in your script, make a habit of using only the one, and then organise pipes leading from it to the areas in your script where it’s needed. This centralised approach is beneficial because: 1. If a source needs to be updated, you only need to update it once in the script. You can’t forget to update any duplicates when there *are* none. 1. Your script will run faster. Instead of loading and buffering multiple copies of a source, Nuke only needs to do it once. This also applies to expression linking nodes: Instead of making multiple copies of a Tracker node, make use of its expression linking function and create linked Transform nodes. These can then be duplicated around while still referencing the one central source. 💡 Referencing the same source multiple times is another benefit of the [Stamps workflow](https://youtu.be/3tujOTTcw4w?feature=shared&ref=keheka.com). ## Optimal Layering Like we saw in *Rule #1: Keep A Straight Spine*, you should ideally layer your composite with the background layers at the top of the script (i.e. the equivalent of the bottom layer in Photoshop), then the midground layers in the centre, and finally the foreground layers at the bottom (i.e. the top layer in Photoshop). This also applies when inserting something into the scan, *in between* foreground and background subjects and objects in the scan. Which means, you’ll have to separate out those layers from the scan to treat them independently. To explain what I mean, let’s say that you’re putting a CG car in the street behind a foreground person on the pavement. Many compositors will use the roto matte of the foreground person to stencil out the CG, before merging the stencilled out CG on top of the scan. – But that’s *not* a great way of doing it. You would have little to no control over the foreground person’s edges or the edge blending with the new background (the CG car). And, if the foreground person’s edges were motion blurred, you would see the original background through the motion blurred edges, on top of the CG car. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/11/Non-Optimal_Layering.png) *This way of layering the composite can cause problems.* Instead, you should separate out the foreground person and treat that as its own foreground layer. So – first, merge the CG car directly on top of the original scan. Then, branch off a separate pipe from the original scan, copy in the roto matte as the alpha, and premultiply. Next, merge this new foreground layer (that contains just the foreground person) on top of the comp of the CG car and the scan. 💡 ****Mask the foreground layer by the alpha of the CG car**, so that you’re only merging back the scan on top of the affected areas of the comp – i.e. ****no plate-on-plate comping**. (You may have to add a small dilation to the alpha of the CG before the masking, e.g. a 1 pixel dilation). Finally, add any lightwrap, edge extension, or edge blending to the foreground layer (*before* the masking by the CG car in the stream). Doing it this way means that you’ll have full control over the edges of the foreground person, and how they integrate with the CG car. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/11/Optimal_Layering-2.png) *Layering the CG and scan in a way that gives you full control over the edges.* 💡 Make sure that you do the masking as described above, so that you’re not adding any plate-on-plate lightwrap/edge extension/glow, or other plate-on-plate effect. ## Managing Your Bounding Box The bounding box tells Nuke which part of the frame it should process. It’s represented by a dotted-line box in the Viewer. Anything outside of the bounding box will be ignored when Nuke is calculating the image, even if there is actual pixel data there. ### Keeping Track Of Your Bounding Box It’s important to keep an eye on the bounding box in all parts of your node tree to ensure that it doesn’t grow too large, and that you’re not slowing down your script by processing unnecessary pixel data. And conversely, it’s important to maintain *enough* of a bounding box to include all of the pixel data you’ll need downstream for your composite. If you consistently trim your bounding box throughout your composite, your scripts will be more interactive, with faster loading and buffering. They will crash less often, and your rendering times will decrease. This leads to a productivity boost for you, and less strain on the company's render farm and storage. Win-win. When the bounding box is larger than the frame, also known as *overscan*, you should pay special attention to it. Sometimes you need this overscan, for example when using a Lens Distortion that pulls in pixels from outside of the frame. But often, the bounding box will tend to grow outside of the frame without you needing it to, simply as a byproduct of everyday compositing. Nodes such as Blur, Defocus, Transform, or (especially) CornerPin can balloon the size of your bounding box and really slow things down. Other nodes might cause issues if the bounding box is *smaller* than the frame. Vector-based nodes like the MotionBlur node, for example, can cause artefacts and streaks in the image. And so, sometimes, you’ll have to *increase* the bounding box up to the full format, for example with a Crop node. ### Controlling The Bounding Box Luckily, there are many options for controlling your bounding box: - Use **Crop** nodes to remove your overscan where you no longer need it. (Or, to increase the bounding box up to the full format, in cases like described above). - Use the **Crop** node or the **CropPadded** (or similar) gizmo to trim your overscan when you only need some of it. - When you merge your **A**\-input into the **B**\-spine, set the bounding box to **B** in the **Merge** node’s properties in order to only keep the overscan from the **B**\-stream. (Assuming you have enough overscan in the **B**\-stream already). - In the **ScanlineRender** node's property panel there is an *overscan* setting for when you need to output overscan. Setting this to 100 will add an overscan of 100 pixels. - Use the **AdjBBox** node to add overscan to the input. This node is useful for example when you have a procedural node, such as Noise, and need overscan. - The **CopyBBox** node does what it says on the tin; you can use it to copy the bounding box from one input to the other. This can be useful if you want to get the original bounding box back from your CG render after processing it. - You can use the *AutoCrop* function in the **CurveTool** node to crop the bounding box of smaller elements or CG renders. - The **BlackOutside** node adds a one pixel black border around your bounding box and can be useful if you want to remove stretching/repeating pixels from the border of your image. 💡 Be aware that anytime you’re adding glows, the soft bloom can get cut off by copying in/cropping down to a smaller bounding box. ### Viewing The Overscan When you need to work with overscan, it’s useful to be able to see what’s actually there outside of the frame, or project format. You can right-click in the Viewer and tick *show overscan* to display the overscan. (You could also open the Viewer settings by pressing **S** while hovering your mouse over the Viewer window, and then tick *show overscan* to display the overscan. Here, you can also choose how much overscan to display, by adjusting the *overscan* setting). Or, you can branch off a **Transform** node from your composite and scale it down, if you just need a quick look. For example, to check that nothing has been accidentally cropped upstream. ### Keeping The Overscan Some nodes and gizmos, like for example Kronos or MotionBlur, automatically crop the bounding box to the input format – without providing any options for processing and keeping the overscan. Here is a workaround for dealing with those: [Bypass Bounding Box Cropping In NukeNodes and gizmos that crop the bounding box with no option to preserve it can be annoying. Here is how to outsmart them…![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/icon/favicon-4.ico)Kenn Hedin Kalvik - Professional Compositing TutorialsKenn Hedin Kalvik![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/thumbnail/BBBC.jpg)](https://www.keheka.com/bypass-bounding-box-cropping/) ## Managing The Channels In Your Script When compositing in Nuke, especially when working with CG renders, it’s likely that you’ll be dealing with numerous render layers and channels in addition to the standard RGBA. Processing all of these extra layers can get quite heavy and slow down your Nuke script, so let’s go through some best practices that can help speed things up. ### Layers Vs. Channels First, just to clarify, a *channel* is what carries the image data in Nuke. A *layer* is a channel set; a container that can hold multiple channels. All channels must belong to at least one layer, and the channel names always include the layer name as a prefix. Nuke's default layer, conveniently called **rgba**, contains the channels **rgba.red**, **rgba.green**, **rgba.blue**, and **rgba.alpha**. In a typical image this relates directly to the red, green, and blue components, as well as the transparency, of the image. But you could just as well be working with coordinates in a world position layer which is called for example **PositionWorld**, where the channels within carry the X, Y, and Z positions in world space: **PositionWorld.x**, **PositionWorld.y,** and **PositionWorld.z**. Or, a **depth** layer with only one channel, **depth.z**, where each pixel value represents the distance to an object from the camera at that pixel's position in the frame. This is all just to say that channels can represent other numerical data than just the red, green, and blue colour components of an image. 💡 If you select the Viewer panel and hover your mouse pointer over it, you can cycle up and down through the layer list with the ****PageUp** and ****PageDown** keys. No matter what they contain, however, the channels of a layer will be mapped to red, green, blue, and alpha in the Viewer, in that order. A **motionvector** layer with two channels, **motionvector.u** and **motionvector.v**, for example, will be mapped to red and green. So, when the pixel values are positive, the **motionvector.u** component will look red and the **motionvector.v** component will look green when viewing the **motionvector** layer in the Viewer. Which is why this type of layer will often look yellow in the Viewer (mix of red and green). And why a **depth** layer with one channel, **depth.z**, will look red. Okay, back to working with channels: ### Keeping Only The Channels That You Use To keep your script snappy and rendering quickly, it’s a good idea to actively manage the channels in your script. Make a habit of using the **Remove**, **Shuffle**, and **Copy** nodes throughout your script in order to only pass through the channels that you need in your stream. For example, once you have rebuilt your CG beauty you can remove the shading components and/or light groups from the stream. Using a Remove node with the operation set to *keep*, you can for example select to only keep **rgba**, the **depth** pass, and the **motion vector** pass. (If you have multiple **DI mattes**, you can shuffle them back in with a Shuffle node). When you then apply a **ZDefocus** or **VectorBlur**, these heavy nodes will not process multiple unnecessary channels (if the nodes are set to affect *all* channels - as is the default). And after you’ve added those heavy nodes, remove the depth and motion vector passes, and only pass through the rgba and any DI mattes. Doing this will help you avoid ending up with a bloated layer list downstream, which can bog down your script. ### Affecting Only The Necessary Channels Imagine you have a CG render with 30 layers and you connect a Defocus (all) node to it and increase the defocus. Nuke will then process all of those layers and defocus each channel. If you only actually needed to defocus the RGBA channels, that’s a lot of wasted processing. Not only will that slow down your script, it will also slow down your rendering. When adding nodes like this, which by default affect all of the channels, make a judgement call if changing the *channels* setting in the properties panel from *all* to for example *rgba* is a better option. Even when you only keep the channels you use, like advised earlier, there will often be times where affecting them all is unnecessary, or even detrimental. ### Visual Channel Indicators Nuke's interface actually shows you which channels are being processed, in a couple of places. – Which is useful for keeping track of channels in your composite. The first place is on the nodes themselves: #### Node Decorators Nodes have coloured rectangular tiles along the bottom edge to indicate which channels or layers are being processed and output. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/11/Node_Decorators.jpg) [*Node decorators*](https://www.nukepedia.com/written-tutorials/nuke-node-decorators-and-indicators?ref=keheka.com)*.* A wide rectangle means that the corresponding channel or layer is being processed by the node, and a slim rectangle means that it’s being passed through untouched. The colour of the rectangle corresponds to specific channels or layers. Reading from left to right: - **Red**: red channel - **Green**: green channel - **Blue**: blue channel - **White**: alpha channel - **Purple**: depth - **Pink**: motion vectors - **Cyan**: forward vectors - **Yellow**: backward vectors - **White (again**): UVs - **Dark green**: auxiliary layers/channels, i.e. any other layers/channels than those listed above. #### Viewer List Additionally, if you look in the lower left corner of the Viewer, there is a list of the currently available channels – at the point in your stream where the Viewer node is connected. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/11/Channel_List.jpg) *Channel list in the Viewer.* A quick glance here will tell you if you have any superfluous channels in your stream. ### Bonus Channels Some nodes output new channels by default, like the **ScanlineRender** node which outputs motion vectors and depth. Sometimes that’s useful, but it’s not always needed. Keep an eye out for unnecessary channels being added to the stream when you composite, by using the indicators mentioned above, and trim them as needed. ### Creating Custom Channels You can create your own custom channels in Nuke. This is useful for many things, for example when you want to pass a particular matte through your stream without changing the alpha channel. When separated into a custom layer and channel, the matte will still be affected by your compositing, such as transformations, 3D projections, defocus, lens distortion, etc. 💡 – Provided that you (where applicable) set those nodes to process that particular channel (or **all* channels) in the **channel* selection drop-down menu in their properties panel. In order to create a custom channel for your matte, you can use for example a Copy node or a Shuffle node. Copy or shuffle the alpha into a new layer by selecting *new* in the *channel* selection drop-down menu. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/12/Creating_A_New_Channel_A.png) *Creating a new layer and channel.* Then, give the layer and channel a name, like so: *layer.channel* – where *layer* is the layer name and *channel* is the channel name. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/12/Creating_A_New_Channel_B.png) *Naming the new layer and channel.* You can name your layers and channels pretty much anything you like, but try to be descriptive; *windows.matte* is a good name because it says exactly what it is, in the name. You can be more granular if needed: *upperWindows.matte*. 💡 When creating layers and channels, keep in mind that Nuke's interface is designed to show max four channels per layer, e.g. RGBA. **Please note:** You’ll have to make sure that any holdouts which you apply to your stream **also** affect your custom layer (if they should). Because by default, a Merge or ChannelMerge node will only affect *rgba*. You can do this by adding a second Merge or ChannelMerge node after the first one and choosing to stencil/mask the custom layer/channel by the holdout matte and outputting the (now held out) custom layer/channel. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/12/Holding_Out_A_Custom_Channel.png) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/12/ChannelMerge_Settings.png) *Holding out a custom matte in your stream.* ## Order Of Operations When compositing in Nuke, strive to keep the image fidelity intact, and to reduce the risk of breaking your composite with any further changes (e.g. addressing notes). In order to achieve that, there are several things you can (and should) do: ### Concatenating Transformations Many of the operations that you perform on an image will apply some sort of filtering to it. Meaning, the output won’t be as sharp as the input - it gets a little bit softer each time. That’s because when you make a change to a pixel in your image, that change often relies on the surrounding pixels. If you translate the image 0.5 pixels to the right, for example, Nuke has to 'make up' new pixel values by averaging between the existing ones. If you’re not careful about the order in which you’re applying these operations, the image will get softer and more pixelated at each step of the way. That’s where concatenation comes in. When you perform various transformations to your image, stack the concatenating nodes ([list here](https://learn.foundry.com/nuke/content/comp%5Fenvironment/transforming%5Felements/node%5Fconcatenation.html?ref=keheka.com)) one after another, without any non-concatenating nodes in between. That way, only a single filter hit will be applied to your image, determined by the filtering method that’s set in the properties of the **last node in the concatenating stack**. 💡 When concatenating nodes, Nuke combines multiple transformations into one operation and only filters the image once. As filtering unavoidably destroys some image detail, it’s important to concatenate as many nodes as possible in order to preserve the image quality. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/11/Concatenation.png) *Stack transformation nodes to achieve concatenation.* ### Reformatting First Often, you’ll be working with half resolution CG renders, or 2D elements in a different format to your project format. When you do, always reformat them to the full resolution format before continuing working with them. 💡 Treat all renders and elements as if they were full resolution. However, AOVs such as Cryptomattes or other data passes can break when using the standard cubic filtering. Reformat those separately using the **impulse* filter. That way, you can swap in the full resolution renders later on, and your composite won’t break. All the masking and other work will still line up as expected. And, you’ll adhere to the *Show What You’re Merging* rule that we saw earlier. ### Masking In The Right Places Let’s say that you’re compositing a 2D smoke element into your scan, and you mask it behind a building. If you get a note to move the smoke a little bit higher up in frame, that transformation would need to happen *before* your masking. Otherwise, the holdout will follow along and become misaligned with the building. On the other hand, if you stencilled out something from the element itself, like a part of a smoke machine that got caught in the key, the aforementioned transformation would need to happen *after* that particular mask. Otherwise, your mask would no longer line up to cut out the smoke machine. So it’s important to account for transformation changes both ways. When you are compositing a 2D element with your scan, and holding out a part of the scan from the 2D element, any masking that you do should go after these operations on the element: - Transformation - Reformat - Defocus - Motion blur - Lens distortion 💡 Similarly, any lightwrapping and edge blending with the scan should **also* go after the above operations, in order to stay aligned with the scan. ### Grading In The Right Order When doing grading work to match up for example a CG render, matte painting, or element to your scan, the order of the grading matters. Once you match the black levels, avoid doing any more grading work downstream. Otherwise, you can accidentally mess up your black levels. 💡 Setting the black levels should be the ****last grading operation**, and all other grading operations should be placed upstream of that. ### Preparing For Likely Changes When building your composite, structure it in a way that lets you make changes easily without having to redo large sections of your script. *Masking In The Right Places*, which we saw earlier, is a great example of that. But also, anything else that is likely to change should be standardised so that the comp won't break by the change. For example, when making a template script for a sequence of similar shots, try to avoid doing bespoke 2D matchmoving and roto work. Instead, build a more flexible setup with Cards and a Camera. When copying the setup across to another script, you’ll then be able to swap out just the camera, and have it all line up correctly. Similarly, when grading CG renders, use Cryptomattes and Position mattes instead of manually rotoscoping masks. 💡 Make things in a procedural way, which will directly copy across to another shot, and/or which will make making changes to your setup as easy as possible. ### Regraining Once Avoid regraining each element of your composite individually. That would require a lot of grain nodes, and slow down your script. Instead, build up a combined grain matte (for example in the B-pipe’s alpha channel), and use it to regrain all of the elements in one go at the end – using one grain node. 💡 [DasGrain](https://www.nukepedia.com/gizmos/other/dasgrain?ref=keheka.com) is probably **the* best grain tool for Nuke. ## Keeping Track Of Geometry Quick tip: Disable or remove any **ReadGeo** nodes that you’re not using in your script. Geometry can slow down your script, even if it’s disconnected from your composite. ## Saving ToolSets Make sure to save setups that you find yourself recreating often, or that you think will be useful in the future. The easiest way to do this is to use the **ToolSets** feature in Nuke. Select all the nodes in your setup, and click on the **ToolSets** menu (the **wrench icon** in the Toolbar) → **Create**. Then, choose a name for your setup and hit **Create**. Now, your setup has been saved locally on your machine in the **\\.nuke\\ToolSets** folder, and you can access it anytime you like. 💡 If you want to organise your ToolSets into sub-folders, you can either create new folders inside the ****\\.nuke\\ToolSets** folder, and then when you create a ToolSet in Nuke, select which sub-folder to save the ToolSet to in the drop-down menu. Or, you can create a sub-folder directly when you save the ToolSet in Nuke, by naming it /. For example: ****Filter/ExponentialGlow**. ## Saving Presets If you find yourself using the same, non-default settings in a node’s properties, consider saving them as a node preset. For example, you might use custom settings for the ScanlineRender node on a project or a sequence. That could be specific filters and sample values, or specifically named layers to output. Or, it could be a ColorMatrix node with different settings for specific directional edge mattes. The node presets are similar to ToolSets – in the way that you can save custom setups – except they apply to single nodes. To save a node preset, click on the **wrench icon** in the node’s properties → **Save as Preset**. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/11/Node_Preset.png) *Saving a node preset.* ## Precompositing Even when following best practices – as your script grows it might start to become less responsive. Parts of the script might become too CPU intensive, or you might fill up your machine's RAM and start to experience crashes or failed renders on the farm. To keep your composite snappy and easy to work with, precompositing sections of it is a great solution. This is another instance where the practice of keeping a main **B**\-spine, and having the different sections of your comp feed into it via the **A**\-inputs, comes in handy. You can precomposite an **A**\-input before it gets merged into the main **B**\-spine and simply use the precomposite render as the **A**\-input. By precompositing the **A**\-input instead of precompositing somewhere in the **B**\-stream, you can effectively 'lock off' completed sections of your script. I.e. you won’t have to update the precomposite renders if you change something upstream in the **B**\-spine. 💡 Keep in mind, if you're affecting your ****A**\-pipe by the ****B**\-pipe, for example by adding a background edge blend, make sure to precomposite just **before* that happens, to avoid 'burning in' something that might later change. When precompositing, make sure you are rendering: - All the necessary layers you will need downstream. - Enough overscan to avoid any cropping issues downstream. - High enough fidelity, e.g. EXR files without too much compression, and 32-bit for data passes to maintain accuracy. ### In-Script Precomposite If your script is using heavy nodes, i.e. taxing your CPU/GPU, it might be enough to add a Write node inside of your script at the end of the offending **A**\-section and render it to disk. Then, read in the rendered image sequence and use *that* downstream instead of the live **A**\-section. I suggest clearly labelling where you are precompositing with a bright backdrop, and creating a Switch setup for easily changing between the render and the live section: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/11/Precomp_Switch_Setup.png) *Switch setup for precomps.* 💡 By connecting the ****precomp** to the ****1**\-input of the Switch node, and the ****live comp** to the ****0**\-input, and then setting the Switch node to ****1**, you can just enable and disable the Switch node to switch between the precomp and the live comp. Do this for example for heavy **ZDefocus** nodes, element **retimes**, or **vector-based nodes**. ### Off-Script Precomposite However, if your script is crashing due to filling up the RAM, you may need to offload some sections of it into separate precomposite scripts. In this case, move sections of your composite into a new, empty script (or scripts) and render to disk. Make sure to use a sensible naming convention, describing what your precomposite contains. Then, after rendering out the precomposite(s), only bring the render(s) into your main script. For special setups such as **denoising**, and **particle systems**, I would recommend offloading them into separate scripts **every time** to keep your main script running efficiently - as they can quickly grind your script to a halt. 💡 It can be useful to add a StickyNote or a Backdrop node with the file path to the precomp script next to/under your Read node of the rendered precomp. ## Finding The Root Cause When addressing notes and solving issues with your shot, always try to fix the problem at its **source**, and *not* somewhere further downstream. The further from the source you fix the problem, the more likely it is that the fix will cause new problems in your composite. For example, let’s say that to patch over an issue, you do some cloning using a RotoPaint node at the end of your script. There’s then a high risk that any changes you make upstream in the area that you’re cloning from will get caught up in that cloning, resulting in duplicate edges or artefacts. Instead, travel upstream until you **find where the problem first appears**, and do your fixes there. 💡 This is also the exact same approach you should take when tech fixing your shot. ## Using Proxies Using the proxy mode or the downsampling (*downrez*) feature in the Viewer can be helpful when you’re working on high-resolution scans and your computer is struggling a bit. However, I’ve found that both the proxy mode and the downsampling feature can cause issues where artefacts appear, or certain tools don’t line up with the lower resolution image. You might be precompositing a section of your script, and pulling your hair out trying to figure out why the render looks different to what you are seeing live in Nuke. It’s usually due to the proxy mode or downsampling. In fact, I’ve encountered enough issues with them that I have stopped using them altogether. I literally never use those features anymore. 💡 The images that you create are the product that you're ‘selling’ as a compositor. Aim to both view and work on them at the highest quality possible. If you are able to, it’s much better long-term to invest in some extra RAM for your machine, and/or a better graphics card, than to lower the quality of your images. ## Managing Nuke’s User Interface A great thing about Nuke is how customisable it is. Part of that is how the interface can be shuffled around and adjusted to suit your style of working and your specific preferences. I find that changing the default settings and layout can be very useful - it can actually help improve your compositing: ### Colouring Your Pipes A great way of making your Nuke scripts visually easier to read is to change one of the default settings in the Nuke preferences: the pipe colours. Under **Edit** → **Preferences** → **Node Graph** → **Arrow**, you can adjust the colour of the pipes in your script based on which direction they are flowing. This makes it very quick and easy to identify where a pipe is going. You can choose any colours you like for the pipes. I have found the following to work well for me: - **Blue** for pipes going down. I associate blue with water running down a stream or a waterfall which makes it easy to remember that blue indicates a downward direction. - **Yellow** for pipes going to the left. I associate yellow with a sticky note, something to notice. You are generally either heading out from the main pipe to make something new, or heading into a mask input. Yellow indicates that something is happening and you should be aware of it. - **Green** for pipes going to the right. I associate green with the OK or Go signals, and trees. You are heading back towards the main pipe to complete your task: your branch is leading back to the tree. Green makes it easy to see where your A-inputs join their B-pipes. - **Red** for pipes going up. I associate red with a warning or error. Generally, you should try to avoid having pipes going up in order to keep a natural, organised downward flow in your script. Red makes it easy to spot when a pipe is going where it perhaps should not. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/11/Pipe_Colours.png) *Setting up custom pipe colours makes it easy to see which direction a pipe is going.* 💡 Changing the default pipe colours only applies to Nuke on your own machine or user login. Others who open up your script will either have Nuke's default pipe colours or their own custom colours, if they have them set up. ### Moving The Panels Around You’re not locked to the default panel layout in Nuke. There are several different pre-made options in the **Workspace** menu that you can use, or you can make your own customised layout. #### Single Screen Layout When working with a single screen setup, your main priority for populating the screen space should be the **Viewer panel**. Make it as large as you can while still being able to comfortably view the other panels. 💡 Working on a single screen is absolutely valid, however I would definitely recommend looking into getting a second monitor for the added benefits that the extra space brings. We are producing images, and the product is king. You’ll want to be able to see as much detail and have as much room to work on the images as possible. How you arrange the rest of the panels is more up to personal preference, but below are a few guidelines. Unless you are working on ultrawide images, having the Viewer panel take up the entire width of your screen (assuming you have a widescreen monitor) is a waste of horizontal screen real estate. Usually, having the Properties panel off to the right hand side of the Viewer panel is a better option. The Node Graph does not actually need to take up as much space as you would think. You could reduce its size considerably, and if you need some more space to navigate the Node Graph - or any other panel - hit the **spacebar** while hovering your mouse over the panel to maximise it. I find that keeping the Node Graph, Curve Editor, and Dopesheet as tabs in the same panel works great, and unless you have specific needs to view them at the same time, these can be left grouped together. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/11/Example_Single_Screen_Layout.png) *Example of a single screen layout.* #### Multiple Screens Layout If you have two or more screens you can really start customising your layout. Many companies will have two screens per artist, and I would suggest arranging your layout so that the **Viewer panel** takes up the full screen of the best monitor. The second screen will then have the Node Graph and the Properties panel. Maximising the screen space for the Viewer lets you see more detail in your shots and gives you more space to work on the image, for example when rotoscoping, painting, or navigating in 3D space. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/11/Example_Dual_Screen_Layout_A.png) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/11/Example_Dual_Screen_Layout_B.png) *Example of a dual screen layout.* #### Progress Bar By default, the progress bar in Nuke is a pop-up window. Particularly when working on two screens, this pop-up window can accidentally get hidden behind the Viewer panel, which is not ideal. Instead of having to hide the Viewer panel with the **\`** key (just below the **esc** key on UK keyboards) to recover the progress bar every time it gets lost, and then unhide it, I prefer to attach the progress bar to the user interface. I like to split the properties panel into two panels vertically, add the progress bar to the bottom panel, and reduce its size. That way, it’s always there, easily accessible at a glance, but does not take up much valuable space on the screen. This may be a small change, but keep in mind that many small changes in total have a great impact. It’s all about **reducing friction** in your day-to-day workflow, and this small change means that there is one less frustration to worry about. #### Saving A Layout When you’re happy with your customised layout, make sure to save it for future use. Click on the **Workspace** menu → **Save Workspace**, and give the layout a descriptive name. #### Changing The Default Startup Layout Once you have created and saved your favourite layout, it’s useful to tell Nuke to load up that layout by default. Not having to change the layout every time you open Nuke will save you thousands of clicks in the long run. To set a layout as the default startup layout, go to: **Edit** → **Preferences** → **Startup** → **startup workspace** \- and choose your default startup layout. (Alternatively, in older versions of Nuke, when you save your layout, overwrite the Compositing 1 layout which is Nuke's default startup layout). ### Simplifying The Properties Panel The properties panel will by default allow the properties of ten nodes to be open at one time. If you have more than one node’s properties open at a time, this can cause trouble. In order to change the properties of the node that you want, you have to highlight either the node itself so that the corresponding properties become selected, or manually select it from the list in the properties panel. Forgetting this can lead to accidentally changing the properties of the wrong node. To combat this, you *could* reduce the number of nodes allowed to be open at a time: Go to the properties panel, and at the top, enter a lower number than 10 in the **maxPanels** field. However, a better solution in my opinion is to automatically collapse the properties of the nodes that aren’t selected, displaying only one node’s properties at a time in the properties panel: Under **Edit** → **Preferences** → **Control Panels**, tick **expand/collapse panels in Properties bin to match selection**. That way, you can still have multiple properties open at a time, but reduce the chances of adjusting the wrong one. And if you want to compare two properties, you can expand them manually in the properties panel, or hit CTRL + double left-click on a node to open its properties in a floating window. This is great for side-by-side comparison, for copying settings, or for expression linking values between nodes. ## Hotkeys and Shortcuts There are many context dependent hotkeys for speeding up your workflow in Nuke. For a full list, go to: [Keyboard Shortcuts![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/icon/foundry_logo_small-1.png)![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/thumbnail/transparent-1.gif)](https://learn.foundry.com/nuke/content/misc/hotkeys%5Fstudio.html?ref=keheka.com) I would like to highlight some of the more useful ones that I hit the most: ### While Hovering Over The Viewer - **Alt + P** to toggle the [Viewer Input process](https://www.keheka.com/checking-grain-using-the-viewer-input-process/). - **Ctrl + A** to select all, for example all the points of a rotoscope shape. Also works while hovering over the Node Graph/Curve Editor/Dope Sheet to select all nodes/curves/keyframes. - **Ctrl + Left-click** to sample single pixel values in the Viewer. - **Ctrl + Shift + Left-click-and-drag** to sample a region of averaged values in the Viewer. You can also use the sample box in the Viewer to measure the number of pixels, as a guide for aligning something. At the bottom of the Viewer it will say how large the sample box is in pixels, e.g. 30 pixels by 50 pixels. - **Ctrl + Alt + Shift + Left-click-and-drag** to sample a region of averaged values in the Viewer from the node's input while viewing the output. This means the sampling will not be affected by any changes made by the currently viewed node to the image. This is useful for example when colour picking for keying and grading. - **Ctrl + Right-click** to remove the red sample pixel/region from the Viewer. You are **welcome**. - **E** and **Shift + E** to add or remove feather to the selected Roto shape. - **F** to frame the Viewer. - **H** to maximise the frame in the Viewer. - **I** and **O** to set Input and Output points on the timeline. - **J, K** and **L** to reverse, stop, and play forward. - **M** to overlay the matte channel (alpha channel by default). - **PageUp** and **PageDown** to cycle up and down through the layer list. - **Q** to hide/unhide the overlay, e.g. rotoscope shapes. - **S** to open up the Viewer settings. - **Shift + Left/Right arrow** to jump backwards or forwards on the timeline by a set amount of frames; the default is 10\. - **Tab** to cycle between 2D and 3D view. - **Z** to smooth out selected bezier point(s) on a Roto shape. ### While Hovering Over The Node Graph - **Alt + E** to hide/unhide expression lines in the Node Graph. - **Alt + K** to clone the selected node(s). **Alt + Shift + K** to declone. - **B** to create a Blur node. - **C** to create a ColorCorrect node. - **Ctrl + Left-click** on the centre of a pipe to create a Dot node connected to the pipe. - **Ctrl + Left-click-and-drag** on a node to move it and all of the nodes connected to it upstream at the same time. - **Ctrl + Left-double-click** to open a node's property panel in a floating window. - **Ctrl + Left-click-and-drag** on the top edge of a Backdrop node to move the backdrop without moving the nodes on top of it. - **Ctrl + Shift + Left-click-and-drag** a node on top of another node and let go to swap the two nodes. - **Ctrl + Shift + X** to extract selected nodes from the tree. - **Dot** (**.**) to create a Dot node. - **F** with nothing selected to frame all the nodes in the Node Graph, or with one or more nodes selected to frame the selection. - **K** to create a Copy node. - **L** to line up the selected nodes in the Node Graph. - **M** to create a Merge node. - **O** to create a Roto node. - **P** to create a RotoPaint node. - **S** to open up the project settings. - **T** to create a Transform node. - **Tab** to search for nodes. - **Y** to connect a node to another node upstream. Select the node you want to connect upwards first, and then Shift select the node you want to connect it to, then press Y. ### While Hovering Over The Curve Editor - **Ctrl + Alt + Left-click** to add a point to a curve. This hotkey also works the same way on a rotoscope spline in the Viewer. - **H** to ease in/out selected curve point(s) horizontally. - **Z** to smooth out selected curve point(s). ### While Hovering Over The Dope Sheet - **Left-click-and-drag** on the left or right edge of the selection box of keyframes to scale the keyframes in either direction. ### While Hovering Over A Node's Property Panel - **Arrow keys (Left, Right, Up, Down)** to navigate and increase/decrease a knob value. (Left-click the value first to select it). - **Ctrl + Left-click-and-drag** to expression link a value to another value. - **Ctrl + Shift + Left-click-and-drag** (left or right) over a Grade node's colour wheel (or any colour wheel) to decrease or increase the value. Great for lifting black points. ### While Hovering Over Anywhere - **Space** while hovering your mouse over a panel to maximise that panel. ### Custom Hotkeys If you find yourself using the same node or gizmo often, you can set a hotkey for it in the menu.py. Ben McEwan explains how to do that quite nicely in [this previously mentioned tutorial](https://benmcewan.com/blog/2018/01/14/whats-a-menu-py-and-why-should-i-have-one/?ref=keheka.com). And that wraps up this guide (which ended up being over 50 pages long)! I hope you found it useful. For more Nuke tips & tricks, see [Nuke](https://www.keheka.com/tag/nuke/). [Sign up for the newsletter!](https://www.keheka.com/#/portal/signup) ### Spaceship You URL: https://www.keheka.com/spaceship-you/ Last updated: 2024-11-22T23:45:11.000Z *Become a better compositor by doing less compositing…* VFX work, especially compositing, is almost as far away from physical labour as it gets. It is sedentary work, sitting in front of a computer all day. Our creative work requires a lot of **brainpower**: mental energy, stamina, and focus. And we use our brains disproportionately more than our muscles. Which makes it easy to neglect our bodies. Many compositors dismiss this fact, but the reality is that keeping a sedentary lifestyle will have a long term negative impact on your health. And it’s well documented that poor physical health tends to lead to poor cognitive performance. ([Source](https://pmc.ncbi.nlm.nih.gov/articles/PMC5934999/?ref=keheka.com), [source](https://www.health.harvard.edu/mind-and-mood/exercise-can-boost-your-memory-and-thinking-skills?ref=keheka.com), [source](https://www.cdc.gov/physical-activity/features/boost-brain-health.html?ref=keheka.com), among *many*). You have to take care of your body in order to take care of your brain. They are supremely interlinked. And so, you can actually become better at cognitive tasks like those needed for compositing by stepping away from the computer more. – A better compositor by doing less compositing. Let’s zoom out a bit and take a look at it from a different perspective. ## The Divine Gift Over 500 years ago, Michelangelo painted *The Creation of Adam* on the ceiling of the Sistine Chapel in the Vatican. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/11/Michelangelo_-_Creation_of_Adam_-cropped-.jpg) [*The Creation of Adam*](https://en.m.wikipedia.org/wiki/The%5FCreation%5Fof%5FAdam?ref=keheka.com)*.* The painting illustrates the Biblical creation narrative from the Book of Genesis – in which God gives Adam, the first man, the spark of life. But Michelangelo, with his extensive knowledge of human anatomy (including dissecting and studying human cadavers since his early teens), may have concealed a deeper meaning in this particular piece of artwork. In 1990, physician Frank Meshberger noted in the *Journal of the American Medical Association* that the background figures and shapes portrayed behind the figure of God appeared to be an anatomically accurate picture of the human brain. Hidden in plain sight, the shape of a brain is outlined by God’s billowing shroud – a discovery which means that Michelangelo could have believed the divine gift of consciousness and intellect did not come from a higher power, but from our own minds. Which can make you ponder about your own nature, and what ‘you’… *are*. ## You Apologies in advance, but let’s have a bit of a macabre thought experiment. I hope this never happens to anyone, but imagine for a moment that your best friend suffered a horrific car crash and had to amputate both legs *and* both arms in order to survive. For the purposes of this example, there was no trauma to their head or torso, ‘only’ to their limbs. Let’s call this friend ‘John’. After the accident, John would still be John. He’s lost major parts of his body, but nevertheless, when visiting him in the hospital you would still be talking to your friend *John*. Essentially, his living, functional torso and head would still constitute him, the person: John. It’s going to get a little bit more macabre, but please bear with me – there is a point to all of this. Out of hospital, poor John suffers another brutal car accident right in front of you, and gets decapitated. The wreck catches fire quickly. You only have time to run in and pick up either John’s head or his torso, before running back and safely making it out alive from the inferno yourself. Which one do you choose? What would you most consider to be ‘John’? Which of the two parts would you collect in order to give John a burial? This might divide opinion (because of the heart and all that it symbolises) but I would choose John’s head. Essentially, John’s brain would be the most ‘him’. In other words, at the very core of it all, ‘You’ are a brain. You’re a brain inhabiting a body. And your brain is entirely dependent on your body, both to function and to survive. ‘You’ (your brain) are piloting an absolutely vital ‘spaceship’ (your body) that keeps you alive and safe from direct exposure to the outside. *Spaceship You*. ## Look After Your Spacecraft As I wrote in my previous article; aboard [Spaceship Earth](https://www.keheka.com/spaceship-earth/), we are all one – we’re all crew. We have to look after our ship (and each other) because it sustains us, and because it’s our home – the only one that we’ve got. Similarly, aboard *Spaceship You*, everything is a part of the whole – everything contributes to the whole. You have to look after your body, because it sustains ‘You’, and because it's your home – the only one that you’ve got. If you were an astronaut travelling through space, would you not do everything in your power to keep the spaceship in good working order? To keep yourself safe, and able to function optimally? You – your brain – sort of *is* exactly that; an astronaut piloting your body. So please look after your spacecraft. Stand up, stretch, go for a walk – even go for a run, or go to the gym if you can. Keep your spacecraft in excellent working condition, to keep *You* in excellent working condition. Besides, doing something as simple as going for a walk outside is great for sparking new ideas. You get fresh external inputs, and by getting your blood flowing you’re also activating your brain in more ways. Which means, you’re more *receptive* to those inputs, and better able to ‘connect the dots’ and develop greater ideas. It might seem counterintuitive that effectively doing *less* compositing in this way makes you a better compositor. But by being active, you’ll gain more energy and focus for when you *do* composite, making you that much more efficient. 💡 Four hours a day of focussed working in a flow state will nearly always beat eight hours of unproductive or low productivity work or training. It’s a highly net positive exercise which will ultimately make you a better compositor: Take care of Spaceship You. I hope you found this article useful. For more like this, see [Advice](https://www.keheka.com/tag/advice/). [Sign up for the newsletter!](https://www.keheka.com/#/portal/signup) ### Spaceship Earth URL: https://www.keheka.com/spaceship-earth/ Last updated: 2024-11-14T22:34:41.000Z *An expanded perspective on benefiting from each other through shared learning…* ## The Overview Effect When looking at the Earth from space, astronauts have reported experiencing a state of awe and overwhelming emotion. They describe the feeling as a heightened sense of identification with humankind, and a stronger connection to our planet as a whole. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/11/Blue_Marble.jpg) [*The Blue Marble*](https://en.m.wikipedia.org/wiki/The%5FBlue%5FMarble?ref=keheka.com)*. (Also see* [*Earthrise*](https://en.m.wikipedia.org/wiki/Earthrise?ref=keheka.com)*).* From this unique perspective – witnessing first-hand the Earth against the vast, dark backdrop of the universe – they see humans as part of one organic system. A system which is both beautiful and fragile. Experiencing this [Overview Effect](https://youtu.be/CHMIfOecrlo?feature=shared&ref=keheka.com) can create powerful shifts in the way one thinks about the Earth and life. We are really all in this together. Our fate is bound up with everyone on the planet, even the people that we may think are very different from us. We may have different religions or politics but ultimately, we are connected. Totally connected. And not only with people, but with life. Every single one of us is not merely a passive observer, but an active participant in the community of life. And we can all contribute towards its betterment. ## We Are All Crew Canadian educator and philosopher Marshall McLuhan noted more than 50 years ago: **There are no passengers on Spaceship Earth, we are all crew.** He, and R. Buckminster Fuller, who popularised the phrase “Spaceship Earth” to describe our planet, felt that all human beings, like the crew of a large ship, have to work together harmoniously in order to keep the planet functioning properly. That each individual's actions are important in sustaining our biosphere. And therefore, that we’re all responsible for keeping the “ship”, and each other, safe and running well. While that may originally have been intended as more of an environmentally-focused message, I think the same concept applies to many other areas, like education. Just like how the senior crew members on a ship would show the newcomers the ropes (and pick up new tricks from the fresh crew), so too should we all share our knowledge and experience with each other. By contributing useful information to our community, we collectively build and improve our knowledge. This cooperation leads to an interconnectedness, and together, we all benefit. ## The Collective Mind When people share, build upon, and iterate on each other's knowledge, the result is greater than what an individual can do alone. **The collective mind has fewer blind spots.** Especially, when each person has an area of main focus that overlaps with others. As a literal example of blind spots, let’s say there is a small military unit, a squad of four soldiers, out on patrol. A single soldier would not be able to scan the terrain 360 degrees around them at all times. But with four, each person can cover one main quadrant each. One person could comfortably scan 120-150 degrees (a 90 degree quadrant plus plenty of overlap for safety). And together, they would have complete coverage. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/11/Overlapping_Quadrants.jpg) *Each person would cover their quadrant, plus some overlap with the adjacent quadrants. (Yellow indicates one person’s view, and the darker sections indicate overlap).* Similarly, by sharing our knowledge with each other, we can cover *our* blind spots. One person might share a tool or a technique, another may improve it with new functionality or performance enhancements. Someone else might add a bit of Python magic to automate certain aspects of the workflow. And so on. Each of us has something to contribute – often by taking advantage of [cross-pollination](https://www.keheka.com/the-edge-of-chaos/) – and can therefore help build up our collective [Sphere Of Knowledge](https://www.keheka.com/the-sphere-of-knowledge/). ## The Survival Of Information Sharing information is not only useful, but ultimately *crucial*. 💡 Information dies with you unless you share it. The reason why you and I have not eaten poisonous berries is because our distant ancestors made *sure* we wouldn't. They passed on that information all the way down to our generation. And those who didn’t get the memo along the way, well, they’re unfortunately a quiet part of history. I’m not saying anything in Visual Effects is life or death, by any means, yet there is often a sad finality to unshared information. (It may be why many take on an [Immortality Project](https://www.keheka.com/whats-your-immortality-project/) as a way to preserve and pass on information for benefiting others). To help promote useful information, I filter through a lot of VFX websites/blogs/channels, and stay up to date with developments. I post articles and guides on my website and share them with the community. And each week, I go on LinkedIn and try to connect with people who may have something interesting to share, and who might benefit from something that I share. 💡 I also regularly post VFX and compositing-related information in our [Companions](https://www.keheka.com/companions/) chat, as do other members, and together we grow as artists and people. You can, too. It’s important to remember that the VFX community is small, and that we all have to build each other up. So, if you have something to share which could be helpful to others, please do. If you're able to; be of service to your fellow crew members on Spaceship Earth. I hope you found this article useful. For more like this, see [Advice](https://www.keheka.com/tag/advice/). [Sign up for the newsletter!](https://www.keheka.com/#/portal/signup) ### Leeloo – Multipass Compositing Tool For Nuke URL: https://www.keheka.com/leeloo-multipass-compositing-tool-for-nuke/ Last updated: 2026-04-17T13:44:21.000Z ⭐ An advanced, flexible tool for compositing multiple CG render passes… _This post is for paying subscribers only._ ### Working With CopyCat In Nuke URL: https://www.keheka.com/working-with-copycat-in-nuke/ Last updated: 2024-10-16T07:42:38.000Z *How to use CopyCat to replicate a visual effect over a whole image sequence from just a small number of example frames…* ## Time Saver We've been using CopyCat at work for a while now, for example to assist with temp roto and core roto on long shots. And it’s actually been quite useful. With a little bit of setup, you can get hundreds of frames of roto for “free”, and save a lot of time. The same goes for clean up or beauty work, deblurring or upscaling – and even creative effects. But it seems like quite a few people have never tried using CopyCat before, so here’s how it all works: ## Machine Trial And Error Using [supervised](https://en.m.wikipedia.org/wiki/Supervised%5Flearning?ref=keheka.com) [machine learning](https://en.wikipedia.org/wiki/Machine%5Flearning?ref=keheka.com), the [CopyCat](https://learn.foundry.com/nuke/content/reference%5Fguide/air%5Fnodes/copycat.html?ref=keheka.com) node trains a [neural network](https://en.wikipedia.org/wiki/Neural%5Fnetwork%5F%28machine%5Flearning%29?ref=keheka.com) to build a [model](https://learn.microsoft.com/en-us/windows/ai/windows-ml/what-is-a-machine-learning-model?ref=keheka.com) for copying a visual effect from a small number of example frames and applying it to a full image sequence (via the [Inference](https://learn.foundry.com/nuke/content/reference%5Fguide/air%5Fnodes/inference.html?ref=keheka.com) node). CopyCat compares a selection of “before and after” example images – the **Input** and **Ground Truth** – and learns *how* to alter the pixels of each “before” image through a weighted decision tree, in order to get it to match up to its corresponding “after” image. It does this by adjusting and fine-tuning the [model weights](https://deepai.org/machine-learning-glossary-and-terms/weight-artificial-neural-network?ref=keheka.com) (the network’s learnable parameters) through a massive amount of trial and error, constantly course-correcting itself, until the difference between the “before” and “after” images is at, or near, zero. The resulting model ends up with a large set of specific “rules” for what to do with the input pixels in various contexts in order to achieve the desired output across the image sequence. 💡 CopyCat can also build larger, more generalised models by training on hundreds or thousands of images, which can be used to apply an effect to images that are not from a specific sequence. The Inference node can then apply those rules to the full sequence, creating the same effect from the example images on frames it has never seen before. 💡 The CopyCat and Inference nodes don’t actually “see” anything, they only read and process pixel values, i.e. numbers. They have no understanding of what an image contains the way we humans do, and can therefore make mistakes that don’t make sense to us. ## Inverse Compression Another way to think about it is to compare using CopyCat to uncompressing a compressed file on your computer. It’s possible for the computer to compress a file (make the file size smaller) by finding repeating or very similar data patterns in the file and making a shorthand for them. Essentially, making a shorter way of describing the whole file, which takes up less space. 💡 As a simplistic example, if you replaced the word “the” with the symbol “\~” every time it appeared in a book, you could probably shorten down the book by a couple of pages. And knowing that “the” equals “\~” (a rule which you'd only need to write down once), it would be pretty easy to restore the original text in full. When *uncompressing* the file, the computer substitutes the shorthand for the full pattern, and you get back to the full-sized file. Depending on the shorthand, however, some information might get lost. There could be generalisations in the shorthand description of the file (i.e. lossy compression), for example. Which could lead to some compression artefacts. You’d *nearly* describe the original file in full, but not quite. 💡 For example, JPEG image compression can simplify nearby, similarly coloured pixels into blocks of the same colour, losing some fidelity in the process. In a way, CopyCat is sort of “uncompressing” the information that you provide to it – the few example image pairs – to create the same effect for the whole image sequence. It's trying to figure out the rules for uncompressing the information. The more example images that you provide, the more accurately it can do that job. And more importantly, the more *unique* example images that you provide, the better the result will be. (Because there are fewer generalisations and therefore less ‘lost data’). CopyCat can pretty easily figure out the repeating patterns – i.e. what to do with the images in the sequence that are nearly identical to your examples. But if you generalise too much, i.e. don't provide enough examples for the unique scenarios in the sequence, then CopyCat won’t know what to do with those unique patterns. – For example, you should avoid only providing CopyCat roto examples of a person when they’re in front of one type of background, and no examples for when they’re in front of other, different types of backgrounds in the sequence. It’s the same person, but the background is different. The repeating pattern is broken and CopyCat just won’t have enough information to go by. I.e. the ‘file compression is lossy’ and artefacts will occur. Ideally, you’ll want to provide enough information to cover all of the unique characteristics of the sequence, while keeping the number of examples low enough that you still end up saving time overall compared to doing the effect yourself on the whole sequence. 💡 You can find more concrete tips and tricks for how to do this further below in the article. Okay, let’s jump into Nuke and take a look at the CopyCat workflow in practice: ## How To Set Up Inputs & Ground Truths Before we even get to the CopyCat node, you have to create your sets of **before** and **after** images: the **Inputs** and **Ground Truths**. To do that, you’ll have to play through and examine your shot, and carefully select a variety of representative frames from the scan to use as examples for CopyCat. Depending on the effect you're looking to produce, the images which you provide CopyCat should ideally include examples of: - The different backgrounds behind the subject/object across the shot. - The different shapes of the silhouette of the subject/object against the background across the shot. - The different framing and the different sizes of the subject/object in the frame across the shot. - The different focus levels across the shot, both in focus and out of focus examples. - The different lighting scenarios and variation in lighting across the shot. - The different motion (both camera and object motion) and motion blur across the shot. - The different occlusions of the subject/object across the shot, whether it’s occlusion by other objects, or by partially going out of frame. - The different shadows or reflections over or near the subject/object across the shot. - The different levels of detail in the subject/object across the shot. Not all of the above will necessarily apply to your shot. However, the idea is to cover all of the key scenarios that CopyCat will need to learn to distinguish between, in order to successfully copy the effect across the whole shot. 💡 You may have to add more example images to your data set if you get to the end of your training and CopyCat still has issues distinguishing between certain areas of the frame. ### Input Depending on your shot, pick some representative frames from the scan, typically somewhere between 1-30, and make FrameHolds for them. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/10/FrameHolds.png) *Choosing example frames from the scan.* We're going to connect all of these FrameHolds together into a new image sequence, and plug that into the **Input** of the CopyCat. To make a new image sequence, we can use an **AppendClip** node. But currently, each FrameHold node will still play for the entire length of the current project frame range. Which means, if the frame range is 100 frames long, you'd be inputting the same image 100 times into CopyCat – for every input image. So first, we need to make each FrameHold just play for a single frame: Connect a **FrameRange** node in between the scan and the FrameHolds, and set the frame range to **1-1**. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/10/FrameRange.png) *Changing the frame range of each FrameHold to a single frame by using a FrameRange node set to 1-1.* ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/10/FrameRange_Properties.png) *The FrameRange node's properties.* Now, we can connect up all of the FrameHolds with an AppendClip node (no need to change any of the default settings in the AppendClip), and create a new image sequence. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/10/AppendClip.png) *Creating a new image sequence using the AppendClip node.* That's the **Input** image sequence done – the “before” example images that we'll feed into CopyCat later. ### Ground Truth To make the **Ground Truth** image sequence, you'll apply your effect to the same frames that you selected for the **Input** sequence. That effect could for example be paint work, or a roto matte shuffled into the red channel. – Whatever you want the output to look like. 💡 Note that you will get out what you put into the work to create the ****Ground Truth** images. The more accurate the roto or paint work you input, for example, the better the work will be that CopyCat outputs. You can't expect great roto from sloppy examples, for instance. You have a couple of options for making the **Ground Truth** image sequence: #### Mirror Method For the mirror method, select and copy the FrameHolds and the AppendClip node all together, and paste them off to the side. With this method, you'll have two streams side by side: the **Input** stream, and the **Ground Truth** stream. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/10/Mirror_01.png) *Making two identical streams as a base for the mirror method.* It’s extremely important that the same FrameHolds on both sides are connected up to their respective AppendClip node in the **exact same order**. The two image sequences *have* to match each other perfectly, otherwise CopyCat will be comparing the wrong images, and you'll get errors in your training. So, you're essentially creating the same exact setup on both sides, except the **Ground Truth** section will have your effect applied to its images, while the **Input** side stays untouched. Next, add your effect to the images on the Ground Truth side, for example some paint work: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/10/Mirror_02.png) *Adding your effect to the Ground Truth images.* To help visually ensure that you have connected up the images to their AppendClip node in the same order, you can select both of the AppendClip nodes and hit **Alt + P** to enable their postage stamps. That'll make it easier to see that they are both showing the correct image (from the same image pair) on the same frame, and it'll help distinguish between the two streams. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/10/Mirror_03.png) *Enabling the postage stamps in the AppenClip nodes.* Finally, crop any overscan with a Crop node (identical on both sides), and ensure that both streams only pipe through the channels that are needed. In this case, that would be the red, green, and blue channels from both sides. (However, when you’re copying roto work, for instance, that could be the red channel only from the Ground Truth side, and the RGB channels from the Input side). In other cases, you may be using other layers as well. Keep just the ones you need so that CopyCat doesn’t have to perform any training on layers you won’t use, wasting time and resources. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/10/Mirror_04.png) *The mirror method.* The mirror method is visually **quite easy to read** in your script. However, it **requires more nodes** and a **larger setup**, and it **runs the risk of causing errors** if the AppendClip nodes are not connected up in the *exact* same way. #### Shuffle Method For the shuffle method, you don't need to copy the FrameHolds and AppendClip nodes and make a separate stream for the **Ground Truths**. Instead, you pipe both the original **Input** images *and* your altered **Ground Truth** images through the same stream using additional layers. For example, you could make a new layer called “scan” (you can name it anything you like) and shuffle the original **Input** images into that layer. And then, do all your work on the RGBA layer, leaving the “scan” layer untouched, before piping *both* through the same AppendClip node. Then, shuffle out the “scan” layer – the **Input** – *after* the AppendClip node into a separate stream alongside the RGBA, or **Ground Truth**. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/10/Shuffle_Single_Stream.png) *The shuffle method: shuffling the original Input images into another layer (e.g. the “scan” layer) so that they can pass through the same pipe as the Ground Truth images.* ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/10/Shuffle_Single_Stream_Properties.jpg) *Shuffling the original Input’s RGBA channels into the “scan” layer.* It’s extremely important that you don't alter the original **Input** images. Otherwise, you'll introduce a disconnect between the images that CopyCat learns to apply the effect to, and the actual images that the Inference node will receive to apply the effect to later – causing artefacts. And so, either: In the properties of all the nodes and gizmos that you use to create your effect, make sure to **change the affected channels from All to RGBA**. Or, better yet - like I’ve done below: **Shuffle the untouched “scan” layer into the stream only *after* applying your effect**, to guarantee that it remains unchanged. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/10/Shuffle_Double_Stream.png) *The safer shuffle method: shuffling in the untouched original Input images after applying the effect which creates the Ground Truth images.* ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/10/Shuffle_Double_Stream_Properties.jpg) *Shuffling the original RGBA channels from the A-input into the “scan” layer.* 💡 This safer method becomes more relevant when you’re doing more complicated work to create the Ground Truth images, involving nodes which by default may affect All channels. The shuffle method is a **little bit more convoluted** since you're shuffling things into other layers. And there's a **risk of accidentally altering the Input** images with a node set to affect All channels. (If you’re not shuffling in the original Input images *after* applying your effect, like I did in the last example above). However, it requires **fewer nodes** and a **smaller setup**, and there is only one AppendClip node – which **eliminates the potential connection order problem**. You can use whichever method you prefer – just be aware of the caveats with each method and adjust your setup accordingly. 💡 Note that the larger the training data set, the larger and potentially more unwieldy the Nuke script will become using the mirror method – and so it might be a good idea to use the shuffle method instead. With both an **Input** stream and a **Ground Truth** stream ready, we can now move on to the main event: ## The CopyCat Node ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/10/CC_Inputs.png) *The CopyCat node.* ### Inputs The CopyCat node has two main input pipes: the **Input** and the **GroundTruth** – and once you connect up those two, a third, previously hidden input pipe appears: the **Preview**. Like we've seen, you can think of the **Input** and the **GroundTruth** as the “before and after” example images to use for the training, respectively. And the **Preview** is simply an optional input for checking CopyCat’s progress during the training: - The **Input** pipe should be connected to the **before** image examples – typically a selection of frames from the original scan. Connect the Input pipe up to an Input stream like the ones we made before. - The **GroundTruth** pipe should be connected to the **after** image examples – the ‘desired output’ – i.e. what you want the input to end up looking like. Note that the **GroundTruth** images *must* be **in the same sequence order** as their corresponding **Input** images. Connect the GroundTruth pipe up to a Ground Truth stream like the ones we made before. - The **Preview** pipe can optionally be connected to an image for testing how the effect is currently working while CopyCat is training. At every checkpoint of the training, CopyCat will perform an inference on that image to show you how the training is progressing in the Viewer. If you like, connect the Preview pipe up to your scan (on a different frame to the ones in your data set) or to another image sequence that you want to preview the effect on. (Press Q in the Viewer to hide the Contact Sheet to be able to see the full frame of the Preview). ### Properties: CopyCat Tab ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/10/CopyCat_Properties.png) *The CopyCat tab in the properties of the CopyCat node.* In the first tab of the CopyCat node's properties (simply named **CopyCat**), you can find all of the settings for training a model on your effect: #### ↪ Use GPU if available CopyCat will often perform millions of calculations during the training, but it can run calculations in parallel which drastically speeds up the process. By using the GPU (graphics card), it can run many more calculations in parallel than it’s able to do on the CPU (processor). So it's highly recommended to tick this checkbox if you have a supported graphics card. 💡 NVIDIA CUDA is not supported on macOS so training defaults to the CPU, which may result in longer training times. #### ↪ Data Directory During the training, CopyCat will output a large number of different files and store them on your system. This training output consists of: - **Checkpoints** that store the network weights. These are **.cat** files which are saved at every **Checkpoint Interval** – a setting which you change in the CopyCat node’s properties (every 1,000 steps by default). The .cat checkpoint files contain all of the training data up to that point, and can be loaded into an **Inference** node to see the results of the training on a full image. - **Contact Sheet and Preview images** that show how the network is performing at a given step. (Preview images are only available if the optional Preview input is connected). These are **.png** images which are saved at every **Contact Sheet Interval** – a setting which you change (every 100 steps by default). The **Contact Sheet** images are overlaid in the Viewer during training, in a 3 by 3 grid (or 3 by X, if you are outputting extra layers). This grid shows three of the random crops that CopyCat has selected, at a time, with each column displaying: the input (left column), the ground truth (middle column), and the output (right column). The goal is to **get the output to match exactly to the ground truth**. (This happens over time – at first the output might look like a garbled mess, which is normal). The **Preview** images are displayed full-size in the Viewer, showing the current progress of the effect applied to an image of your choice (which can be outside of the training image set). Press Q in the Viewer to hide the Contact Sheet to be able to see the full frame of the Preview. You can also directly view the saved **.png** images on your computer to keep an eye on the training progress. - A **Summary** that contains graph data to visualise the training process. This is a **.summary** file which records the loss value (i.e. the difference between the ground truth and the output) at each step. It’s used to build the graph that is displayed in the Progress tab of the CopyCat node’s properties. The graph shows the **Loss** in the Y-axis and the **Steps** in the X-axis – i.e. the graph shows errors over time. The goal is to **lower the errors as close as possible to zero**, so if the graph is trending downwards during the training, it’s heading in the right direction. - **Progress files** with the most up-to-date training data. These are **.ost** files that allow CopyCat to resume training should the process fail or be stopped manually. They contain the latest updates to the training data *between* the previous and upcoming .cat checkpoint. Click on the little folder icon to browse to, and select, a location on your hard drive where you want to store the files above. (No filename needed, just a path to a folder). #### ↪ Epochs The **Epochs** value represents the number of times CopyCat processes the entire data set (i.e. all of the **Input** and **Ground Truth** images) during training. Epochs are also used to determine the number of Total Steps plotted on the Graphs tab (a number which also affects how many training files will be saved), using the following equation: **Total Steps = Epochs \* (Data Set Size) / (Batch Size)** (The **Data Set Size** is the number of **Input** and **GroundTruth** image pairs connected to CopyCat). For example, 10,000 **Epochs** over a data set of 6 image pairs with a **Batch Size** of 4 is equal to 15,000 steps. Higher Epochs values generally produce better trained networks, but at the cost of longer processing times. However, at a certain point you’ll likely start to see diminishing returns, and possibly even *worse* results, by further increasing the Epochs. So some experimentation is needed here. – And you can always go back to an earlier checkpoint if the results start to get worse. The default Epochs value of 10,000 is a good starting point, and it can help you get a clear idea of what’s working and what’s not working, but you may have to increase this value later to get better results. You may even be able to *lower* it, if you’re using pre-trained models as a base, and still get the result you’re after. – In any case, you can change the Epochs value at any time, and resume the training. And, you can also stop the training at any point if the output is matching the ground truth and you’re happy with the result. 💡 Next to the Epochs, you'll also see a list of the the input and output channels, the currently selected batch size, and the total number of steps the training will go through. Note that if you change the number of channels or inputs, you’ll have to close and reopen the CopyCat properties for this list to update. #### ↪ Start/Resume Training Click the **Start Training** button to begin teaching the network how to replicate the desired effect. You can pause the training at any time by hitting Cancel, and then resume it by clicking the **Resume Training** button. You could for example pause the training, add more images to the training set, or change the number of Epochs, and then resume the training. Or, continue training from a saved checkpoint. (See Initial Weights below). #### ↪ Create Inference Creates an **Inference** node with the latest **.cat** file preloaded. You could also create an Inference node through the Tab menu, like any other node, but it would be blank and you'd have to manually navigate to the .cat file. #### ↪ Initial Weights In this drop-down menu, you can choose whether to train a network from scratch, or start from an existing set of weights which will speed up your training. - **None**: Start the training with all the weights at their default values – a blank slate. - **Checkpoint**: Start the training from an existing checkpoint of your choice. This option lets you continue training from a previously saved .cat file, using its already trained weights as a base. For example, using the training from one shot as a base for the training on another, similar shot in the sequence. - **Deblur**: Start the training with a network already trained on deblurring images. This will speed up any deblurring training, or other training for a similar effect, such as an inpainting task. - **Upscale**: Start the training with a network already trained on upscaling images. This will speed up any upscaling training, or other training for a similar effect. - **Human Matting** (*Large, Medium, Small*): Start the training with a network already trained on creating mattes for humans. This will speed up any roto training for humans and similar characters. The Large, Medium, or Small options refer to the **Model Size**. A large Model Size is generally better to use for a wider range of more complex shots but will take longer to train, while a smaller model size will mostly work for simpler, more similar shots in a sequence and will be faster to train. #### ↪ Model Size The number of different parameters that are available to CopyCat for adjusting weights while training depends on the size of the model in use. There are three sizes to choose from: Small, Medium, and Large: The **Small** model is faster to train and uses less memory, but may not always give the best results. It’s typically best used for simple effects, like deblurring or upscaling, that will be applied to very similar shots. The **Large** model is slower to train and uses more memory, but should be able to generalise better. This model size is best used for more complex effects, such as human matting, for a wider range of shots. The **Medium** model sits in between the two – a happy medium between speed and quality in many cases – and is the default option. #### ↪ Batch Size The **Batch Size** is the number of input and ground truth image pairs to train with at each step. By default this is set to **Auto** (which calculates the Batch Size automatically based on the available GPU memory), but you can change it to **Manual** and set your own Batch Size. 💡 The Auto mode is designed to be quite conservative, and so you can change it to Manual and adjust it as needed if your machine can handle larger batches. Note that the Batch Size must be less than or equal to the number of image pairs in your data set. A smaller Batch Size can make the training slow and inefficient, but a larger size can cause your graphics card to run out of memory. A larger Batch Size will typically produce a smoother loss curve and more stable training, while a smaller Batch Size may help the training converge faster on small data sets. For most scenarios, a Batch Size between 4 and 16 will be suitable. 💡 Multi-GPU processing requires a Batch Size greater than or equal to the number of GPUs you want to use. For example, if you have two GPUs, CopyCat's Batch Size must be set to two or higher to use both GPUs. If you have four GPUs and you set the Batch Size to two, CopyCat only uses two GPUs. #### ↪ Crop Size When training the network, CopyCat doesn’t work on the entire frames of the input and ground truth image pairs at once. That would cause your graphics card to run out of memory, fast, and make the training fail. Instead, CopyCat will take matching random crops of the input and ground truth image pairs and use those for training. By doing this again and again, thousands of times, eventually it covers the entire area of the frame in all of the images in the training set. The **Crop Size** determines how large these random crops will be. By default, it’s set to **256 x 256** pixels, but you can set it higher or lower. A higher Crop Size requires more memory, but gives CopyCat more context during training. A smaller Crop Size will be faster, but may not give as accurate results. For small pixel operations such as deblurring or upscaling, it’s fine to use a small Crop Size, because CopyCat only really needs to “see” a few pixels at a time to learn the effect. But for larger effects, like roto tasks with matte shapes that need a bit more context, or when training on high resolution footage, you'll usually be better off choosing a larger Crop Size for CopyCat to work with. #### ↪ Checkpoint Interval The Checkpoint Interval is the interval at which CopyCat saves a checkpoint with the current weights in a **.cat** file during training. By default, this is set to every 1,000 steps, but you can change it to anything you like. #### ↪ Contact Sheet Interval The Contact Sheet Interval is the interval at which CopyCat saves a contact sheet of its current output during training. By default, this is set to every 100 steps, but you can change it to anything you like. #### ↪ Use Multi-Resolution Training Enabling this checkbox allows CopyCat to temporarily reduce the resolution of the input and ground truth images, and perform its training in three stages: 1. Low-resolution stage at a **quarter resolution**. This considerably speeds up the initial training, at the cost of losing some accuracy. 1. Medium-resolution stage at **half resolution**. This also speeds up the training, and starts to get more accurate. 1. High-resolution stage at **full resolution**. This lets the model learn from the fine details and achieve optimal results. By enabling the checkbox, CopyCat can train the model **up to twice as fast** as normal. 💡 If you’re using a large dataset of more than 100 input and ground truth images, The Foundry recommends disabling this checkbox. ### Properties: Progress Tab In the second tab of the CopyCat node's properties (named **Progress**), you can monitor how the training is progressing: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/10/Progress.png) *The Progress tab in the properties of the CopyCat node.* #### ↪ Runs At the top you can find each ‘Run’ (i.e. training session) saved in the current Data Directory. You might for example save all of your CopyCat training for a project in the same folder. If so, you can find and select them here. With multiple training sessions saved, you can right-click on a specific run to: - Toggle its visibility in the Graph. - Delete that training run and its associated files. - Create an Inference node using the latest .cat file from that run. - Resume the training in that run. There’s also a **Live Updates** checkbox here. If you enable it, CopyCat will periodically scan the Data Directory, and update the Runs table, the Graph, the Contact Sheet, and the Preview displays with the latest run. #### ↪ Graph Next, you’ll find the Graph displaying the training progress. Like mentioned previously, the graph shows the **Loss** in the Y-axis and the **Steps** in the X-axis. Keep an eye on the curve, especially at the beginning of the training. If it’s trending towards zero, it’s heading in the right direction and the training should be going as expected. When the training has been running for a while, and the Loss value is getting near zero, it can be tricky to judge whether the model is improving by looking at the original graph. (See for example the picture above). If so, you can enable the **Log Scale** checkbox to change the Y-axis from linear to logarithmic, allowing you to see more detail in the curve at lower values. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/10/Progress_Log.png) *Enabling the Log Scale checkbox allows you to see more detail in the curve at lower values.* There is also an option for smoothing out the curve in order to focus more on the overall trend, rather than the local peaks and valleys. The default **Smoothness** value is 0.6, but you can increase and decrease this as you like. Enabling the **Show Original Curve** checkbox allows you to see the unsmoothed curve as a faint overlay together with the smoothed curve. (This shows the same curve as when setting the Smoothness to 0). Lastly, on the right, you can find buttons for refreshing the view, zooming in and out of the Y-axis and the X-axis, and resetting the view. 💡 You can also left-mouse-drag a box over a certain area of the graph, and the view will zoom into that area. #### ↪ Contact Sheet Here, you’ll find the last Contact Sheet that was saved during the training. #### ↪ Preview Here, you’ll find the last Preview image that was saved during the training. Those were all of the settings in the CopyCat node. Using all of that information, you can have CopyCat run the training on your data set (there are more tips later in the article as well). And when you’re happy, let’s move on to the node which actually makes use of the model that CopyCat creates: ## The Inference Node The word **Inference** means “a conclusion reached on the basis of evidence and reasoning”. And that's what this node does: based on the resulting model from the CopyCat training, the Inference node can infer what to do with an input image to get it to look like the example ground truth images. That is, it can apply the same effect to images which CopyCat has never trained on before, based on the ‘evidence’ (i.e. training data) that you provided to it. ### Properties ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/10/Inference_Properties.png) *The properties of the Inference node.* The Inference node doesn't have a whole lot of properties: #### ↪ Use GPU if available By enabling this checkbox, Nuke will calculate the Inference node on the GPU instead of on the CPU, considerably speeding up the rendering. #### ↪ Model File Here, you can browse to and select your desired **.cat** file to use for the inference. This will typically be the latest .cat file from the training, but it doesn't have to be – sometimes an earlier checkpoint will do a better job at replicating your effect. 💡 If you click on the ****Create Inference** button in the CopyCat node, the created Inference node will come with this field already pre-filled with the latest .cat file. Below the Model File field, you'll also see the input and output channels, so that you can quickly check that the Inference node is processing and outputting what you expect. #### ↪ Optimize for Speed and Memory When this checkbox is enabled, the Inference node will use 16-bit half-float precision instead of Nuke's standard 32-bit float precision. This produces results more quickly, uses less GPU memory, and can handle larger images, but can result in artefacts with some trained networks. By default, it's turned off. Try enabling it if you're having memory issues or if the Inference is rendering slowly. ### Applying The Inference The Inference node only has a single input. Simply plug it directly into the image sequence that you want to apply your effect to, and watch the magic happen. 💡 If you're using the Inference further in your Nuke script, it's a good idea to precomp its output once you're happy. ## CopyCat Tips There are many things you can do to speed up the CopyCat training, increase the quality of the results, and make the process easier for yourself: ### Augment The Training Data Similar to how you can [adjust the scan in the alpha stream of a keying setup](https://www.keheka.com/professional-keying-in-nuke/) in order to pull a better key, you can also make adjustments to the training data in order for CopyCat to produce a better result. There are plenty of ways to do this: #### ↪ Crop In To Focus On The Effect Like described earlier, CopyCat takes a whole bunch of random crops of the data set during training. Which means, if your effect isn’t very large in the frame (for example if the effect consists of beauty work in a small area), CopyCat won’t “see” it very often. Most of the random crops will be taken from other areas of the frame where no changes have been made. You can help CopyCat come across your effect more often during training by adding **identically** cropped-in versions of your Input and Ground Truth images to your data set. Simply add a Crop node to some (or all) of the Input images and their corresponding Ground Truth images, off to the side in new pipes, and add these new, cropped images to the AppendClip node(s). 💡 Your cropped area must be bigger than the Crop Size set in the CopyCat node. Note that it is *still* important that CopyCat takes all the random crops of the unchanged areas of the frame. Because it also needs to know what *not* to change in the image. So keep the full, uncropped frames, and add the cropped versions as additions, not replacements. 💡 You can also use Crops for defining specific areas which you want CopyCat to leave alone, for example the eyes of a person. Crop in on the eyes in both the Input and the Ground Truth image, and pass both of them through without any changes to let CopyCat know they should remain untouched. #### ↪ Make Identity Frames If there are any points during the shot where you don’t see the effect in the Ground Truth images, for example when a person is turned around for a moment and you don’t see the beauty work on their face, make sure to add some example frames of this to your data set. For these **identity frames**, the Input and the Ground Truth images are **exactly the same**. – Which lets CopyCat know that these are areas it should leave untouched. #### ↪ Fake Inputs And Ground Truths CopyCat is essentially just creating “rules” for what to do with your input image, and so you can actually create fake scenarios which can help it do just that. If you’ve made some roto examples of a person in front of a wall with a sky behind it, for example, but the person later moves so that they intersect with the sky, you don’t always need to make new Ground Truth examples from scratch. You can take the roto example you’ve already made for when the person in front of the wall, premultiply that image, and transform the person up and merge them back over the image so that they intersect with the sky. Crop in on the intersecting area, and voilà: you’ve got a new, valid image for training. Make sure to do this in the exact same way for both the Input and Ground Truth images. You can try cropping, rotating, flipping, grading, and repositioning the image – simulating various different scenarios – in order to improve the data set. This can be particularly effective in certain situations such as when there are shadows in the affected area. Grade the frame darker to fake shadows, or move a subject/object over to another shadowed area in the frame, for example. 💡 If you make changes to the Input or Ground Truth images, you’ll need to restart the training. Or, use a checkpoint and continue the training from there. Victor Perez and Luca Prestini show several ways of setting up different augmentations in this video: *CopyCat with ‪@nodebynode‬: Live machine learning on his upcoming project.* #### ↪ Beware Of Super Bright Values If you have super bright values in your image – values far above 1 – it might help CopyCat to clamp those values before the training. If your effect is in an area without any super bright values, add a Clamp node to your scan before the training, and restore the clamped values after the Inference node. You can use a Merge (from) with the A-input connected to the clamped footage and the B-input connected to the unclamped footage to isolate the super bright values that were clamped, and Merge (plus) those (A) with your output (B). If your effect is in an area that *does* contain super bright values, however, you can instead convert your footage to Log space before training, and then back to Linear after training, using for example the Log2Lin node. 💡 When converting images to Log space, the colour values get compressed to a smaller range, and so it may take CopyCat longer to train to distinguish between the values. Always train your model in the same colour space as you intend to run Inference in. ### Colour The Roto If you’re copying roto work, make sure to shuffle your matte into the red channel. This makes it easier when working in Nuke, as you don’t have to switch back and forth between the RGB and the Alpha to compare the Input and Ground Truths. And you can also visually keep track of the progress in the contact sheet during training. ### Adjust The Resulting Matte CopyCat might leave fine holes in the roto, or fine noise outside of the roto shape, even after training for a long time. (You may only be able to see these when gamma/gaining the Viewer up or down). If that happens, you can add a Grade node below the Inference node, and adjust the *blackpoint* and *whitepoint* until you’re happy. Make sure to tick both the **black clamp** and **white clamp** in the Grade node to keep the alpha values contained between 0 and 1\. ### Crop The Bounding Box At the end of the Input and Ground Truth streams, crop out any overscan to make sure the two streams have identical bounding boxes. This ensures CopyCat is comparing the images 1:1\. ### Remove Superfluous Channels Remove channels that you don’t need to process, before running CopyCat. Any leftover channels, for example from your Ground Truth creation, that are passed through to CopyCat will demand additional processing time. And there is no need to spend extra time training on a random layer that won’t be used. This can be as simple as removing an alpha channel, and only use the RGB channels for some paint work, or it can involve trimming multiple other layers and channels in your data streams. ### Precomp The Training Set Precomp your Input and Ground Truth image sequences, especially if any of the nodes upstream use the GPU. That’s because CopyCat is *also* using the GPU, and the more resources you’re able to give it, the faster it will train. ### React To The Graph If the Loss/Steps graph is trending upwards, i.e. *more* errors are introduced, or starts plateauing early at a high Loss value, it could be because the **AppendClip** nodes are not connected up to the **Input** and **GroundTruth** images in the exact same order, or that your selected **Model Size** and/or **Crop Size** isn’t large enough. You can also look at the contact sheet overlay in the Viewer: if the input and ground truth images don’t line up, they’re probably not connected up to the AppendClip nodes in the correct order. If the graph is trending towards zero but the output is still not replicating the ground truth, then you can try increasing the number of epochs, and/or increasing the number of image pairs to your data set. Make sure that you have a diverse selection of images as this tends to produce the best results. And the more example images you have, the better the results tend to be. A good Loss value is typically somewhere between 1e-3 to 1e-6, and indicates that the training may be complete. This number depends on the task – effects that take up more space in the frame, or change the Input image more, will have higher Loss values. ### Augment The Inference Input If another shot in the sequence is for example darker than the training images (but otherwise contains the same elements), you can grade the shot brighter to match what CopyCat was trained on, apply the Inference node, and then reverse the grade after. That way, the Inference node “sees” something more familiar and can potentially better apply the effect. ### Browse The Cattery In addition to the native models in the Initial Weights menu in CopyCat, there are many other, advanced models available online in the **Cattery**: [The artists’ guide to Cattery: what is it and what you need to know? | FoundryFind out everything you need to know about Cattery, Foundry’s new, free library for machine learning models made using CopyCat and the Inference node.![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/icon/favicon-2.ico)Foundry![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/thumbnail/The-20artists-E2-80-99-20guide-20to-20Cattery-20Header-201920x752.jpg)](https://www.foundry.com/insights/machine-learning/the-artists-guide-to-cattery?ref=keheka.com) [CatteryA library of open-source machine learning models converted to .cat files to run natively inside Nuke.![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/icon/favicon-3.ico)Home](https://community.foundry.com/cattery?ref=keheka.com) Download and use whichever ones takes your fancy, but keep in mind: #### Ethics & Legality Native CopyCat models, like the Human Matting model, have been trained solely on licensed footage. Which means, the people who did the work to create those images, were paid for that work. None of the training data was scraped and stolen, and no one's livelihood was negatively impacted in the process. Models in the Cattery, and other models floating about on the Internet, may not have been trained on licensed images. So please exercise caution, use your own judgement, and make sure to clear any models with your studio before you use them to do any actual production work. ### Convert Models Using The CatFileCreator AI and ML research and development is happening at a rapid pace in other fields than just VFX, and using other software and file formats for creating models than CopyCat does. It’s possible to convert non-native models into the .cat file format, however, using the CatFileCreator: [Import Pre-Trained PyTorch Models![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/icon/foundry_logo_small.png)![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/thumbnail/transparent.gif)](https://learn.foundry.com/nuke/content/comp%5Fenvironment/air%5Ftools/cfc-intro.html?ref=keheka.com) 💡 Exercise the same ethical and legal caution when converting models as described above in the Cattery section. ## Don’t Expect Perfection Even with plenty of good examples to train from and plenty of time to train, CopyCat will likely not produce a perfect result. It *can* get very close in some cases, but often, the work it produces will only be good for use in temporary comp versions. Or, the work will only hold up at a certain distance from the camera, and not for a hero character up-close, for example. 💡 CopyCat may not do a great roto job when the background has a lot of similar detail and colours to the foreground, for example. Like described earlier, there are many things you can do to improve the training and the results, but the reality is that CopyCat typically won't produce a result that will hold up in high-end productions. At least yet. In a large number of cases, the results just wouldn't pass tech checks. However, CopyCat *can* assist with the work, and help save you time. It can get the effect you're trying to make up to a point where you only need to do the fine-tuning and polishing/error-corrections. And as mentioned before, the more effort and the better quality work that you put into it, the better the output will be. ## Guides & More Info Here, you can find further tips, tricks, and information about CopyCat and the CopyCat workflow: Beauty work: Removing reflections: Deblurring: Upscaling: Advanced removals: FX Guide article: [CopyCat, Inference & Machine Learning in NukeA NUKE deep dive into Deep Learning with Dan Ring, Head of Research at the Foundry.![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/icon/fx-icon-grey-1.png)fxguide![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/thumbnail/copycat1.jpg)](https://www.fxguide.com/fxfeatured/copycat-inference-machine-learning-in-nuke/?ref=keheka.com) The Foundry CopyCat Masterclass Course: [CopyCat Masterclass: Maximize Nuke’s Machine Learning ToolJoin our CopyCat Masterclass! Master machine learning in Nuke with Mairead and Johanna. Optimize inputs, accelerate training, and enhance results with expert guidance.![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/icon/favicon.ico)Foundry![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/thumbnail/0q9.jpg)](https://learn.foundry.com/course/7922/view/copycat-masterclass-maximize-nuke-s-machine-learning-tool?ref=keheka.com) The Foundry CopyCat Q&A: Also see the machine learning sections on this page: [Courses![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/icon/favicon-1.ico)Home](https://learn.foundry.com/nuke/?ref=keheka.com) ## Creative Effects While CopyCat can do “basic” things like roto and prep work, where it becomes much more creatively interesting is when you train it on specific effects. For example you could train it on a bunch of sparks elements; using the RGBA of the sparks elements as the GroundTruth and the Alpha as the Input. Then, you could literally just grab a RotoPaint node and paint an alpha and use the Inference node to create sparks, and art direct the sparks flying exactly how you want. Substitute sparks for any other effect, for example a magical effect or a motion graphics effect, and the RotoPaint node (for generating the alpha) with for example a particle system, and you'll start to see the possibilities. You could convincingly fake fluid dynamics: *CopyCat + Particles in Nuke.* Or create clouds: *Nuke - Use the CopyCat node to make clouds!* Or make realistically behaving fire: *Create realistic fire in nuke with CopyCat.* Build your own library of Inference nodes to create a range of custom effects. And please share if you create something cool! I hope you found this tutorial useful. For more Nuke tips & tricks, see [Nuke](https://www.keheka.com/tag/nuke/). [Sign up for the newsletter!](https://www.keheka.com/#/portal/signup) ### Professional CG Compositing In Nuke URL: https://www.keheka.com/professional-cg-compositing-in-nuke/ Last updated: 2025-09-19T13:15:26.000Z ⭐ A massive 165-page guide showing how to elevate your CG compositing skills to a professional level in Nuke… _This post is for paying subscribers only._ ### Relighting CG Renders In Nuke URL: https://www.keheka.com/relighting-cg-renders-in-nuke/ Last updated: 2025-02-16T09:38:33.000Z ⭐ Useful techniques for adding new lighting to, or changing the existing lighting in, your CG renders… _This post is for paying subscribers only._ ### Breaking Up Edges And Surfaces In Nuke URL: https://www.keheka.com/breaking-up-edges-and-surfaces-in-nuke/ Last updated: 2024-05-27T14:10:11.000Z *Make your composite more photorealistic by taking the curse off ‘perfect’ CG renders…* ## Real Life Is Imperfect CG renders – and especially the specular highlights component of them – are often too ‘perfect’. Perfectly straight, perfectly smooth, perfectly even, perfectly shiny. They're mathematically perfect, which doesn't really happen much in real life. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/05/CG.jpg) *Example of a render that looks too ‘CG’ – it’s missing the realistic qualities of real life imperfections.* – And so we have to break up the ‘clean’ edges and the ‘flat’ surfaces a little bit, and introduce some *imperfections*, in order to make them look more photorealistic. On the surfaces of objects in the real world, you'll commonly find: - Small scratches. - Dust and dirt. - Chips in the paint. - Cracks or damage. - Sun-faded colours. - Water spots. - Stains. - Residue. - Fingerprints. - Creases or folds. - Small dents or surface warping. - Slight misalignments between edges. - Sharp edges having been worn down and bevelled. - Wear and tear from the object being worn or used. That means, when light hits objects in real life it naturally gets diffused/broken up by these small variations in the surfaces – making the objects less perfectly shiny, and/or shiny in places where they normally wouldn’t be. Take a look at the picture below, for instance: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/05/Car_Paint.jpg) *Surface imperfections, cracks, and smudges on the exterior of a car.* Up close, we can see that there are a whole lot of irregularities in what from a distance would just appear to be smooth exterior surfaces of a car. Or take the image below, for example. In the right light and from the right angle you might see something like this on a phone screen or a similar surface: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/05/Phone_Screen.jpg) *Scratches and dirt on a phone screen.* And, as shown in the example below, you’ll often find that sharp edges aren’t as sharp as you might think: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/05/Table_edge.jpg) *Worn down/rounded off edges of a table top.* Look at pretty much any object in real life, and there will be some variations in even the smoothest of surfaces/edges that will break up the light that’s hitting them. – Essentially, some of what would otherwise appear as specular reflections instead become diffuse reflections, and vice versa. 💡 The diffusion/breaking up of the light by these imperfections similarly affects the shadows cast by, and the overall appearance of, an object. We humans are quite used to seeing these (often small) variations, because we've spent so much time *looking* at things in our lives. They've become part of our everyday subconscious expectations. And even if we might not be able to pinpoint exactly *what* is wrong, we can spot that something is missing, or ‘off’, when the variations are not there in an image. So it's important to add imperfections to our CG renders to make them look real. ## Fixing A Common Noise Matte Problem A highly effective way of roughening up surfaces and edges that suffer from looking too perfect, is to break them up with a (static) noise texture. (For example using the Noise node in Nuke). Either by using noise as a matte for a grade to break up the texture and highlights of a surface, or by using noise as a matte for a mask/stencil operation to cut out bits of a straight edge. Or, even by layering the noise texture on top of the object's texture. In any case, we often want to **limit the area** where we are applying this treatment. Usually, we shouldn't add a noise texture to the entire CG render – or cut out parts of all of the edges in the render – as that can look unnatural. Instead, it's better to apply the treatment to a localised problem area, such as an edge or a surface that looks too clean and ‘CG’, by masking the noise by a soft matte of the problem area. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/05/Noise.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/05/Soft_Matte.jpg) *A noise texture and a soft matte.* The issue is, that when we mask the noise texture by a soft matte, we end up only keeping the core of the texture noisy and detailed, but get these plain, soft edges around it. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/05/Soft_Matte_Mask.jpg) *Noise matte with soft-masked edges. The smooth edges feel out of place when compared to the detail we can see in the core.* Or, if we mask the noise texture by a hard matte, we get unnaturally hard and straight lines along the edges, often a worse result. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/05/Hard_Matte_Mask.jpg) *Noise matte with hard-masked edges.* To fix these edge problems, instead of using a Merge (mask) or a Merge (multiply) to mask your noise texture by your soft matte, **invert** the soft matte and **subtract** it (A) from the noise texture (B) using a Merge (from). Now, you’ll get defined edge detail in addition to the already detailed core. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/05/Soft_Matte_Invert_Subtract.jpg) *Noise matte with organic detail along the edges, obtained by subtracting the inverted soft matte from the noise texture.* 💡 Note that you'll get negative values when doing this operation, so remember to ****clamp** the result with a Clamp node. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/05/Invert_Subtract.png) *The setup for masking a noise texture by a soft matte, while keeping edge detail.* 💡 This is also a good way of creating cloud sprites with defined, organic edges. Make the setup once, and then copy it and change the Z value in the Noise node each time in order to generate multiple, unique cloud sprites. ## Making The Setup Procedural Tracking in or animating a noise texture and a soft matte is manual and time consuming, so let’s instead make the process more procedural. Rather than using a Noise node and a Roto node for breaking up your CG renders, you can create a **position noise** and a **position matte** using a tool like [aPMatte](https://www.nukepedia.com/blink/keyer/apmatte?ref=keheka.com). 💡 When you have a world position pass (or a [reference/object position pass](https://www.keheka.com/converting-pworld-to-pref-in-nuke/) if your CG object is animated), you benefit from getting the tracking for free. The setup is essentially the same as before: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/05/Invert_Subtract_P.png) *The PNoise/PMatte setup.* Create both a position noise and a position matte for your object, invert the position matte and subtract it (A) from your position noise (B) using a Merge (from). And, like before, make sure to **clamp the result**. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/05/PNoise.jpg) *PNoise mapped onto a Sphere.* ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/05/PMatte.jpg) *A PMatte for the bottom part of the Sphere.* ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/05/PNoiseMatte.jpg) *The PNoise ‘masked’ by the PMatte by subtracting the inverted PMatte from the PNoise, resulting in a noise matte with organic edges.* 💡 Another way to break up matte edges is to use a tool like [FractalBlur](https://richardfrazer.com/tools-tutorials/fractal-blur-for-nuke/?ref=keheka.com). I hope you found this tutorial useful. For more Nuke tips & tricks, see [Nuke](https://www.keheka.com/tag/nuke/). [Sign up for the newsletter!](https://www.keheka.com/#/portal/signup) ### Converting Pworld to Pref In Nuke URL: https://www.keheka.com/converting-pworld-to-pref-in-nuke/ Last updated: 2024-05-15T07:32:33.000Z *How to create a position pass that sticks to your animated geometry…* In this article, I’ll show you how to create a **reference/object position** pass using **world position** in Nuke, which you can use to create **position mattes** **that stick to animated and deforming geometry**: *A position matte (highlighted in cyan) that sticks to an object which is translating, rotating, and scaling.* ## Pworld Vs. Pref [Position data](https://www.xuanprada.com/blog/2014/7/29/p-maps?ref=keheka.com) is incredibly useful for grading CG renders ([among other things](https://www.hiramgifford.com/buddy-system/projectionbuddy?ref=keheka.com)). With it, you can create procedural mattes and avoid tons of unnecessary roto. For static objects, the common **world position** pass (often called **Pworld** or just **P**) works really well for generating position mattes. However, as soon as an object is animated, the world position pass falls short. Any position mattes you create with it will not stick to the animated object. That’s because the world position pass is centred around the world origin, and any animated objects will move *through* the coordinates. So in the position pass, the same parts of the animated object will receive different position values on each frame. *An object moving through the (static) world coordinates.* Any [position matte gizmo](https://www.nukepedia.com/blink/keyer/apmatte?ref=keheka.com), which by design creates a matte based on the values in the position pass, therefore can’t create a matte which sticks to the animated object using the *world* position. However, the gizmo *can* create a matte that sticks to the object – if we instead use another type of position pass which is centred on the object itself, the **reference/object position** pass (often called **Pref** or **Pobject**). The coordinates in this pass follow the animated object: *Coordinates wrapped around the object and sticking to it.* ## Working Around Nuke’s Limited Position Options As far as I’m aware, Nuke doesn’t offer any direct ways of generating a reference position pass – only a world position pass. But, as always, with a bit of ingenuity we can make one. The idea is to create a world position pass, output it in UV space, framehold it to lock the coordinates, and apply it back as a texture to our animated geometry. 💡 This requires the geometry to have UVs. The coordinates will then stick to the object, and we can use them to create position mattes which will also stick to the object. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/05/Setup.png) *The setup.* First, you’ll need to grab your **animated geometry** and your **camera**, and connect them up to a **ScanlineRender** node. In the **Shader** tab of the ScanlineRender1 node, tick **output vectors** and choose a layer to output the position data to. Below, I chose to create a new layer and name it **P**. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/05/ScanlineRender1_SettingsB.png) *Outputting a world position pass using the ScanlineRender1 node.* To do the same, click on the dropdown menu next to **surface point**, select **new**, name your layer **P**, click on the **rgba** button, and then hit **OK**. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/05/ScanlineRender1_Position.png) *Creating a position layer.* The ScanlineRender1 node will now output **world position** data in the **P** layer. Let’s turn that into a texture: In the **ScanlineRender** tab of the ScanlineRender1 node, set the **projection mode** to **uv**. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/05/ScanlineRender1_SettingsA.png) *Setting the projection mode to uv in the ScanlineRender1 node.* Next, shuffle out the position pass (which is now in UV space) using a **Shuffle** node. 💡 Make sure to set the ****alpha to white** in the Shuffle1 node! You’ll need a solid alpha in order to apply the position data back onto the geometry correctly. (That is, to use the full, unaltered position values). ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/05/Shuffle1_Settings.png) *The Shuffle1 settings.* Next, pick a frame where the animated geometry is visible in the frame and **FrameHold** the world position texture. Then, apply this frameheld texture back onto the animated geometry using an **ApplyMaterial** node. Output the textured geometry through a new **ScanlineRender** node with the **projection mode** set to **render camera**, using the same camera as before. Now, you’ll have a **reference position** pass in the **rgb** channels. Add your favourite position matte gizmo at the end, and colour pick away! I hope you found this tutorial useful. For more Nuke tips & tricks, see [Nuke](https://www.keheka.com/tag/nuke/). [Sign up for the newsletter!](https://www.keheka.com/#/portal/signup) ### Compositing Realistic Heat Distortion In Nuke URL: https://www.keheka.com/compositing-realistic-heat-distortion-in-nuke/ Last updated: 2024-04-14T11:45:50.000Z *Whether you're compositing roaring jet engines, scorching desert dunes, or even a shimmering magical energy, a convincing heat distortion effect will often come in handy…* Heat distortion is one of those effects that every compositor will create at some point in their career. But many don't quite make the effect look realistic in their shots. To composite convincing heat distortion, it's very useful to first understand it. In this article, we’ll take a closer look at what heat distortion is, break down the individual components of the effect, and go through 10 tips for adding heat distortion to your composite. ## What Is Heat Distortion Heat distortion is a type of [mirage](https://en.m.wikipedia.org/wiki/Mirage?ref=keheka.com) – an optical phenomenon caused by complex refraction of light through the air. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/04/Heat_Distortion_Rocket.png) *Extreme heat from an array of rocket engines is distorting the image.* Refraction is the redirection of a wave as it passes from one [medium](https://www.vedantu.com/question-answer/what-is-a-medium-class-10-physics-cbse-608a590bf4e14b3491a97f7a?ref=keheka.com), or material, to another. In this case, the wave we're talking about is a light wave, and the media that affect the direction of the light wave are for example *air*, *water*, or *glass*. It takes longer for a light wave to propagate through media with a higher [optical density](https://www.azooptics.com/Article.aspx?ArticleID=798&ref=keheka.com). And so waves that are entering or exiting a denser medium at an angle get refracted, and the path of the light is bent towards the denser medium. – Because slowing down one side of a wave will cause the other side of the wave to be pulled towards it. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/04/Refraction.jpg) *When light enters a more optically dense material like glass, the light that hits the object first, slows down first. This causes the light to bend.* 💡 You can think of it as a car driving down a country road. If the wheels on one side of the car go off the road and into the mud, they will be slowed down by the mud. However, the wheels on the other side of the car (that are still on the road) will continue going at the original speed. This causes the car to swerve toward the mud and into the ditch. When travelling through *air*, light refracts differently depending on the **density** of the air. And the density of the air depends on its temperature (and the atmospheric pressure). Since cold air is denser than warm air, the light rays are bent towards the cold air while passing through the two. 💡 Light propagation can be described using both waves and rays, and due to the fundamental nature of waves, light rays will travel along the path through two different media which [takes the least time](https://en.m.wikipedia.org/wiki/Fermat%27s%5Fprinciple?ref=keheka.com). ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/04/Inferior_Mirage.jpg) *Light is bent as it passes through layers of air with different temperatures.* In the illustration above, light rays from the sun bounce off the palm tree and continue through the air. Because of the difference in air temperature (warmer air near the ground, and cooler air higher up), the rays are bent up and toward the viewer. 💡 With an even air temperature throughout, the same rays bouncing off the palm tree would just hit the ground in front of the viewer. From the perspective of the viewer, the bent rays seem to be coming from below the palm tree. And so the viewer sees what appears to be a reflection of the palm tree – an inverted image below it. This is called an **inferior mirage**. In the more frigid regions of the world, where the ground (or water/ice) is *colder* than the air above it, you may instead see a **superior mirage** – where the exact opposite happens. The inverted image shows up *above* the object you’re viewing. 💡 There’s also [looming and other refraction phenomena](https://en.wikipedia.org/wiki/Looming%5Fand%5Fsimilar%5Frefraction%5Fphenomena?ref=keheka.com) that can occur at the same time, and combine with the mirages. And where the air density changes both up and down within an atmospheric duct, you may see the fabled [*Fata Morgana*](https://en.wikipedia.org/wiki/Fata%5FMorgana%5F%28mirage%29?ref=keheka.com) – which further tricks your eye by squashing, stretching, inverting, blending, and rapidly changing multiple images stacked on top of one another. Often, to the point of making the object (e.g. a ship at the horizon) unrecognisable. All of the phenomena above are caused by the complex refraction of light through the air. And, as mentioned at the beginning, that is also the basis for heat distortion. When the temperature difference is significant, layers and pockets of hot air move around in, mix with, and rise through cold air. Then, the hot air cools down and sinks, to be heated again. This constant, turbulent movement of hot and cold air bends the light going through it multiple times, and the result is visible heat waves. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/04/Heat_Distortion_Fire.jpg) *Heat distortion from a fire. The jumbled, refracted light obscures the background.* The greater the difference is within or between the medium/media (in this case; the larger and the more turbulent the temperature difference is between the hot and cold air), the more the light gets refracted. – Which means, the stronger the heat distortion, and the more the background that's seen through the distortion gets obscured. So a gently sunkissed meadow in spring will display a much less intense heat distortion than a blazing campfire on a cold winter’s day. You’ll also find the distortion effect is stronger close to the source of the heat (where the difference is the greatest). For example, hot asphalt will cause a road to look like shimmering water, while the background seen through the air above the road will look less distorted. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/04/Heat_Distortion_Road.jpg) *Heat distortion along the surface of a hot road. Light from the sky – initially pointing down towards the ground – is bent through the air and appears to originate from the road instead, in a turbulent inferior mirage.* The source of the heat, and any forces affecting it (like wind), will dictate the general *direction* of the heat distortion. For example, in the desert, warm air will rise up from the sand. However, a jet engine will pump out hot air in a specific direction. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/04/Heat_Distortion_F22.jpg) *Heat distortion behind a fighter jet. The intense heat almost completely obscures the background.* Air passing through a jet engine also moves extremely fast, which increases the *frequency*, or the apparent speed, of the distorting heat waves. (Compared to, for example, a candle). And the *size* and number of air pockets will vary based on the source of the distortion and its surrounding environment, which changes the look of the distorting heat waves. (With screen size also varying based on the distance from the camera and the focal length). So there are quite a few properties associated with heat distortion. ## How To Make Realistic Heat Distortion Let's sum up what you need to recreate in order to generate convincing heat distortion: - Turbulent, wavy distortion that's warping the image. - Variable distortion across the image (pockets of hot and cold air). - Adjustable overall strength (or amount) of distortion. - Adjustable size of the distortion (i.e. number of air pockets). - Adjustable frequency or ‘speed’ of the distortion. - Adjustable direction of the distortion. - Adjustable wind speed (or other directional force). - Adjustable obscuring of the image (i.e. more heavily obscured in more densely distorted areas). When creating a heat distortion setup, a few nodes will do all the heavy lifting. To distort the image, you can use either the **IDistort** node or the **STMap** node. To drive the distortion, you can use the **Noise** node (with some modifications to turn it into appropriate vectors). And to obscure the background, you can use the [**iBlur**](https://www.nukepedia.com/gizmos/filter/iblurfh?ref=keheka.com)gizmo (or a similar tool) masked by the noise. With a little bit of a support structure around them, you can animate and mask these nodes, and hit all of the requirements listed above. To avoid reinventing the wheel, here is a great tutorial that shows the fundamentals of creating a heat distortion setup: *Creating heat distortion using the IDistort node.* And you can find an excellent implementation of the heat distortion techniques in the [HeatWave](https://www.nukepedia.com/gizmos/filter/realheatdistortion/?ref=keheka.com) tool by Damian Binder, which uses the STMap method. Finally, armed with all of the information above and the right tool for the job, let’s get into the compositing side of things: ## 10 Tips For Compositing Heat Distortion These are some things to be aware of when adding heat distortion to your comp. ### 1\. Over Exaggeration Heat distortion is often smaller in scale and less prominent than you might think. Reference images of heat distortion are usually shot on telephoto lenses and/or are cropped in to show the effect more clearly. And so it's an easy mistake to match your image to those references exactly, and accidentally over exaggerate the effect. However, unless your shot camera is right up close to a fire or other heat source (or the image was shot on a telephoto lens) – and maybe even still then – *subtle* is usually the way to go when it comes to adding heat distortion. 💡 Often, you have to be **looking* for heat haze in order to spot it in real life. And that's typically how it should be in your comps as well, with the exceptions being the more extreme, infernal scenarios like the inside of a heavily burning building. ### 2\. Containment Like described earlier, heat distortion is usually strongest near the source of the heat. It may grow weaker further away from the source, and the effect may not necessarily apply to the whole frame. And so make sure to mask the distortion as needed. (You can even heat distort the mask as well). When you do, make sure to mask the distorting node itself as opposed to Keymixing the original image over the distorted image or vice versa. That way, you'll get more natural edges along the distortion effect, instead of ghosting double-edges. That’s also the reason for using the iBlur gizmo or similar in order to obscure the background. Simply masking a Blur node would create issues in the semi-transparent areas. ### 3\. Smeared Grain Warping the image using heat distortion destroys the grain. Make sure to regrain as needed. 💡 You can use [filtration masking](https://youtu.be/N3Bzgu0Xt50?feature=shared&ref=keheka.com) to create a grain matte. ### 4\. Letterbox Contamination If your plate has a black letterbox, make sure the heat distortion isn't pulling the black edges into your image. You can add a Crop node before the heat distortion, adjust it to crop out the letterbox, and untick *black outside*. That will repeat the top and bottom rows of colour pixels out into the letterbox area and fix the problem. Then, just copy the Crop node, put it after the heat distortion, and tick *black outside* to restore the letterbox. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/04/Letterbox.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/04/Letterbox_Stretched.jpg) *Stretching the letterbox out (zoomed in at the top screen right corner of the image).* 💡 You can also horizontally blur the stretched pixels a little bit in the letterbox area using a mask. That way, the heat distortion will still pull in similar coloured pixels at the edges of the frame, but with minimal artefacts. ### 5\. Tracking Heat distortion is a 2D effect, and can sometimes look odd with significant camera moves. Make sure to track the Noise pattern as needed. 💡 Apply the tracking data to the Noise node’s **Transform* tab to keep the pattern sharp and free of cropping issues. See [Optimising Image Rasterisation In Nuke](https://www.keheka.com/optimising-image-rasterisation-in-nuke/) for more information. If you do and the heat distortion still looks a little bit 2D or stuck onto the screen, you can [create 3D noise](https://www.keheka.com/creating-procedural-3d-fog-in-nuke/) and use that to drive the distortion. ### 6\. Layers/Channels Remember to remove the vectors from your stream when you're finished distorting the image. Add a Remove node after your heat distortion and remove the relevant layers/channels. That way, you keep your script tidy and efficient downstream. ### 7\. Abnormal Values Blurring and distorting pixels with NaN or INF values can make the problem worse. Instead of having for example a single pixel with an abnormal value in your image, suddenly you have a cluster of corrupted pixels because the heat distortion smears/spreads the values out. So make sure to apply any [NaN/INF fixes](https://youtu.be/o1tawUXh%5FlQ?feature=shared&ref=keheka.com) *before* applying the heat distortion. ### 8\. Nighttime Twinkle Heat distortion also happens at night. The sun doesn't have to be out, there just needs to be enough of a temperature difference in the air. This can for example happen in cities, where there's traffic, vents, and other activity going on at ground level. It's partly why you see twinkling lights in a city skyline or in a starry sky at night. You can add a *very* gentle, small-scale heat distortion on a nighttime city/sky DMP to get some subtle twinkling in the lights. ### 9\. Magic And Other Effects You can use, or adapt, the same heat distortion setup for other things as well. For example, adding turbulent distortion to a magical effect to make it more forceful and visually interesting. By stretching out the noise size in one direction, you can create longer streaks of distortion, for instance. Some other use cases: - [The Predator effect](https://youtu.be/FN7FBGi1f5w?feature=shared&ref=keheka.com) - [Glass distortion](https://www.nukepedia.com/gizmos/transform/glass?ref=keheka.com) - [Wind effect](https://youtu.be/XnNPA5yCkxs?feature=shared&ref=keheka.com) - [Water ripples](https://youtu.be/9t3RZs5BiRc?t=605&ref=keheka.com) - [Window pane](https://youtu.be/cg-ImGA7qdw?t=798&ref=keheka.com) - [Distortion/glitch effect](https://youtu.be/k1pAOYLAZ80?feature=shared&ref=keheka.com) - [Force effects](https://www.keheka.com/force-emanating-from-a-point/) - [Lightning effects](https://youtu.be/eHa-Ah1q-qg?feature=shared&ref=keheka.com) - [Watercolour style effect](https://youtu.be/cg-ImGA7qdw?t=371&ref=keheka.com) ### 10\. Mirages If you like, you can create the inferior and superior mirages mentioned earlier using heat distortion. 1. Flip your image. 2. Mask out the portion that you want to keep, for example a piece of the sky to go over a hot asphalt road. 3. Add the heat distortion effect to it. 4. Merge it over your original image. Another interesting thing you can do is replace the iBlur in your setup with a [TimeBlur](https://vimeo.com/456737145?ref=keheka.com). That will pull adjacent frames into the image and can give more visual interest to the mirage effect. 💡 Remember to put a NoTimeBlur node upstream of the distortion, so it doesn’t calculate the entire comp on each frame. Finally, where do you put heat distortion in your composite? The refraction associated with heat distortion happens to the light as it travels through the air. And so the light rays have already been affected *before* they hit the lens. That means, heat distortion should be applied at the end of your comp – but before all of your [lens effects](https://www.keheka.com/compositing-photorealistic-lens-effects-in-nuke/), such as lens flares, vignetting, or chromatic aberration. And, as mentioned above, definitely before the grain. I hope you found this tutorial useful. For more Nuke tips & tricks, see [Nuke](https://www.keheka.com/tag/nuke/). [Sign up for the newsletter!](https://www.keheka.com/#/portal/signup) ### Creating Procedural 3D Fog In Nuke URL: https://www.keheka.com/creating-procedural-3d-fog-in-nuke/ Last updated: 2024-04-07T22:30:02.000Z *How to set up an extremely lightweight and infinitely manoeuvrable 3D noise pattern, and fly your camera through it…* ## Infinite 3D Noise If you’ve ever created large-scale fog, smoke, or clouds using the particle system in Nuke, you’ll know that: - It can get very slow and heavy, both to work with and to render. - Even with thousands of particles (e.g. Cards with noise/atmos textures), the fog may still not look dense enough, and/or cover a large enough area. - Depending on how extreme the camera movement is, the flatness of the sprites may be revealed, breaking the effect. So let’s bypass the particle system and use a completely different technique to create 3D fog. We’ll make a setup which is **super lightweight**, that can create fog **as dense or sparse as you want it to be**, and that can **handle any camera move** – because the noise pattern which is used to make it is both three dimensional and infinite in all directions. Out of the box, Nuke doesn’t really have a procedural 3D noise that you can fly a camera through. (It would be amazing if it did, if anyone from The Foundry is reading!). However, Nuke *does* have the ability to generate procedural 3D noise. – Perhaps unintuitively, in the standard (2D) Noise node! Like Xavier Bourque explains in [this video](https://youtu.be/SC738kv%5FKb4?t=5877&ref=keheka.com), when viewing the Noise node in Nuke, what we’re actually seeing is a 2D slice of a 3D noise pattern. 💡 He takes advantage of this in his great tool, [PxF\_SmokeBox](https://youtu.be/N4ZzJ4Z1DGc?feature=shared&ref=keheka.com). We can move through the 3D noise pattern of the Noise node by adjusting the translate **X** and **Y** values in the *Transform* tab, and the **Z** value in the *Noise* tab. The X and Y values will effectively move the noise in X and Y, and the Z value will move the slice that we’re seeing, along the Z axis. It’s very similar to an MRI scan; the Z value is slicing through the 3D shape of the noise: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/04/MRI.gif) *An MRI scan showing individual slices of the brain.* Okay, so we can navigate the 3D noise, but there isn’t an option in Nuke for connecting a Camera to the Noise node in order to fly through it. So how can we work around this? ## Propagating The Slice By combining some techniques, I’ve found a way to make a Camera smoothly slice through the 3D noise in Nuke. First, we need to link a Card to the Camera’s frustum. Open up the *Projection* tab of your Camera’s properties, and the *Card* tab of your Card’s properties. Then, hold Ctrl (Cmd) and left-click drag the **Focal Length** value of the Camera to the **lens-in-focal** value of the Card. Next, do the same but instead drag the **Horizontal Aperture** value of the Camera to the **lens-in-haperture** value of the Card. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/04/LinkCardToCam.jpg) *Linking a Card to the Camera’s frustum.* This will snap the Card to the Camera’s frustum. You can adjust the **Z** value of the Card to move it closer to or further away from the camera, along the camera’s frustum. I set mine to 100 in this example. To have the Card follow along with the animation of your camera in 3D space, connect a **TransformGeo** node to the Card, and plug its **axis** input to your camera. Now, you have a Card which will always stay perfectly flat-on in screen space. It will also fill the entire frame (covering the whole frustum of the camera). And, as the camera moves, the Card will follow its movement exactly, and ‘slice’ through 3D space. Let’s connect the Card and the Camera to a ScanlineRender node. In the properties of the ScanlineRender node, go to the *Shader* tab. We want to output a position pass, so tick the **output vectors** checkbox. Then, click on the **surface point** drop-down menu and either select or create a new position layer. Below, I opted to create a new layer and named it **position**. Then, I clicked on the **Auto: rgba** button to fill in the channels automatically. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/04/Position_Pass.png) *Creating a new position layer and channels.* Now, the ScanlineRender node will output a position pass, an image with position data, of where the Card is in 3D space on every frame. That means, we have the positional information of a slice of 3D space covering our entire screen. And this slice will update as the camera moves. Nearly there now. Internally, the Noise node is using a noise function to generate the 3D noise. And there are plenty of other tools which have recreated this. We’re interested in the so-called *position noise*, *p\_noise*, or *noise\_3D* type of tools – which you may be familiar with. They map the 3D noise onto the shape of your geometry by using a position pass. I’m using Adrian Pueyo’s excellent [aPMatte](https://www.nukepedia.com/blink/keyer/apmatte?ref=keheka.com) tool, which has the ability to output position noise, in addition to other useful things like position mattes and position ramps. In this case, we’re only interested in the position noise. So after selecting our *position* pass in the *img* drop-down menu at the top, we only need to look at the controls at the very bottom of the properties: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/04/aPMatte.jpg) *The properties of the aPMatte tool.* Select **noise only** in the *noise* drop-down menu to output position noise. For this example, I set the size to 100, but adjust as needed for your shot. Also, play with the values in the lower pink box in the image above to get the right shape and density for your fog. Now, when we view the alpha channel that is output by the aPMatte tool while playing the shot, we can see our camera flying through the 3D noise, one slice at a time. *Infinite 3D noise.* We can plug in any camera, with any camera animation, because the noise is procedural – it’s infinite in all directions. Lastly, to add a bit more control, add a Grade node in between the ScanlineRender node and the aPMatte node. Set the *channels* to your *position* pass. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/04/Grade_Position.png) *Adjusting the position pass.* ❗ Make sure to ****untick** **black clamp* and **white clamp* in the Grade node. Position values can be negative, and they can also be much, much higher than 1 – so we need to avoid any clamping to keep all the values intact. With this Grade node, you can now make two important adjustments: First, with the *multiply* knob, you can adjust **how much the slice moves through space**. If a pixel in your position pass is positioned at for example 3 units in X, you can change its position to 1.5 units in X (50%) by setting the multiply value to 0.5 in the red channel. This applies to all the pixels in your position pass, so you’re essentially scaling the whole camera movement down – in X in this case. And so you can change how the camera moves through the noise without touching the actual camera. Where this is especially useful, is when you’re getting a bit too much flickering as your slice travels along the Z axis in 3D space. Simply scale down the Z movement, by lowering the multiply value in the blue channel. (Above, I set it to 10% of its original movement, or a multiply value of 0.1 in the blue channel). The second adjustment is a straight addition/subtraction of the coordinates in 3D space using the *offset* knob. If you want to **shift your whole camera movement** up by 50 units in Y, for example, just put 50 in the offset value in the green channel. (Above, I set it to shift 45 units along the Z axis). This is great for moving the camera around to find the best noise pattern for your particular shot, without touching the camera itself. ## Overscan If you want to output your noise with overscan, you can increase the **overscan** value in the ScanlineRender node. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/04/ScanlineRender_Overscan.jpg) *Outputting overscan from the ScanlineRender node.* However, if you didn’t touch its scale yet, the Card will currently fit perfectly to the frustum and therefore crop out any overscan. So, make sure that your Card is large enough to cover the overscan. I set my Card’s **X** and **Y** *Scale* values to 2\. This allows for tons of overscan, should I need it. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/04/Card_Scale.jpg) *Scaling up the Card to allow for overscan.* And now, with this little, lightweight setup, you can fly any camera through infinite fog. You can pick whereabouts in the fog you want to be, and you can choose how large or small, and how dense or sparse, the fog is. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/04/3D_Noise_Setup.png) *The final setup.* From here, you would either shuffle your alpha channel into RGB, or copy it into your custom RGB, and it’s ready to comp! ## Limitations Although you are flying your camera through 3D noise, you’re only ever seeing one slice of the 3D noise at a time. You can pick the distance of the slice from the camera (**Z** value in the Card), but unless you animate it, the fog won’t go closer towards the camera (or past the camera) than the slice distance you initially set. So this setup is best used as a background and/or midground layer of fog, to fill in the gaps and provide more density, complimenting your more bespoke foreground fog. There are two benefits to this: you don’t need a super heavy particle system covering an enormous area to accommodate a large camera move, *and* your foreground layer of fog that flies past the camera can be much less dense (and subsequently much lighter and easier to work with in Nuke). 💡 You can see how to make custom fog that flies smoothly past the camera in the ****Companions Bonus Tutorial** at the end of this article: [Manipulating Deep Data](https://www.keheka.com/manipulating-deep-data/). Finally, you *can* DeepMerge (holdout) your deep CG render from the output of your ScanlineRender node off to the side (make sure to connect a Constant with a white alpha to your Card first), and create a matte to mask your fog with. However, since we’re dealing with slices here, the matte might not always be helpful. Instead, you could for example [normalise the depth pass](https://taukeke.com/2018/01/normalize-depth-pass/?ref=keheka.com) of your CG render and use it as a mask to grade your fog. **PS:** By accident, I connected a copy of the aPMatte node to the first one, and got this crazy, cool pattern. Just in case it could be useful to someone looking to make this type of effect! ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/04/Double_aPMatte.jpg) *Doubling up the aPMatte node.* I hope you found this tutorial useful. For more Nuke tips & tricks, see [Nuke](https://www.keheka.com/tag/nuke/). [Sign up for the newsletter!](https://www.keheka.com/#/portal/signup) ### Optimising Image Rasterisation In Nuke URL: https://www.keheka.com/optimising-image-rasterisation-in-nuke/ Last updated: 2024-03-27T15:11:04.000Z *How to preserve the most amount of image quality when compositing…* ## Work On The Original There are a few compositing equivalents to ‘photocopying a photocopy of a photocopy’, that you should avoid when working in Nuke. You might already know all about the [importance](https://www.isaacspiegel.com/blog/filtering-and-concatenation-the-hidden-power-of-image-quality-demystified?ref=keheka.com) of [optimal filtering](https://benmcewan.com/blog/2019/04/22/back-to-basics-a-brief-lesson-on-image-filtering-node-concatentation/?ref=keheka.com) and [concatenation](https://learn.foundry.com/nuke/content/comp%5Fenvironment/transforming%5Felements/node%5Fconcatenation.html?ref=keheka.com). Or rendering images with a high enough [bit depth](https://en.wikipedia.org/wiki/Color%5Fdepth?ref=keheka.com). However, you may not be familiar with how to optimise the image rasterisation that's happening in your composite. ## Raster Vs Vector Images There are two main types of digital images: raster (or bitmap) images and vector images. Raster images are built from pixels. This is what we're mostly working with in Nuke. The scan you're working on in your shot is a raster image, for example. The more pixels a raster image has, the higher quality it'll be (or will have the potential to be) due to the increased resolution and detail. However, scaling raster images up or down will lead to a loss in image quality because Nuke has to approximate and ‘invent’ new pixels based on neighbouring pixels. Vector images, on the other hand, consist of mathematical formulas that define the *components* – the shapes, borders, and colours – that make up the image. There are no pixels in a vector image, and the mathematical formulas can recalibrate to any size. That means you can scale the image up or down as much as you want without any loss of image quality. 💡 While a raster image contains information about the colour of each pixel, a vector image contains instructions about where to place each of its components. ## Rasterisation Rasterisation is the process of converting a vector image (or object) into a raster image, i.e. converting the mathematical descriptions into a grid of pixels. When you draw a roto shape in Nuke, the spline is a mathematical formula. Internally in the Roto node, your roto shape is a vector image. It's only when it's output from the Roto node that the image is rasterised, i.e. turned into pixels. It's useful to be aware of that fact when compositing: Let's say that you have a shot where the camera dollies forward towards an object. Your task is to replace something behind the object, and so you’ll need to roto it. To start, you might 2D track the object to simplify the roto work. After tracking, I see a lot of people drawing a roto shape for the object on a frame, and then connecting a Transform\_MatchMove node (generated from a Tracker set to the same reference frame) – or even connecting the Tracker node itself, directly – to the Roto node. This is typically 'fine' if you drew the roto shape on the frame where the object is the largest in frame. (Scaling pixels down usually gives a better result than scaling them up). But that's not always the case. And if you take a look at your rasterised roto shape when it's being scaled up, you'll start to see pixelation along the edges – from image degradation: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/03/Post-Rasterisation_Scale.jpg) An example roto shape being scaled up post-rasterisation. Instead, it's better to apply the matchmove to the roto shape *inside* the Roto node. – While the roto shape is still a vector image, and can be moved around and scaled up and down without any loss of quality: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/03/Pre-Rasterisation_Scale.jpg) The same roto shape being scaled up pre-rasterisation. As you can see above, matchmoving the roto shape pre-rasterisation yields a much sharper image (particularly when there is a scale-up involved), and the muddy pixelated mess from before is gone. In order to do that, link the tracking data from the Tracker node directly to the Roto node: Open up the properties of both nodes and go to the *Transform* tabs of each. Select the *Root* layer in the Roto node and hit Ctrl (Cmd) and Left Mouse Button drag the *Animation menu* buttons next to the *translate*, *rotate*, *scale*, and *center* knobs in the Tracker node to their respective buttons in the Roto node. 💡 You could also use a tool [like this](https://www.nukepedia.com/python/misc/track-to-roto-link?ref=keheka.com) to do it automatically. I would suggest renaming the *Root* layer to **RootTRACK**, or similar, in order to make it abundantly clear that there is now tracking data linked to it. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/03/TrackerRotoLinked.png) Linking a Roto node to a Tracker. 💡 Linking the matchmove data in this way has the added benefit of removing the need to view the roto shape downstream via the Transform\_MatchMove node in order to see how it lines up. You can view the scan directly, if you like, and the roto shape will still track as expected in the Viewer. By applying the tracking data to the Root layer, every spline in the Roto node that you have created, and any that you create going forward, will automatically get matchmoved. And, they will retain the highest possible image quality. 💡 You could of course copy the tracking data over, instead of linking it. I prefer to link it so that I know where the tracking data is coming from at a glance. I like to keep one central source for the tracking data instead of making multiple identical Tracker node copies around in the script, making the script leaner and more efficient. Just remember to ****turn off** the keyframe previews in the Tracker settings; **keyframe display* and **show zoom window*, to avoid unnecessary processing. The same thing applies to pretty much any node with either a Transform tab or transformation settings somewhere in its properties – like the Noise node, the GodRays node, the RotoPaint node, the GridWarp node, the SplineWarp node, and so on. If possible, perform the transformations internally within the nodes instead of on their rasterised output, in order to get a better image quality. 💡 The characters of a font are usually vector images. (You can set any font size you like and the text will still look sharp and not pixelated). In Nuke’s Text node, in addition to the normal settings in the Text tab, you can go to the **Groups* tab which works the same way as the Transform tab does in the Roto node. (Just in case you need to animate or matchmove some text for a motion graphics shot or something similar). Note that if you have a matchmoved CornerPin node (for example from Mocha) instead of a Tracker/Transform node, then you can’t link it directly to the Roto node like shown above. Instead, you’ll have to convert it via a transform matrix: Convert a CornerPin node to a Roto node using the [Convert Node Matrix](https://github.com/mapoga/nuke-vector-matrix/releases?ref=keheka.com) tool. Let’s visit the next dimension. ## Rasterising 3D Scenes Rasterisation is not only for converting 2D vector images into raster images. 3D scenes/objects are also rasterised in order to turn them into a raster image that we can view in 2D. Nuke’s ScanlineRender node rasterises the 3D scene and outputs pixels, for example. (And it even has a few more filtering options than the Transform node). When viewing for example a Sphere through a Camera using the ScanlineRender node, the Sphere is a vector object which gets rasterised. You can affect the image quality that’s output by the ScanlineRender node in three ways: 1. Adjusting the quality of the input geometry and textures. That is, increasing the subdivisions and detail in the geometry, and using more detailed, higher resolution textures. 1. Adjusting the different settings in the ScanlineRender node, such as **filter**, **antialiasing**, and **samples**. 1. Controlling the amount of pixels the ScanlineRender node outputs. That is, connecting a Reformat node to the **bg** input, and choosing a format that will give you the level of detail you need. The first two points are pretty self explanatory, however I’d like to give an example use case for the third point: Let’s say that you are projecting a part of an undistorted scan onto matchmoved geometry, and you want to paint extra detail onto that texture. You can set the ScanlineRender node to output UVs by changing the *projection mode* to **uv**. Even with animated geometry, you’ll now have a stabilised image of the geometry’s texture (i.e. the scan) which you can paint on. If the original texture map/scan is for example 4K, but your project format is 2K, then by default the ScanlineRender node will only output a 2K texture to paint on. (I.e. when nothing is connected to the **bg** input, the ScanlineRender node will use the project format for its output). That might not be enough to retain sharp detail, and your image may now look soft when you reapply the painted UV texture to the geometry. Instead, connect a Reformat node to the **bg** input of the ScanlineRender node, and increase its resolution to 4K. Then, you can paint on the full resolution texture and take a much smaller filter hit when reapplying it to the geometry. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/03/Painting_UVs-3.png) Painting on the UV texture. 💡 For a much more in-depth look at rasterisation, see [this guide](https://www.scratchapixel.com/lessons/3d-basic-rendering/rasterization-practical-implementation/overview-rasterization-algorithm.html?ref=keheka.com). I hope you found this tutorial useful. For more Nuke tips & tricks, see [Nuke](https://www.keheka.com/tag/nuke/). [Sign up for the newsletter!](https://www.keheka.com/#/portal/signup) ### Run Uphill URL: https://www.keheka.com/run-uphill/ Last updated: 2024-03-20T08:31:16.000Z *Stand out from the crowd by doing what most people won't…* ## Healthy Habit When I’m out jogging and I get to a hill, I’ll *increase* my pace going up. It's a good mental and physical challenge, and it gives you a boost of endorphins. – You feel better when you reach the top. Typically, people will slow down or walk when they reach a hill, and so it's often ‘easy’ to pass other runners on the way up. (Which is very motivating). You may also spark a bit of friendly competition and pull others into your slipstream, so to speak. Or just inspire them to push themselves just a little bit harder, too. I do this elsewhere, as well, although purely for myself. I'll run up stairs, or walk past people up escalators when there's space. It's a fun and healthy habit – it gets the blood flowing. I've done it since I was a child. But it wasn't until later that I realised just how beneficial it could be to apply this habit elsewhere in life. ## The Hill Climb When I served in the Norwegian army we would regularly go out on training missions. Over the course of the year we would be out in all types of terrain, often for days or weeks at a time. In all seasons and weather conditions. I particularly remember one time during winter when we were up in the snowy mountains on cross-country skis. Each team had a pulk (a sled pulled with a harness and rigid poles) with gear and supplies – tents, portable stoves, paraffin, food, water, etc. And one person at a time would pull the heavy load. Naturally, we would alternate between each team member on our long marches from one camp to the next. When going up steep hills, two people would join in and push the pulk from behind to help share the load. After a long day of marching on our skis up in the mountains, we arrived at the foot of a steep hill. Our camp for the night was going to be set up on the other side, which meant we all would have to climb the hill, exhausted as we were. Like always, two people got behind the pulk to start pushing. But when we began the climb, the soldier in front surprisingly forged ahead with massive force, and started pulling the pulk all by himself up the hill. The two people behind almost struggled to keep up at first, he went so fast. Everyone was super tired. But interestingly, this act of selflessness by the man in front sparked a surge of energy in all of the team members. Together, we gave 110% and pushed and pulled the pulk up the hill with great second wind. Instead of a slow and frustrating struggle to reach the summit, we got to the top in no time – with everyone energised and in a great mood. All just because one man ‘ran uphill’. ## Momentum Is Everything When traversing the terrain of work, most people will slow down and walk (or even crawl) while going uphill. By that, I mean when they are faced with a tough challenge they will spend less effort up front, as if to ‘pace’ themselves for the challenge ahead. But I actually think this is the wrong way to go about it. When you have a hard task ahead, spend extra energy and effort straight away to gain solid momentum. You'll end up finishing the difficult task much quicker, and with much less frustration. For example, at the end of a project you might get really annoying client notes which just have to be done. Instead of taking on the attitude of “Oh my god, we're still not finished yet”, change your mindset to “Nearly there. Let’s get it done”. I can't express just *how* beneficial this attitude change really is. – But I'll give it a go. If you carry your weight (and more) during the tough times of projects, you will: - Impress the supervisors, who will give you more opportunities going forward. - Prove yourself as a valuable, reliable team player. – Someone who people will want to work with again (and might even specifically request to work with again). - Inspire others to perform at a higher level. - Get the tough times over with, quicker. - Learn that you have much more energy and willpower ‘in the bank’ than you first thought. - Genuinely feel more positive and optimistic going forward. – And better equipped to tackle difficult challenges. 💡 I'm not advocating to blindly forge ahead unprepared, without being completely clear on the work. I'm just saying that when you **do* know what you need to do, go for it. ## The Takeaway If either you or the ones around you feel unmotivated or even overwhelmed to a degree, start running uphill. It will change your life for the better. There's an old saying that goes: “If you're going through hell, keep going.” But I'd like to make an adjustment to that adage: “If you're going through hell, start running.” Spend less time in “hell”. Power through the frustrating (but necessary) parts of work. Run uphill. I hope you found this article useful. For more like this, see [Advice](https://www.keheka.com/tag/advice/). [Sign up for the newsletter!](https://www.keheka.com/#/portal/signup) ### Creating 3D Environments Using The Particle System In Nuke URL: https://www.keheka.com/creating-3d-environments-using-the-particle-system-in-nuke/ Last updated: 2025-02-16T09:38:55.000Z ⭐ Using the particle system for scattering geometry and building a large 3D environment… _This post is for paying subscribers only._ ### Automating Tedious Tasks Using Python In Nuke URL: https://www.keheka.com/automating-tedious-tasks-using-python-in-nuke/ Last updated: 2025-02-16T09:39:20.000Z ⭐ How to both automate and massively speed up repetitive tasks using Python’s for-loop in Nuke… _This post is for paying subscribers only._ ### Blending Between Cameras In Nuke URL: https://www.keheka.com/blending-between-cameras-in-nuke/ Last updated: 2024-02-21T10:35:29.000Z *Mix between cameras or hand over from one camera to another by using a simple dissolve expression…* 💡 This article was born out of a discussion we had in the [Companions](https://www.keheka.com/companions/) group chat. Blending between cameras in Nuke. ## Dissolving Between Inputs Let’s say that you have two different cameras in Nuke, **Camera1** and **Camera2**, and you want to either stitch them together or blend between the two camera movements. Two cameras will typically not follow the exact same animation curve, and they may not line up perfectly on the specific frame(s) that you want to handover/blend between them. A useful way to line them up is by dissolving the animation curves between the two cameras. A full dissolve from one input to another works by starting out with only the values of the first input, and then gradually blending them towards the second input’s values, until at the end we’re left with only the second input’s values. So at the start, we want to have all of the first input’s values, and none of the second input’s values. And vice versa at the end. In between, we should have a mix between the two, with the second input's values gaining more and more influence depending on how far along we are in the dissolve. To put this into mathematical terms, we can make a general dissolve expression: **First input’s values \* mix + Second input’s values \* (1 - mix)** – Where *mix* is a value between 0 and 1\. If we plug in 1 as the mix value in the expression above, we get only the first input’s values as the output. If we plug in 0 as the mix value, we get only the second input’s values. Should we put 0.5 as the mix value, we would get a half and half blend between the two inputs’ values. A mix value of 0.25 would get us 25% of the first input’s values and 75% of the second input’s values. And so on. We can use this approach to blend between cameras: ## Dissolving Between Cameras Make a third camera, **Camera3**. This will become our blended camera. First, let’s add a control for the *mix* value. Right-click on Camera3’s properties and choose Manage User knobs… Then, click on the Add drop-down menu and select Floating Point Slider. Name it *mix*, label it *Mix*, and leave the Minimum value at 0 and Maximum value at 1\. This will create a User tab in Camera3 with a slider which we can animate between 0 and 1 for our blending. Next, we just need to go into every animation knob of this Camera3 and add in the dissolve expression: **Translate** (Camera1.translate \* this.mix) + (Camera2.translate \* (1 - this.mix)) **Rotate** (Camera1.rotate \* this.mix) + (Camera2.rotate \* (1 - this.mix)) **Scale** (Camera1.scaling \* this.mix) + (Camera2.scaling \* (1 - this.mix)) **Uniform Scale** (Camera1.uniform\_scale \* this.mix) + (Camera2.uniform\_scale \* (1 - this.mix)) **Skew** (Camera1.skew \* this.mix) + (Camera2.skew \* (1 - this.mix)) **Pivot Translate** (Camera1.pivot \* this.mix) + (Camera2.pivot \* (1 - this.mix)) **Pivot Rotate** (Camera1.pivot\_rotate \* this.mix) + (Camera2.pivot\_rotate \* (1 - this.mix)) **Focal Length** (Camera1.focal \* this.mix) + (Camera2.focal \* (1 - this.mix)) **Horizontal Aperture** (Camera1.haperture \* this.mix) + (Camera2.haperture \* (1 - this.mix)) **Vertical Aperture** (Camera1.vaperture \* this.mix) + (Camera2.vaperture \* (1 - this.mix)) **Near** (Camera1.near \* this.mix) + (Camera2.near \* (1 - this.mix)) **Far** (Camera1.far \* this.mix) + (Camera2.far \* (1 - this.mix)) **Window Translate** (Camera1.win\_translate \* this.mix) + (Camera2.win\_translate \* (1 - this.mix)) **Window Scale** (Camera1.win\_scale \* this.mix) + (Camera2.win\_scale \* (1 - this.mix)) **Window Roll** (Camera1.winroll \* this.mix) + (Camera2.winroll \* (1 - this.mix)) And that’s it – you can now animate the *mix* slider to steer Camera3 towards Camera1’s or Camera2’s animation curve. 💡 Here is a tool which does the same thing that’s shown in the article: [mixture\_cam](https://www.nukepedia.com/gizmos/3d/mixture%5Fcam/?ref=keheka.com). Notice that it hasn’t got all of the expressions above – add in the missing ones you need as necessary. I hope you found this tutorial useful. For more Nuke tips & tricks, see [Nuke](https://www.keheka.com/tag/nuke/). [Sign up for the newsletter!](https://www.keheka.com/#/portal/signup) ### Matching Rack Focus In Nuke URL: https://www.keheka.com/matching-rack-focus-in-nuke/ Last updated: 2024-02-07T11:24:25.000Z *A useful technique for matching the rack focus from the plate to your CG/elements…* 💡 [What's rack focus?](https://www.studiobinder.com/blog/rack-focus-shot-camera-movement-angles/?ref=keheka.com) If you're struggling to accurately match the rack focus in a plate, here's a technique that usually helps: First, find the sharpest frame of the plate, and FrameHold it. By sharpest, I mean where the plate is in focus in the area (on the same focal plane) where you’ll be inserting your CG/element. For example, if the rack focus goes from focusing on the foreground to focusing on the background, and you'll be placing an object in the foreground, the sharpest frame means where the plate is fully focused on the foreground. Then, go to the most out-of-focus frame of the plate. Look for a bokeh or another feature that clearly displays the defocus in the area where you'll be inserting your object. This can for example be a light, a window, or some other distinct shape, which when defocused clearly blooms/smudges out to a different shape. Next, either set up two Viewers or A/B wipe between the frameheld sharp frame and the defocused frame. View the same bokeh/feature that you picked earlier, in both Viewers. 💡 If there is a camera move, you may have to transform or reproject the sharp frame to line it up with the defocused frame. Now, add your defocus node of choice to the frameheld sharp frame. Increase the defocus value until the feature that you picked matches between this frame and the defocused frame. (If you're trying to match a bokeh, you'll need a matching bokeh kernel input for your ZDefocus, [this tutorial shows how to extract one](https://www.keheka.com/compositing-photorealistic-lens-effects-in-nuke/)). 💡 You can use the Viewer Sampler to measure the size of the bokeh in pixels to get an exact match. Press Ctrl/Cmd + Alt/Option + Shift and left-mouse-button drag out the red sample box around the bokeh. At the bottom of the Viewer it will say the dimensions of the box. Example of matching the bokeh size. Next, at this most defocused frame, set a keyframe on the defocus value. Then, go to the sharpest frame and keyframe the defocus value to 0 (or the minimum value). 💡 Animate your defocus value in between and/or outside of these two keyframes as necessary. The rack focus may not be perfectly linear, so make sure to follow what the plate is doing. You can now detach your defocus node from the frameheld frame and attach it to your (sharp) CG render or element, and they should match up to the plate in terms of the rack focus. Note that if you’re using a ZDefocus or similar defocus node with depth information, you’ll also/instead need to animate the *focus plane* value so that the focus (focal plane) will move correctly across your object. On the sharpest frame, sample your CG/element’s depth using the *focal\_point* sampler in the Viewer, and set a keyframe on the *focus plane* value. Then, on the most out-of-focus frame, sample or input the new *focus plane* value, and set another keyframe. Animate the value as needed in between/outside of these two keyframes. 💡 If you're using a ZDefocus node and the animated rack focus looks steppy, uncheck **automatic layer spacing*, and manually increase the number of **depth layers*. (Additionally, a **layer curve* value of 0 will evenly space out the depth layers. Positive values will concentrate the layers closer to the in-focus region, while negative values will concentrate the layers far from the focal plane, towards the maximum blur size. Adjust as needed). The great thing about using this technique is that you can often pretty easily get a perfect match. Because you are defocusing the same scene as the real lens did, and you already have a reference for what it should look like. ### Focus Breathing During a rack focus you may get (more or less subtle) *focus breathing* in the plate. Focus breathing, also known as lens breathing, refers to a change in the apparent focal length when adjusting the focus, causing the image to appear slightly zoomed in or out. If your CG/element looks like it's sliding slightly over the plate during the rack focus, you may need to counter-animate the movement with a Transform node for it to stay aligned. You can achieve that by applying a Transform node to your CG/element, with the *center* point set to the centre of your image, and adjusting the *scale* value by a very small amount. ### Using Real Life Metadata A final tip: If you have access to it, you can use the real life camera and shoot information to drive your rack focus. By linking a ZDefocus node to real camera values and metadata from the shoot (distance from the camera to the object in focus), the focus will be calculated for you automatically. Several tools have been built that can do this, such as [PxF\_ZDefocus](https://www.nukepedia.com/gizmos/filter/pixelfudger?ref=keheka.com), [OpticalZDefocus](https://www.nukepedia.com/gizmos/filter/opticalzdefocus?ref=keheka.com) or [k\_ZDefocus](https://www.nukepedia.com/gizmos/filter/k%5Fzdefocus?ref=keheka.com). 💡 If you're lucky, you may even get focal plane metadata in your source plate which you can plug into the **focus plane* value of the ZDefocus node directly. I hope you found this tutorial useful. For more Nuke tips & tricks, see [Nuke](https://www.keheka.com/tag/nuke/). [Sign up for the newsletter!](https://www.keheka.com/#/portal/signup) ### Moving Abroad For Work URL: https://www.keheka.com/moving-abroad-for-work/ Last updated: 2024-01-31T09:00:51.000Z *Pros and cons you might not think to weigh up when considering moving abroad for work…* ## Professional Nomads The visual effects industry can often drive artists and crew to become nomadic. Compared to other professions, the VFX industry is fairly small. And there are city hubs dotted around the world where most of the high-end post-production work passes through. On top of that, some countries' governments offer tax breaks which attract even more VFX work to their specific hubs. I’m from Bergen, a city in Norway which has a population of just under 300,000 people. It has a very small film and visual effects industry. Even all of Norway as a whole constitutes just a tiny part of the global visual effects market. There is just not much work there for a compositor. – And even less if you want to work on really high-end, international projects. If I were to venture a guess, I’d say there are fewer than 1,000 people working in the visual effects industry in Norway. ([This website](https://studiohog.com/vfx-studios/Norway/?ref=keheka.com) says up to \~441 but it probably doesn’t cover all of the studios). That’s equivalent to just one large company in London. There are likely an order of magnitude more people working in VFX companies just within central London than in all of Norway. And so finding steady work is typically much easier here, because even if one contract ends, you can get another one with a different company close by. Working from home has changed this a little bit – you don’t necessarily have to live near central London to work for a London company. But you typically *do* have to live in the UK due to the tax break rules. And so staying in a place such as Bergen isn’t really a viable option for many people if they want to work full-time in VFX on the types of projects I've been fortunate to work on, for example. You might find yourself in a similar situation. ## Choose Your Difficulty Level If you live in a country with a very small or non-existent VFX industry, and it's difficult to find (enough) work, you have some options: (From easiest to hardest) 1. **Staying in your home country and trying to get remote VFX work.** Obstacles: You have to navigate tax returns for the countries you’re working remotely for, and the projects you're allowed to work on may be limited due to tax break laws. Time zone differences may be challenging. 1. **Expanding your scope, and searching for work in related industries within your city/country.** (Such as advertising, games, VR, architectural/medical visualisation, etc.). Obstacles: A certain amount of retraining may be necessary, and you may not be able to work on exactly the type of projects you would most like to do. 1. **Moving abroad and joining one of the VFX hubs.** Obstacles: Leaving friends and family behind. Starting from scratch: finding a place to live, building a network, setting up all the admin (such as a bank account, doctor, dentist, etc.). And depending on where you're from, you may need a Visa. 1. **Starting your own VFX company.** Obstacles: A large, long-term, and potentially risky undertaking which is unlikely to turn a profit the first year(s). Building a network of clients and getting steady work coming in. Hiring and managing a team, and having other high-level company responsibilities. They're all valid options, as may others be, and only you can know which is the best option for you. This article is about my thoughts on and experience with point number 3: moving abroad for work. ## Finding Your Way In I have lived in the UK for 14 years now, and have been working in the VFX industry for 12 of those. The first two years I went to Teesside University in the north of England. My university in Bergen had a 2+1 program where you could do two years in Bergen, and then the last year abroad at select partner universities. I chose to go to England for my final year, and ended up staying on for another year after to get a Master’s degree. When I graduated, I moved down south to London and started working in VFX as a freelancer. That was my way in, and it was a quite natural – and fairly straightforward – one. (I didn’t need a Visa due to Norway being a part of the EEA). Going to university in another country is a great way of getting to know the people and culture, making connections, and experiencing what life is like there. It’s not a bad option if you have the opportunity (and reasonable funding – some countries’ student loans seem predatory, frankly). You might also have friends or family that you could stay with in your target country, or who could otherwise help you financially, which is another way to ease your move. Or you might need to apply for a Work Visa, which can be a bureaucratic hassle. It will typically be costly, not permanent, and you'll likely need to be sponsored by a company. But it is definitely a valid option – and a way in for those with the tenacity. Regardless of which routes are available for you to take, there are two important things you should remember to consider before you decide where to go: **Cost of living** and **Quality of life**. ## Cost Of Living When deciding which country and city might be right for you, you should take the cost of living into consideration. Companies in certain cities will offer a higher salary than others, but it may also be **more expensive to live** in those cities. And so the higher salary is often cancelled out or even outweighed by the increased cost of living. Take London, for example. If you have (or plan to have) children, you should know that nurseries are *very* expensive in London. But they are free in for instance Germany and other European countries. Rent is also more expensive here than in other parts of Europe, going out is more expensive, train travel is more expensive, and so on. You can compare the cost of living between the cities you are considering moving to, and your own city, on for example Numbeo: [Numbeo – Cost Of Living](https://www.numbeo.com/cost-of-living/?ref=keheka.com) Obviously, take the numbers with a grain of salt. But this way, you can get an idea of the purchasing power of your expected salary. It will also help give you a better idea of what type of salary you *can* ask for. Because you shouldn't just directly convert your current salary into your target country's currency and expect to be offered that as your new salary. You have to consider the cost of living and the typical salaries there (using references such as Numbeo and Glassdoor). And you also have to take into account what your quality of life is likely to be in the new city. ## Quality Of Life Your work will have a large impact on how much you enjoy life. But so will other things, such as: - Climate - Culture & events - Proximity to family - Food - Standard of living - Crime/safety - Healthcare - Pollution - Politics - Traffic/commute - Ability to walk/cycle to get around - Access to nature - Working hours - Holidays There are also more intangible qualities to consider, such as whether or not you personally like it there, and if you vibe with the people and lifestyle, for example. If you get to work in VFX, it’s fair to assume that you’re pretty high up on Maslow’s pyramid: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/01/maslow-s_hierarchy_of_needs.jpg) Maslow’s hierarchy of needs. Just make sure that you’re not sacrificing too many things that are truly important to you in your pursuit of a better job. While salary is very important, remember to also weigh up the other things listed above to get a fuller picture of the quality of life that’s on offer. There are quite a few ways to [quantify and compare quality of life](https://en.m.wikipedia.org/wiki/City%5Fquality%5Fof%5Flife%5Findices?ref=keheka.com). Going with Numbeo again, for instance, you can compare the quality of life between the cities you are considering moving to, and your own city: [Numbeo – Quality Of Life](https://www.numbeo.com/quality-of-life/?ref=keheka.com) Looking at all these numbers can be very useful but they are no substitute for experiencing the real thing. And from my own experience, there are a few things you should know about life abroad. ## Living Abroad Life abroad can be great in many ways, but the grass is not always greener on the other side. At times, you will probably question your decision to move. It’s the eternal struggle between exploration and yearning for home. For me, it's wanting to see how far I can advance my career and to build a (new) family life, versus missing the friends and family (and the mountains) at home. Because even after 14 years in the UK, Bergen is still *home*. In the summer and for Christmas, I still goback *home* to Bergen. And perhaps for as long as I live here, I'll still feel like I'm a Norwegian in London. Who knows. London *is* rubbing off on me. I both think and speak more in English than in Norwegian now, because I'm completely immersed in the English language every day, at home and at work. So I'm not the same Norwegian I was before I moved here. But it's not like home is the same as what it was when I left 14 years ago, either. It has moved on, just as I have. Life continues. And it's easy to look back with rose-tinted glasses and become nostalgic about the past – especially for a time with much less responsibility. But that's not a fair comparison to the present. It's also funny how it's *abroad* where you learn the most about what it’s like at home. How it’s different, and how it’s the same. You get a new perspective on it all, and your views might change. Just be wary of *out of sight, out of mind*. It's real. You will have to make an effort to keep in touch with friends and family back home. Otherwise, communication slowly fades. If they're not front and centre in your mind, they won't be front and centre in your life. The same goes for your native language. Especially over longer periods. You need to practise it or you'll start to get rusty. You'll forget words and your intonation changes unless you speak your native language regularly. It helps to make friends with people that are from your country, wherever you move to. Distance can make daily life more challenging in other ways, too. We have no family members here in the UK, and so raising a child is a lot more demanding. We don't have the benefit of grandparents or uncles and aunts helping out on the weekends here and there, for example. You make it work, of course, but these are things that you should consider, and that could influence your decision about *if* you'll move and *where* you’ll move to. And lastly, keep in mind that *short term* can quickly become *long term*. That's not necessarily a bad thing but it's something to be aware of. I didn’t plan on staying 14 years in London but I'm still here after all this time, because London has treated me pretty well. By moving to London and working for the VFX companies here, I’ve achieved more than what I could have hoped for when I first started studying back in Bergen. The teams I've worked together with have both won and been nominated for multiple Oscars, Emmys, BAFTAs, and VES awards. So far just this year, we have received a double Oscar nomination for Best Visual Effects, a double BAFTA nomination for Special Visual Effects, and a VES nomination for Outstanding Supporting Visual Effects In A Photoreal Feature, on *Mission: Impossible - Dead Reckoning Part One* and *Napoleon*, for example. (However, although fun to look back on, the excitement of receiving even prestigious accolades is short-lived, and shouldn't be seen as an important factor in your decision-making). Much more importantly, I met my partner here in London, we started a life together, had a child, bought a flat, and are continuing our adventure together with London as our base. That's what it's *really* about, to me. Whether you decide to move abroad for work or not: The grass will ultimately become the greenest where you water it. – I hope you found this article useful. For more reflections, see [Advice](https://www.keheka.com/tag/advice/). [Sign up for the newsletter!](https://www.keheka.com/#/portal/signup) ### Making Shot Breakdowns In Nuke URL: https://www.keheka.com/making-shot-breakdowns-in-nuke/ Last updated: 2025-02-16T09:39:48.000Z ⭐ How to build an automated setup for breaking down shots in Nuke… _This post is for paying subscribers only._ ### The Lunar Terminator Illusion URL: https://www.keheka.com/the-lunar-terminator-illusion/ Last updated: 2024-01-12T17:19:12.000Z *How faraway objects should realistically be lit and cast shadows…* The lunar terminator illusion is an effect that happens when we see both the sun and the moon in the sky at the same time, and the angle of the light hitting the moon doesn't seem to line up with the sun from our perspective. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/01/ADMI.jpg) The lunar terminator illusion. 💡 In this case, the terminator is the line which separates light and darkness. Not related to Arnie. Although, **The Lunar Terminator* does sound like a badass movie… When we look at the sky, it's not like looking at a flat sheet of paper in front of us, but rather out into a three dimensional sphere. So straight lines across the sky are often projected curves which just look straight from our standpoint. And vice versa. An airplane can be flying dead straight across the map, but the flight path will look like a curve around the Earth. The sun will shine rays straight at the moon, but from our perspective they will appear to curve and hit the moon from a different angle. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/01/Real_Vs_Expected_Angle.jpg) Real versus expected lighting angle. In the picture above, the sun is not directly to the bottom left of the moon, it's waaay further off into the distance. Almost 400 times further away from us than the moon. (It's also a *lot* larger which makes it appear closer, tricking our brain). So the moon is lit from far behind and top left, not directly from the bottom left. And therefore the angle of the light and the shadows on the moon don't line up in a straight line between the sun and the moon in screen space. This is also true for other objects. ## Remember To Account For Distance When compositing for example an airplane, a spaceship, or a celestial object, think about distance when you add lighting and shadows. As compositors, we're often so wrapped up in screen space that we forget to consider how things really relate to each other in 3D. Remember that the sun is very far away and will illuminate objects that are between you and it from behind, not from the side. Let's say that you're compositing a spherical object high up in the sky, using a textured Sphere and a Light in Nuke's 3D system. If the sun is visible in the frame, or positioned near the frame, such that it should be lighting the Sphere from behind, remember to push your Light further into Z, and/or rotate it. Rotating a directional Light from the side to the back of a Sphere. I hope you found this tutorial useful. For more Nuke tips & tricks, see [Nuke](https://www.keheka.com/tag/nuke/). [Sign up for the newsletter!](https://www.keheka.com/#/portal/signup) ### Creative Look Development In Nuke URL: https://www.keheka.com/creative-look-development-in-nuke/ Last updated: 2025-02-16T09:40:15.000Z ⭐ How to conceptualise a visual effect in Nuke… _This post is for paying subscribers only._ ### Consolidating Retime Curves In Nuke URL: https://www.keheka.com/consolidating-retime-curves-in-nuke/ Last updated: 2023-12-18T09:00:28.000Z *Combine multiple retime curves into one master curve…* ## The Long Take Once in a while, you may find yourself working on a long take. In filmmaking, a long take (also called a continuous take, continuous shot, or oner) is a shot which is much longer than a typical shot. There might be significant camera movement and elaborate stunt choreography, all in one long take. (Or several shots stitched together to look like one long take). Example of a long take from Mission: Impossible - Fallout. (It's actually three shots stitched into one). On a previous project, we worked on a large fight scene. It had very long takes that captured different stages of the combat as the actor and stuntmen moved through the environment. (Thousands of frames per shot). The work required a lot of retiming to make the fighting look more real and violent. We made heavy use of speed ramps and seamless jump cuts. And there was a lot of clean up and connecting of hits. Because the shots were so long, we made the decision to split them up into different parts in Comp to make them easier to manage. That meant for each shot, we used multiple Kronos nodes to retime the different parts. And we [retimed the cameras](https://www.keheka.com/retiming-cameras-in-nuke/) as needed for each part in Nuke. All the individual parts were assembled in one master script per shot. As well as retimes and clean up, the shots also required CG renders. To simplify things for Lighting, who had one camera per shot from Matchmove, we consolidated all the retime curves into one master retime curve for each shot. And we did that via custom metadata: ## One Curve To Rule Them All The setup we came up with boils down to the following: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/12/Consolidating_Retime_Curves.png) Consolidating retime curves. The setup above is obviously stripped of all the complex work we did, but it shows how the retime curve consolidation process worked in a nutshell. The scan was divided into multiple parts at natural points in the shot. Each part had a locked start and end frame so that when assembled they would all seamlessly fit together. However, within those frames the comper had freedom to speed ramp and jump cut as needed to make the fighting work. To make sure the retime frame information from each Kronos node was successfully passed through, we created new metadata to store it in. Here's how to do it: Below each Kronos node, put a ModifyMetaData node. To [add new metadata](https://learn.foundry.com/nuke/content/comp%5Fenvironment/metadata/modifying%5Fmetadata.html?ref=keheka.com), click the *+* button. Then, double-click on the field in the *key* column to bring up a pop-up menu. Here, you can pick an existing metadata key or create a new one: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/12/Creating_Metadata_Key.png) Creating a new metadata key. Instead of picking a key from the list, type in a new name for your key in the bottom field. We chose *retime/frame*, but it can be anything so long as it's descriptive and easy to understand. Next, double-click on the field in the *value* column and add the following expression: **\[value input.timingFrame2\]** ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/12/Creating_Metadata_Value.png) Adding an expression to the value of the new metadata. This expression will assign the value of the retimed frames in the Kronos node to the new metadata. Next, set the relevant frame ranges that you want to use for each part of the shot using FrameRange nodes, and then AppendClip them all together. To use all the metadata in one Kronos node, the next step is important: Render out a precomp of the combined frame range. We're going to be adding an expression to use the metadata, and due to a bug in Nuke **it doesn't work with other live expressions upstream**. The new metadata needs to be baked into rendered frames. Once you've done that, import the render and connect a new Kronos node to it. In the timingFrame2 knob, add the following expression: **\[metadata retime/frame\]** ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/12/Master_Expression.png) Putting the combined retime frame information in a Kronos node via an expression. Next, let's bake the expression into keyframes in order to export the retime curve. Right-click on the expression → Edit → Generate…: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/12/Master_Expression_Bake_01.png) Edit → Generate… And then, select your frame range in the pop-up menu: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/12/Master_Expression_Bake_02.png) Selecting the frame range to bake. Hit OK and your Kronos node is ready to go! I hope you found this tutorial useful. For more Nuke tips & tricks, see [Nuke](https://www.keheka.com/tag/nuke/). [Sign up for the newsletter!](https://www.keheka.com/#/portal/signup) ### The Joy Of Learning URL: https://www.keheka.com/the-joy-of-learning/ Last updated: 2023-12-15T08:00:26.000Z *Stop stagnating and instead re-embark on the journey of endless discovery…* A surprising number of people have said some variation of the following to me in conversation: *You have a full-time job \[like me\] and a toddler at home. I don’t understand how you have the time or energy to do all this research and make these tutorials.* For context, this is the 75th article I’ve published on my website in the past year and ten months. (Currently averaging 40.3 tutorials per year, or 3.36 per month). The simple answer is because I love learning and I hate stagnation. And one of the best ways for understanding something on a deeper level, is to teach. So I value teaching and choose to make it a priority. I’ve decided to trade *some* of the free time I would normally spend gaming on my PS5 or pursuing other hobbies, for gaining and sharing knowledge. And it's actually been a remarkably good trade-off. ## Active Consumption Just like playing video games, learning something new is all about active consumption. Instead of passively scrolling through TikTok or Instagram, for example, you **participate** to a much higher degree. You actively and intentionally seek out knowledge, make connections between topics, explore, and figure things out. You make strategies and discoveries, and challenge yourself to grow and improve. Which ends up making you feel good. ## Pathway To Pleasure The act of acquiring knowledge changes your body's chemistry. It releases one of the four feel-good hormones in your body, [dopamine](https://www.health.harvard.edu/mind-and-mood/dopamine-the-pathway-to-pleasure?ref=keheka.com), which plays an important role in making you feel pleasure. As part of the brain’s reward system, dopamine is fundamentally involved in key functions such as learning, reinforcement, and attention. The brain reacts to novelty by producing dopamine, which makes us want to go exploring in search of a reward. And so when you learn something new, or connect old knowledge in a new way, it can quite often be a joyful experience – that you'll want to continue experiencing. Have you noticed that when you finally connect the dots and have a brilliant ‘aha’ moment, you smile and feel good? That's your brain rewarding you (/itself?) for your newfound knowledge. It's similar to what happens when you hear a great joke – which is essentially an unexpected discovery – you laugh and feel good. It makes sense that we're wired this way, because gaining knowledge is, and has historically been, advantageous to us as a species. And so it's beneficial to motivate ourselves to keep seeking it out. **By continuing to learn, you continue to reward yourself, both physically and intellectually.** Which leads to a very important point: ## Play The Infinite Game I view learning as an [infinite game](https://en.m.wikipedia.org/wiki/The%5FInfinite%5FGame?ref=keheka.com), and not something that ends after you finish school. Kids are learning constantly, and we shouldn’t stop just because we become adults. You simply don't know just how little you actually know about a subject until you start learning more about it. Going to university or taking another educational course is just the tip of the iceberg for learning – in any field, including VFX. I would estimate that 95% of what I know about Nuke and compositing, I have learned after I finished university. So, in my opinion, one of the most important things schools can teach is the joy of learning. Not just passing on information, but fostering curiosity, instilling an adventurous sense of exploration, and bolstering independent learning. Because the goal is to *continue* to learn and improve. And, in the case of VFX and movie-making, to get as close as possible to one thing: ## Unhindered Creativity 'Mastering’ a tool such as Nuke is all about removing restrictions on your creativity. Our job is to make a certain thing – be it an exploding spaceship or a bloodthirsty creature – and we do that to the best of our ability with the tools and techniques available to us. The more techniques you learn, and the more productive ways of operating your software that you employ, the better equipped you are to make that thing well. And the more freely you can let your creativity flow into your work. You’ll have a greater library of knowledge to pull ideas from, and more experience in choosing the right approach for the job. *And*, learning new things often spark ideas which boost your creativity, so it becomes a positive feedback loop. But there is a price to pay up front for this privilege: temporary discomfort. ## Accept The Initial Agitation In order to learn, you have to focus. And when you try to focus, the brain’s first response is stress. There is friction before you gain any momentum. And your mind might wander all over the place at first to avoid the discomfort. But you have to accept the initial agitation. Researcher Billy Oppenheimer and neuroscientist Andrew Huberman describe it well: --- > I think about this twice a day. > > Every morning when I sit down to read & then when I sit down to write, I say to myself, > > "Accept the initial agitation." > > When you try to focus, Andrew Huberman explains, "the brain circuits that turn on first are of the stress system." > > Meaning:… [pic.twitter.com/1VQsNgTlDh](https://t.co/1VQsNgTlDh?ref=keheka.com) > > — Billy Oppenheimer (@bpoppenheimer) [December 12, 2023](https://twitter.com/bpoppenheimer/status/1734688163552260192?ref%5Fsrc=twsrc%5Etfw&ref=keheka.com) --- If you’re struggling to get going on a task, I would suggest forcing yourself to do it for five minutes. Five minutes, that’s all. And if you still can’t settle in and begin the task, that’s fine. But more often than not, once you’ve done five minutes of work – researching, reading, writing, tinkering in Nuke – you’ll find that you want to continue. I’ve written about [the edge of chaos](https://www.keheka.com/the-edge-of-chaos/) before. There is friction at the edge of chaos; there’s agitation. Because you are introducing the unknown to the familiar, and they tend to clash at first. But before long, you’ll realise it’s the best environment for learning. It’s where you build and bridge your [pillars of knowledge](https://www.keheka.com/the-sphere-of-knowledge/). So accept the initial agitation, and remember, [nothing will be perfect right away](https://www.keheka.com/your-wastebasket-isnt-full-enough/). 💛 If you've lost it, I hope you will rekindle your joy of learning. I hope you found this article useful. For more productivity tips & tricks, see [Productivity](https://www.keheka.com/tag/productivity/). [Sign up for the newsletter!](https://www.keheka.com/#/portal/signup) ### Removing Noise From CG Renders In Nuke URL: https://www.keheka.com/removing-noise-from-cg-renders-in-nuke/ Last updated: 2025-02-16T09:40:39.000Z ⭐ 17 different techniques for removing CG render noise in Nuke… _This post is for paying subscribers only._ ### Procedural Map Generation In Nuke URL: https://www.keheka.com/procedural-map-generation-in-nuke/ Last updated: 2023-12-08T17:11:53.000Z *Generate unlimited worldbuilding maps right inside of Nuke…* When I was a kid I used to love pirate treasure maps. There was something about them that sparked my imagination and made me daydream. And I still enjoy their distinct visual look today. As a fun little side project, I generated the base image for a pirate map using Noise nodes in Nuke: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/12/Final_Base_Map.png) A procedurally generated base image of a pirate map, most of which is driven by Noise nodes. Nearly all aspects of the map are procedural, meaning it's possible to customise and stylise it heavily. And by changing the values in the Noise nodes, we can essentially produce an infinite variety of maps: Procedural map generation. The video above only shows a small fraction of the maps that are possible to make. Let's take a look at how we can build this in Nuke. 💡 Even if you're not interested in maps or worldbuilding, the techniques shown in this guide are still useful for more practical compositing work. And maybe you have a young family member who would enjoy a print of a customised treasure map as a gift? ## References Before you start building the setup, it can be useful to look for references. Find some maps that you like the look of, and use them to draw inspiration for style, colours, and various elements that you'd like to incorporate into your own work. For my map, I initially drew inspiration from an early version of the FFXVI world map: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/12/FFXVI.png) An early version of the FFXVI world map. My map ended up looking quite different as a result of my own design choices, however you can see some of the same design elements echoed in it. That's actually sort of the whole idea here. You can pick and choose different things you like, and combine them into something new and unique. You don't have to stress about reinventing the wheel. Maps have been around for a very long time, and there is so much amazing work out there that can be used to help spark ideas. Once you have gathered some inspiration and have a rough idea of what you would like to make, let's continue. 💡 You'll be experimenting with, adding to, and tweaking your map along the way. So it's absolutely fine to not have pinpointed an exact look yet. This reference gathering exercise is meant to help you gain momentum. The first and last versions of your map will most likely look very different to each other – it's all a part of the process. ## Free Details To help fight the blank page syndrome, it can be a good idea to start out with a high resolution image of an old and stained paper texture. That way, you'll get a bunch of details for free right off the bat, and save yourself a lot of work by not having to create the map completely from scratch. While you can absolutely make something similar with enough Noise nodes and grades, it helps to have real, non-synthetic detail as a foundation for the map. Some authentic imperfection: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/12/Old_Paper_Texture.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/12/Stained_Paper_Texture.jpg) Examples of old and stained paper textures. 💡 Search for ‘old paper texture’ or ‘stained paper texture’ and you'll find there are a bunch of options to choose from. Just make sure that you download one with a high enough resolution for your needs. Import your paper texture into Nuke, and let's start building the map. ## Landmasses The Noise node in Nuke is great for procedurally generating landmasses. It has a ton of settings to create basically an unlimited variety of shapes. And because it's procedural, you can create as large of an image, with as much detail, as you like. Meaning, your input image can be any resolution. For my map, I chose to use a 4000 x 3000 pixels stained paper texture. You could use anything you like, although I would recommend going with a high resolution image for sharper detail. (Which would also look better on print if you plan to make a physical map). ### Mainland All right, so we're going to use a Noise node to generate the main landmasses. It's important that the Noise node is set to the same format as your paper texture in order for everything to fit together. Make a branch off to the side from your paper texture, add a Remove (all) node, and then connect a Noise node to it. This will transfer only the format of the paper texture to the Noise node. 💡 You **could* also just change the project settings to match the resolution of your paper texture, and leave the Noise node disconnected upstream. However, by using the format transferring approach, the setup will dynamically update in case you decide to change the texture later on to an image with a different resolution. Next, crunch the white and black points of the Noise node’s alpha with a Grade node. This will make the edges of the landmasses more defined. Remember to tick *black clamp* and *white clamp* in the Grade node to keep the alpha values between 0 and 1\. Copy the crunched alpha into a new branch coming from the paper texture, and then Premult. In this new branch, grade the paper texture to the colour you want the landmasses to be on your map. Then, Merge (over) the coloured landmasses (A) with the original paper texture (B). ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/12/Landmass_02_Setup.png) Setup for generating the main landmasses. 💡 Make sure to match the levels of fine detail and sharpness in your landmasses to those in your paper texture. You can soften the Noise matte with a gentle Blur to avoid unnaturally harsh detail. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/12/Landmass_01_Noise_Output.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/12/Landmass_02_Noise_Graded_Output.jpg) The Noise matte, before and after crunching the white and black points. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/12/Landmass_02_Map.jpg) The map with the landmasses added. ### Outlines & Shading To better define the landmasses, let’s add outlines and some shading. Create an edge matte from the landmasses matte, for example using [Perimeter](https://www.keheka.com/perimeter-advanced-edge-mattes/). This tool has options for adding softening to the inner and outer edges, which can be used for shading. Lower the white point of the softened edge matte with a Grade node to make it punchier. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/12/Landmass_03_Setup_Annotated.png) Adding outlines and shading to the landmasses. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/12/Landmass_03_Outline.jpg) The matte for the outlines created using the Perimeter tool. As shown in the setup above, connect a Grade node to the map with the landmasses. Using the outline matte as a mask, grade down the map until you get a nice outline around the landmasses. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/12/Landmass_03_Map_Outlines.jpg) The landmasses with added outlines and shading. Currently, the outlines look quite sharp and clean. We should roughen them up a bit by introducing some wear and tear. To do that, we can mask the outline matte by another Noise node with a fine noise pattern: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/12/Landmass_04_Setup_Annotated.png) Adding wear and tear to the outlines. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/12/Landmass_04_Noise_Output.jpg) The wear and tear matte. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/12/Landmass_04_Map_Wear_And_Tear.jpg) The outlines with wear and tear applied. With this setup, it’s much easier to visualise what the map could look like. Now is a good time to play more with all of the settings in the first Noise node to find a nice shape for your landmasses. The *z* value will have a major impact on the initial shape – even small changes make a big difference. To fine-tune it, you’ll have to go far into the decimal values. You can adjust the *lacunarity* value and the Blur node’s *size* value to control the amount of border detail in your Noise matte. And remember that you can adjust the settings in the Transform tab in the Noise node as well. Because it’s procedural, you can transform your matte infinitely. Translate, rotate, scale, or skew your map to your heart’s content. There’s no risk of any cropping or stretching issues appearing, or of suffering a loss of fidelity. (Like you’d get if you were instead using a Transform node on the rasterized Noise output). 💡 Think about which scale you want your map to be representing. Is it for example a small region or a world map? Change the **x/ysize* value, and the **scale* value in the Transform tab, accordingly. If you like, you can draw your own shape for the landmasses using a Roto node. Then, apply one of the many edge roughening tools out there, such as [FractalBlur](https://raw.githubusercontent.com/vfxwiki/nukeArtistToolkit/master/fractalBlur.nk?ref=keheka.com), to add procedural edge detail. And remember that you can mask or stencil your landmasses as much as you like. You can also add an Invert node to the matte in the search to find the right shape for your landmasses. Customise your map exactly how you want it. 💡 For a different look, for instance for sci-fi maps, you can also use other types of noise for generating the landmasses, such as [CellNoise](https://www.nukepedia.com/blink/image/cell-noise?ref=keheka.com). ### Borders To make borders within the landmasses in order to indicate regions or countries, you can copy the whole setup used for making the outlines, and then change the values in the new nodes. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/12/Landmass_05_Setup_Annotated.png) Setup for adding border lines within the landmasses. Make a different shape with the new Noise node to form the actual borders, and increase the *size* value in the new Blur node to make the borders smoother, if needed. Remember to mask the border matte (B) by the landmass matte (A) using a Merge (mask) node to contain the borders within the landmasses. Then, Merge (over) the border matte (A) with the outline matte (B). (Or connect it to a different Grade node if you for example want another colour for your borders). 💡 You can also draw your own borders with an open spline roto shape, and then use the FractalBlur trick again to create details. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/12/Borders_Matte.jpg) The matte for the borders. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/12/Landmass_05_Map_Borders.jpg) Splitting the landmasses into regions using borders. ### Islands Your map may already have some islands, but if you want more, you can just create another Noise node and merge it with the main landmasses. Choose a smaller *x/ysize* value and crunch the alpha to make islands: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/12/Islands_Setup_Annotated.png) Setup for adding islands. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/12/Islands_Noise_Graded_Output.jpg) Matte for the islands. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/12/Islands_Map.jpg) Adding more islands to the map. By merging the islands with the main landmasses like in the setup above, you avoid any issues with overlapping and doubling up. Where they intersect, the islands simply become absorbed by the mainland. ## Rivers, Lakes & Roads These are essentially just duplicates of setups we have done so far, with minor adjustments. Rivers are made similarly to the borders, only with a thicker edge matte. The colour in the Grade node that’s grading the map is also changed to blue. Lakes are made with a similar Noise node setup as for the islands, only the setup is masked by the mainland matte. And again, the colour in the Grade node that’s grading the map is changed to blue. Roads are again just the same as the borders, but with a slightly different colour in the Grade node. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/12/Rivers_Lakes_Roads_Map.jpg) Adding rivers, lakes, and roads to the map. 💡 Remember to mask all of the above by the wear and tear matte from before. ## Mountains & Forests For these, we'll again start with a Noise node as the base. We'll also be using the [Matrix\_Preloaded](https://www.nukepedia.com/gizmos/filter/matrix%5Fpreloaded?ref=keheka.com) gizmo which has [various useful features](https://www.bannisterpost.com/downloads/matrix-preloaded/?ref=keheka.com) that we can use to make something that resembles mountains and forests. Crunch the black and white points of the Noise node’s s RGB channels with a Grade node, and then apply the Matrix\_Preloaded gizmo with the *Edge Detect 1* preset. Next, crunch the output of the Matrix\_Preloaded node with another Grade node, and dilate the RGB to taste (usually only very slightly), before shuffling the red channel into the alpha channel. Mask this by the landmass matte to contain the mountains to land only. Then, use the resulting matte as a mask for a Grade node to grade the map a darker brown in those areas. You can duplicate the setup with different Noise settings to add more mountains. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/12/Mountains_01_Setup.png) Setup for making mountains. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/12/Mountain_02_Masked.jpg) The crunched output of the Matrix\_Preloaded gizmo, masked by the landmass matte. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/12/Mountains_Map.jpg) Adding mountains to the map. Forests can be made in the same way, just with a green grade on the map instead. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/12/Forests_Map.jpg) Adding forests to the map. ## Compasses Any decent map needs a compass! 😊 You can draw one yourself, for example [like this](https://www.mapeffects.co/tutorials/compass?ref=keheka.com) using a [number of patterns](https://www.deviantart.com/caeora/art/Basic-Map-Compasses-875537431?ref=keheka.com) for inspiration, or you can for instance [download an icon](https://www.google.com/search?client=firefox-b-d&sca%5Fesv=589097879&q=map+compass+png&tbm=isch&source=lnms&sa=X&ved=2ahUKEwi64JTHiYCDAxV%5FW0EAHXvLCC0Q0pQJegQIDBAB&biw=2344&bih=1307) and composite it in. For my map, instead of one compass in the corner of the frame, I wanted to make a windrose network similar to the one you saw in my main reference image. And continuing in the spirit of procedural generation, I decided to make it using nodes in Nuke. ### Compass Rose One way of making the compass rose is to stack Flare nodes. First, make a Flare node and increase the *corners*, *edge flattening*, and *corner sharpness* values. Then, add a Grade node and crunch the *whitepoint* value until there’s no transparency left in the centre. Shuffle the red channel into the alpha channel so that you have a matte for the compass rose, and then add another Grade node and grade the RGB red. Next, copy the whole setup. Make the second Flare node smaller and grade it yellow, and then stack it on top of the first one. Keep doing this, alternating between red and yellow flares, while progressively reducing the number of corners and the edge flattening. To make a circle in the centre, you can set the edge flattening to 0, or use a Radial node. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/12/Compass_Rose_01.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/12/Compass_Rose_02.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/12/Compass_Rose_03.jpg) Progressively adding more Flare nodes until the compass rose is complete. Mask the compass rose by the wear and tear matte, and merge it over your map. 💡 To help sit the compass in better on the map, you can use a blurred version of the compass as a mask for grading the map darker, before merging the compass on top. ### Windrose Lines The windrose lines are the radial lines coming from the compass rose. You can make them procedurally by putting a radial lines expression ([from here](https://www.nukepedia.com/written-tutorials/expressions-101?ref=keheka.com)) in the alpha section of an Expression node: **sin( ( atan(x - centre.x, y - centre.y) + rotation) \* lineNumber)** Where the *centre* is a 2d Position Knob, and the *rotation* and *lineNumber* are two Floating Point Sliders in a User tab in the Expression node. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/12/Expression_Radial_Lines.png) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/12/Expression_Radial_Lines_User_Tab.png) The expression node for creating radial lines. Out of the box with the above settings, you’ll get this image: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/12/Radial_Lines.jpg) Procedural radial lines. These lines are obviously too thick, but we can slim them down by adding a Grade node with the *blackpoint* set really close to 1, for example to 0.997: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/12/Radial_Lines_Slim.jpg) Radial lines with the appropriate thickness for our map. Using this as a mask, we can grade the map darker to add the windrose lines. For my map, I made two sets of windrose lines for each compass (the second set had a rotation of 4.005 to fit exactly in between the first set). I used one set for grading the map red and one set for grading it black. 💡 [Later, I learned](https://en.wikipedia.org/wiki/Rhumbline%5Fnetwork?ref=keheka.com): “The lines of the courses for the eight main directions (or winds) are drawn with black ink (or sometimes gold); the eight intermediate directions (half-winds) are drawn in green; and in the case of a 32 winds rose, the sixteen remaining (quarter-winds) are drawn in red.” And so if you want to be more accurate, adjust your settings to the above. Add the windrose lines beneath the landmasses layer on your map. (This is why we used a Copy Premult setup before, instead of simply grading the map directly – the windrose lines would have shown through). Or, Merge (stencil) the windrose lines (B) by the landmass matte (A). 💡 If the windrose lines get too prominent at the outer edges, you can mask them by a Radial node with the same centre. For my map, I used three copies of the compass (one off-screen): ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/12/Compass_Map.jpg) Adding the compasses to the map. ## Grading, Vignette & DoF To make the map pop more, you can grade it and add some vignetting and depth of field. Increase the gain and lower the gamma to introduce more contrast and saturation into the map. 💡 You can also grade the map using a Noise node as the mask input to add more detail. Darken the edges of the frame with a vignette using a tool such as [dg\_Vignette](https://www.nukepedia.com/gizmos/colour/dg%5Fvignette?ref=keheka.com), or simply using a Grade node with an inverted Radial as the mask input. A quick way to add depth of field to the map, or even field curvature (also known as edge \[of frame\] softness), is to use an [iBlur](https://www.nukepedia.com/gizmos/filter/iblurfh?ref=keheka.com) node with either two Ramps top and bottom or an inverted Radial as the mask input. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/12/Final_Base_Map-1.png) The final base map. That’s it for the procedural creation of the base map, but there are still plenty of things you could do to take your map to the next level: ## Custom Elements So far, we’ve only made a base map, and it’s up to you how you want to customise it. You could add grid lines (for example using a Grid node), or decorate the map with ornate borders, symbols, and flags. Add drawings or icons for the various areas of interest on your map, such as: - Buildings - Caves - Monsters - Pathways - Ports - Ships - Towns - Treasures Below are some more examples: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/12/Map_Features.jpg) Examples of features you could add to your map. 💡 There are a ton of references out there for how to draw every aspect of a map. Here are [some tutorials](https://www.deviantart.com/djekspek/gallery/34669381/tutorials?ref=keheka.com), for example. A quick tip for integrating the various elements into your map: Let's say that you would like to put a drawing/icon of for example a town in a dense area of the map such as a forest or a mountain range. To avoid it looking too cluttered, you could just stencil out detail from the Noise mattes with a roto in that area to create a clearing for the drawing/icon on the map. ## Text To make the world that you have built feel more real, you can add names to the various locations and key elements on the map using Text nodes. Download and install a [pirate font](https://www.fontspace.com/category/pirates?ref=keheka.com) (or a font relevant to your map style) and select it in the *font* dropdown menu in the properties of your Text nodes. You can also add further wear and tear to the text by masking it by a Noise node with a fine noise pattern. Here is some inspiration for naming places of interest: - Atoll Of No Return - Black Water Enclave - Bloodmoon Bay - Broken Tooth Isle - Buccaneer's Regret - Buried Wreckage - Charred Corpse Isle - Coconut Sands - Corsair’s Peril - Crimson Plunder - Crow's Nest - Cutlass Coast - Cutthroat Quay - Dagger Tooth Atoll - Deadman's Lagoon - Dead Whale Shores - Den Of Bones - Fair Wind Strait - Flintlock Falls - Gulf Of The Sunken Fleet - Gunpowder Port - Hurricane Sands - Isle Of Cries - Isle Of The Abandoned Quartermaster - Jagged Doubloon - Keelhaul Coast - Kraken's Lair - Last Words Cavern - Leviathan's Maw - Lost Cove - Macaw Island - Marauder’s Hideout - Maroon Island - Monsoon Retreat - Mutineers’ Trove - No Tale Island - Old Salt Inn - Parley Island - Pelican Graveyard - Pirate's Grotto - Raider's Refuge - Red Coral Reef - Ruby Sands Haven - Rumrunner's Anchorage - Salty Anchor - Sanguine Reef - Sea Of Sorrow - Seaweed Bay - Shark's Nest - Shipwreck Cay - Siren's Call - Skull Cove - Spider Cavern - Stormweather Enclave - Shore Of Sunken Ships - Skeleton Of The Unknown Scallywag - Smuggler's Tavern - Swashbuckler’s Sanctuary - The Beached Galleon - The Broken Mast - The Golden Pearl - Thunder Island - Tortoise Shell Port - Treasure Of The Sunken Armada Adding text also gives you an opportunity to further customise your map if you're making it as a gift for someone. You can use their name and local place names that they know, potentially with a pirate twist to them. 💡 Change the font and names as needed for fantasy maps, sci-fi maps, etc. ## Physical Wear & Tear If you decide to print out your map, you can add further wear and tear to make it even more realistic. Tear and/or carefully burn the edges of your map, and sponge a mixture of coffee and tea on it ([tutorial](https://www.natgeokids.com/uk/home-is-good/how-to-make-treasure-map/?ref=keheka.com)). You can even coat it with a thin layer of cooking oil and let it dry to make it feel more authentic. Roll it up and put a ribbon on it, or frame it, and you’re good to go! I hope you found this tutorial useful. For more Nuke tips & tricks, see [Nuke](https://www.keheka.com/tag/nuke/). [Sign up for the newsletter!](https://www.keheka.com/#/portal/signup) ### Snapping Cards To A Position Pass In Nuke URL: https://www.keheka.com/snapping-cards-to-a-position-pass-in-nuke/ Last updated: 2023-11-18T10:33:12.000Z *A very useful technique for quickly and accurately placing Cards around in a 3D scene…* I recently saw [this video](https://youtu.be/YC2IHoRBBBQ?feature=shared&ref=keheka.com) by Arvid Schneider which reminded me of a very useful technique I would like to share for easily positioning Cards around in a scene. Just by colour picking the world position pass of the CG render, you can snap Cards into place exactly where you want them in 3D space. 💡 This can save you a **lot* of time and headache when placing many Cards in a scene, for example when adding crowds, fire, or smoke elements into a large environment. Colour picking a position pass to move a Card into place. Let's take a look at how it works. ## World Position Pass A world position pass is just the X, Y, and Z coordinates of objects in the scene in relation to the scene's origin – given for each pixel in the image – in the R, G, and B channels, respectively. Which means, for every pixel you have the exact position in 3D space for the object in that pixel. And so if you want to place a Card at a specific point in space, for example against a wall in your CG render, you can simply copy the RGB values at a pixel in that area of the position pass and paste them into the *Translate* XYZ values of the Card. The Card will then snap to exactly that position in 3D space. 💡 You'll have to rotate the Card to the angle you want, and scale it to a practical size, but it will be at the correct depth. We can make this process super simple: ## Colour Picking The Position First we need a node with a colour picker knob. You can use any node you want that has a colour picker already – like for example an Add node – or you can make your own: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/11/Setup_1.png) Create a NoOp node and right-click its properties → *Manage User Knobs*. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/11/Setup_2.png) Click the *Add* dropdown menu and select *RGB Color Knob*. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/11/Setup_3.png) Name and label the knob something meaningful, for example *pickPos* and *Pick Position*. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/11/Setup_4.png) Hit *OK* and you will have created a NoOp node with a colour picker knob. Next, create a Card and then expression link the colour picker's RGB values to the Card's *Translate* XYZ values: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/11/Setup_5.png) Create a Card and right-click on the animation menu next to Translate → *Edit expressions*. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/11/Setup_6.png) Add the expression: *NoOp1.pickPos* into all three x, y, and z expressions. (Replace *NoOp1* with your node’s name, and *pickPos* with your colour picker’s knob name). ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/11/Setup_7.png) Hit *OK* and you should now have expression-linked the colour picker to the Card. Change the values in the colour picker to make sure the ones in the Card also change and match up. Now you can view the world position pass in the Viewer, colour pick the area you want to move the Card to, and then the Card will snap into place. Then, just adjust the rotation and scale of the Card to fit your needs. You can copy/paste the setup as many times as you need, and colour pick each Card into place. Quick and easy! 💡 [CardBuddy](https://www.hiramgifford.com/buddy-system/cardbuddy?ref=keheka.com) is a useful tool that has the colour pick → snap functionality built into it, as well as a host of other options. I hope you found this tutorial useful. For more Nuke tips & tricks, see [Nuke](https://www.keheka.com/tag/nuke/). [Sign up for the newsletter!](https://www.keheka.com/#/portal/signup) ### How To Make A Slapcomp In Nuke URL: https://www.keheka.com/how-to-make-a-slapcomp-in-nuke/ Last updated: 2025-12-05T20:55:14.000Z *A guide for building a basic slapcomp in Nuke: How to get the fundamentals right and avoid problems later on…* ## Who This Guide Is For This guide is intended for the **lighters** and **FX artists** out there, who are perhaps not so familiar with using Nuke. That said, it also applies to **junior compositors** who want to learn a basic approach for building CG + live-action composites. ## What We'll Make In this guide, we'll build **three simple setups** in Nuke for making lighting/FX slapcomps: 1. A setup for **full-CG shots**. 1. A setup for shots in which the **scan goes on top of the CG**. E.g. when you're replacing the background in the shot. 1. A setup for shots in which the **CG goes on top of the scan**. E.g. when you're inserting a CG object into the scan. And while building these setups, we'll look at best practices as well as pitfalls to avoid along the way. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/11/Setup_01_Full_CG.png) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/11/Setup_02_Plate_Over_CG.png) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/12/Setup_03_CG_Over_Plate_02.png) *The setups we'll be building.* ❗ A quick disclaimer before we begin: While this guide should be applicable to most, check with your specific company what the standard practice is for building slapcomps, as it may differ. Let's get into it. ## Building The Slapcomps Each setup is super simple, and we’ll build them in the order above. ### Making A Nuke Script First, make a fresh Nuke script and save it under your relevant shot directory. Most studio pipelines will have automation in place for opening and saving scripts, so this will vary between different companies. The important thing is to save your script under the correct shot, and give it a sensible name, such as: **\[project\]\_\[sequence\]\_\[shot\]\_lighting\_slapcomp\_v001.nk**. ### Importing All The Elements Next, import all the relevant files that you will need into this Nuke script: - The scan (and any retime or extraction associated with the scan). - The CG beauty render(s) and all the CG render passes. - The lens distortion node for your shot camera. - Any roto available for the shot. - Any prep available for the shot. Again, this process will be different depending on which company you work at. Many have their own, custom importers. The basic way of importing your elements is to click on an empty area in the Node Graph in Nuke and press **R** (for Read) to bring up the file browser. Navigate to, and select the files you want to import and then click *Open*. 💡 If you are importing image sequences, make sure to tick the checkbox labelled **sequences* in the browser window, otherwise Nuke will bring in individual frames. Once you have everything you need in the Nuke script, you can start making the slapcomps. We’ll build each section of the three setups, one step at a time. ## The Full-CG Setup ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/11/Setup_01_Full_CG-1.png) *The Full-CG setup.* You’ll have noticed when comparing the three setups introduced before, that a large portion remains the same between each setup. Everything we will build for the full-CG setup, we’ll also be using for the other two setups, so let’s start with these shared nodes: ### Backdrop: CG Render Typically, you'll have imported an EXR image sequence which has the beauty render in the RGBA channels and all the render passes embedded as additional layers. Place that render in this backdrop. If you instead have imported the render passes as individual image sequences, you would only put the beauty render here. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/11/Backdrop_CG_Render.png) *Starting with the CG render.* ### Backdrop: Reformat Often, you’ll be rendering your CG with a lower resolution than the full-size project format, in order to save time. Especially for WIP renders early on in the project. And so, in order to make sure everything lines up as expected in the slapcomp, add a Reformat node after your CG render, and set the *output format* to the full-size project format. 💡 Cryptomattes can break due to filtering issues when reformatted. So if you need them for your slapcomp, make sure to shuffle them out and reformat them in a separate branch, using the **impulse* filter in the Reformat node. Alternatively, you can connect the Cryptomatte node directly to the CG render, create your matte, and then reformat that using the normal **cubic* filter (or whichever filter you used for the other reformat). ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/11/Backdrop_Reformat.png) *Reformatting the CG render to the full-size project format, in this example UHD\_4K.* ### Backdrop: Adjust Render Passes Individually Next, make any changes intended for the individual render pass contributions. 💡 If you've had enough time to get the look right in CG, you shouldn't need to make any major adjustments. There are two ways of doing this: 1. **The additive method**, which involves shuffling out all of the render passes and combining them together in a full beauty rebuild. 1. **The subtractive method**, where you only shuffle out the render pass that you want to change. The first method would need [a whole other tutorial](https://www.keheka.com/professional-cg-compositing-in-nuke/) as the setup gets much more complex (and you shouldn’t need it for a slapcomp, anyway), and so we’re going to use the second method. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/11/Backdrop_Adjust_Render_Passes_Individually.png) *Adjusting the render passes individually.* ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/11/Shuffle_Settings.png) *Shuffling the Light\_Group\_01 into RGB and setting the alpha to black.* 1. Using a Shuffle node branched off from the main pipe, shuffle the render pass that you would like to adjust into the RGB channels. (In this example, Light\_Group\_01). 1. In the same Shuffle node, set the **alpha to black** to avoid any alpha issues. 1. Then, Merge (from) the shuffled out render pass (A) with the beauty (B). In the main pipe, you will now have removed the contribution of that specific render pass from the beauty. 1. Branching out again, grade the shuffled out render pass in a new pipe, and Merge (plus) the graded result (A) with the output of the Merge (from) node in the main pipe (B). Now, you will have reintroduced the contribution of the render pass to the beauty, including any changes you have made to the pass. You can change the colour of the render pass’ contribution, or make it brighter or darker. And you can even stencil out sections of it that don’t work too well. 💡 If you have a separate image sequence for each render pass, you would use that instead of the Shuffle node – just remember to reformat it as needed: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/11/Render_Pass_Image_Sequence-1.png) *Using a separately rendered image sequence instead of shuffling out the pass.* Ok so that was one render pass contribution taken care of. If you would like to adjust others, copy and paste this little setup as many times as you need. For each copy, change which render pass is being shuffled out in the Shuffle node and the adjustments made for it, and daisy chain the copy below the first one in the main pipe. ### 💡 Multiple Renders If you have multiple CG renders, for example foreground, midground, and background, you would just copy everything above, swap in the other renders, and merge them all using Merge (over) nodes: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/11/FG_MG_BG_Renders.png) *Merging three CG renders.* Or, if you have Deep renders, you would merge them using DeepMerge (combine) nodes: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/11/FG_MG_BG_Deep_Renders.png) *Merging three Deep renders.* Reformat your Deep renders to the full-size project format using DeepReformat nodes. Then, connect DeepRecolor nodes between the output of the DeepReformat and the output of the backdrop where you adjust the render passes individually. DeepMerge (combine) all the DeepRecolor nodes together, and finally add a DeepToImage node to bring it all back to 2D. ### Backdrop: Grade Overall Once you've adjusted the render pass contributions to taste, you can do any overall grading adjustments to the CG. This will usually be pretty minimal, like correcting exposure and setting the black levels. (Depending on the standard practices at your company, you may potentially skip adjusting the black levels completely). 💡 If there are any flickering lights in the scan that the CG should be matching to in 2D, that will usually be [handled later in comp](https://www.keheka.com/add-or-remove-flickering-in-nuke/) and not in the slapcomp. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/11/Backdrop_Grade_Overall.png) *Grading the CG overall.* Make sure to unpremultiply the CG before applying any grading, and premultiply it after. That way, you avoid nasty outlines around the edges of your CG. To set the black point, first increase the Viewer Gain to be able to see the darkest areas of your CG and the scan. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/11/Increase_Viewer_Gain-1.png) *At the top of the Viewer, increase the Viewer Gain.* Then, in the Grade node, colour pick the **darkest part of your CG** for the *blackpoint* value: Enable the colour picker next to the *blackpoint* value, and press Ctrl/Cmd + Alt + Shift and left-click-and-drag over the darkest area of the CG in the Viewer to sample the black level. Next, in the same Grade node, colour pick the **darkest part of the scan** for the *lift* value using the same method. You may have to try colour picking a few times, or manually adjust the values to get them just right for the CG to sit in nicely. 💡 Any grading you do to the CG, either overall or to the individual render passes, is only meant to compliment your work. If you’re having to make extreme changes, it’s probably better to go back to 3D and try to address those issues there first. ### Backdrop: Lens Distortion It’s very important to apply the correct lens distortion to your CG. Without it, your CG may no longer line up with the scan, and the tracking may look like it’s sliding. Applying lens distortion will also indicate whether or not you have rendered the CG with enough overscan. If you see black or stretched pixels being pulled in at the edges of the frame, it usually means that you don’t have enough overscan to cover the lens distortion. So always remember to apply lens distortion. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/11/Backdrop_Lens_Distortion.png) *Adding lens distortion to the CG render.* You may be used to working with the undistortedscan in for example Maya or Houdini, but that will almost never be used in the comp in Nuke. That's because undistorting and then redistorting the scan will soften details and ruin the grain. So you’ll want to apply lens distortion to your CG only, and leave the original scan as it is. That means, don’t use the undistorted scan, merging the CG over it, and distorting everything at the end in your slapcomp. That is not how it will be composited. And we want to be looking at the same thing between departments – a 1:1 comparison. Removing variables will help to identify the origin of any potential issues. 💡 Just on that topic, a slapcomp is there for checking that the CG and scan are working together, both creatively and technically. And later on, it can be used as a reference to compare with the comp. If there for example is heavy render noise in the comp which was not present in the slapcomp, something in the comp is likely amplifying the noise. And so it’s worth checking if that issue can be fixed in comp first, before going back and re-rendering the CG with higher samples. So, unless you’re reprojecting the scan in some way, avoid using the undistorted scan in your slapcomp. Build the slapcomp similarly to how the compositor will composite the shot so that you are both on the same page. And other than the lens distortion, there is no need to apply any lens effects to the slapcomp. Avoid adding lens flare, vignetting, chromatic aberration, field curvature, and so on. I.e. don’t hide anything behind lens effects (the comper will do that). The supervisor just wants to see how the CG looks and works in the shot, and it’s easier to spot issues when there is nothing covering up the CG. ### 💡 Focus Unless the focus(/bokeh) or the motion blur of the CG is a specific feature in the shot, a slapcomp will typically be rendered with sharp CG. That way, the supervisor can see the CG more clearly and get a good idea of how it fits into the shot. (I.e. nothing is being hidden in the defocus). And so there is usually no need to add defocus or 2D motion blur to the CG for the slapcomp. (But make sure to check with your supervisor what the expectations are in your specific company). If you need to add depth of field, you can do that using the [Bokeh](https://youtu.be/E1iXIJJnSwY?feature=shared&ref=keheka.com) node or the [ZDefocus](https://learn.foundry.com/nuke/content/comp%5Fenvironment/filters/applying%5Fblurs.html?ref=keheka.com#Simulating%5FDepth-of-Field%5FBlurring) node. And if you need to add 2D motion blur, you can do that using the [VectorBlur](https://learn.foundry.com/nuke/content/comp%5Fenvironment/3d%5Fcompositing/adding%5Fmotion%5Fblur%5Fvectorblur.html?ref=keheka.com) node. ### Backdrop: File Out It's good practice to crop the bounding box and remove any superfluous channels before rendering out your slapcomp. By doing this, you will save render time and disk space, and it will be quicker to buffer and play your slapcomp during the review. Apply a Crop node set to the project format, and a Remove node set to keep only the RGB channels. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/11/Backdrop_File_Out.png) *Rendering out the slapcomp.* Again, depending on the company you’re at, there may be automation in place for writing out image sequences. If not, add a normal Write node, and choose your shot directory and filename/filetype sensibly like before. That’s the full-CG setup completed. And we’ll be using all of the above in the other two setups – we’ll just be adding extra bits to them. ## The Scan-Over-CG Setup ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/11/Setup_02_Plate_Over_CG-1.png) *The Scan-Over-CG setup.* For this setup, start by copying everything you did for the full-CG setup. Next up, let’s get your scan in there. ### Backdrop: Scan Or Prep Grab your scan, or the prep plate if you have one, and make sure that any retime and/or extractions have been applied. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/11/Backdrop_Scan_Or_Prep.png) *The scan or prep, with any retime and extractions applied.* ### Backdrop: Roto Or Key Next, copy in the matte for the scan and premultiply. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/11/Backdrop_Roto_Or_Key.png) *Copying the matte to the scan and premultiplying.* If you have roto available for the shot, you’d put that here in place of the Roto node. If not, either create your own rough roto or key depending on the shot, and copy the alpha (A) to the scan (B) using a Copy node, before premultiplying using a Premult node. If the scan has heavy spill and you would like to reduce it, you can also add any despill node available to you just before the Copy node in the B-pipe. For a quick despill, you can for example use a Keylight node, and put a value of 1 into either the green or blue part of the *Screen Colour* knob: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/11/Despill.png) *Using a Keylight node to despill the scan.* ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/11/Keylight.png) *The Keylight settings for despilling: Only the Screen Colour has been changed from the default value, in this case the green value has been set to 1 (to despill the green spill).* If you don’t have roto for the shot, you can make a simple, rough mask yourself using the Roto node. Create a Bezier shape around your subject/object and animate it over the length of the shot ([tutorial](https://youtu.be/ELg9ncl-0Wo?feature=shared&ref=keheka.com)). It doesn't have to be very accurate, just enough to get the idea of how the scan will look over the CG. If you need to make your own quick and dirty key, I would recommend using the Primatte node ([tutorial](https://learn.foundry.com/nuke/content/comp%5Fenvironment/keying%5Fwith%5Fprimatte/keying%5Fprimatte.html?ref=keheka.com)). It’s very easy to pull a key good enough for a slapcomp using this node. You just have to colour pick some areas of your green/blue screen as well as the foreground, across a few frames. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/11/Key.png) *Using a Primatte node to extract a key.* ### Backdrop: Merge Finally, using a Merge (over) simply merge the premultiplied scan (A) over the CG (B). ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/11/Backdrop_Merge.png) *Merging the scan over the CG.* ## The CG-Over-Scan Setup ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2025/12/Setup_03_CG_Over_Plate_02-1.png) *The CG-Over-Scan setup.* For this final setup: 1. Copy all of the second setup. 1. Swap the A and B inputs in the Merge node in the *Merge* backdrop. 1. Rearrange the *Roto Or Key* backdrop like in the picture above. If there are any foreground subjects or objects passing in front of the CG, you can roto/key them and put them back over the CG with a Merge (see the Holdout backdrop). 1. For more specific use cases: Add the backdrops listed below. 💡 For a slapcomp, a rough garbage matte is plenty good enough. If you have roto for the foreground, however, you would use that in place of the Roto node. ### Backdrop: CG Reflections Sometimes you’ll have a separate reflection pass, for example if there is a mirror or a window in the scan that needs to reflect the CG. Make sure to to reformat and add lens distortion to the CG reflections render, and then Merge (plus) it (A) over the scan (B): ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/11/Backdrop_Reflections-1.png) *Adding reflections to the scan.* 💡 You can add a Grade node to the CG reflections render in order to control the brightness of the reflections (make sure to un-/premult the grade by the alpha), or simply mix back the Merge node. ### Backdrop: CG Shadows Sometimes you’ll have a shadow matte pass, for example if there is a CG vehicle driving along a road in the scan. Again, make sure to to reformat and add lens distortion to the CG shadow matte render, and then use it as a mask for a Grade node to grade down the scan: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/11/Backdrop_Shadows-1.png) *Adding shadows to the scan.* 💡 You can also add a Grade node to the CG shadows render in order to adjust the matte. If the matte has been rendered in the RGB channels, you can change the mask input in the first Grade node to one of the RGB channels instead of the default alpha channel: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/11/Shadow_Grade-1.png) *Using the red channel as a mask for grading the shadows.* And that’s it, you’ve built all three setups. 💡 The CG-Over-Scan setup also applies if you have a full-CG shot with a DMP sky, for example. You would just put the DMP in place of the scan, and apply the lens distortion after the Merge node. That way, you can apply lens distortion to both the CG and the DMP in one go, and not have to copy the lens distortion node multiple times in your script. If a CG render is being reused across a sequence of shots, you would normally only make a slapcomp for the hero shot. The compositor(s) would then [re-project the CG render](https://www.keheka.com/re-using-cg-renders-across-a-sequence/) in the other shots. ## Bonus Tip Although you should re-render any missing or broken frames, you can replace them in Nuke – in a pinch. With the help of a tool such as [FrameFiller](https://www.nukepedia.com/gizmos/time/framefiller?ref=keheka.com), you can generate missing/broken frames using the surrounding frames. 💡 Any 2D frame replacements like this should be seen as a temporary solution only. It will soften the new frame and can introduce artefacts. I hope you found this tutorial useful. For more Nuke tips & tricks, see [Nuke](https://www.keheka.com/tag/nuke/). [Sign up for the newsletter!](https://www.keheka.com/#/portal/signup) ### Matching The Dynamic Range Of A Scan In Nuke URL: https://www.keheka.com/matching-the-dynamic-range-of-a-scan-in-nuke/ Last updated: 2023-10-27T19:51:03.000Z *Expand or compress the luminance values of your elements to match the dynamic range of the scan…* In order for a composite to look photo realistic and seamless, it has to give the impression that all of the various elements which are composited together were filmed at the same time by the same camera. And to do that, the various elements – such as CG, DMP, FX, patches, etc. – all have to match the scan’s dynamic range. Let's take a look at what that means. A dynamic range simply describes the ratio between the maximum and minimum value of something. That something can be a signal, like sound – or light (i.e. brightness): ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/10/Min_Max-1.jpg) Dynamic range in terms of luminance values. - A sunny outdoor scene will have a huge contrast between the brightest light and the darkest shadow: a high dynamic range. - An indoor scene lit by overcast daylight will have a much more mellow light in comparison. There will be less of a difference between the brightest and darkest areas: a medium dynamic range. - An outdoor nighttime scene of a dark field lit by faint starlight, on the other hand, will have very little contrast: a low dynamic range. The examples above are all *source* dynamic ranges. And rarely can an entire source dynamic range be captured in full. Let's say that you shoot some footage with your camera. By the time you see the footage on your computer, the original light that was captured in the scene has already gone through multiple 'funnels' which narrowed down its dynamic range: ## Scene → Sensor The light first travelled from the scene, through the lens, and to the camera's sensor. And a sensor is only sensitive to a certain range of light. In photography, dynamic range describes the span between the brightest white and the darkest black that the sensor in a camera can capture. Above or below these extremes, the pixel values in the captured picture get clamped and we lose image detail. That is, the highlights are blown out and the shadows are crushed. So already, the source dynamic range of the scene is being reduced down to the limits of the sensor. But that's not all: ## Sensor → Image Format How those pixels are stored also impacts the dynamic range of the picture. By capturing footage to a RAW image format, you can retain a wide dynamic range in your pictures. But if you capture (or later convert) the footage to a low dynamic range image format, such as JPEG, there just won’t be nearly as much colour information and nuance left in your image, in comparison. For example, if you decrease the Viewer Gain in Nuke when looking at footage with a low dynamic range, you'll see that the highlights start to clip pretty quickly. The sun, or any sufficiently bright lights, will max out at a certain value, and the hottest areas will look flat and featureless. Let's take for instance the picture below and expose it down. If it had a high dynamic range, you would expect to see a small, hot core where the sun is, and more detail in the sun’s reflection in the water. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/10/Sunset.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/10/Sunset_Exposed_Down.jpg) A JPEG image with a low dynamic range, before and after being graded down. Instead, we can see that the sky and the sun's reflections are being clamped. For example, the large sun bloom is capping out at the maximum value in the image, and we don’t see the actual sun. The pixel values should be much higher where the sun is, but they are being limited within a narrow dynamic range. In this case, the image is being clamped to values between 0 to 1, and most of the sky is at or near 1\. If you instead were to *increase* the Viewer Gain, you’d see less detail in the *shadow* areas of the low dynamic range image – compared to one with a higher dynamic range. That’s because images with a higher dynamic range contain a lot more information to work with, and you can push and pull the grading much more without breaking the image. For example, at first glance, there doesn’t appear to be much information in the shadows of this RAW image: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/10/RAW.jpg) A landscape captured with a camera which has a high dynamic range. However, when grading up the shadows, we can see that a ton of detail was actually captured: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/10/Graded_Up.jpg) The shadows in the RAW image graded up to reveal a lot of detail. So, to retain a high dynamic range, you have to be using high fidelity image formats, for example 16-bit EXR – for both the input and the output images in the composite. 💡 Which means, software settings also have a big impact on dynamic range. Nuke is natively working in 32-bit which is plenty, but Photoshop or After Effects' 8-bit modes won't cut it for preserving a high dynamic range. You'd have to switch to the 16-bit modes. And the buck doesn't stop there. ## Image Format → Display Most of us don't have HDR computer monitors. And when you're working on a shot on an SDR monitor (Standard Dynamic Range, i.e. a normal, non-HDR monitor), you're only seeing an approximation of the shot's dynamic range. So it’s very important to gain up and down the Viewer in Nuke to make sure that you are matching the dynamic range of the scan you're working with. This is especially significant if you are delivering work for an HDR project, but it applies to really any compositing work. A flat and clamped – or overly bright – element will really stick out in your composite when displayed on high dynamic range equipment. 💡 Matte paintings quite often lack dynamic range. The DMP artist will often source JPEG images for the matte painting which makes it flatter than the scan it will be composited into, unless they specifically paint in higher values. And so if you for example download a JPEG image from Google and composite it into a scan with a wide dynamic range, you will likely have to adjust the values in the image for it to fit in properly. More on that later. ## Nits & F-Stops The luminance of the things we can see is measured in units called candelas/square metre (cd/m2) – more commonly known as *nits*. An iPhone 15 has a typical max brightness of 1,000 nits, for example. And the greater the difference between the maximum and minimum brightness, the greater the dynamic range. The real world has an extremely large dynamic range. At the low end, starlight can be as low as 0.000001 nit, while the sun emits over 1 billion nits. That's a 1015:1 contrast ratio, or about 50 stops of dynamic range: —In photographic terms, dynamic range is measured in f-stops – which marks the lens’ aperture, or the amount of light that’s entering the camera. An increase of 1 stop equals a doubling of the amount of light. And each further increase of 1 stop is another doubling of the amount of light. So an increase of 2 stops would equal 4 times the original amount of light, an increase of 3 stops would equal 8 times the original amount of light, and so on. (And vice versa, 1 stop down equals a halving of the light). 10 stops of dynamic range therefore equals about a 1,000:1 contrast ratio between the brightest and darkest values (210:1 = 1,024:1, to be exact). Modern cinema cameras can reproduce over a dozen stops of dynamic range. For example, the [RED V-RAPTOR XL](https://www.red.com/v-raptor-xl?ref=keheka.com) has 16.5+ stops of dynamic range, or a 90,000+:1 contrast ratio. And so, although we can't capture the full dynamic range of the real world quite yet, the footage we get out of these cameras does have a wide dynamic range. 💡 Even if we **could* capture and display the entire dynamic range of the real world, then our eyes would be the limiting factor when watching the footage. We are able to see a very wide dynamic range, but not all at once. Instead, we shift our range of sensitivity to light depending on the brightness of our surroundings. And when you're working with footage which has a wide dynamic range, viewing that footage in Nuke poses a problem: ## Viewer Limits On a typical SDR monitor, values above 1 don't look any different to a value of 1\. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/10/White_Constants-1.jpg) Wiping between two Constants with values of 1 and 10\. And also, values below 0 don't look any different to a value of 0\. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/10/Black_Constants.jpg) Wiping between two Constants with values of 0 and -10\. And so outside of the 0-1 luminance range, you're working sort of 'blindly' at the default Viewer exposure. However, we can adjust the Viewer exposure to be able to take a closer look at these values: ## Highlights The images we composite commonly have pixel values well above 1\. And as mentioned above, when you composite renders or elements with your plate you should match its dynamic range. When it comes to the highlights, gain down the Viewer to check that your composite is balanced. If you're doing an iPad screen replacement, for example, the screen shouldn't be brighter than the sun. And a roaring fire wouldn't be duller than a street lamp, either. Sample the brightest values of the scan with Ctrl/Cmd + Alt + Shift + Left-click-and-drag in the Viewer, and check what sort of values you should be matching to for your specular highlights and bright lights. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/10/Viewer_Sampler.png) Sampling colour values. Let's say that you are augmenting a fire by adding more CG or element plate flames to it. And the brightest part of the fire in the scan is for example maxing out at a value of around 54\. If so, you should aim to match that top end in your additional fire. It could have max values quite far above or below what's in the scan, and so you may have to grade up or down the additional flames, as needed. Using a Grade node (Un-/Premult as needed), multiply the fire up or down until its brightest values match up with the brightest values in the scan. You may have to mask the Grade by a luma key in order to only brighten up the core of the additional flames. That way you don't over-brighten the whole fire. It may even help to do multiple grades, with tighter and tighter luma keys as masks, in order to build up a more realistic hot core in the fire. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/10/Luma_Key_Grade.png) Grading up the core of a fire element. If you're compositing something which will be the brightest thing in the shot, and there isn't anything very bright in the scan, you can look at other shots in the sequence for reference. Check which values other, similar scans clip at, and use that as your maximum. Very often, it will be in the 50s or below. So if your CG fire has values up in the hundreds, or thousands, that should throw a red flag. But avoid just clamping the values in your fire element. Instead, grade them down. You can also compress the element's dynamic range using a soft rolloff tool, like this one (copy/paste the code into your Node Graph): ``` set cut_paste_input [stack 0] version 13.2 v2 push $cut_paste_input Expression { expr0 "limit * (1 - exp(-r/limit))" expr1 "limit * (1 - exp(-g/limit))" expr2 "limit * (1 - exp(-b/limit))" name Soft_Rolloff tile_color 0xff3fff note_font_size 12 selected true xpos -171 ypos -212 addUserKnob {20 User l Limit} addUserKnob {7 limit l "Limit at" R 1 17} limit 13.5 } ``` Adjust the *limit* knob to roll off the highlights and compress the dynamic range of your image (in a nicer way than how the SoftClip node does it). 💡 If you need to tone down the highlights of an element, a great technique to use is [Grade Stacking](https://www.keheka.com/grade-stacking/). In addition to the luminance values, also make sure that the colours of the highlights are matching up. Check your white point and match any tint there is in the scan. ## Shadows On the other end of the luminance spectrum, we've got the shadows. And we’re often even more sensitive to mismatches in the darker areas of a composite than in the very bright. So it’s important to grade the black levels of your elements to match up with the scan. Gain up the Viewer and lift your elements to fit the values in the scan: 💡 You can press Ctrl/Cmd + Shift and left-click-and-drag the colour wheel for the **lift* in the Grade node. This will quickly raise or lower the luminance values, while keeping the hue and saturation intact. See [Secrets Of The Grade Node In Nuke](https://www.keheka.com/secrets-of-the-grade-node/). If the scan that you received from the client contains negative values, you should keep them (i.e. don’t clamp them to 0), and deliver the comp back with the same range as the scan. And adjusting the black levels should be the last thing you do in the grading stack. Because it's very easy to mess them up by adding further grading downstream. When you’re brightening up the shadow areas of a scan, you usually have to be quite delicate. Grading up the dark areas too much can make the image look over-processed, and result in halos around parts of the image where the dark tones bleed into the light tones. ### Lift Vs Toe Increasing the *lift*/*offset* value in a Grade/ColorCorrect node raises the values in the entire image. And while it's mostly noticeable in the dark areas, it can sometimes affect areas you don't want to change. If so, you can use the Toe node instead. It's like a lift/offset, but restricted to only affect the darks. It's for example great for integrating CG renders into areas of the scan which have clamped black levels. ## Midtones With the highlights and shadows in place, you’ll have matched each end of the dynamic range of your scan – but let's not forget the midtones of the image. By altering the midtones, you can quite significantly change the look and feel of your shot. Some footage will have a more hazy look, where the gamma is biassed toward the upper end. Others will have a more crunchy, contrasty look, where the gamma is biassed toward the lower end. The former can be great for creating the look of a warm, hazy summer day, while the latter can be used for creating a more dramatic atmosphere, for example. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/10/Haze.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/10/Contrast-1.jpg) Lifted gamma versus more crunched gamma. Adjust the midtones by changing the *gamma* knob in the Grade node. Keep in mind that when you adjust the gamma, you’re also affecting the saturation. Which means that you may have to compensate by using a Saturation node. When you lower the gamma, you increase the saturation of the image. And when you boost the gamma, you reduce the saturation of the image. Using a Saturation node, you can counter this shift as needed. If your shot feels too lifted/flat or too crunchy after matching the white and black points, then adjust your midtones to compensate. ## Exposure While we've talked a lot about all of these things regarding dynamic range, it’s also important to keep exposure in mind when you composite your shots. A piece of footage can have a high dynamic range, but it will usually only be exposed for a section of that range. Meaning, parts of the frame will fall comfortably into our view, while others will be too bright, or too dark for us to see what’s going on there. With high dynamic range footage, you can grade those bright and dark areas away from being overexposed and underexposed, and bring them into the exposed range (also known as tone mapping). However, like mentioned above, you’ll have to be careful to not make the image look over-processed. Let’s for example take an interior scene of a living room that has windows with a view of the outside. By exposing for the interior, the exterior (which is much brighter) will typically be overexposed in the footage: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/10/Living_Room.jpg) When exposing for the interior, we can often barely see anything outside. A high-quality cinema camera would be able to capture detail in both the interior and exterior with its high dynamic range. And you could grade down the exterior in comp to be able to see more outside of the windows. But generally, the outside would be overexposed in a realistic image. Let’s instead say the living room was on a set, and the view outside the windows was just a blue screen. To make the composite look realistic, you would likely have to overexpose the footage that you composite into the exterior to match what it would have looked like had you filmed it exposed for the interior. 💡 When you take a picture with your phone, your phone camera may do an HDR capture. Essentially, the phone will take multiple pictures at different exposures, and then merge them together into one image. This image is then exposed for different things at the same time. For example, for both the inside of your living room and for what’s outside of the living room windows. The same multi-photo technique can be used to capture a dynamic range beyond a camera’s native dynamic range – which is the basis for on-set HDRI capture. ## Advanced Grading Tools Below is a couple of useful grading tools with additional functionality beyond the standard Grade or ColorCorrect nodes: - [LUE](https://www.nukepedia.com/gizmos/colour/lue-grading-for-nuke?ref=keheka.com) (Python 3 version in the comments) - [LightRoom4Nuke](https://www.nukeisfun.com/post/lightroom4nuke-all-the-functions-you-love-now-in-nuke?ref=keheka.com) 💡 [Further reading about HDR](https://www.projectorcentral.com/HDR-From-A-to-Z.htm?ref=keheka.com). I hope you found this tutorial useful. For more Nuke tips & tricks, see [Nuke](https://www.keheka.com/tag/nuke/). [Sign up for the newsletter!](https://www.keheka.com/#/portal/signup) ### Professional Keying In Nuke URL: https://www.keheka.com/professional-keying-in-nuke/ Last updated: 2025-11-25T17:25:57.000Z ⭐ A deep dive into best practices for elevating your keying skills to a professional level in Nuke… _This post is for paying subscribers only._ ### The Sphere Of Knowledge URL: https://www.keheka.com/the-sphere-of-knowledge/ Last updated: 2023-08-24T12:49:44.000Z *How to innovate through hyper-specialisation…* Imagine for a moment a giant sphere that represents all of our collective human knowledge. Everything we know resides within its volume, and each sector of the sphere (a small 3D pizza slice, if you will) constitutes one area of knowledge. For example, our understanding of solar panels, skincare, or rotoscoping. At the dead centre of the sphere lies complete ignorance. And as we climb towards the surface, we ascend through the layers of accumulated and discovered knowledge. At the outer surface of the sphere we find the most specialised and state-of-the-art knowledge we currently have available. And outside of the sphere lies all yet undiscovered knowledge. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/08/Sphere_Of_Knowledge_AI.png) An AI-generated visual interpretation of the sphere of knowledge. As you learn (more) about a subject, you forge pathways and climb out through the dense layers of the sphere. 💡 By passing on what you have learned, you help clear the path and make it easier for those behind you journeying in the same direction. And when you make discoveries and innovate in a field, you expand the sphere in that sector. You push the frontier of knowledge a step further away from ignorance. Zoom in on an individual level, and you'll see that we all have our own, unique sphere of knowledge. Let's say you're a jack-of-all-trades, for example. Your sphere might look fairly evenly round, albeit with a small to medium radius. If you're more of a specialist in your field, however, your sphere might look more lopsided, reaching further out in certain sectors than others: ## A Particular Set Of Skills About a year ago, I sort of jokingly drew this picture: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/08/SphereOfKnowledge.png) I have a very particular set of skills. I made that drawing for a bunch of friends in a WhatsApp group chat, who all used to work at the same VFX company. The observation seemed to resonate with the group, and I think the reason it’s funny is because it's true. My, and their, knowledge of Nuke and compositing is disproportionately greater compared to our knowledge of many other fields. – Because we have spent over a decade working in the VFX industry practising those skills. Reflecting on that, I think as society advances – and more and more of people's basic needs are met – there is a natural increase in specialisation. For example, I have no idea how to make a BLT sandwich – *from* *scratch*. As in, growing and harvesting the wheat, milling it to make flour for the bread, farming the lettuce and tomatoes, raising pigs, and so on. There are professionals dedicated to each of those tasks. And they have become so efficient that only a relatively small number of people are needed to create food for the entire population. Just like how only a relatively small number of artists are creating entertainment for everyone. Everybody doesn't have to farm or hunt their own food anymore (or make their own clothes, manually wash them, and so on and so forth) – for a very long time now. And that has opened up opportunities for working on other things. Over time, that means that we’ve been able to hyper-specialise in our fields of choice. We've started to poke at the outer edges of the sphere of knowledge, and we've pushed through the membrane in many places. Which has led to great progress in those fields. But as more and more people have blazed a trail to the surface of the sphere of knowledge and beyond, an interesting side effect has emerged: ## Bridging The Canyons With the increase in specialisation, you can imagine there are now these towering pillars of knowledge rising up from the centre of the sphere. And in between them, there are deep canyons in the adjacent fields which have not yet been explored or meaningfully connected. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/08/Pillars_Of_Knowledge_AI.png) An AI-generated visual interpretation of the pillars of knowledge. The [wheeled suitcase](https://edition.cnn.com/2010/TRAVEL/10/04/wheeled.luggage.anniversary/index.html?ref=keheka.com) wasn't invented (or at least made available to the masses) until after the moon landing, for example. And it didn't take the shape we know today (standing on its side, with retractable handles) until the late '80s. People used to literally lug their heavy luggage around, not even that long ago. – Yet, long after both the wheel and the suitcase had been invented. However, the canyon between wheels and suitcases was fortunately bridged, and the result has now become the standard for travelling. Similarly, there are very likely advances in the fields of for example physics or AI that would be tremendously beneficial to the visual effects community. Or, probably equally likely, there may be advances in other, completely surprising fields – which *seem* unrelated (to most people) – that could leap frog developments in visual effects. Or yet, *our* advances in visual effects could prove beneficial in *other* areas. So innovation is not only a result of expanding the height of the pillars, but also of connecting them together. 💡 Going meta for a moment, this very article isn't really groundbreaking in any way – you already know that people specialise in various fields. It’s not about building further on top of any pillars, but rather to offer a different perspective that could help tie ideas together. If you are able to connect knowledge from two or more fields via [cross-pollination](https://www.keheka.com/the-edge-of-chaos/), that could turn out to be incredibly useful to a lot of people. Even if it would "just" be a quality of life improvement, like the wheeled suitcase. To do that, it's useful to identify your areas of expertise. ## Your Own Pillars If you're unsure of which pillars you have personally scaled, that's quite normal. What seems natural and easy to you, others may think is amazing. So it's a good idea to pay attention to, and internalise, any compliments you get. I've realised I'm quite organised. Since I was a kid I've been able to untangle things and order them in a meaningful way. From helping my grandmother literally untangling her knitting yarn back then, to organising and combining ideas and subjects into articles today. I like to make my Nuke scripts tidy and easy to navigate (highly recommend everyone do this). And I've gotten a lot of positive feedback from people who have opened them. Organisation comes quite naturally to me, but it doesn't for everyone. So that's one pillar I've climbed. (And it's closely connected to the pillar of analytical problem-solving skills). You may have climbed other pillars. Listen for clues from others to help identify them. You could be standing atop pillars which are nearby each other. And when you make that realisation, you can connect the dots and potentially bridge a canyon of your own. 💡 A thing to keep in mind is that it takes a **long* time to scale a pillar. So it’s helpful to think long-term, because that’s how **your* signal will cut through the surrounding, often short-term noise. Long-term thinking is the key to innovation. ## PS: One thing I didn't account for in my simple drawing before, was the radius of the sphere. As you go further out and away from the centre, the same slice of the sphere covers a much greater area. It's kind of like an upside down pyramid: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/08/Sphere-1.jpg) Further out, the same pillar covers a greater area. I've found the same is true with knowledge: the higher you climb (or the deeper you dig), the more there is to find. And scaling a pillar can help you gain a bird's-eye-view for spotting more opportunities to build bridges. So by hyper-specialising in your chosen field(s), you can help drive innovation on both axes: vertically and horizontally. I hope you found this article useful. For more productivity tips & tricks, see [Productivity](https://www.keheka.com/tag/productivity/). [Sign up for the newsletter!](https://www.keheka.com/#/portal/signup) ### The Iron Triangle URL: https://www.keheka.com/the-iron-triangle/ Last updated: 2023-08-24T12:50:02.000Z *How to manage your client’s or team’s expectations as a compositor.* A key part of your job as a compositor is to manage your client’s or team's expectations. You could be a star compositor but if no one would know which shots to expect from you; at what level of quality; and when, then you probably wouldn't come across as one. Regularly communicating updates, concerns, ideas, or requests with your client or Supervisor/Production will land you in their good books and take a lot of pressure off of the project. 💡 There’s a balance, though – avoid overloading people with questions which you could easily find the answers to with a little bit of research. And so keeping an open line of communication with the key people involved is crucial for the smooth running of a show. When everyone knows what to expect, it's much easier to plan and schedule the workload. Which is exactly why *managing* expectations is so important. To do that well, it’s useful to be familiar with **The Iron Triangle** and the major constraints that you will encounter on a project: ## Pick Two The Iron Triangle is a concept from Project Management which lays out **a system of triple constraints**: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/08/The_Iron_Triangle.jpg) The Iron Triangle. When pushing to excel in one area, you’ll be constrained by one or both of the other two components of the triangle. For example, if you want to make an *outstanding* piece of work, the quality will be limited by the project’s deadline and/or budget. **At most, you can crank up two out of the three options in the triangle.** So if you want great quality work delivered quickly, then it won’t be cheap. Overtime, weekend work, additional (and potentially more senior) manpower, as well as extra render farm hours will need to be employed, and other production costs will come into effect. A one-man operation working on a solo project for two years can indeed produce excellent quality work with a small budget. But it will take two years. If he wanted to do it faster, he wouldn't be able to do it alone, and/or with the same low-cost tools. So there is a tradeoff, and you will have to choose what to sacrifice: - Time. - Quality. - Or Money. There is obviously more nuance to it, but that is essentially what it boils down to. How this all plays out in practice is not always immediately obvious, and at times you may be asked to do more than what is reasonable: ## Great Expectations The client or the Supervisor/Production may sometimes request a push in all three corners of the triangle – often unknowingly. And if that happens, it’s up to you as a compositor to manage their expectations for what is reasonably possible to achieve within the given timeframe. To understand why this situation can happen, let’s look at how the work is planned out for a project at a typical VFX company: ### The Bidding Process Before a show or sequence is awarded to a company, it goes through a bidding process. Production and the Supervisors analyse every shot and estimate how long it will take to complete. They look at the editorial reference, the VFX description, and any supporting references and information in order to determine: - What exactly needs to be done in the shot. - How complex the work is. - How many days are needed to do it. They do this exercise for every discipline: - Matchmove (Camera Track and Body Track) - Modelling - Rigging - Texturing - Animation - FX - CFX (Character/Creature FX – such as muscle, hair/fur, or cloth simulations) - Crowd Dynamics - Layout - Lookdev - Lighting - Roto - Prep - Matte Painting - Compositing (Depending on the studio and project, there may be more tasks to bid – such as Concept Art, Previsualisation, or R&D). And then an extra buffer is added for safety. Because unforeseen issues do tend to crop up more often than not. 💡 Other disciplines such as Production, Editorial, Tech Support, and Data also need to be accounted for in the project bid, in order to cover those expenses. However, they typically aren't bid for on a per-shot basis like the ones listed above, but rather based on project length. Production also provisionally communicates with Crewing to coordinate the manpower required to fulfil the bid. For example, how many compositors would be needed, of which levels of seniority, and when, in order to actually complete and deliver the work on time. Once the bid is approved, the work is scheduled out to the best of Production and the Supervisors’ ability. But it is incredibly difficult to predict the future accurately. So the plans are constantly adjusted over the course of the project. That means, some of your targets may not be realistic at first. There may be a delay in CG that has a knock on effect on your comp, for instance. Or, the work may be more involved than anticipated, and you need more time to complete it. If you have a target to deliver a shot by the end of the week and you feel that it’s not achievable, then do **speak up sooner rather than later**. The best thing is to communicate any concerns early on, so that they can be dealt with appropriately. Production can chase other departments, allocate more resources, or reschedule the target. The schedule will then be updated as needed and any changes communicated to the client. 💡 A change in the schedule often has a ripple effect, causing other shots later on to have to be reassigned. The sooner the required initial changes are made, the easier it is to rejig the schedule and minimise the impact. If you spend the whole week working on the shot without voicing your concerns, and only tell Production on Friday morning that it won't be ready for delivery – that's a much worse scenario for everyone. Simply letting the team know on Monday or Tuesday that finishing the shot on time may be unlikely – and then updating them along the way throughout the week – is much more helpful. Even if you were wrong in your initial estimate, and you *did* manage to complete the shot on time, that would just be a huge bonus point. Which leads to the next two points (that I also covered in [How To Get Hired As A Compositor – Part 8: Excel In Your New Role](https://www.keheka.com/how-to-get-hired-as-a-compositor-part-8-excel-in-your-new-role/), but are definitely worth revisiting): ### Underpromise And Overdeliver It’s important to be realistic regarding targets in order to plan well and deliver the work on time. And so it’s better to underpromise and overdeliver, than the other way around. When judging how long a task is going to take, err on the side of caution and add *at least* an extra 30% or more to your estimate. Very often, things will take longer to finish than you initially think. There could be unforeseen issues which cause delays, for example: - The task turns out to be more difficult than anticipated. - The render farm gets slammed by other projects, and there is a queue. - Other departments don't deliver vital material on time, for example roto/prep, CG renders, or matte paintings. - Nuke keeps crashing for some reason and you have to troubleshoot. - You spot something else which needs to be done on the shot (that wasn’t briefed). - You get additional client notes. - The server goes down or you lose access to your workstation for a period of time. - Or, some other unexpected problem which needs to be fixed. When we give time estimates, we tend to visualise ideal conditions. While it's great to be optimistic, make sure that you also remain realistic. Remember to add a generous buffer to account for things taking longer than expected. **By underpromising, you set yourself up for success.** Let's say that you think a small task will take two hours to complete. When asked, you could for example give an estimate of half a day. If everything goes well and it ends up only taking two hours like you thought, that's fantastic – you can now deliver early. The Supervisor/Production/client will be thrilled. If something goes wrong and it actually takes three or four hours, that's not a problem – you have already managed their expectations to account for that, and they will be happy that you deliver on time. And if it goes terribly wrong and the task ends up taking you five or six hours to complete, that’s at least not as far off the mark as if you would have given a two hour estimate. By being realistic regarding targets and not underestimating the time something will take, everyone will benefit. Production can plan ahead properly, client expectations can be managed well, and you will have less stress on delivery days. Everyone's happy. But it all comes down to clear communication: ## Communicate, Communicate, Communicate 'Communication is key' is a common saying for a reason. Being able to clearly and effectively communicate with others is vital in our industry. It’s so important to get on the same page for anything related to the work: - What’s the brief and context for the shot? - Which direction should you take the shot or sequence in? - What’s required to make something work? - What’s the current progress? - Which issues are you facing? - Are you waiting for something else before you can start, or continue? - When is something expected to be delivered? - Who is responsible for what? And so on. There are so many different things that need to be communicated clearly on a daily basis. The success of a project directly relies on good, unambiguous communication between all of the team members. It's not always easy. We’re all somewhere along the spectrum between introverted and extroverted. Some people might have a harder time freely speaking up during dailies or in team briefings. Or they might be afraid of giving honest critique to friends. Writing might be their strength, versus having a conversation. Others might prefer to bounce ideas off each other in person, or even struggle with for example dyslexia and subsequently with written notes and emails. Playing to your strengths while at the same time accommodating others' can be tricky but it is necessary for the smooth running of the team. Remember, it’s much better to have a slightly awkward conversation than to continue working blindly or heading in the wrong direction. The majority of the time, you’ll find that everyone is friendly but you have to go first. Flag any issues early on, and agree on a way forward. Discuss with the CG team which passes need to be rendered, or what the layer naming should be (if not standardised). Talk with the DMP artist about what the plan is for the shot and how you can best support each other. Keep Production in the loop so that they can help follow up and keep track. 💡 Always CC Production on emails or in for example ShotGrid notes where shot progression or issues are discussed. That way, they can stay on top of things. Include the show's code name in the email subject as well, because they will often have email filters set up for tracking. Communicate with your Lead, Supervisor, and/or Production: - About the work that you have finished – so they stay in the loop. - About any concerns you have with your targets or your progress – so they can reevaluate the schedule. - If you have received conflicting notes on a shot – so they can provide clarification and direction. - If you have received too many requests – so they can set priorities. - If you are waiting for something – so they can help chase the relevant people. - To follow up about something previously discussed – so they have the latest information. - If you have an idea (or a better idea) for a solution or an approach to a problem – so they can decide on the best way forward. - To simply bounce ideas. It's better to over communicate than to leave out important information. Just keep the first tip in this article in mind: try not to bombard your Supervisor/Production with questions if the solution is a simple Google or email search away. Speaking of solutions: ## Be Solution-Oriented Working as a compositor is a constant cycle of adapting and communicating. You’ll face different challenges on a daily basis. And you won’t always know how to solve them. When you do get stuck, please approach the person you ask for advice with a solution-oriented mindset, instead of a problem-oriented one. Instead of only saying, 'I have this, this, and that problem..' – briefly explain which solutions you have tried and which methods haven’t worked in your attempts. Show that you have actually tried to figure it out, and are not just lazily asking for them to do the thinking/work for you. The same goes for any requests you receive. If you can’t currently accommodate them, avoid just stating the problem (e.g. that you have enough work on your plate), but instead try to offer a solution. For example, if a target has been moved forward: ‘Do we need to deliver a version by tomorrow? Ok, we can do it if I could get some help doing the patch work in this area, and someone to roto this part, while I finish up the keying work.’ Or, ‘Yes, I’ll prioritise finishing this shot today but would it be okay then that my other targets get pushed a bit?’ **It’s a more friendly and helpful way of working together.** And it gets more and more important the further you progress: ## The Progression Of A Shot In relation to The Iron Triangle, the work on a shot typically moves in stages from Fast → Good. And as the shot is progressing, different versions will be sent to the client to make sure everyone is on the same page – again to manage expectations. A shot typically goes through four different stages: ### First Look The *First Look* version of the composite is usually just a 'slap comp': A quick version with all the various elements put together with little to no grading, integration work, or refinements applied. This version is made in order to confirm: - That you have everything you need to forge ahead with the compositing work on the shot. You have the scan, retime, repo, camera, CG, lens distortion, geometry, DMP, Roto, Prep, edit reference, and/or any other elements you require. And all the render passes you need for each. - That everything works as expected technically. There are no problems with any of the elements mentioned above, such as missing or corrupt frames. - That everything looks as expected creatively. There are no issues with the lineup, the CG is lit from the correct angle, objects are moving in the right direction, etc. - That it all works as expected editorially. You have the right timing and framing of the shot, and everything matches up to the editorial reference. This First Look version is meant to be Fast, only. You're just slapping everything together to **make sure that you can safely continue working**. It's to avoid spending time working up all the details, only to find out that something is fundamentally wrong with the shot and then it all needs to be redone. 💡 This version is often internal only, and will typically not be presented to the client. ### WIP The *Work In Progress* version of the composite is exactly what it says on the tin: A version where the creative work has progressed to a point where the shot is starting to take shape, and you are happy to show it to the client for initial feedback and further direction. You and often the other departments (CG, DMP, etc.) have developed the look and creative aspects of the shot, but not sunk much time into fine details and edge work. Broad strokes only. If it’s a straightforward shot, you may only need to show one WIP version before moving on to the next stage. However, if there is more involved creative look development, you may have to send multiple WIP versions until the client is happy with the direction in which the shot is heading. While we are definitely moving towards Good in the WIP stage, we are still fairly Fast and nimble. And that’s important, because **it's much cheaper to change things** in the Fast stages, than later on. 💡 Changing a WIP is like steering a small boat. Changing the finalised shot/sequence is more like steering a cruise ship. Going all the way back to layout or animation, for example, has a huge knock on effect. So as the quality of the work moves from Fast → Good, at the same time any significant change to the work moves further away from Cheap. Once the WIP has been approved and the client is happy with how everything is going, you move to the next stage: ### Creative Final The *Creative Final* version of the composite is fully refined creatively. You address any last creative notes the client might have, and **get the look of the shot dialled in exactly**. The colour grading, integration work, and most of the edge work is all complete. There are no distracting or easily noticeable technical issues, such as popping or major artefacts. And, you're happy to present the shot to the client as the final look. You've collectively moved the shot almost as far as it goes towards the Good corner of The Iron Triangle. ### Tech Final The *Tech Final* version of the composite is the home stretch. The shot has been creatively approved, and only the quality control remains. This is where you check that the grain is matching, that the edges are all looking good, and you **make sure that all the technical aspects of the composite are up to standard**. Check out [Tech Check Checklist For Compositors](https://www.keheka.com/tech-check-checklist/) for a rundown of everything to check. If you have been working in an organised and deliberate way – managing grain mattes, not taking any cheap shortcuts or making poor structural compositing decisions, etc. – the Tech Final should only require minor tweaks to complete. 💡 Shots and Nuke scripts are often shared, so please: [Organise Your Work For Other People](https://www.keheka.com/organise-your-work-for-other-people/). At each stage, even at the Tech Final level, you may get a client request to make a significant change to your shot. ## Knowing When To Push Back As mentioned previously, each shot goes through a bidding process. During that process, written assumptions should be made to ensure that the work stays within the original scope throughout the project. With free reigns, the client could easily continue to ask for significant modifications or additions, ballooning the workload. And so it’s important to stick to the bid. You want the VFX company you’re working for to be profitable, and not take a loss on the project. And at the same time you want the conditions to be fair for all parties. That means, if you’re asked to do work outside of the original scope, that should incur an additional cost. If they haven't been already, any disproportionate client notes should be cleared with Production before they are actioned. And even if the work is within the agreed upon scope, be transparent if a target is unrealistic. Flag it with the Supervisors and Production as soon as possible. Part of pushing back and managing expectations is also about setting professional boundaries. For example, ‘I’m unfortunately not able to work on Saturday, but let's instead..’. Having clear expectations builds trust both within the team and between the team and the client. It establishes accountability, and when everyone acts with the same understanding of the duties and timelines, productivity increases which leads to a better outcome. When that happens, you’re efficiently navigating The Iron Triangle. I hope you found this article useful. For more productivity tips & tricks, see [Productivity](https://www.keheka.com/tag/productivity/). [Sign up for the newsletter!](https://www.keheka.com/#/portal/signup) ### Compositing Photorealistic Lens Effects In Nuke URL: https://www.keheka.com/compositing-photorealistic-lens-effects-in-nuke/ Last updated: 2025-02-16T09:41:38.000Z ⭐ Make your composites look photographic by recreating real lens characteristics… _This post is for paying subscribers only._ ### Lining Up Element Plates In Nuke URL: https://www.keheka.com/lining-up-element-plates-in-nuke/ Last updated: 2023-07-07T07:09:02.000Z *Two methods for accurately aligning an element plate to the main plate…* ## Use The LIDAR / Matchmove Geometry I’ve previously covered how to [line up CG/DMP renders](https://www.keheka.com/re-using-cg-renders-across-a-sequence/) between shots in a sequence. But how can we do the same with live-action element plates? Crowd plates or other element plates will sometimes be filmed for use across a sequence of shots. The camera will usually be locked off, but not always, and it may not be in the exact same position or angle as in the main plates of the sequence. To line up the perspective of an element plate with the main plate of a shot – and keep consistency across the sequence – you can use the LIDAR scan or the matchmove geometry of the set. If you have a matchmove camera for the element plate, you can live-project the element plate using that, and render it out using the main camera. 💡 Assuming the Matchmove department lined up each camera in world space. If you don't have a matchmove camera for the element plate, you can overlay a wireframe render of the LIDAR or matchmove geometry using the main camera, and manually corner pin and line up the features of the element plate with the corresponding features in the main plate. Let's look closer at each method: ### Live-Project Method For this first method, you essentially want to film the element plate using the main plate’s camera. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/07/Live-Projection.png) Live-projection setup. Start by undistorting your element plate using the element plate camera’s lens undistortion. Then, project this onto either the LIDAR or the matchmove geometry using a Project3D node. Next, render this out using the main plate’s camera and format. And finally, redistort the render using the main plate camera’s lens distortion. Now, the projected element plate will be aligned with the main plate and you can composite it however you see fit. ### Wireframe Overlay Method For the second method, you’ll have to manually align the element plate. However, by using a wireframe render of the LIDAR or the matchmove geometry, you’ll have visual guidelines and features to match up to which makes the alignment both easier and more accurate. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/07/Wireframe.png) Wireframe setup for assisting with element alignment. In this second setup, start by applying a Wireframe shader to the LIDAR or the matchmove geometry, and render that out using the main plate’s camera and format. Redistort the render using the main plate camera’s lens distortion, and Merge (screen) this (A) over your main plate (B). Now, you have a wireframe of the scene overlaid with your main plate. You can see where all the features of the scene are, even if they are for example partially blocked by a doorway in the main plate. Merge (over) your element (A) with this wireframe overlay (B), and lower the mix value to for example 0.5\. Using a CornerPin node or another transformation node, align your element with the features in the wireframe overlay. Finally, composite your element with the main scan however you see fit. 💡 If the LIDAR geometry is too heavy to meaningfully work with in Nuke, you can instead line up Cards or other geometry to it, and use those instead. I hope you found this tutorial useful. For more Nuke tips & tricks, see [Nuke](https://www.keheka.com/tag/nuke/). [Sign up for the newsletter!](https://www.keheka.com/#/portal/signup) ### What’s Your Immortality Project? URL: https://www.keheka.com/whats-your-immortality-project/ Last updated: 2023-07-05T09:44:47.000Z *Gain abundant motivation by pursuing a greater purpose…* If you're struggling with motivation, it's useful to zoom out and look at a longer time horizon. Are you working on something that gives you meaning? Something that you can look back on when you're old, and be proud that you have contributed to the world? Something that may even live on after you die? ## The Dilemma Of Mortality Many of us find it difficult to come to terms with the concept of our own death. We often ignore it, distract ourselves from it, and avoid it to the best of our ability. Adventurers, scholars, alchemists, and modern scientists have all searched throughout the ages for ways to delay or escape death. Take for instance: - [The Elixir Of Life](https://en.m.wikipedia.org/wiki/Elixir%5Fof%5Flife?ref=keheka.com) - [The Philosopher’s Stone](https://en.m.wikipedia.org/wiki/Philosopher%27s%5Fstone?ref=keheka.com) - [The Fountain Of Youth](https://en.m.wikipedia.org/wiki/Fountain%5Fof%5FYouth?ref=keheka.com) - [The Holy Grail](https://en.m.wikipedia.org/wiki/Holy%5FGrail?ref=keheka.com) - [The Fifth Element ](https://en.wikipedia.org/wiki/Aether%5F%28classical%5Felement%29?ref=keheka.com) - [Modern Medicine](https://mdibl.org/in-the-media/advances-in-quest-for-immortality/?ref=keheka.com) - [Cryonics](https://en.wikipedia.org/wiki/Cryonics?ref=keheka.com) - [Nanorobotics](https://en.wikipedia.org/wiki/Nanorobotics?ref=keheka.com) - [AI (Digital Immortality)](https://www.worcester.ac.uk/about/news/academic-blog/Digital-immortality-and-Artificial-Intelligence.aspx?ref=keheka.com) There is no shortage of attempts to discover or manufacture immortality. But as of yet, we humans remain mortal. However, that doesn’t mean we don’t live on after we pass away. ## Flight From Death There's a psychological concept which posits that many people have what's called their "immortality project." For some, it's having children. For others, it's creating an artistic or technological work that will outlive them. Immortality projects drive efforts to create and build throughout humanity. This is referred to as "flight from death." 💡 "Flight From Death" (roughly) translated into French is "Vol De Mort." Whether through our DNA or through our ideas and works, we live on – keeping the candle of consciousness lit. In a way, we deny death. ## The Denial Of Death The Denial Of Death is a Pulitzer prize winning book by cultural anthropologist Ernest Becker. Building on the works of Søren Kierkegaard, Sigmund Freud, and others, Becker argues that a basic duality exists in human life: A physical world of objects and biology, and a symbolic world of human meaning. With this duality, we’re able to transcend the dilemma of mortality by shifting our focus from our physical selves to our symbolic selves. This symbolic self-focus takes the form of an individual's *causa sui* project. ## Causa Sui *Causa sui* is Latin for self-caused. The term is used to describe something that is generated within itself, often in the context of assigning a purpose to oneself. This concept is commonly used as an immortality vessel, by which something can create meaning, or continue to create meaning, beyond its own life. A way for us to gain a sense of legacy. It bubbles up to the surface at different times, and takes on a different shape for each of us, but it typically boils down to one thing: ## To Benefit Others Sometimes, after doom scrolling and being bored and unproductive for longer periods of time, I get this strong sense that I should be *doing* something. An urge – often without any specific direction – to advance in some way. It's a palpable feeling, sometimes accompanied by a boost in energy levels. I could be sitting on the sofa in the evening, and suddenly want to get up and go outside for a fast run or a cycle. It used to happen a *lot*, but not as much now after I started working on this website. I think it was exactly the lack of a causa sui project that drove this feeling. I'm very happy in my day job but I felt that I could and *should* be using my accumulated knowledge to help more people than just my immediate coworkers. ## The Right Project Since committing to sharing my experience online nearly a year and a half ago, and up until now – having contributed 64 articles to the VFX community – motivation has been abundant. I think it's because this mission clearly aligns with my own values. Although I'm not saying it's my life's mission, I am saying it's a step in the right direction which has unlocked more meaning for me personally. And I would recommend it. In fact, I think everyone should have a causa sui / immortality project: a self-assigned purpose that benefits others. There's a Greek proverb that says: "A society grows great when old men plant trees in whose shade they shall never sit." Let’s plant more trees. I hope you found this article useful. For more productivity tips, see [Productivity](https://www.keheka.com/tag/productivity/). [Sign up for the newsletter!](https://www.keheka.com/#/portal/signup) ### Compositing Screen Inserts In Nuke URL: https://www.keheka.com/compositing-screen-inserts-in-nuke/ Last updated: 2023-06-28T17:23:58.000Z 15 tips & tricks for compositing screen inserts in a realistic way… ## 1\. Screens Are Replaced For A Reason If you have ever taken a picture or captured a video of a screen, you'll probably have noticed odd things happening. Artefacts that you don't see with the naked eye appear, such as **frame rate synchronisation issues and Moiré patterns**. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/06/Moire_Patters.jpg) Moiré patterns. Out-of-sync frame rate. 💡 [It’s possible to remove these artefacts](https://www.keheka.com/working-outside-the-box/), but not always – and sometimes it will take a lot of work to clean it all up. So it’s better to avoid them in the first place. But even if you sync up the screen and the camera to avoid the artefacts, **the *content* that will be displayed on the screen may not have been made yet**. Often, the screen graphics will be created later on, after the film shoot. Other times, the content that’s displayed on the screen hasn't been approved for final yet, and will need to be replaced. Because of these restrictions, shooting screens that are black or displaying blue/green or temporary footage, is normal. Compositing screen inserts is therefore a common VFX task. So, how can a screen be captured on set in order to best help achieve a convincing screen comp? ## 2\. Screens Can Often Just Be Switched Off A lot of times, the screen on set doesn’t actually have to display anything during filming. Many people assume you need a green screen for anything that will be replaced in comp, but that's not always the case. Especially with screen replacements. A black screen has several benefits: 1. **You get pure, uncontaminated reflections and shadows**. If you have a pattern or moving images displaying on the screen, extracting the reflections and shadows becomes more of a challenge. You may even have to rebuild them. 1. **You get the black levels for free**. With a black screen, you can just zero out the black levels of the graphics with a grade, and then Merge (plus) that with the scan. 1. **There is no spill light affecting the surroundings**. Without a blue/green image on the screen, blue/green coloured light isn’t cast onto the environment. Which means you don't need to remove any spill. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/06/Screen_Glare.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/06/Screen_Reflections.jpg) Black screens with clean reflections and shadows. The downside to using a black screen is that the screen won't light up its surroundings. However, you can easily add any minor light interaction in comp, for example between a phone screen and the hand that’s holding it. So my default suggestion would be to use a black screen. However, there are a couple of exceptions: 1. When the screen is meant to be **highly luminous and light up its surroundings** (for example a dark room). Then, it's better to have the screen on set emit light and get the proper lighting interactions. 1. When something that you don't want to rotoscope will go in front of the screen, like **hair or detailed shapes with intricate movement**. Then, it's better to display a blue/green colour on the screen for keying. 💡 For point number 2 above, don't use blue/green paper or cloth stuck to the screen, if possible. That would kill the natural reflections. Instead use something like [VFX Screenfiller](https://richardfrazer.com/tools-tutorials/vfx-screenfiller/?ref=keheka.com) to display an actual blue/green image on the screen. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/06/Green_Screen_Display.jpg) Green image displayed on the screen to help extract things like hair and detailed motion. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/06/Display_On.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/06/Blue_Display.png) Detailed light interaction that would be tricky to replicate with the display switched off. 💡 To ensure lighting continuity across the sequence, stick to one screen option the for whole shoot. Whether the screen is on or off, and what’s displayed on it, also has an impact on the next point: ## 3\. Screens Don't Necessarily Need Tracking Markers If the corners of the screen are well defined and don't get occluded in the shot, there is usually no need for tracking markers on the screen. For instance, if there is a black screen with a light bezel; the screen is reasonably in focus; and 3-4 corners of the screen are visible in the frame. Then, you can just **track the corners of the screen** instead of relying on tracking markers, saving yourself some clean up work. Because you *will* have to remove any tracking markers to get the best screen comp results. 💡 When you do need to remove markers, and they are for example orange on a blue/green screen, have a look at the [Monochrome](https://www.chrisfryer.co.uk/post/monochrome-tutorial-combining-channels-theory-and-practical-applications?ref=keheka.com) tool for Nuke. It’s a great tool which uses a clever channel blending technique to make the markers disappear. Luckily, it doesn't take too long to remove tracking markers in general. And it’s worth it because you can use the real screen to make your insert look more realistic. But peppering the screen with tracking markers when you have a clear view of the corners of the screen just creates unnecessary extra work. In the shot below, for example, the markers aren’t adding any value since we can clearly see three corners of the screen. In fact, the markers are creating *more* work because they are black, which means the key won't separate them from the woman. The monochrome technique won’t work either, since her hair and blouse are black. With her hair going over the markers, the clean up work becomes more tedious than it needs to be. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/06/Bad_Markers.png) Unnecessary markers create extra work for no benefit. – All that said, if: - There potentially will be any action blocking multiple corners of the screen. - The screen corners are ambiguous. - There is a complex camera movement to be 3D tracked. - Changing images will be displayed on the screen on set. - The screen will go out of frame. Then, **it's better to be safe than sorry** and add tracking markers. It's easier to paint out markers than it is to track something with no features. Speaking of features, another thing to consider is the shape of the screen: ## 4\. Screens Are Flat Although there are exceptions, a screen is typically a flat surface. That makes things quite straightforward because you can align your screen insert more easily using a CornerPin or a Card. You generally don't need to bend/warp the edges to fit (as long as you apply the correct lens distortion). 💡 In cases where the screen curves, though, such as in the massive LED screens in Piccadilly Circus or in curved computer monitors, make sure to ****adjust the insert to correctly follow the perspective**. Since all of a flat screen is on the same plane in 3D space, **planar trackers are excellent for tracking screens**. Planar tracking software such as [Mocha](https://borisfx.com/products/mocha-pro/?collection=mocha-pro&product=mocha-pro&host=standalone-multihost-plug-ins&purchase-options=annual-subscription&ref=keheka.com) make short work of screen tracks, which is great because: ## 5\. Screen Inserts Need A Tight Track It's very easy to tell if a screen insert isn't tracking properly with the screen. Audiences can notice and get distracted by even small bumps and slides in the track. So make sure to spend the time it takes to get a track that sticks. Sometimes, the Matchmove department will give you geometry or locators (Axis nodes) for the screen, which together with the matchmove camera makes the lineup and track a piece of cake. You can either manually align a Card to the geometry/point cloud/locators, or you can use the snap feature in the Card’s properties to align it to a vertex selection: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/06/Vertex_Selection.png) Enable the Vertex selection option in the Viewer (while viewing 3D space). ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/06/Snap.png) Select the vertices you want to align your Card to in the Viewer, and then in the Card’s properties choose snap geo to selection. With a Card in the exact 3D position of the screen, you can accurately project your graphics. Whether 2D or 3D tracking your screen, **the track doesn’t always have to be pixel perfect, but it has to be pretty close.** The closer you can get to that point, the better – especially with close up shots. Speaking of pixels: ## 6\. Screens Are Made Up Of Pixels Something you’re already familiar with as a compositor, is that the images we see on modern screens are made up of millions of tiny, elementary groups of red, green, and blue lights. These picture elements (pictures → pics → **pix** \+ elements → **els** \= pixels) are the smallest unit of a digital display, and typically we can’t distinguish between them with the naked eye unless we go up *really* close to the screen. (On older, standard definition screens with a much lower resolution, you could see them more easily). However, modern camera sensors *also* have millions of pixels of resolution, often even more than a typical screen does. And so cameras can see these little dots of light. But because both the screen and the camera’s pixel patterns are so incredibly fine, it’s tricky to align them exactly. And that’s when you get the aforementioned Moiré patterns shimmering across the screen. 💡 Normally, you wouldn’t replicate Moiré patterns in your comp as they’re typically undesirable, but [you could definitely do it](https://youtu.be/gS4zXJ6sLs8?ref=keheka.com) should you want that type of look in your shot. We’ll also look at how you can extract the original patterns in tip number 13 below. The bigger the screen and the bigger each pixel is, the easier it is to see the pixels. For example, on stadium screens or LED billboards each pixel is quite large. And so when replacing those kinds of screens, make sure to include the pixel pattern on the screen insert. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/06/LED_Billboard.png) LED billboard where you can see the individual pixels. You can create a pattern like this in Nuke by using for example a Grid node with an Invert node connected after it: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/06/Grid.jpg) Pixel pattern created using the Grid and Invert nodes in Nuke. You could also transform each channel of the image above by a couple of pixels, to split out the RGB for an even more realistic subpixel look: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/06/Grid_RGB.jpg) LED pattern. To do that, branch out three Transform nodes from the image. Let’s say Transform1 will control the red channel, Transform2 the green channel, and Transform3 the blue channel. Using a Copy node, copy green → green from Transform2 (A) to Transform1 (B), and using a second Copy node, copy blue → blue from Transform3 (A) to the first Copy node (B). Now, you can adjust each Transform node and translate the respective channels around in the image. A couple of pixels in each direction usually does the trick. Finally, Multiply or Plus this pattern over your graphics. 💡 There are several tools on Nukepedia to help create this type of pixelation and other screen effects, such as [Pixel\_Sweetener](http://www.nukepedia.com/gizmos/image/pixel%5Fsweetener?ref=keheka.com), [PixelCRT](https://www.nukepedia.com/gizmos/filter/lp%5Fpixelcrt?ref=keheka.com), or [pfGlitchy](https://www.nukepedia.com/gizmos/filter/pfglitchy%5Fbv05?ref=keheka.com). And because pixels are small light sources: ## 7\. Screens Emit Light A screen is a source of light. That means, light from the screen will hit nearby objects and illuminate them. And light from the screen gets blocked by occluding objects. This can be as subtle as a faint glow from the screen hitting the bezels, or more intricate lighting interactions such as in the example images at the end of point 2 above. The important thing is that **a screen will affect its surroundings**. As an example, if the TV screen insert that you have composited into your shot is displaying a blazing red Ferrari across the screen, make sure to complement that by grading a red tint on the white wall facing the TV. Screens also interact with the environment through reflections: ## 8\. Screens Reflect The Environment Unless it's holographic, a screen will reflect its surroundings. Even matte screens have (dull) reflections. Which means, if you leave out the reflections from your screen insert, it won’t look quite right. **Use the original reflections when possible**. You can restore the plate reflections using the techniques in tip number 13 below. Hopefully, the screen has been shot at an angle where it faces neither the light nor the camera, to save you some cleanup. **Double check that you don't see the crew or the set equipment in the reflections**. Clean up any unwanted subjects/objects from the reflections as needed, and remove any markers over the reflections you want to keep. All of the above also applies to any shadows that are cast on the screen from the environment. Let’s move on to screen content and behaviour: ## 9\. Screens Are Dynamic To make a screen insert believable, you have to consider the question: What does a screen do? - A phone that’s raised up to the ear when taking a phone call will usually automatically turn the screen off, or dim it. - A tablet tilted sideways will flip between portrait and landscape mode. - Content will move in a certain way as you scroll down the page of a website. - The screen of a smartwatch will react to touch. The animations, timings, and look of the content on the screen is often half of the equation for selling the screen insert. Not all of this will be in your control, because often a separate company will create the screen graphics. But some things you can influence. For example, when you turn the TV on, does it instantly go from black to fully lit? Does it fade up over a few frames? Is there a certain kind of physical effect visible on the screen? Study references from real life or video, and analyse what is happening so that you can accurately replicate it in comp. Also try to put reasonable content on the screen, in the right format. A phone’s aspect ratio is different to a wide screen monitor. **Your screen insert should look like it was made to fit the screen that you are replacing**. Next, let’s look at some physical limitations: ## 10\. Screen Inserts Adhere To The Lens Focus An out of focus TV in the background shouldn’t realistically display a sharp image. **Match the focus of the screen insert to the actual screen in the plate**. And animate the focus if there is a rack focus, or if the screen moves through the focal plane over the course of the shot. If the screen is at an angle to the camera, remember that part of the screen may be outside the focal plane. Apply depth defocus as necessary. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/06/Screen_DoF.png) Here, a screen insert would have to be sharper at the front than at the back. On the topic of focus: ## 11\. Screen Inserts Adhere To The Motion Blur A screen insert without motion blur will stick out like a sore thumb in a shot where the camera or the screen moves around quickly. **Make sure to match the motion blur to the plate** – that includes both the Shutter Time *and* the Shutter Offset. And ensure you set enough motion samples to avoid artefacts. Next, let’s look at colours and brightness: ## 12\. Screen Inserts Are Limited By The Camera’s Range You could have an HDR OLED screen with obsidian blacks and scorching whites in real life. However, when you record it, the dynamic range of the screen will be limited by what the camera can capture. **The blacks will be lifted and the whites will be clamped within the camera's dynamic range**. Make sure to grade your screen insert accordingly. Gain the Viewer up and down, and sample the bright and dark values in the plate to inform your grading. Let’s move on to extracting screen detail from the plate: ## 13\. Screen Inserts Benefit From Auxiliary Keys If you have a screen displaying just a single colour like black or green, you can usually extract a lot of detail using an auxiliary key. With a [multiplication key](https://www.keheka.com/multiply-key-technique-for-extracting-fine-detail/) or an additive keyer, you can **restore fine details such as small cracks, dust, fingerprints, reflections, interference patterns**, etc. on the screen, and any **hair, semi-transparent and motion blurred edges**, etc. on anything crossing in front of it. Another method is to despill the screen to black and then Merge (from) the despill (A) with the original scan (B), which gives you the spill separated on its own, i.e. a spill matte. Desaturate this matte to 0 and Merge (plus) it after your despill to restore the luminance. You can now multiply your screen insert through the desaturated spill matte (you might have to grade it up beforehand) before merging it with the luminance-restored, despilled scan using a Merge (plus). Your insert will then be added to the black screen while accounting for any reflections or variation in the screen. But no matter how you composite your screen insert, remember that: ## 14\. Screen Inserts Can Introduce Bad Edges Be conscious of the edges around your screen insert and around any subject or object that's moving in front of it. Depending on how similar or dissimilar the original screen is to your screen insert, you may see some nasty edges in your comp. **Look out for light and dark edges around fingers and hair**, especially. You may even have to rebuild the motion blurred edges. Also **check your despill** and make sure there's no green/blue colour left in any crevices. 💡 You can use the despill matte from the previous tip 13 to grade the monitor. All of the tips & tricks so far in this article are meant to help you composite screen inserts in a realistic way, but there is one thing you should keep in mind above all else: ## 15\. Screens Need To Be Legible The content on a screen is often a story point. You'll have to accept that sometimes you will get asked to cheat the focus, the amount of reflections, or the grading to help tell the story. It can be frustrating when the client has shot the screen out of focus and then requests the insert to be sharp, but it's more important that the audience understands what's going on in the shot than it is for them to see a physically/technically correct comp. Remember, **the story is King** and visual effects serve the story. I hope you found this tutorial useful. For more Nuke tips & tricks, see [Nuke](https://www.keheka.com/tag/nuke/). [Sign up for the newsletter!](https://www.keheka.com/#/portal/signup) ### Working Outside The Box URL: https://www.keheka.com/working-outside-the-box/ Last updated: 2025-02-16T09:42:04.000Z ⭐ From flickering lights to ultraviolet-keying, let's look at the VFX problems caused by – and the solutions dependent on – the world outside the human spectrum… _This post is for paying subscribers only._ ### Trees Don't Grow In Salt Mines URL: https://www.keheka.com/trees-dont-grow-in-salt-mines/ Last updated: 2023-06-20T16:00:29.000Z Change your environment in order to thrive… ## A Higher Chance Of Success Your progress depends more on your environment than you might think. Depending on where you are and who you surround yourself with, your chances of succeeding in your field will vary enormously. A poorly optimised environment will hold you back, while the right environment will inspire and propel you to new heights of creativity and achievement. If you for example want to become a country singer, then it’s a good idea to go to Nashville or a similar place where country music is flourishing. Where it is accepted and encouraged, and performed by artists at a high level. Where, by just being there and interacting with the people, you are flooded with inspiration and knowledge. Or imagine you want to become a tech entrepreneur. In which environment are you more likely to succeed? A quaint countryside village mostly inhabited by farmers, or Silicon Valley, where everyone at the coffee shop is talking tech and bouncing ideas? It's pretty clear. ## Change Your Environment You may very well have commitments preventing you from moving to an area that’s bustling with people and companies related to your particular field. That's okay, the change in environment doesn't have to be a physical one. Where you spend your time online also has a great impact on your progress. Because it's something I have personal experience with, I'll use as an example the online community I created for compositors, called *The Companions*. There, you have people at the top of their field: high calibre compositors and supervisors working in the most prestigious VFX companies in the world, who have won Oscar, Emmy, BAFTA, and VES awards. And alongside them, you have up-and-coming compositors of all levels looking to improve their skills. Together, we discuss compositing, share VFX industry news, tools, and ideas, and help each other when we get stuck. It's the opposite of a salt mine. Instead, the community provides nutrient rich soil which is regularly watered and tended to, allowing trees to sprout, grow, and strengthen. There are many online communities which can help you improve your skills. Seek out the ones that are right for you, and I can guarantee that you will develop much faster and go much further than on your own. And don't forget that sometimes, it’s not the physical or online environment that’s holding you back. ## Limiting Beliefs In your mind, you have painted a picture of the world we're in, and by extension a picture of yourself and who you are. It’s been happening since a young age, and a lot of fears, assumptions, and ideas about how the world works have influenced your uniquely painted landscape. Maybe it's time to change this environment of limiting beliefs? The subconscious boundaries and limitations that yourself or others have imposed on you may not be serving you fairly (anymore). If you are telling yourself 'I'm not a numbers person', 'I can't draw', or ‘I’m too old to go back to school’, I invite you to challenge those assumptions. It can be anything; I highly encourage you to do an audit of your thoughts and beliefs. Find out if you are holding yourself back without a real reason. However, it won’t be enough to just try something once, immediately say you’re bad at it, and quit. Remember, [success requires persistence](https://www.keheka.com/success-requires-persistence/), and most likely [your wastebasket isn't full enough](https://www.keheka.com/your-wastebasket-isnt-full-enough/). You’re going to have to make a lot of drawings before they become any good. But to begin with, challenge yourself to take that first step across the boundary which has been holding you back. And wherever you decide to go – whether physically, online, or in your mind – look for the soil that will allow you to grow. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/06/Salt_Mine.jpg) Exit the salt mine. I hope you found this article useful. For more productivity tips, see [Productivity](https://www.keheka.com/tag/productivity/). [Sign up for the newsletter!](https://www.keheka.com/#/portal/signup) ### Combining Projections In Nuke URL: https://www.keheka.com/combining-projections-in-nuke/ Last updated: 2023-07-19T15:20:41.000Z Get complete object coverage and avoid texture stretching by combining multiple projections together… Two projected textures combined together with no stretching pixels. ## Stretched Projections The problem with projections is that they're only 'perfect' when viewed from the perspective of the projection camera. A projected texture being stretched along the sides of a sphere. The further your render camera moves away from the projection camera, the more texture stretching you will start to see. A render camera that is perpendicular to the projection camera would pretty much *only* see stretching pixels on the object that is receiving the projection. So, if you have a significant camera move in your shot, remember **your projections will start to break the further away from the projection camera you go**. ## Contaminated Projections To combat texture stretching you can combine multiple projections together from different angles, increasing your object coverage with clean projections from the different angles. However, each individual projection will still be stretched along the sides of the object which are not directly facing the projection camera. And this stretching will contaminate the other, clean parts of the projections when merged together: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/06/Contamination.jpg) The clean parts of the projections are contaminated by stretched pixels of the other projection. We need a way to isolate the clean parts of the projection that we want to keep, to separate them from the stretched parts that we want to remove. ## Facing Ratios To The Rescue Similar to how we created the [Fresnel effect in Nuke](https://www.keheka.com/fresnel-reflections-in-nuke/), we can use a Light locked to the projection camera to create a facing ratio matte. That is, a matte for the parts of the geometry which are directly visible to the projection camera on the projection frame. We can then mask the projection using this matte, and cut out the stretched pixels. After that, it's just a matter of rinsing and repeating the same process for all of the projections, before merging them together. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/06/Texture_A.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/06/Texture_A_Holdout_Matte.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/06/Texture_A_Holdout.jpg) The first projected texture, both with and without the facing ratio holdout. Notice the severe stretching on the right hand side of the sphere without the holdout (first image). ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/06/Texture_B.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/06/Texture_B_Holdout_Matte.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/06/Texture_B_Holdout.jpg) The second projected texture, both with and without the facing ratio holdout. Notice the stretching on the left hand side of the sphere without the holdout (first image). ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/06/Texture_AB.jpg) Both of the textures merged together, with their holdouts applied. Each texture covers the (previously) stretched areas of the other, getting the best of both worlds. 💡 In the example above I used two distinctly different textures to better show how they merge together. If you instead use two more similar textures, the blend will be so seamless that it’ll be pretty much impossible to detect. So, how do we actually do this? ## The Setup ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/06/Setup.png) The setup for merging two projections. Let's start by setting up the first texture projection, A, which you can find in the teal coloured section in the picture above. ### Projection First, project your texture A onto your geometry using your projection camera A. (This is a completely standard projection using a Project3D node). If you’re not familiar with the ApplyMaterial node, it does exactly what it says on the tin. I have used it here so that I can reuse the same geometry for multiple projections. That means I avoid having to copy the geometry several times across the script, which would slow things down (especially with heavier geometry). And it means I would only have one source to update should the geometry change. 💡 Projection camera A should be positioned somewhere close to, and angled in a similar way as, one extreme position of your render camera's motion range. That way, you get a good, clean texture coverage from that angle. Render projection A using a ScanlineRender node and your render camera. Next, let's make the holdout, which is the key to this whole setup: ### Holdout Create a Light node, leave the default settings as they are, and connect its *axis* input to projection camera A. That will snap the Light to the position of the projection camera in 3D space. Then, create a Diffuse node and leave the default settings as they are. Using an ApplyMaterial node, apply this diffuse shader to the geometry. Next, connect the ApplyMaterial node and the Light node together in a Scene. The light will now shine from the projection camera onto the geometry and create a facing ratio matte. Render this using another ScanlineRender node and your render camera. Since the resulting holdout matte is in the RGB channels, shuffle the red channel into the alpha channel. Then, add a Grade node and set it to affect the alpha. You can now gamma down the alpha to remove more stretching, or gamma up the alpha to include more of the projection. Remember to clamp the matte by ticking *black clamp* and *white clamp* in the Grade node. Finally, hold out the projection by the facing ratio matte using a Merge (mask). That’s projection A sorted. ### Additional Projections For the second projection, B, copy all of the first setup. Swap the first texture, A, with the new texture you want to project, B. Then, change projection camera A to projection camera B, which should be positioned somewhere close to, and angled in a similar way as, the other extreme position of your render camera's motion range. That way, you get a good, clean texture coverage from that angle, too. Merge the two held out projections using a normal Merge (over), and you’ve now got coverage from both extreme angles of the render camera’s motion range. Copy/paste the setup again as necessary, and add as many projections from as many angles as you need. Keep going until you cover the object enough to hold up to the camera move in your specific shot. 💡 You can mask the projections using a [Position Matte](https://www.nukepedia.com/blink/keyer/apmatte?ref=keheka.com) tool for even more localised control over where to reveal the projected texture. I hope you found this tutorial useful. For more Nuke tips & tricks, see[ Nuke](https://www.keheka.com/tag/nuke/). [Sign up for the newsletter!](https://www.keheka.com/#/portal/signup) ### Compositing Smoke In Nuke URL: https://www.keheka.com/compositing-smoke-in-nuke/ Last updated: 2023-06-12T09:43:18.000Z 15 tips & tricks for compositing smoke in a realistic way… ## Particulate Matter Smoke is a concentration of small particles in the air. Visible smoke typically consists of soot, tar, oils, and ash – small, unburned particles that are left over when there isn’t enough oxygen to burn the fuel completely. Each particle on its own is too small to see with the naked eye, but when they come together, we see them as smoke. This concentration of airborne particles interact with light – both catching light and blocking it. Depending on how densely concentrated the particles are, the smoke will occlude or obscure parts of the background behind it by a varying amount. Which leads us to the first tip for compositing smoke: ## 1\. Smoke Isn’t Additive Smoke should not be composited with the background using a Plus or Screen operation. The smoke particles catch and block light – they don’t cast light on, or brighten up, the background. There may be pockets of light in the smoke, or there may be white smoke that is brighter than what’s behind it, but the smoke itself doesn’t brighten up the background. Adding smoke to the background is a common mistake, and results in a strange transparency and a brightening of the background which doesn't look realistic. Instead, use the Over operation when compositing smoke. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/06/Colour_Wheel.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/06/Colour_Wheel_Smoke_Over.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/06/Colour_Wheel_Smoke_Plus.jpg) Using the Over operation (middle image) is the more physically accurate way of combining smoke with your scene. Using the Plus operation (last image) leads to an unwanted brightening of the BG. It’s important to keep in mind that smoke is indeed a physical, real, and tangible phenomenon. It follows the laws of physics, and the smoke volume is made up of actual particles of a certain size. Speaking of size, this leads us to the second tip for compositing smoke: ## 2\. Smoke Has A Familiar Scale If you scale up a cigarette smoke element to the size of a building, it’s not going to look right. Neither will scaling down the pyroclastic flow of an erupting volcano to the size of a car exhaust. Small scale smoke looks, moves, and interacts with the surroundings differently to large scale smoke. So, make sure you get the scale of your smoke right. One of the biggest giveaways is when you scale a smoke element either up or down too far, and it starts looking and behaving in an unrealistic way. A small smoke element scaled up too far will lack visual texture detail and internal motion, while at the same time moving too fast across the screen. On the other hand, a large smoke element scaled down too far will seem overly detailed and too slow. Which leads us to the next tip, about speed: ## 3\. Smoke Has A Familiar Speed Not only does the amount of detail in the smoke play an important part in conveying its scale, the speed of the smoke element also affects its perceived size. Large scale smoke is usually seen from a distance, and so even if the individual particles would move at the same speed as ones in a small scale smoke element – because of the distance – the large scale smoke would appear to be moving more slowly. And so if you have to scale a smoke element significantly up or down, you will usually have to compensate by retiming the element. Slow down small scale smoke elements which have been scaled up, and speed up large scale smoke elements which have been scaled down. 💡 Smoke elements are also often shot at a higher frame rate. You may for example have an element shot at 48 FPS or 96 FPS, which will be used in a 24 FPS project. Retime the element and add [motion blur](https://www.keheka.com/motion-blur-masterclass-for-compositors/) to it as needed. On the topic of speed, let’s move on to tip number 4 about the movement of smoke: ## 4\. Smoke Has A Familiar Motion Smoke billows, it doesn't fly around neatly as an unchanging, constrained shape. Animating a smoke element across the screen doesn't look anything like the real thing moving across. As much as you can, keep the natural movement of the smoke as it is in the element. That's how the smoke actually moved in real life. Too much transformation applied to the element will quickly start to make it look fake. Like an old school video game sprite. Remember, smoke looks and moves the way it does much because of its volumetric properties: ## 5\. Smoke Isn’t Flat Smoke is a three dimensional volume of fine particles. When compositing 2D smoke elements, having several separate layers is usually better than trying to make one single layer work. Placing layers of smoke on Cards at different depths in 3D space will give you a sense of volume, because you get both parallax and more variation in the smoke density. Having multiple layers of smoke is very beneficial when there is a larger camera move, where a single layer of smoke would start to break in perspective at certain camera angles. If you combine using multiple layers of Cards with using the [Deep thickness trick](https://www.keheka.com/manipulating-deep-data/), you can really start to embed objects into what feels like a volume of smoke by using a DeepMerge (holdout). 💡 You can for example live-project a rotoscoped person on a Card, and animate the Card’s position in 3D space as the person walks around through the smoke. With the added Deep thickness on the smoke and person, they will look like they are smoothly walking deeper into the smoke. (As opposed to the stepping you get if the Card with the person simply travels through flat smoke Cards only). So smoke consists of real, three dimensional, airborne particles. And they interact with light: ## 6\. Smoke Is Affected By Surrounding Light Smoke catches light, and is therefore affected by its surroundings. When smoke is near a light source it will become illuminated by it, making the smoke look brighter in that local area. The smoke will also be affected by the light’s colour. Shining a red light on white smoke will naturally colour the smoke towards red. But not only does direct lighting affect the smoke, indirect lighting will also have an impact. Reflected light from the environment will colour the smoke, although this effect can often be quite subtle. A lush, green forest will tint the smoke towards green, but only lightly, for example. To help get the right smoke colour, you can blur the background and transfer a portion of its chroma values to the smoke: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/06/Chroma_Transfer.png) Transferring chroma values from the background to the smoke. To do this, first blur the background by a fair amount, for example 200\. That’s because you only want to transfer the general colour of the background to the smoke. You don’t want any specific details or patterns showing though, making the smoke look additive. Next, convert the colour space from Linear to a colour space which smoothly separates the chroma from the luminance, such as YCbCr. (I've found using the HSV colour space to be inferior because of the way it separates the colour. Take a ColorWheel node and view it in HSV vs. YCbCr, for example). In the YCbCr colour space, the luminance (Y) can be found in the first channel (red), while the colours (Cb and Cr) can be found in the last two channels (green and blue). You’ll be looking to transfer the two colour channels to the smoke, while leaving the luminance of the smoke unchanged: Unpremultiply the smoke and convert the smoke’s colour space to YCbCr as well. Then, add a Copy node with the A input connected to the first Colorspace node (with the blurred BG), and the B input connected to the second Colorspace node (with the smoke). Change the Copy node so that it copies green (Cb) to green, and blue (Cr) to blue. After the Copy node, add another Colorspace node, reversing the colour space back from YCbCr to Linear. Lastly, premultiply the smoke before merging the result over the composite. Now you can lower the mix slider in the Copy node as needed, dialling in exactly how much chroma you want to transfer from the background to the smoke. Adjust the Blur node as well, to get as much local colour as you need. 💡 This technique doesn’t replace the need for manual grading/colour correction on the smoke, but it does help sit in the smoke nicely with the scene once a base grade match has been established. If there is a bright light shining behind the smoke, you can also transfer some of the luminance from the plate to the smoke. You could do that with a separate Copy node below the first one, copying red (Y) to red, and mixing it back separately. Or, you could Plus the blurred background with the unpremultiplied smoke, copy the smoke alpha back into the stream and premultiply again. Then, adjust the blur as needed until the light source looks correctly obscured. All right, so we have established that smoke is affected by the surrounding light – but smoke also affects the light itself: ## 7\. Smoke Scatters Light Smoke scatters the light passing through it. That happens in large part because of how the light bounces around between the particles inside the volume, but also because where there is smoke, there is usually heat. Hot air is less dense than cold air, and light refracts differently depending on the air density. When hot air mixes with cold air, the light is bent on its way through, and the background behind the smoke gets distorted. To replicate this behaviour in your composite, you can connect an [iBlur](https://www.nukepedia.com/gizmos/filter/iblurfh?ref=keheka.com) node to the background, mask it by the smoke’s alpha, and mix it back as needed (A mix value of 0.5 is a good start). Then, layer the smoke on top. The background will now look less clear through the transparent areas of the smoke, just like in real life. Another consequence of scattering light is that smoke softens the shadows cast by light passing through it. Harsh sunlight going through smoke won’t cast as sharp shadows as it normally would. So make sure to adjust the shadows in the plate accordingly. Speaking of shadows: ## 8\. Smoke Casts Shadows Smoke blocks light and therefore it casts shadows. Remember to add shadows from the smoke onto objects in the scene – if the lighting calls for it. And don't forget to add a contact shadow if the smoke is near the ground. You can CornerPin the smoke, flip it and use it as a mask to grade shadows onto the environment, or you can [project shadows](https://m.youtube.com/watch?v=NIrlInSJ2SQ&ref=keheka.com). You'll be surprised at how important it is to add shadows from the smoke onto the scene, especially with denser smoke. It will really help make the smoke sit nicely with its surroundings. Moving on, shadows are not the only thing that smoke will cast: ## 9\. Smoke Casts Reflections Although it can sometimes be dark and mysterious, smoke is not vampiric – it will cast reflections. If there are reflective surfaces near the smoke, remember to add reflections of the smoke to realistically embed the smoke into the scene. The following will usually do the trick: 1. Branch off a new pipe from the smoke. 2. Scale the smoke to -1 in X or Y (or for example to -0.5, depending on the angle). It’s useful to change the pivot point to the edge of the smoke before scaling. 3. Reposition the reflection as needed. Remember, the closer the smoke is to the reflective surface, the closer in screen space the reflection will be to the smoke. (Reach your hand out to a mirror and your hand's reflection will be much closer to your hand than your body's reflection is to your body). 4. Merge the result over the composite, mix it back if needed, and grade it to sit in (reflections are usually a little bit darker). Okay so smoke isn't vampiric, and it's not magical, either: ## 10\. Smoke Bumps Into Things Smoke will move around objects and through openings, but it isn't magical – it doesn't pass through solid objects. If you have a smoke element going up against a wall, for example, make sure to mask it out so that it doesn’t pass through to the other side. Smoke will get redirected when it hits an object that's solid. That can be tricky to do outside of FX simulations, but it is possible in some cases. Combine multiple elements and/or gently warp them to follow the path the smoke should take. While smoke doesn’t pass through solid objects, objects can pass through smoke: ## 11\. Smoke Gets Pushed Around If an object travels through smoke, the smoke gives way. The moving air around the object pushes the smoke to the side as the object passes through. The more substantial the object, like a fast moving car, the more the smoke gets pushed around. Make sure to animate the smoke reacting to the movements of other objects. Again, if you don't have an FX simulation, you can combine multiple elements together and/or warp them. As smoke moves around, there will be pockets of denser smoke and less dense smoke: ## 12\. Smoke Has Varying Densities Smoke is not uniformly thick or thin. Some areas of the smoke may contain a denser concentration of particles and be more opaque than others. Be relatively gentle when keying smoke and/or grading the smoke alpha. If you push it too far you'll start to lose the natural variation in density, and the smoke will look clamped and edgy. If you're grading the smoke alpha, you can use my [Alpha Density](https://www.keheka.com/alpha-density-matte-control-tool-for-nuke/) tool for a more natural density change. Another trick is to grade the alpha using a ColorLookup node: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/06/ColorLookup.png) Adjusting the curve of a ColorLookup node. You can drag the top right point on the curve horizontally to the left (equivalent to gaining up the alpha), and with the point selected press H to smooth the curve out so the transition is less harsh as the alpha values approach 1\. You can also Ctrl (Cmd) + Alt + Left click on the middle of the curve to create another point, and move that up or down to adjust the gamma of the alpha. If your smoke element isn't very dense and doesn't appear strong enough over the composite, you can also just merge it over again. Double or triple it up and see if that gives you a better result. Add a touch more contrast to the alpha of the copies, if needed. (Almost) no matter the density of the smoke, another thing to keep in mind is that: ## 13\. Smoke Sticks Around Unless the smoke is extremely thin, and/or the conditions are windy and turbulent, smoke doesn’t disappear quickly. It takes a long time for smoke to dissipate, and so avoid animating the opacity of the smoke off too quickly. 'Subtle' is often the keyword when it comes to smoke. ## 14\. Study Smoke References From Real Life The tips above should get you a long way there, but if in doubt, don't guess how smoke should look or behave. Do the research – find real life references and match your smoke to them. Even magical smoke looks better when rooted in reality. Whether lingering, forceful, dull, or shimmering, there is value in learning the visual and behavioural traits of different types of smoke. Depending on what kind of smoke you're compositing, consider the relationship between the colour and the alpha. For instance, the smoke from a cigarette is fairly bright but not very opaque. It has high RGB values but low alpha values. On the other hand, an oil fire is dark and very opaque. It has low RGB values but high alpha values. Somewhere in between the two, you'll for example find smoke from a small signal flare. It may have medium RGB values, tinted a certain colour such as red, and medium alpha values. Speaking of different types of smoke, there are also many other kinds of airborne particle concentrations: ## 15\. There Are Myriad Particle Concentrations While smoke is soot and ash based, there are plenty of other types of particles, such as water based, sand based, or dust based. The tips in this guide also apply to compositing those types of particle volumes. Feel free to return here for a reminder when compositing things like: - Ash - Atmos - Blood spray - Burnouts - Chimney smoke - Cigarette smoke - Clouds - Cold breath - Confetti - Dust clouds - Dust hits - Dust particles - Exhaust - Explosions - Fires - Flour - Foam - Fog - Glitter - Haze - Incense - Leaves blowing in the wind - Magical smoke - Mist - Muzzle flashes - Oil fires - Powder - Sand storms - Seeds blowing in the wind - Signal flares - Smoke screens - Smoke trails - Snow - Spray - Stardust - Steam - Swarms - Underwater particles - Volcanic eruptions - Waterfalls - Welding fumes I hope you found this tutorial useful. For more Nuke tips & tricks, see [Nuke](https://www.keheka.com/tag/nuke/). [Sign up for the newsletter!](https://www.keheka.com/#/portal/signup) ### (Un)Archiving Nuke Scripts URL: https://www.keheka.com/un-archiving-nuke-scripts/ Last updated: 2023-06-02T22:15:23.000Z Best practices for (un)archiving Nuke scripts or packaging them up for sending to another vendor… ## Wrapping Up If you are working with another vendor on the same shot, or are archiving a project after it has wrapped up, you'll have to package up the relevant Nuke scripts and their associated elements. Depending on the amount of nodes in your scripts and how you’ve organised them, this can be quite a time consuming process. Finding all the Read nodes and other referenced files in the scripts, opening up each of their properties, and copy/pasting the individual file paths will normally require a lot of manual, repetitive work. Your scripts may also carry a ton of dead weight in the form of old render versions and node setups which are no longer used in the final composite. Packaging all that up to avoid script errors is a waste of resources. Let’s look at how we can make this process as easy, efficient, and economical as possible. ## Preparing The Nuke Script First, let's optimise the Nuke script for sending and/or storing it: ### 1\. Clean Up The Script After days or weeks of developing your composite, you'll often have made multiple versions of various parts of your script, with different node setups and settings. By going through all the testing required to find the best solutions for your shot, and addressing creative and technical notes along the way, you'll likely have accumulated some 'rubbish' in your script, i.e. nodes which are no longer needed in the final composite. Start off the preparations by cleaning up your script: delete any idle or unused, disconnected, and/or disabled nodes in the script. There is usually no need to keep this excess baggage weighing down your script, and it can potentially cause confusion for the next person who picks it up. Next, version up any older versions of renders, cameras, or other referenced files in the script – IF you don't specifically need the older versions anymore. That way, you avoid having to send or store multiple versions of the same image sequence unnecessarily, for example. Instead, all the relevant Read nodes will point to a single image sequence, saving bandwidth and disk space. Already in this first step, you'll likely have removed and consolidated a fair amount of nodes, leaving you a lean script which only contains the exact nodes it needs to construct the final composite. ### 2\. Organise The Script With a trimmed script, the next port of call is to make sure it’s neat and organised. Tidy up and label your script to make it easy for the other vendor, your future self, or your colleagues to pick up the script and understand what's going on: - Untangle messy and criss-crossing pipes. Use Dot nodes generously and try to keep the majority of the pipes exclusively vertical and horizontal for a better read of your script. - Have a clear B-pipe flowing straight down in your script, with each A-section coming in from the left. This makes the flow of your composite easy to read. - Add space between nodes and the different sections of your script, clearly separating each portion. This makes it easier to navigate your script and find the necessary parts quickly. - Add descriptive Backdrops with large fonts to each section or grouping of nodes. At a glance, anyone should be able to tell what's going on, and where, in your script. The rule of thumb here is the more, the merrier. - Crop any redundant overscan from your bounding boxes to keep the script running smoothly and quickly. - Remove any superfluous channels from the stream to avoid unnecessary calculations and slowdown. - Make it clear if you are using a $gui expression anywhere in your script. Put a bright Backdrop or StickyNote with a descriptive label next to the node(s) using the expression. That way, it’ll be quicker to troubleshoot why the end of the composite doesn’t match the final render inside Nuke. - Avoid hiding pipes. Try instead to organise the pipes neatly so that it’s immediately easy to follow the structure of your script. - It can be a good idea to create an element bin at the top of your script: a Backdrop with all the Read nodes, Cameras, and other referenced files used in your script. Then, using a tool such as [Stamps](https://www.nukepedia.com/gizmos/other/stamps), or organising pipes from each file, you can reference each file only once while using it multiple times in the script. This helps to avoid forgetting to update copies of for example Read nodes around your script. - Avoid burying your compositing work within nodes. It’s possible to do patching work inside the Roto node, for example. (By setting the output to rgba, selecting bg as the Source for your roto shape, and then adjusting the transformations in the Clone tab). But that is a convoluted way of working. It’s not immediately obvious what’s happening to someone seeing just a Roto node in the stream. Instead, just use a Transform node, Keymixed by a Roto. It’s much easier to read what’s going on at a glance. By the end of this second step, your script should almost read as a tutorial script: organised, snappy, and with clear descriptions for each part. ### 3\. Convert Gizmos To Groups The other vendor may not have all the Gizmos that you are using in your script available to them in their pipeline. Or, they may not have the same versions of your Gizmos available. To avoid errors caused by missing or incompatible Gizmos, convert all the Gizmos in your script to Groups. You can do that by going to the Gizmo's properties, and clicking on the Copy to group button in the Node tab. If you have quite a few Gizmos in your Nuke script, you can use an [automated Python script to convert them into Groups](https://www.toadstorm.com/blog/?p=395). ### 4\. Set Relative File Paths Normally, any node in your script which is referencing a file on disk will use an absolute file path – which includes unique things like for example your username or a specific disk drive in the file path. When another vendor opens the script on their machines, they won't have the same file paths on their disks, and the nodes will error out in Nuke. We'll look at how we can relink the file paths later, but a good practice is to [set relative file paths](https://learn.foundry.com/course/1024/play/relative-paths-in-nuke). That way, you save the other party (or your future self!) time relinking all the files. ### 5\. Repeat For All Relevant Scripts Repeat steps 1 to 4 for any Precomp scripts or other scripts which your main script is dependent on. ## Preparing The Files Once you have your Nuke script in order, you're ready to collect all the files that are referenced in the script. Large scripts can often contain dozens, if not hundreds of referenced files, and multiple versions of each. There are usually image sequences (e.g. .exr) and video files (e.g. .mov or .mp4), that are referencing files on disk such as: - Scans: Foreground, background, clean plate, reference plates, crowd or set elements, etc. - FX elements: Smoke, steam, fire, dust hits, fog, muzzle flashes, rain, blood spurts, explosions, debris, etc. - CG renders: Often multiple renders and render passes (which are also sometimes separated into individual renders), and sometimes including Deep renders. - Matte paintings: Set top ups, landscape extensions, texture enhancements, etc. Often with multiple layers. - Roto & Prep: Motion blurred and non-motion blurred roto, often multiple renders with different layers split by channels: Characters, set pieces, hair separation, etc. - References: Concept art, look references, stock footage, set photography, edit reference, look development renders, etc. - Precomps: Nuke scripts and image sequences. This could be sections of your main script separated into their own scripts, or files precomped from your main script such as Smart Vectors. Accompanying the scans and other image files, there may be files such as: - LUTs: I.e. Lookup Tables. These offset the pixel values of the image, transforming one colour to another. You can for example use them to go from one colour space to another. They are often used overall on the show for all shots. - CDLs: I.e. Colour Decision Lists. They are essentially simplified LUTs, often applied on a shot-by-shot basis to get the right grade for each scan so it fits in with the sequence. Then there are matchmove data files, such as: - Cameras: Matchmove cameras for each scan, and sometimes a stitched or animated camera for shots where the camera move will be altered. - Lidar geometry: High resolution laser scans of the set or set pieces. Usually quite heavy (lots of polygons) and normally only used as positioning reference for placing Cards, Cameras, or other geometry. - Tracking cones: Matchmove pins located at the tracking points in the scan. Useful for positioning Cards or [extracting 2D tracking data](https://www.keheka.com/3d-to-2d-tracking-in-nuke/). - Projection geometry: Simplified geometry which is used instead of the Lidar for projections. - Lens distortion data: ST Maps or other lens distortion data used for applying or removing lens distortion to or from your scans. And sometimes, you may be using other custom files, such as: - Non-standard fonts. You may be using a Text node for a HUD or other graphic element which has a custom font. - Specific files. Custom files generated by Nuke tools/plugins, for example related to machine learning/AI tools. 💡 There may even be other files which I haven't listed above. Comb through your script and find them all. In order to package up all these files together with the main Nuke script itself, you need to know their file paths. This can be a tedious process if you have a lot of referenced files in your script, but there are some shortcuts. For any image sequence or video file that you have imported through a Read node in your script, you can find their file paths by going to File → Comp Info, in the top menu bar: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/06/Comp_Info.png) The Comp Info menu in Nuke. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/06/Elements.png) The Comp Info panel. 💡 The file path to the Nuke script will also be located at the top of the Comp Info panel. You can copy/paste the file paths directly from this panel, saving you the time it would take to open up each Read node and copy its file path. 💡 Keep in mind, this panel will only show the file paths for Read nodes, and not for DeepRead or ReadGeo nodes. For the other file paths, you'll have to look them up manually. To speed up this process, you can type / and for example ReadGeo to find and select nodes in your script containing that string in their name. 💡 If you continue clicking / and Enter, the Node Graph will re-centre on the next search result in the list. Repeat for any other node type you have which references external files, such as DeepRead or Text. For the file paths to the LUTs and CDLs, look inside any colour transformation node in your script such as the OCIOFileTransform or OCIOCDLTransform nodes, or ask your lead or supervisor where you can find the files on disk. With all the file paths on hand, you can now copy every file needed for the final composite to a location of your choosing. ## Automating The Process There are software tools out there which can automate the archiving process, such as [SmartCollect](https://www.cragl.com/tool.php?tool=smartCollect). 💡 There are also several free Python scripts available on Nukepedia (may contain less functionality). ## Unarchiving Scripts When you receive a packaged up shot from another vendor, or are unarchiving an old shot, there is a good chance that the nodes which are referencing external files will error out in Nuke (i.e. relative paths were not set). If so, you'll have to relink the file paths. You can do this either manually or by using an automated Python script such as [Find Path](http://www.nukepedia.com/python/misc/bvfx-find-path). I hope you found this tutorial useful. For more Nuke tips & tricks, see [Nuke](https://www.keheka.com/tag/nuke/). [Sign up for the newsletter!](https://www.keheka.com/#/portal/signup) ### Advanced IBK Keying Techniques And Setups In Nuke URL: https://www.keheka.com/advanced-ibk-keying-techniques-and-setups-in-nuke/ Last updated: 2025-02-16T09:42:42.000Z ⭐ With these advanced techniques and setups, the IBK will become one of your most powerful allies when keying… _This post is for paying subscribers only._ ### Success Requires Persistence URL: https://www.keheka.com/success-requires-persistence/ Last updated: 2023-05-03T06:59:59.000Z Persistence is probably more important for achieving success than you think. ## Getting Back On The Horse Many people, including myself, will testify to the benefits of consistency in the pursuit of success. If you keep showing up and doing the work, then you will eventually become good at it. If you keep putting in the hours – applying yourself in focused practice – it’s almost inevitable that you will achieve at least some success in your field. Being consistent is much easier once you have built some momentum. When you have gotten into the habit of consistently working out three times a week, for example, it’s easier to continue to work out three times every week. The ‘auto-pilot’ kicks in. But life often has a way of throwing a wrench into the works. You will ‘fall off the horse’, many times: - You'll go on holidays - You'll have fun events planned - You'll be sick or injured some days - You'll have other important commitments You’ll 'break your streak'. That's just life. Persistence is how you get back on the horse. Persistence is about not letting a (temporary) lack of consistency stop you from continuing your pursuit. It’s about restoring a beneficial (but hard) habit that was left to rust for a while. If you stop doing a difficult habit, it's very simple for an easy habit to swoop in and replace it. That's when you need to be persistent. If you miss a week or two (or three) of working out, for example, accept that loss and move on. Start right back up again. It's very easy to think: 'I missed three weeks of practice now, what's the point in continuing?' But that’s a complete fallacy. That’s the easy habit trying to sneak back in. You lost three weeks – but so what? That's not going to matter in the slightest when you look back after 300 weeks of practice and admire your impressive progress. 💡 Sir David Attenborough describes how the [San bushmen use persistence hunting to chase down a kudu](https://www.bbc.co.uk/programmes/p009lwhq). Persistently chasing the prey, despite setbacks, until it collapses of exhaustion is a (slightly dark) metaphor for chasing your goals. Keep at it, stick to it, until your own kudu gives up and gives you what you want. The only way to get to that point, though, is to get back on the horse. Continuing your course of action despite difficulty is the result of training yourself to do something in a controlled and habitual way. A lot of that is in the way you think. Shifting your default mindset from ‘this is a devastating setback’ to ‘this is just another bump (of many) in the road’ will help. Another way of defaulting to persistence, is to visually remind yourself regularly of what you want to be doing. If the first thing you see when you wake up in the morning is the workout outfit you prepared the night before, it becomes easier to work out. The outfit is there and ready to go, and it’s easy to choose to put it on and go outside for a run, for example. If the first thing you see when you go into the kitchen is your vitamins, then it’s easier to remember to take your vitamins. And so on. Fostering good habits makes it easier to be persistent, which makes it easier to be consistent, which in turn makes it easier to achieve your goals successfully. I hope you found this article useful. For more productivity tips, see [Productivity](https://www.keheka.com/tag/productivity/). [Sign up for the newsletter!](https://www.keheka.com/#/portal/signup) ### How To Calculate Reference Frames In Nuke URL: https://www.keheka.com/how-to-calculate-reference-frames-in-nuke/ Last updated: 2024-05-15T15:53:37.000Z Choose your own reference frame for any animated transformations by using some basic maths. ## Origin A reference frame is essentially the origin of all transformations. The source frame. It's the frame on which there is no change in the original transformation of an object. Imagine a Transform node connected to a smoke element in Nuke. On the reference frame, the transformation values in the Transform node would be the default values. I.e., translate would be 0 in both x and y, rotate would be 0, scale would be 1 in both x and y, and skew would be 1 in both x and y. Any animated transformations emanate outward from the reference frame. For example, 2D tracking data: ## 2D Reference Frame Let's say you are working on a shot in which a person is walking down the street. The working frame range is 1001-1100; there is a camera move following the person in the shot, and you have a matte painting of a street sign which was painted on frame 1050. If you track the street sign into the shot using a Tracker node, for example, you have to make sure the reference frame in the Tracker is set to frame 1050 for the matte painting to line up. Otherwise, you'd have to manually offset the transformations in order to line up the sign correctly. 💡 The matte painting was already lined up on frame 1050 by the matte painter, and so the transformations in the Tracker should be zeroed out on that frame. The reference frame is by default set to frame 1 in the Tracker node. That means the Tracker will invert the tracking values on frame 1, to zero them out, and offset the whole animation curve to compensate for the change on all keyframes. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/04/Tracker_Reference_Frame.jpg) By default, the reference frame is set to frame 1 in the Tracker node. The animation curves in the Tracker stay (relatively) the same no matter which reference frame you select – they only get offset based on the values on the reference frame. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/04/Curve1.png) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/04/Curve5.png) The animation curve is offset by choosing a different reference frame, but otherwise it stays the same. If you track the aforementioned shot from frame 1001 to 1100, the Tracker will by default use the tracking values on frame 1001 to calculate the offset for the animation curves. That's because the values on frame 1001 will repeat all the way back to frame 1 (unless you have extrapolated the animation curve differently). Setting the reference frame to frame 1050 will zero out the transformations on that frame instead, and offset the animation curve accordingly. ### Automatically Offsetting The Animation Curve So, how does the Tracker invert the values on the reference frame and calculate a new animation curve? It’s very simple, and it does it automatically for you. Depending on which transformation it is inverting, the Tracker either uses subtraction or division to invert the values. The translate and rotate values are inverted by subtracting the original values by themselves. A value subtracted by itself becomes 0\. So, if something moves 100 pixels to the right, subtract 100 from the x translation to go back to the basic position. The scale and skew values are inverted by dividing the original values by themselves. A value divided by itself becomes 1 (the value 0 is an exception here). So, if something is scaled up by 2, divide it by 2 again to go back to the basic size. So, the Tracker either subtracts or divides the transformation values on all frames by the values on the reference frame. Which means, on the reference frame the translate and rotate values become 0, and the scale and skew values become 1\. Ergo, no transformation. 💡 Check out [3D To 2D Tracking In Nuke](https://www.keheka.com/3d-to-2d-tracking-in-nuke/) for a tutorial on how to convert 3D tracking data into 2D tracks in a Tracker node, which lets you freely change the reference frame automatically by changing the reference\_frame knob. ### Manually Offsetting The Animation Curve The Tracker node makes it easy to automatically invert the transformation values and offset the animation curve based on a reference frame. However, other nodes don’t have this handy function. You can quite easily do it manually, though – for example if you want to change the reference frame of an animated Transform node. Right-click on any animated transformation in the Transform node's properties, and select Edit expression. Since the transformation is animated, it will have an animation curve – and the expression will say curve. This expression simply retrieves the values of the animation curve on the current frame, for any respective frame you go to. You can retrieve the values of the animation curve on a specific frame by typing the frame number in parentheses after the word curve in the expression. So, curve(1050) would give you the values of the animation curve on frame 1050. Using the above expressions, you can zero out the values on the animation curve on any frame you want. Our reference frame was frame 1050, and so: To invert the translate and rotate values on the reference frame, and offset the whole animation curve to match, use subtraction: curve - curve(1050) To invert the scale and skew values on the reference frame, and offset the whole animation curve to match, use division: curve / curve(1050) These expressions will shift the whole animation curve so that it is zeroed out on the reference frame 1050, specifically. 💡 If you want to connect other nodes in between – before you invert the transformations back – you can split out the inverse transformations. Copy the Transform node, and while on the reference frame, delete the animation on the transformations in the copy. Then tick the invert checkbox and place the inverted Transform node after your in-between nodes. ### ⚠️ Pitfall Alert Exactly like the Tracker node does, the Transform node performs transformations in a specific order. That is, the reverse order of how the operations are listed in the node. From top to bottom, the transformations are listed in the following order: translate → rotate → scale → skew X → skew Y. (In the skew\_order dropdown menu, you can choose whether to skew in X or Y first. By default it’s set to XY, i.e. X first, then Y). And so, the order in which the Transform node actually performs the transformations is: skew Y → skew X → scale → rotate → translate (Or skew X → skew Y → scale → rotate → translate, if you choose YX in the skew\_order dropdown menu). Because of this specific order of operations, you have to tick the invert checkbox in the Transform node to correctly invert the transformations. Or, break the Transform node up into multiple Transform nodes, one for each transformation, and reverse their order in the pipe, like above. Only then will the values be inverted in the correct (reverse) order. If you instead were to copy the Transform node, then connect the copy underneath it, and manually invert the values in the copy, the copy would not correctly invert the transformations of the original node – because the copy would still be performing the operations in the same order as the original Transform node (and not in reverse like it should). ### Special Case: CornerPin To change the reference frame of an animated CornerPin node, you have to consider both the to and from values. (Because in order to zero out any transformation, the corresponding to and from values have to be equal). In the to1 x and y fields, add the following expression: curve - curve(1050) + from1 In the to2, to3, and to4 x and y fields, replace the from1 with from2, from3, and from4. Lastly, change the 1050 to your desired reference frame. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/05/CornerPin.jpg) The expressions for changing the reference frame of an animated CornerPin to frame 1050. ## 3D Reference Frame The basic approach to calculating a reference frame in the context of 2D transformations applies to 3D transformations as well; you just have one more dimension to account for. That means, if you want to correctly invert the transformations, you now have to reverse both the transform order and the rotation order. Let’s say you have some animated geometry and you want to change the reference frame. The same expressions we wrote before still apply: To invert the translate and rotate values on the reference frame, and offset the whole animation curve to match, use subtraction: curve - curve(1050) To invert the scale and skew values on the reference frame, and offset the whole animation curve to match, use division: curve / curve(1050) These expressions will shift the whole animation curve so that it is zeroed out on the reference frame 1050, specifically. ### ⚠️ Pitfall Alert, Part 2 Keep in mind that, just like with the 2D transformations, 3D transformations also happen in the same specific order. And since there is one more dimension, there are more options to reverse. If you again want to split out the inverse transformations in order to place other nodes in between, you can connect a TransformGeo node to your animated geometry, with an Axis node connected to the TransformGeo’s axis input. Next, copy the transformation values from the animated geometry on the reference frame and paste them into the Axis node. Then, in the Axis node: - Change all the translate and rotate values to their negative equivalents, e.g. 10 becomes -10, and -10 becomes 10. - Change the scale and skew values to 1 divided by the value, e.g. 2 becomes ½, and ½ becomes 2. - Change the transform order and rotation order to their opposites, e.g. from SRT to TRS, and from ZXY to YXZ. You have now offset the animation curves of the animated geometry to reflect the new reference frame. Please note that, just like before, it’s crucial to reverse the order of the transformations correctly. So don’t forget that last step above. ### Projections Projections are a bit simpler when it comes to applying reference frames. You only need to remember to either: - Framehold the projection camera on the reference frame that the matte painting was painted on. Or: - Delete the animation in the projection camera on the reference frame. That way, the projection stays correctly locked to the reference frame. ### 4x4 Transformation Matrix 3D nodes which apply transformations – such as the Camera, Axis, TransformGeo, and ReadGeo nodes – all use 4x4 matrices to apply the transformations under the hood. And so another way to invert the transformations is to invert the 4x4 transformation matrix applied by the node. That requires a bunch of calculations, so let me save you some time and link a tool which does it for you: I hope you found this tutorial useful. For more Nuke tips & tricks, see [Nuke](https://www.keheka.com/tag/nuke/). [Sign up for the newsletter!](https://www.keheka.com/#/portal/signup) ### Obsession Is Essential URL: https://www.keheka.com/obsession-is-essential/ Last updated: 2024-01-29T19:20:33.000Z Nobody ever became truly great at something without obsessively pursuing it. ## Harmonious Passion Often, the word obsession has got negative connotations. And there definitely are unhealthy obsessions. Fixating on and worrying about the past or the future, obsessing over a person who doesn’t like you back, or playing video games so much that it negatively impacts your real life (school, work, etc.), are all damaging behaviours that, if continued for longer periods, will hurt you. However, I would argue that channelling your energy and your focus into something productive and positive – and obsessing over that – can be a good thing. In fact, I have a theory: Nobody ever became truly great at something without obsessively pursuing it. I don’t think that Jimi Hendrix became a legendary musician just by casually practising the guitar every once in a while. I also doubt that Lewis Hamilton won the most Formula 1 races of all time by driving to and from the store once a week. And I’m sure you will agree that Eliud Kipchoge didn’t run the fastest marathons in history by training a little bit here and there when he felt like it. No. They are (or were) obsessed with what they do. Living and breathing their obsession in their waking hours, every day. I believe that the same trend exists in any profession, sport, or craft: The top performers are obsessed. They possess a strong, [harmonious passion](https://selfdeterminationtheory.org/SDT/documents/2003%5FVallerancBlanchardMageauKoesnterRatelleLeonardGagneMacolais%5FJPSP.pdf) – freely incorporating their chosen activity into their identity. ## Getting Addicted I used to play a lot of video games (I wish I had more time for that now) – and I think there are great benefits to playing: - Improving your logical puzzle-solving abilities - Enhancing your reaction speed - Practising your eye-hand coordination - Building social connections with other players - Improving your team leading and cooperation skills - Gaining a sense of mastery and achievement And more. However, I eventually started obsessing over the games that I played. Massively Multiplayer Online games can be very addictive, and I got addicted. I played a whole bunch of them, like FFXI, FFXIV, TERA, Rohan, Aion, and Age of Conan. After I finished college and the mandatory service in the Norwegian army, I took a gap year to figure out what I wanted to do. I had a ton of free time and ended up playing MMOs much more than before. Hours and hours every day – often as if they were a full-time job. I saw the same trend in every MMO I played: I rose to the top among the players on the server, beat the hardest world bosses, got the strongest weapons/gear, and obtained massive amounts of in-game gold. ‘Success’ in those kinds of games is very repeatable. You have to obsessively pursue it and put in the hours. But ultimately, the success you achieve in an MMO is not very useful in real life. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/04/Titan.jpg) My ridiculously decked out character on high ground overlooking Kelsaik, one of the hardest bosses in TERA at the time, before a 20-man raid. After a lot of gaming and a good amount of soul searching in that gap year, I decided to go to university and study creative media - which later evolved into a career in visual effects. ## Cold Turkey Early on at university, I began noticing the very real impact the games had on my life and studies. I found myself wanting to play more than I wanted to learn the new subjects. Luckily, I realised what my priorities should be, and decided to quit playing. Cold turkey. Instinctively, I did something that I would read about years later in the book Atomic Habits, which was to make bad habits difficult to start/continue. I gave away all my weapons, gear, and money in the game to a friend of mine who was still playing, and deleted any items that were bound to my character, before deleting the character itself and the game account. It would be a massive pain to go back and restore and rebuild the character which I had spent so long upgrading. And that worked. I stopped playing MMOs. Which freed up time to actually study. But addiction is a real thing, and I felt phantom ‘withdrawals' for a couple of years after I quit. Like an ill-defined hole left behind. Online gaming, to me, was an unhealthy obsession. And over time, I replaced it with a growing, much healthier obsession for compositing visual effects in Nuke. Which became my harmonious passion. I think it’s easy to get addicted to games when you don’t feel like you have a purpose, because games flood you with a feeling of achievement. For me, working in VFX provided that missing sense of purpose, which dulled the ‘need’ for playing video games. – Don’t get me wrong, I still love them, but I am perfectly okay with playing much less. ## Healthy Obsessions And I think that’s a valuable strategy: replacing unhealthy obsessions with healthy ones. Fostering a harmonious passion while making it difficult to fall back on damaging behaviours. A harmonious passion even has a [positive effect on life outside of doing the activity](https://www.researchgate.net/profile/Rajiv-Amarnani/publication/332701500%5FConsumed%5Fby%5Fobsession%5FCareer%5Fadaptability%5Fresources%5Fand%5Fthe%5Fperformance%5Fconsequences%5Fof%5Fobsessive%5Fpassion%5Fand%5Fharmonious%5Fpassion%5Ffor%5Fwork/links/5decb2e74585159aa46bbbb3/Consumed-by-obsession-Career-adaptability-resources-and-the-performance-consequences-of-obsessive-passion-and-harmonious-passion-for-work.pdf?origin=publication%5Fdetail). One way to build a healthy obsession is to [gamify learning](https://elearningindustry.com/gamification-for-learning-strategies-and-examples). Gamification maximises your enjoyment and engagement by capturing your interest and inspiring you to continue learning. When you make learning into a game, it feels less like work and more like play. Streaks, leaderboards, badges, and stories are partly why Duolingo is so popular for language learning, for example. (I’m on a 1649-day German streak at the moment – it works). But the important thing is to find something you enjoy doing. For its own sake. Compositing is a fantastic way for me to combine my technical and creative abilities, and learning new techniques in Nuke is something I do even outside of work, in my own time. I realise it can be easy to upset the work/life balance but if something doesn’t (only) feel like work to you, the dynamic changes. If you want to be great at something, allow yourself to obsess a little. 🙂 I hope you found this article useful. For more reflections, see [Advice](https://www.keheka.com/tag/advice/). [Sign up for the newsletter!](https://www.keheka.com/#/portal/signup) ### Fresnel Reflections In Nuke URL: https://www.keheka.com/fresnel-reflections-in-nuke/ Last updated: 2023-04-19T22:00:03.000Z How to create more realistic reflections in Nuke. ## What Is The Fresnel Effect The fresnel effect describes how the intensity of the specular reflections changes depending on the viewing angle to the surface normal of an object. When you look at a surface of an object that’s facing directly towards you, the viewing angle is close to zero and there will usually be very little specular reflections visible. As the viewing angle increases, the amount of specular reflections increase. In the example image below, there is not much specular reflection on the surface of the water close to us. That’s because we’re looking down at a shallow angle to the surface normal of the water surface. The further out on the lake you look, the more the viewing angle increases, and the more intense the specular reflections get. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/04/Fresnel_Effect.jpg) An example of the fresnel effect. 💡 You can try it at home: look at a table from directly above. Then, lower yourself to get closer to eye level with the table and notice the change in the reflections. ## Creating The Fresnel Effect In Nuke You can get fresnel reflections in Nuke by creating a fresnel matte and multiplying it with your reflections: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/04/Full_Reflection.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/04/Fresnel_Matte.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/04/Fresnel_Reflection.jpg) From left to right: (1) An even reflection across the whole of a sphere, (2) a fresnel matte made for the sphere, (3) the two multiplied together with a Merge (multiply), resulting in a fresnel reflection. Then, add these fresnel reflections to your object: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/04/Sphere_No_Reflection.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/04/Fresnel_Reflection-1.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/04/Fresnel_Reflection_Comp.jpg) From left to right: (1) A textured sphere with no reflection, (2) the same fresnel reflection created above, (3) the two added together with a Merge (plus). So how can we do this? Let’s look at a method for creating the fresnel matte: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/04/Setup01.png) A setup for creating the fresnel matte. [ Fresnel Matte Setup v1.0 Download a copy of the fresnel matte setup for Nuke. (Paste the text into your Node Graph). Fresnel\_Matte\_Setup\_v1.0\_keheka.txt 1 KB download-circle ](https://www.keheka.com/content/files/2023/04/Fresnel%5FMatte%5FSetup%5Fv1.0%5Fkeheka.txt "Download") Start with your CG render which has channels containing a normal pass and a position pass. Connect the color input of a ReLight node to your CG render. In the ReLight node, select your normal and position passes in the dropdown menus (which may be named differently than N and P): ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/04/Setup02.png) The settings in the ReLight node. Next, connect the material input of the ReLight node to a Phong node, with the following settings: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/04/Setup03.png) The settings in the Phong node. By setting the diffuse to 1 and the specular to 0, we get the nice, soft lighting that we’re after in this fresnel matte. Next, connect your camera to the cam input of the ReLight node. Then, create a Light node and set the light type to point: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/04/Setup04.png) The settings in the Light node. Connect the axis input of this Light node to your camera. This point light will now follow your camera around, and shine a light on the scene from the camera’s point of view. That means, surfaces facing the camera will always receive direct light. Surfaces which are angled more perpendicular to, or facing away from, the camera will receive much less or no light. Connect the lights input of the ReLight node to the Light node. The output of the ReLight node will now be a version of your CG with direct lighting on the surfaces facing the camera. However, for the fresnel effect, we want to make a matte which does the opposite: it should be brighter where the surfaces are facing more perpendicular to the camera, and darker where they are directly facing the camera. To do that, just connect an Invert node and mask it by the alpha of your CG. Finally, to be able to adjust the matte, add a Grade node, also masked by the alpha of the CG. A good starting point is to set the gamma to 0.5, which will darken the matte where the surfaces are facing directly towards the camera. Adjust the gamma and gain as needed. Make sure to clamp the black and white levels by ticking the checkboxes. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/04/Setup05.png) The settings in the Grade node. Now you have a working fresnel matte. Merge (multiply) it with your reflections to get fresnel reflections, and then Merge (plus) those with your CG. 💡 If you have been following the newsletter or the website for a while, you might remember [this article about facing ratios](https://www.keheka.com/upgrade-your-light-wraps-using-facing-ratios/). That method creates the same output as we have done in this article, a fresnel matte. Which means, you can use the method in that article to get fresnel reflections, or you can use the method in this article to create a facing ratio pass. Two different ways of achieving the same result – which can be useful for different things. I hope you found this tutorial useful. For more Nuke tips & tricks, see [Nuke](https://www.keheka.com/tag/nuke/). [Sign up for the newsletter!](https://www.keheka.com/#/portal/signup) ### How To Create A Sense Of Depth In Your Composite URL: https://www.keheka.com/how-to-create-a-sense-of-depth-in-your-composite/ Last updated: 2025-02-16T09:43:15.000Z ⭐ An important part of your job as a compositor is to make 2D images look and feel real and three-dimensional to the audience. And to build believable composites you need to be able to recreate the sense of depth… _This post is for paying subscribers only._ ### Deep Holdouts Using Geometry In Nuke URL: https://www.keheka.com/deep-holdouts-using-geometry-in-nuke/ Last updated: 2023-03-23T20:04:35.000Z The DeepCrop node in Nuke is severely limited for isolating specific areas of your Deep render. Here is a more flexible technique. ## Locked To The Frustum When using the DeepCrop node to isolate an area of your Deep render in Nuke, you are at the mercy of your render camera's orientation in 3D space. If the camera's frustum doesn't happen to align with the area you want to isolate, it becomes very difficult to crop the Deep accurately. That's because the DeepCrop node crops the Deep based on the distance from the camera. It relies on the camera’s orientation in relation to the scene – using the camera’s frustum to crop the Deep. Below is an example scene with a railing in front of a wall. The camera is viewing the scene at an angle: The example scene. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/03/Scene.png) The scene when viewed through the camera. Let’s say we want to isolate the railing. Using the DeepCrop node, we run into issues because the camera is at an angle to the scene: DeepCropping with the camera at an angle to the scene. 💡 In the video above, I constrained a Card to the Camera’s frustum and linked the Card's position to the zfar distance of the DeepCrop, to show more clearly how the DeepCrop node crops based on the camera’s frustum. Because the DeepCrop is affected by the camera’s orientation, isolating just the railing becomes very difficult. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/03/DeepCrop.png) The DeepCrop keeps unwanted parts of the wall and floor, and crops out parts of the railing which we want to keep. In this case, the DeepCrop’s limited capabilities fall short. Instead, it's much more useful to set up your own deep holdouts to crop the Deep and isolate specific areas. We can position a Card to block parts of the scene from the camera, and use it as a Deep holdout. By lining the Card up with the railing, we can block everything behind the Card (from the camera’s perspective): Holding out the Deep using a Card, to isolate the railing. 💡 What the Card covers when seen through the camera is what will be held out from the scene. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/03/DeepHoldout.png) The Deep holdout method keeps the entire railing and nothing else, just as intended. 💡 The DeepCrop node’s zfar knob works similar to a Card covering the entire frustum of the camera (you can make it smaller by changing the format in the bbox knob). It crops out anything beyond the Card’s Z distance from the camera. The znear knob works in the same way, only it crops out anything in front of its respective Card – i.e. anything between the camera and the znear distance. To use the Card as a Deep holdout, simply output the Card through a ScanlineRender node using the same camera and format as your main scene or Deep render, and connect the two with a DeepMerge (holdout). Lastly, connect a DeepToImage node to output the image. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/03/Setup.png) DeepCrop setup vs. Deep holdout setup. I hope you found this tutorial useful. For more Nuke tips & tricks, see [Nuke](https://www.keheka.com/tag/nuke/). [Sign up for the newsletter!](https://www.keheka.com/#/portal/signup) ### 3D To 2D Tracking In Nuke URL: https://www.keheka.com/3d-to-2d-tracking-in-nuke/ Last updated: 2023-03-12T19:48:50.000Z How to create 2D tracks using a matchmove camera. ## Free Tracks If you have a matchmove camera and a 3D scene, you can get accurate 2D tracks for free. Let’s say you want to track a roto shape to your scan, and you have a matchmove camera and geometry (or a point cloud to reference the scene). Typically, you would line up a Card to the area of the scene that you want to roto, project your roto onto the Card, and output the projection via a ScanlineRender node using the matchmove camera. Working with projected rotos can feel a bit unwieldy and difficult, though, especially if you have to animate the roto shapes. As you get further away from the projection frame, moving the splines into place becomes more and more guesswork. Instead of this trial and error approach, it’s very useful to instead convert the matchmove data into 2D tracks and link those directly to the Roto node. That way, you can work with the splines pretty much in the same way as you would during a normal roto task, without any projection. ## Reconcile3D Nuke has a great node which you can use to convert 3D object positions into 2D tracks using your matchmove camera. It’s called [Reconcile3D](https://learn.foundry.com/nuke/content/reference%5Fguide/transform%5Fnodes/reconcile3d.html). The Reconcile3D node needs two inputs to generate a 2D track: a Camera and a 3D position (XYZ). For the camera, just connect your matchmove camera to the Reconcile3D node’s camera input. For the 3D position, you can either type or paste a value into the Reconcile3D's point knob (under Input), or create an Axis node and connect it to the axis input. Here, we're going to use an Axis node. The Axis node has to be positioned at the point in 3D space which you want to track. If you want to track the corner of a wall, the Axis has to be placed exactly at the corner of the wall in 3D space in order to generate an accurate 2D track. View your geometry (or the point cloud of the scene) and move your Axis to the position you want to track. A very easy way to do this is to go into Vertex selection mode in the Viewer, select a vertex on the geometry, and use the snap function in the Axis node to snap it into position: 0:00 / 1× Snapping an Axis into position in 3D space. 💡 If your geometry is moving, you can use a tool such as [animatedSnap3D](https://www.nukepedia.com/python/3d/animatedsnap3d) or [Locometry](https://www.nukepedia.com/python/3d/locometry) to track the Axis to the vertex. Once you have positioned your Axis and have connected both it and the Camera to the Reconcile3D node, hit the create keyframes button in the Reconcile3D node's properties. Select your frame range and hit OK. It will calculate the 2D track for you in the XY output (output knob). If you want to create another 2D tracking point, create a new Reconcile3D node and connect a new Axis node to it which is positioned where you want to track the point in 3D space. Hit create keyframes in the new Reconcile3D node to generate another 2D tracking point. Rinse and repeat for as many 2D tracking points you need. Once you have your 2D tracking points, create a Tracker node. Click add track to add a blank track to the Tracker. Then, copy/paste the animation from the XY output in the Reconcile3D node to the new track in the Tracker node: 0:00 / 1× Copying the animation from the Reconcile3D node to a new track in the Tracker node. If you have more Reconcile3D nodes with 2D tracking points, copy their XY output animations into new tracks in the same Tracker node. You now have a Tracker node with accurate 2D tracks based on your 3D scene and your Camera, and you can use that however you like. You can change your reference frame, select which points you want to contribute to the tracking output, select if you want translation, rotation, and scale, and so on. Going back to the roto example, you can link the Tracker directly to a Roto node: 0:00 / 1× Linking a Tracker to a Roto node. You can now roto as you normally would, without using a projection, and it will track with your scan. However, you have to add lens distortion after your Roto node to accurately line it up at the edges of the frame. 💡 Just like you would add lens distortion to a projection, you also have to add lens distortion to the Roto tracked using the Reconcile3D method. That’s because you are generating the 2D tracks from 3D data which doesn’t take the lens distortion into account. I hope you found this tutorial useful. For more Nuke tips & tricks, see [Nuke](https://www.keheka.com/tag/nuke/). [Sign up for the newsletter!](https://www.keheka.com/#/portal/signup) ### Seeing The Whole Picture URL: https://www.keheka.com/seeing-the-whole-picture/ Last updated: 2023-03-05T19:00:14.000Z Avoid limiting yourself when learning a new skill or studying a new topic. When learning a new skill or studying a new topic, there are three mistakes that you should avoid. Interestingly, they're all related to image cropping. ## Missing The Context The popular animated sitcom The Simpsons first aired on Fox in 1989 – in an era of standard definition, 4:3 aspect ratio television sets. For the next 20 years, the episodes were produced in the same 4:3 aspect ratio. However, in 2009, widescreen TVs had become more commonly available and it was decided to modernise the show. In the middle of its 20th season, The Simpsons transitioned to a high definition format with a wider 16:9 aspect ratio. Moving forward, the new episodes were all made with this widescreen aspect ratio. Fast forward ten more years to 2019\. The Walt Disney Company acquired 21st Century Fox – and with it, the rights to The Simpsons. The 30 seasons (at the time) of the show were all added to the Disney+ streaming service. In the process, they converted all of the older 4:3 aspect ratio episodes to the now standard 16:9 widescreen HD format. In order to fit the taller 4:3 aspect ratio into a 16:9 aspect ratio, they decided to both stretch the images horizontally, and – more importantly – crop out the top and bottom of the frame. After releasing the episodes on Disney+, audience feedback revealed an unexpected problem. Several of the visual gags in the original 4:3 aspect ratio episodes were placed near the top and bottom of the frame, and the new cropping meant that audiences time and again simply missed the joke. For example in this scene, taking place in the Duff beer factory: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/03/Simpsons1-1.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/03/Simpsons2.jpg) Cropping out the top of the frame led to audiences missing the joke. 💡 It should be noted that Disney+ has since enabled the option to view the older episodes in their native 4:3 aspect ratio. By trying to fit the original episodes into the new format, the context got lost. The missing parts of the frame turned out to be necessary, because they provided important information for understanding the jokes. ## Missing The Reality As the saying goes, a picture is worth a thousand words. And the way you crop the picture can dramatically change the meaning of those words. Not only can you make the audience miss the joke, you can actually reframe the whole story that the picture is telling. As an example, by cropping the following image in different ways, very different stories emerge: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/03/ImageCropping.jpg) Demonstration of how image cropping can change the story being told. What isn't shown is often as important as what is. By focusing on only one element of the story, the true reality gets lost. When you see the whole picture, you get a full or overall sense of the situation or topic, taking into account all related factors and consequences. Which means, you get a better perspective of how your decisions will impact the future and avoid getting distracted by unimportant details. ## Missing The Impact IMAX is a proprietary cinematic system. For filmmakers, it provides high-resolution cameras and film formats, as well as bespoke image and audio mastering. For audiences, it offers purpose-built theatres with very large screens, dual film projectors, and steep stadium seating. Other than their sheer size and clarity, the IMAX screens differ from typical cinema screens by having a taller aspect ratio (approximately either 1.43:1 or 1.90:1 – vs. the standard 2.35:1). ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/03/ImaxTheatre.jpg) IMAX cinema. The taller-than-normal (as well as just plain larger overall) images flood your mid- and far peripheral vision, further immersing you into the story. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/03/IMAX.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/03/Imax.png) Examples of the additional content the audiences see on IMAX screens vs on standard cinema screens. The extra image content in the y-axis (screen height) isn't critical for telling the story (after all, the same movie with a cropped image will often be played in standard theatres as well) – but it does add to the experience. What IMAX aims to do is to go above and beyond a normal cinema experience. To make a bigger impact. Without the taller aspect ratio and bigger screens, some of the impact gets lost. And an experience with a lesser impact doesn't stick as well to your memory. The bigger the impact something has, the more memorable it is. ## Context + Reality + Impact = Deeper Learning Tying it all together, when you're learning a new skill or studying a new topic: - Don't miss the wider context by focusing too narrowly on the details. And trying to fit ideas into preconceived, restricting frameworks may not work in your favour. - Avoid only looking at one side of the story and missing the true reality. You'll likely do yourself a disservice, narrowing your view and your learning potential. - Immerse yourself in the whole picture. Go above and beyond, doing more than what is expected of you. It may not be critical to your understanding of the topic. However, it will add more impact to the experience, making it more memorable. I hope you found this article useful. For more productivity tips, see [Productivity](https://www.keheka.com/tag/productivity/). [Sign up for the newsletter!](https://www.keheka.com/#/portal/signup) ### Motion Blur Masterclass For Compositors URL: https://www.keheka.com/motion-blur-masterclass-for-compositors/ Last updated: 2025-02-16T09:43:46.000Z ⭐ A deep dive into how motion blur works, the way cameras operate in the real world, and advanced techniques for dealing with motion blur in Nuke… _This post is for paying subscribers only._ ### Advanced Retime Artefacts Cleanup Technique In Nuke URL: https://www.keheka.com/advanced-retime-artefacts-cleanup-technique-in-nuke/ Last updated: 2023-02-18T08:00:42.000Z Automatically reproject whole-number frames to paint over decimal frame retime artefacts. ## Automated Reprojection When fixing retime artefacts, it’s usually a good idea to make patches based on nearby, clean (i.e. whole-number) frames. But manually frameholding and lining up potentially hundreds of frames can be a real pain. Below is a setup, which: - Automatically rounds retimed frames both up and down to the nearest whole-number frames. - Reprojects the rounded frames to line up with the retimed frames. - Lets you reveal clean patches over the artefacts by just painting a matte. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/02/ARCU_Setup-2.png) Automated reprojection setup for retime artefact cleanup. Start with your unretimed, denoised scan at the top right. Below, add your retime to it. Here, I've used a Kronos node to do the retiming. 💡 If you have a foreground subject/object occluding the background, it can be a good idea to roto them/it, copy the matte into the stream above the Kronos, and set the Kronos’ matteChannel dropdown menu to use the Source Alpha for determining the FG. In a separate branch, undistort your unretimed, denoised scan, and then project it onto your (accurately lined up) geometry in two separate projection setups. Use your unretimed camera as the projection camera, and the retimed camera as the render camera. 💡 If you only have an unretimed camera, you can [retime your camera in Nuke](https://www.keheka.com/retiming-cameras-in-nuke/). In the first projection setup, we're going to be rounding down the decimal frames of the retime, and in the second projection setup, we're going to be rounding them up. Add a Framehold node below the Project3D node in each setup. In the Framehold node in the 'rounding down' setup, add the following expression to the firstFrame knob (a.k.a. first\_frame in previous versions of Nuke): ``` floor(Kronos1.timingFrame2) ``` In the Framehold node in the 'rounding up' setup, add the following expression to the firstFrame knob: ``` ceil(Kronos1.timingFrame2) ``` The setup will now project only whole-number frames using the unretimed camera (from its position on the same frames), and then render them out using the retimed camera. Connect a Remove node to the output of each of the ScanlineRender nodes to tidy up the channels – keeping only rgba. Redistort the projections, and you’ll now have correctly aligned, clean frames to use for patching. Keymix each setup into the main pipe, and connect RotoPaint nodes to the mask inputs of the Keymix nodes. For every retimed frame, you now have the option to choose from the rounded down and rounded up whole frames, and can paint them in where needed. Just step through your retime frame by frame, and when there is a decimal frame, paint alphas where there are artefacts. (Using the most relevant clean frame, that gives you the best result). The frameholds will automatically update for every frame, and the clean frames will automatically line up correctly. 💡 Make sure to set the samples in the ScanlineRender nodes high enough to match the motion blur from the Kronos node, or alternatively use VectorBlur nodes. I hope you found this tutorial useful. For more Nuke tips & tricks, see [Nuke](https://www.keheka.com/tag/nuke/). [Sign up for the newsletter!](https://www.keheka.com/#/portal/signup) ### Creating Custom Lens Effects By Pre-Treating Your Images In Nuke URL: https://www.keheka.com/creating-custom-lens-effects-by-pre-treating-your-images-in-nuke/ Last updated: 2023-02-15T08:00:33.000Z How to replicate interesting lens phenomena by pre-treating your images before applying your lens effects. ## Astigmatic Lens Effects You may have noticed interesting things happening to the highlights of an image when photographing at night, or in low light scenarios. Bright lights bloom and glow, and sometimes stretch out at particular (or even multiple) angles. Take a look at the example images below: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/02/Streaks1_resized.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/02/Streaks2_resized.jpg) ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/02/Streaks3.jpg) This happens because the light that’s hitting the lens converges on multiple focal points instead of just one. (This also happens in the eyes of people with astigmatism). 💡 You’re probably familiar with this already, but can simulate it yourself by squinting your eyes while looking at bright lights at night. If you want to replicate this effect in Nuke, it’s not an immediately straightforward task. However, you can do it by performing a bit of simple image manipulation before your lens effect, and then reversing it after. 0:00 / 1× Creating astigmatism using scale and rotation. So, how can we do this? ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/02/RotateScaleGlow.png) Rotation and scale inverse setup with a Glow. Start by creating two Transform nodes connected together (Transform1 and Transform2), and connect Transform1 to your image. (This works best with night time images with bright light sources in them). In both Transform1 and Transform2, make sure the “2” button next to the scale knob is ticked, to separate the width and the height scaling. Then, add the following expression to the scale knob in Transform2: ``` 1/Transform1.scale ``` Now, any changes you make to the scale in Transform1 will be reversed in Transform2. 💡 You could also just directly link the scale value from Transform1 to Transform2, and then tick the invert checkbox in Transform2 – whichever method you prefer. Next, create two more Transform nodes (Transform3 and Transform4). Connect the first one in between your image and Transform1, and the last one after Transform2. Leave Transform3 as it is, but add the following expression to the rotate knob in Transform4: ``` -Transform3.rotate ``` Now, any changes you make to the rotation in Transform3 will be reversed in Transform4. In between Transform1 and Transform2, add a Glow node. I’ve used the standard Glow node in Nuke here, but use an exponential glow from for example Nukepedia for better results. Whichever one you use, it’s important to choose to output the effect only. In the standard Glow node, tick the effect only checkbox. If your custom exponential glow node doesn't have that option, just Merge (minus) the output of the node (A) with the input of the node (B) to separate out the effect only. This is because the transformations we are about to apply will heavily degrade the image, so we only want to output the glow effect from this stream and nothing else. Next, add a Crop node after Transform4 to keep your bounding box in check – it can get quite big with this setup. Lastly, Merge (plus) the end of the stream back with your original image. 💡 Keep in mind, the order of the Transform nodes is important. To correctly reverse the transformations, you have to reverse the order of the incoming Transforms and the outgoing Transforms. So, rotation (in) → scale (in) → scale (out) → rotation (out). Now, you can increase the glow and then adjust the scale and rotate knobs in Transform1 and Transform3, respectively, to create astigmatism – just like I did in the video above. 💡 You can also create anamorphic blooms by just scaling the width (typically to 0.5) using the same setup. If you want to make criss-cross patterns, you can just copy/paste the setup. Rotate the second setup oppositely to the first, and then Merge (max or plus) them together. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/02/DoubleUp.png) Doubling up the setup to make a criss-cross pattern. You can even keep adding more rotated copies, if you for example want to make star shapes. Experiment with the setup to create new and interesting effects. Below, I have swapped the Transform nodes for two CornerPins, one reversing the other: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/02/CornerPin.png) Using a CornerPin inverse setup. No matter which transformations you choose, the glow stays interactive because it's reacting to the same bright light sources, just differently shaped and in different positions. Ultimately, only the shape and the direction it blooms out towards changes. That means, when you rotate the image, the glow rotates around each light source. And when you scale the image, the glow scales around each light source. ## Bokeh Control You don’t necessarily have to pre-treat your images with transformations to adjust your lens effects. You can for example control the strength of your bokeh with a couple of Gamma nodes: 0:00 / 1× Controlling bokeh strength by pre-treating the image with a Gamma. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/02/GammaDefocusSetup.png) Gamma inverse setup with a ZDefocus. It’s the same idea as before: The Gamma2 node is simply reversing the effects of the Gamma1 node. In the Gamma2 node, add the following expression to the value knob: ``` 1/Gamma1.value ``` By lowering the gamma in the Gamma1 node, you increase the strength of the bokeh, and vice versa. ## Directional Blur If you wanted to, you could recreate a similar effect to the Directional Blur node in Nuke: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/02/BlurRotate-1.png) Rotation inverse setup with a Blur. Same as before, you just add two Transform nodes, one reversing the rotation of the other. Then, put a Blur node in between them. You can then control the blur direction by rotating the image, blurring it along one axis (e.g. width), and rotating it back. I hope you found this tutorial useful. For more Nuke tips & tricks, see [Nuke](https://www.keheka.com/tag/nuke/). [Sign up for the newsletter!](https://www.keheka.com/#/portal/signup) ### Animating Paint Strokes In Nuke URL: https://www.keheka.com/animating-paint-strokes-in-nuke/ Last updated: 2023-02-11T08:00:32.000Z How to create custom animated reveal masks and creative effects using the RotoPaint node. 0:00 / 1× Animating 'Hello'. ## Paint Strokes Are Just Splines You might not be aware of it, but when you paint using the RotoPaint node in Nuke, you’re just creating splines with multiple points. To see what I mean, open up the RotoPaint node’s property panel, and with the RotoPaint node selected, enable both the toolbar\_label\_points and toolbar\_show\_paint\_selection buttons at the top left, above the Viewer. I have underlined the specific icons you have to press in yellow below: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/02/Menu.png) The buttons to enable in the RotoPaint Viewer menu. When you paint something now, and then select the paint stroke, the spline and every point on it will be displayed in the Viewer: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/02/LabelledPoints.png) Nuke used 117 points on a spline to represent this H that I drew. (The first point gets the number 0). You can even move the points around, just like on a normal spline: 0:00 / 1× Moving points on a paint stroke spline. ## Splines Can Be Manipulated Since every point on a paint stroke spline is added chronologically, Nuke knows the exact order in which you draw something. We can take advantage of this. In the Stroke tab of the RotoPaint node, there is a knob called write on end. By default, it is set to 1, which means Nuke will display 100% of the stroke (as long as write on start is set to 0). Just like in the video at the top, you can change this value between 0 and 1, and Nuke will only display that percentage of the spline you have drawn. You can animate this value, which opens up interesting opportunities like being able to animate specific reveal masks or create different effects. For instance, you can draw pathways along the veins under the skin of an arm, or along hair or clothing, and reveal a magical effect. Add some exponential glow and noise into the mix, and you can make a really interesting look. Test out different colours, shapes, and animations, and play with the stroke settings. You can for example change the brush spacing in the Stroke tab to create a dot pattern, for a more graphic design type of effect: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/02/Spacing.png) Making a dot pattern by increasing the brush spacing. When you animate your paint strokes, you don’t have to do a linear A to B animation like I did in the first video. You can set both the write on start and write on end to 0.5, and then animate them back to 0 and 1, respectively. That will reveal the shape from the middle and outward. 💡 Keep in mind that if you want to animate a paint stroke over time, you have to change the lifespan of the stroke from a single frame to all frames, or to a long enough frame range. Experiment and have fun with it 🙂 I hope you found this tutorial useful. For more Nuke tips & tricks, see [Nuke](https://www.keheka.com/tag/nuke/). [Sign up for the newsletter!](https://www.keheka.com/#/portal/signup) ### Your Wastebasket Isn't Full Enough URL: https://www.keheka.com/your-wastebasket-isnt-full-enough/ Last updated: 2023-02-08T08:00:42.000Z Avoid letting planning turn into procrastination. ## Working Through ‘The Suck’ The two-time Pulitzer Prize winner David McCullough was a legendary biographer who wrote nearly every day. Whenever a page wasn’t well-written, he’d crumple up the paper and throw it in the trash. At the end of the work day, a full wastebasket didn't represent wasted time to him – it simply meant he’d been productive that day. He had gotten all of the bad ideas out of his system. In the process, he had both learned and eliminated what didn’t work. Just like he did, we have to work our way through a lot of ideas that suck before we get to the good ones. To do that, we have to experiment and make progress through iteration. ## Iterative Experimentation With Filaments In the late 1800’s, the electric light bulb was not yet a commercially viable product. The filaments would only burn for a few hours before dying out. (The finest ones at the time lasted about a dozen hours). In their efforts to invent a longer-lasting light bulb, Thomas Edison and his 40+ man team tested thousands of different substances as filaments. They experimented for over two years, and during that period, Edison’s workers were sent all over the world to search for better materials. They discovered that carbonised Japanese bamboo increased the lifespan of the light bulb to a groundbreaking 1,200+ hours. After thousands of failed attempts, they had successfully made a commercially viable light bulb. They put in the work, iteration after iteration, and found that failures are a critical part of the process on the way to success. To iterate successfully you have to fail fast, fail cheap, fail often, and fail forward. And the interesting thing about playing the numbers game is how quality tends to emerge over time. ## Quality Trails Behind Quantity In the book Atomic Habits, James Clear wrote a story about the famous American photographer Jerry Uelsmann. When Uelsmann was a professor at the University of Florida, he divided the students of his photography class into two groups. Everyone on the left side of the classroom would be in the “quantity” group, and everyone on the right side would be in the “quality” group. The first group would be graded solely based on the amount of work they produced. At the end of the semester, Uelsmann would tally up the number of photos submitted by each student. To get an A, they would have to submit 100 photos. To get a B, they would need 90 photos. For a C, 80 photos. And so on. The second group would instead be graded purely on the quality of their work. They would only need to produce a single photograph during the entire semester. To get an A, it would have to be a nearly perfect image, with excellent composition, lighting, balance, and so forth. When the end of the term came around, Uelsmann was surprised to find that all the best photos had not been produced by the quality group, but rather by the quantity group. The quantity group had been hard at work the entire semester. They took hundreds of photographs, experimenting with lighting and composition, visiting various locations, and testing different methods in the darkroom. In the process, they learned from their mistakes and got incrementally better and better with each photograph. The quality group, however, had been sitting around the whole semester speculating about the perfect image, developing theories, and researching different photography methods and techniques. But ultimately, they didn’t have much to show for their efforts other than unverified, grandiose theories and one mediocre photograph. The results of Uelsmann’s experiment show that we shouldn’t be so focused on figuring out the best approach that we never get around to taking action. You have to do the work, learn from your mistakes, and make incremental improvements. You don’t become great by sitting around – you have to get started, continue moving forward, and put in enough reps to excel in your area. ## Nike Might Be On To Something Nike’s slogan encapsulates all of these lessons in possibly the simplest way: Just Do It. It’s not about perfection, or even success at first. Avoid setting your quality bar too high. Just get out there and start doing. Whether it’s compositing, writing, creating something, working out, making friends, or learning a new skill – setting cripplingly high expectations just leads to a fear of failure and imperfection. Aiming for quantity has the benefit of stopping this fear from paralysing us. We accept that we’re going to suck at first, and that’s okay. Luckily, one of humanity’s greatest gifts is the ability to learn and grow from failure. Just remember that it will take work before you start to see returns. It took for example nine full months working on [www.keheka.com](https://www.keheka.com/) before the first person thought it was worthy to sign up as a paid subscriber. You won’t see six-pack abs right away, either. Or a beautiful singing voice. Or rock star compositing skills. It takes work, practice, and action. And depending on what you’re trying to do, it may very well be difficult. It may even be awkward, embarrassing, or painful. But that’s the price of admission. It’s the barrier that filters the great from the ordinary. If you feel you're not quite there, your wastebasket just isn't full enough yet. Work through the suck. Experiment, iterate, and accept failures as part of the process. Don’t get stuck theorising, and simply start doing. I hope you found this article useful. For more productivity tips, see [Productivity](https://www.keheka.com/tag/productivity/). [Sign up for the newsletter!](https://www.keheka.com/#/portal/signup) ### Deep Compositing Using A 2D Workflow In Nuke URL: https://www.keheka.com/deep-compositing-using-a-2d-workflow-in-nuke/ Last updated: 2025-02-16T09:44:13.000Z ⭐ How to composite Deep renders using a traditional 2D compositing workflow, and benefit from all your favourite 2D-only tools... _This post is for paying subscribers only._ ### Top Compositing Resources URL: https://www.keheka.com/top-compositing-resources/ Last updated: 2023-03-02T12:20:23.000Z A collection of high quality online resources for compositors. Through the years I have found a number of high quality resources online which have helped me become a better compositor. I have compiled a list below, in alphabetical order: - Adrian Pueyo - Attila Gasparetz - Ben McEwan - Chris Fryer - Comp Lair - Compositing Academy - Compositing Mentor - Compositing Pro - Erwan Leroy - Foundry Nuke Compositors (LinkedIn group) - Fxphd - Gnomon Workshop - Hugo's Desk - In-house tools at your company (open them up and learn how they work) - In-house tutorials and wikis at your company - Kenn Hedin Kalvik (shameless self-promotion 😉) - Linkedin Learning - Mads Hagbarth Damsbo - Nuke Masterclass - Nukepedia - NukeVFX subreddit - Pluralsight - Richard Frazer - Skillshare - Split The Diff - The Foundry - Udemy - Xavier Bourque If I have missed a website which you think should be on the list, please let me know in the Resource Suggestions Box. Loading… I hope you found these resources useful. For more Nuke tips & tricks, see [Nuke](https://www.keheka.com/tag/nuke/). [Sign up for the newsletter!](https://www.keheka.com/#/portal/signup) ### Alpha Density – Matte Control Tool For Nuke URL: https://www.keheka.com/alpha-density-matte-control-tool-for-nuke/ Last updated: 2023-02-09T16:40:49.000Z A Nuke tool for controlling the density of your alphas. 0:00 / 1× Controlling the density of the alpha in an example Noise node. ## Alpha Issues When you key smoke, fog, or other semi-transparent things, they can sometimes look either too transparent or too dense when you composite them over a new background. The natural response when the element looks too transparent is usually to push the key further. However, that can often introduce unwanted hard or dark edges. When the element looks too dense, you might reduce the opacity overall by adjusting the mix in the Merge node, or by using a Multiply (Math) node. However, you may want to keep pockets of denser smoke/fog, while organically reducing the density in other areas. ## Alpha Density A better approach to thickening up or thinning out the alpha of an element, making it more opaque or transparent over the background, is to use the Gamma node. By adjusting the midtones of the alpha, you leave room for the brighter and darker areas to remain for longer, which gives a more natural look to the element. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/01/AlphaDensity.png) The Alpha Density setup. Here, we operate within the 0-1 range of the Gamma nodes. A value of 1 means no change to the alpha, and a value of 0 means the semi-transparent areas of the alpha will be completely black (a value of 0). By inverting the alpha before the Gamma node and then inverting it back after, the opposite happens. A value of 1 still means there is no change, but now a value of 0 means the semi-transparent areas of the alpha will be completely white (a value of 1). In the Group node's property panel, I created a Floating Point Slider called density with a minimum value of -100 and a maximum value of 100\. (Just personal preference, the thinking was that a value of 0 means no change, a value of -100 means a 100% transparent alpha in the previously semi-transparent areas, and a value of 100 means a 100% opaque alpha in the previously semi-transparent areas). Then, I added the following expressions in the Gamma nodes to convert those values into a range between 0 and 1: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/01/Gamma1.png) A value of 100 in the density slider becomes a value of 0 in the Gamma1 node. A value of 0 in the density slider becomes a value of 1 in the Gamma1 node. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/01/Gamma2.png) A value of -100 in the density slider becomes a value of 0 in the Gamma1 node. A value of 0 in the density slider becomes a value of 1 in the Gamma1 node. The Gamma nodes only behave as intended when the density slider is operating within their specific range. For Gamma1, that is 0 to 100, and for Gamma2, that is -100 to 0. For example, a value of 100 in the density slider gives a value of 2 in Gamma1\. And, a value of -100 in the density slider gives a value of 2 in Gamma2\. Which is not what we want. That’s why there is a Switch node, to hand over between the two at the value of 0 in the density slider: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/01/Switch.png) When the density slider is at or above a value of 0, use the Gamma1 pipe. If it’s less than 0, use the Gamma2 pipe. That way, you get the best of both worlds, and one slider controls the whole tool. You can download the tool here: [ Alpha Density v1.0 Download a copy of Alpha Density. (Paste the text into your node graph). AlphaDensity\_v1.0\_keheka.txt 1 KB download-circle ](https://www.keheka.com/content/files/2023/01/AlphaDensity%5Fv1.0%5Fkeheka.txt "Download") I hope you found this tool useful. For more Nuke tips & tricks, see [Nuke](https://www.keheka.com/tag/nuke/). [Sign up for the newsletter!](https://www.keheka.com/#/portal/signup) ### The Hidden Number In Nuke URL: https://www.keheka.com/the-hidden-number-in-nuke/ Last updated: 2023-02-09T16:29:35.000Z When you create Groups or Gizmos in Nuke, there is a hidden number that you should keep in mind. ## How To Find The Hidden Number Each Input node in a Group or Gizmo has a hidden number ID assigned to it. You can find it by typing/pasting the following TCL snippet into the label of the Input node: \[value number\] The hidden knob is simply called “number”. ## Using The Hidden Number In Practice Each hidden number is assigned chronologically. The first Input node that you create gets the hidden number 0\. The second gets the hidden number 1, and so on. The first Input node (with the hidden number 0) is the primary input, and the Input nodes with hidden numbers higher than 0 are all secondary inputs. That means, the Input node with the hidden number 0 should be your main input in the Group/Gizmo node. When you disable the Group/Gizmo node, that’s the input that will get piped through. (On your Group/Gizmo node, it’s the rightmost input pipe). The second, third, and so forth input pipes get added to the left of the main one, in order, from right to left. ## 0 = 1 Just to confuse things, when you create an Input node, the default name is Input1. Anything after “Input” in the node name is what gets shown as the pipe label, so the first pipe is by default named 1. That means, by default, the hidden number 0 corresponds to pipe number 1\. And, as you may have guessed, the hidden number 1 corresponds to pipe number 2\. And so on. 💡 If you want the pipe label to say for example “img”, you can either change the corresponding Input node’s name to “Inputimg”, or just “img”. ## A Bug In Nuke Below, I have created four Input nodes inside a Group. By default, the pipes on the Group node are labelled 1, 2, 3, and 4\. (Hidden numbers 0, 1, 2, and 3, respectively). ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/01/Group.png) A Group node with 4 inputs. One thing to watch out for is when you delete an Input node with a hidden number that’s in between a lower and a higher hidden number. Nuke doesn’t reorder the remaining Inputs. The deleted in-between inputs become dead inputs with no function, like this: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/01/BrokenGroup.png) After deleting the Input2 and Input3 nodes, they become dead inputs on the Group node. That’s because the last input still exists, with a hidden number that is still a value of 3. To fix this, delete the last input(s), and recreate it (them). Nuke will release the dead inputs and pick up counting from the last correct hidden number. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/01/FixedGroup.png) Corrected inputs (4 is now 2). You can also change the hidden numbers by copy/pasting the Group to a text editor and changing the value next to where it says number. 💡 The main input (0) won’t have the number line, but the secondary inputs will. In the example Group below, you can see that Input2 has been assigned the number 1 (on line 12): ``` Group { name Group1 selected true xpos -1508 ypos 2503 } Input { inputs 0 name Input2 xpos -167 ypos 152 number 1 } Input { inputs 0 name Input1 xpos 0 } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy1 xpos 0 ypos 146 } Output { name Output1 xpos 0 ypos 300 } end_group ``` 💡 If you change the hidden numbers manually like this, make sure that every Input node has a unique hidden number. If not, the setup will break in Nuke. After you finish editing the hidden numbers, copy/paste the text back into Nuke. The dead inputs should be gone. ## Other Uses For The Hidden Number Once you know the hidden numbers of your Input nodes, you can make some useful expressions. A classic one is to check whether or not a certain input is connected to anything, and disable a node inside your Group if it’s not. It’s typically used to avoid getting error messages when an input isn’t connected, for example the alpha channel for a mask input. To do that, you can add the following expression to the disable knob of a node inside your Group: !\[exists parent.input1\] (Change the number marked in red to the relevant hidden number for the input you’re interested in). Let’s break down the above expression in plain English: The whole expression is a True or False question – what’s called boolean logic. The exclamation mark means Not, i.e. whatever comes next, do the opposite. If what comes next is True, output False. And, if what comes next is False, output True. 0:00 / 1× True and False in this case equal a value of 1 and 0, respectively. So, the exclamation mark effectively means: If what comes next equals 1, output 0\. And, if what comes next equals 0, output 1. The square brackets mean that there is a command inside that needs to be evaluated, and the result of that calculation will replace the square brackets and everything within. The command starts with exists, which simply checks if something exists. And what it checks, in this case, is whether or not the input with the hidden number 1 has a parent, i.e. is connected to something. Once that command has been evaluated, the result will either be True/1 (there is an input connected) or False/0 (there is no input connected). So, the whole expression outputs a value of 0 if there is something connected to the input, and a value of 1 if nothing is connected to the input. By adding the expression to the disable knob, the node will be enabled if something is connected to the input, and disabled if nothing is connected to the input. I hope you found this tutorial useful. For more Nuke tips & tricks, see [Nuke](https://www.keheka.com/tag/nuke/). [Sign up for the newsletter!](https://www.keheka.com/#/portal/signup) ### Painting Distortion In Nuke URL: https://www.keheka.com/painting-distortion-in-nuke/ Last updated: 2025-02-16T09:44:43.000Z ⭐ How to accurately paint distortion to specific areas of your image… _This post is for paying subscribers only._ ### Painting Motion Blur In Nuke URL: https://www.keheka.com/painting-motion-blur-in-nuke/ Last updated: 2023-02-09T16:30:19.000Z How to surgically add motion blur to problematic areas of your render or scan. ## How It Works You can paint motion blur in your image by smearing a set of unique coordinates with a RotoPaint node, subtracting that from the original ones, and passing the result to a VectorBlur node. Like this: 0:00 / 1× Painting motion blur. This can be very useful when you need to strategically paint motion blur in specific areas of your render or your scan. For example, on a former project some of the edges of the FX fire were looking unnaturally sharp. The inner part of the flames looked great – the problem only occurred in specific areas on the outer edges. Applying more motion blur overall, or overall to all of the edges, made the fire look mushy and soft. We needed to add motion blur only to the specific problem areas. Below is a setup which does the trick: ## Painting Motion Blur ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/01/PaintSetup.png) The setup for painting motion blur. Start by connecting an Expression node to your image and filling the red and green channels with unique coordinates. You can do that by typing x and y in the expressions for the red and green channels, respectively: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/01/Expression.png) Adding unique coordinates to the red and green channels. X will simply output the x coordinate value per pixel. So, if an image is 4K UHD (3840 x 2160), the leftmost column of pixels will have a value of 0, and the rightmost column of pixels a value of 3840. And similarly for Y, the bottom row of pixels will have a value of 0, and the top row of pixels a value of 2160. The pixels in between will linearly receive values within that range. That means, every pixel will have a unique red and green value combination, corresponding to its X and Y coordinates. For example, the pixel which is 5 pixels to the right and 10 pixels up from the pixel in the bottom left hand corner will have a value of 5 in the red channel and 10 in the green channel. Next, connect a RotoPaint node to the Expression node, and then subtract it from the Expression node using a Merge (minus). 💡 When you use the Smear tool in the RotoPaint node, you shift the coordinates around. And when you subtract that from the original coordinates, you are left with only what has changed. Anything untouched will have a value of 0 (and therefore not affect the motion blur). Copy the result of the Merge (minus) node into the B-pipe. I’ve used the red → forward.u and green → forward.v channels, but you can use any non-rgb channels. Then, connect a VectorBlur node. Below are the settings I used: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/01/VB.png) The VectorBlur settings. Lastly, I removed the forward.u and forward.v channels to keep the B-pipe tidy. Using this simple setup, you can paint motion blur directly where you want it in your image. You can adjust the strength of the motion blur by changing the opacity of each stroke in the RotoPaint node, or by changing the motion amount value in the VectorBlur node. 💡 Adjust the brush spacing value in the Stroke tab in the RotoPaint node if you’re seeing stepping. ## Revealing Generated Motion Blur There is another method which also works really well for accomplishing the same goal. You can either take the motion vectors from the CG render, or generate your own using a VectorGenerator like below, and reveal the vectors only in specific areas using a RotoPaint node. When you pass the vectors to the VectorBlur node, it will only add motion blur where you revealed the vectors. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/01/RevealSetup.png) The setup for revealing generated motion blur. Start by either shuffling out the motion vector pass from the CG render, or by connecting a VectorGenerator to your image. Then, connect a Multiply node with the channels set to motion (or your rendered motion vector pass, if different), and the value set to 0. Next, connect a RotoPaint node, with an Invert node attached, to the mask input of the Multiply node. 💡 By painting using the Brush tool with the alpha set to white (1) in the RotoPaint node, you will now reveal the motion vectors only where you paint. Similar to the previous setup, copy the vectors into the B-pipe. This time, I copied the motion layer using the Layer Copy. I used the same settings in the VectorBlur node as before, except for changing the uv channels to motion instead of forward. And finally, I tidied up the B-pipe by removing the motion layer. The benefit of this method is that you can reveal correctly calculated motion vectors and make your motion blur look more realistic. The disadvantage of this method is that when your motion vectors are inaccurate – which sometimes happens when generating them – your motion blur can look wrong. ## Mix And Match If you want even more control, you can combine both of the approaches above. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/01/CombinedSetup.png) Combining the two methods. To do that, you just have to merge the vectors together using a Merge (plus): ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2023/01/Merge_Motion.png) Here, I’m merging rgba from the A-input with motion from the B-input, and outputting motion. That way, you can reveal the generated vectors where they are accurate and working well, and paint your own vectors where they’re not. 💡 “Why not just blur the problem areas with a mask?”, you might ask. Motion blur tends to keep a sense of detail which normal blurring doesn’t. It often makes the image look better than by just using a Blur, i.e. streaks vs. smudges. I hope you found this tutorial useful. For more Nuke tips & tricks, see [Nuke](https://www.keheka.com/tag/nuke/). [Sign up for the newsletter!](https://www.keheka.com/#/portal/signup) ### How To Get Hired As A Compositor – Part 8: Excel In Your New Role URL: https://www.keheka.com/how-to-get-hired-as-a-compositor-part-8-excel-in-your-new-role/ Last updated: 2025-02-16T09:45:19.000Z ⭐ In this 8-part guide, I will take you through best practices for every step of the journey to getting hired as a compositor. ➜ Part 8 is about how to make the most out of the first few months in your new role, and the steps to take for quickly becoming a preferred team member… _This post is for paying subscribers only._ ### How To Get Hired As A Compositor – Part 7: Negotiate Great Terms URL: https://www.keheka.com/how-to-get-hired-as-a-compositor-part-7-negotiate-great-terms/ Last updated: 2025-02-16T09:45:40.000Z ⭐ In this 8-part guide, I will take you through best practices for every step of the journey to getting hired as a compositor. ➜ Part 7 is about how to successfully negotiate a great salary and benefits, while making sure the other party is also happy with the outcome… _This post is for paying subscribers only._ ### How To Get Hired As A Compositor – Part 6: Nail Your Interview URL: https://www.keheka.com/how-to-get-hired-as-a-compositor-part-6-nail-your-interview/ Last updated: 2025-02-16T09:46:00.000Z ⭐ In this 8-part guide, I will take you through best practices for every step of the journey to getting hired as a compositor. ➜ Part 6 is about what to do before, during, and after the interview to maximise your chances of being offered the job… _This post is for paying subscribers only._ ### How To Get Hired As A Compositor – Part 5: Write An Outstanding Job Application URL: https://www.keheka.com/how-to-get-hired-as-a-compositor-part-5-write-an-outstanding-job-application/ Last updated: 2025-02-16T09:46:22.000Z ⭐ In this 8-part guide, I will take you through best practices for every step of the journey to getting hired as a compositor. ➜ Part 5 is about how to write an outstanding job application that will make sure you get noticed… _This post is for paying subscribers only._ ### How To Get Hired As A Compositor – Part 4: Write An Impressive CV URL: https://www.keheka.com/how-to-get-hired-as-a-compositor-part-4-write-an-impressive-cv/ Last updated: 2024-04-18T10:48:23.000Z In this 8-part guide, I will take you through best practices for every step of the journey to getting hired as a compositor. ➜ Part 4 is about how to design and write a CV that will impress any VFX recruiter. [Buy the entire 8-part guide as a PDF](https://keheka.lemonsqueezy.com/checkout/buy/d3b013f6-d032-4a6f-a13f-ebbe5b303ba3?ref=keheka.com) You can find the previous parts of the guide here: [Part 1: Set Powerful Goals](https://www.keheka.com/how-to-get-hired-as-a-compositor-part-1-set-powerful-goals/) [Part 2: Build A Strong Network](https://www.keheka.com/how-to-get-hired-as-a-compositor-part-2-build-a-strong-network/) [Part 3: Create A Spectacular Showreel](https://www.keheka.com/how-to-get-hired-as-a-compositor-part-3-create-a-spectacular-showreel/) ## Why You Should Level Up Your CV Today, recruiters will typically look you up on LinkedIn, however there is still value in making a sleek, curated CV to show off the best version of yourself. Especially for when you are the first person to reach out. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2022/11/KEHEKA_CV_Kenn_Hedin_Kalvik_2022-1.png) Example: My own CV (with certain information changed for privacy/confidentiality). ## Design While the content of your CV is the most important part, how you present it to the recruiter is a very close second. Just a single, hard to read block of text with no punctuation will give a bad first impression. You don't need to hire a professional to design your CV. Though, spending a bit of time to create a sleek and modern looking document is absolutely worth it. I recommend creating a free account at [Canva](https://www.canva.com) (not sponsored, and I genuinely use this myself), and using one of their professional templates for designing your CV. There are many great options to choose from – just search for 'Professional CV'. Keep your CV to 1 page. I have worked a decade in the visual effects industry, and if I can fit my experience on one page, so can you. Above all, your CV should be easy to read. Present the information in your CV concisely, and avoid large walls of text. Make sure to leave space to breathe throughout. Make clear, distinct sections in your CV for the various information. Separate them using lines if needed. It will help to give the reader’s eyes a break in between segments. Your CV should be easily scannable so they can find the information they need right away, and easily skimmable so they can get a good idea of how eligible you are as a candidate quickly. Make use of bullet points. They are a great way of presenting information - Clearly - Succinctly Use a clean font. Personally, I use Raleway but there are tons of great options. I would go with a modern, sans serif, font. Avoid dated or silly looking fonts such as Times New Roman or Comic Sans. ## Content Regardless of how you design your CV, there is certain information that you should include. ### Name, Title & Description At the top of your CV, put your full name in large letters. Don't write Curriculum Vitae or CV. That is self-evident and redundant. I like to put my picture next to my name but this is optional. If you do use a picture, pick a nice, simple headshot of yourself with a clean background. Smiling is very welcomed and gives off positive vibes and a good first impression. Under your name, put your title. This should be short and sweet, like Compositor, Lead Compositor, Compositing Supervisor, etc. Unless you are clearly a senior or above, I wouldn’t put your level in there. That is up to the company you’re applying for to decide. If you have one year of experience as a compositor and write “Mid-level Compositor”, that just shows lack of self-judgement. You don’t want a recruiter to stop and second-guess anything on your CV. Next, add a short description of yourself and why you are great at this role. This should only be 1-3 sentences. Highlight some of your top qualities. As an example, mine says: Experienced in leading and compositing visual effects for both high-end television and feature film. I fuse exceptional efficiency with precision, which are founded on an extensive set of skills, production proven techniques and a strong work ethic. With all of the above, the recruiter will have an initial idea of who you are and what role you are applying for after just the first few seconds of looking at your CV. ### Contact Information Moving on, add a contact information section where you put your phone number (include the country code if relevant), your email address, and the city you live in. You don't need to write your full address. If and when you get hired, you'll share that information. ### Links Next up, add links to your: - Website: This should be your professional portfolio and/or industry related website. If you have a website for a hobby such as photography or a skill related to compositing, that’s also a good idea to include. - Showreel: This will typically be a password protected Vimeo link – remember to include the password! - IMDb page: Many of you will have an IMDb page. Make sure to keep it up to date and add credits for shows that you have worked on – if and when you are allowed to. It’s a good reference for recruiters to look at and get an idea of both the type and standard of projects you have been involved in. Here is [how to add credits on IMDb](https://help.imdb.com/article/contribution/filmography-credits/adding-filmography-credits/GAB5B33MBLEG73CT#). - LinkedIn profile: Keep your LinkedIn profile up to date just like your CV. Your LinkedIn profile is also an opportunity to flesh out the details of your career, skills, awards, etc. as it doesn't need to be compressed down to a single page. Keep it concise and digestible, still. It should have bullet points and white space similar to your CV. Write the links out in full, just in case the recruiter needs to copy or type them elsewhere, or in the event the CV is printed out. So, write [www.linkedin.com/in/kennkalvik](https://www.linkedin.com/in/kennkalvik) instead of [LinkedIn Profile](https://www.linkedin.com/in/kennkalvik). The latter one printed out won’t do much good. Make sure that any links that you include are functioning properly. Test them, and double check that they work correctly. #### Custom URLs You can make a custom URL for your LinkedIn profile by going to your LinkedIn profile page, and in the top right hand corner clicking on Edit public profile & URL: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2022/11/Edit_Public_LI_Profile_-_URL.png) Then, on the newly opened page in the top right hand corner, click on the little pen symbol next to the URL to edit it: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2022/11/Edit_Custom_LI_URL.png) Just having your name at the end like I have done is good. It’s much easier to remember than a string of random letters, symbols, and numbers that the default link might consist of. If you happen to have a paid version of Vimeo, you can also add a custom URL to your showreel. This is much less important, as Vimeo links are fairly short anyway and only use numbers, which means they’re easier to type if needed. But if you wanted to do it; when you upload your showreel, click on the Share link button in the top right hand corner (the chain link), and choose your preferred URL: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2022/11/Vimeo_Custom_Link.png) Example of a custom showreel URL. (The example link is not active). ### Experience Continuing down on your CV, your professional experience should be listed in reverse chronological order: the most recent jobs first, and the oldest last. Aim to only list relevant jobs. If you worked as a welder on an oil rig eight years ago, it’s most likely not necessary to list that under your experience when applying for a compositing role. (You can let that be an interesting anecdote in the interview instead). It’s not important to separately list every small company you worked freelance for years and years ago; you can group jobs together if needed. Let your LinkedIn profile keep the individual records for reference. For each job, include: - The year(s) you worked there - The company name and office location - Your job title - A short description of the role and what you achieved In the description, you can list the responsibilities you had in each role, but more importantly, emphasise contributions and results. If you built specific tools and templates for a big sequence on a show, mention that. Or, if you performed particularly well on a project, include details and metrics. This will help cement your value to the recruiter. For example: “Developed the look for the Gravi-Ray Gun disintegration effect and built a template used in over 60 shots by 10 compositors on Astro Wars.” That short sentence tells the recruiter a whole lot of good things about you as a compositor. ### Education Like with your experience, your education should also be listed in reverse chronological order. Unless you have multiple relevant degrees and/or have completed several relevant training courses, I would only add the latest, most relevant one – for example your university degree. There is no need to include your high school degree if you went to university. For each relevant education, include: - The year(s) you went to university or took a training course - The university or training course’s name and location - The title of your degree - Optional: Your marks, if excellent - A short description of the course and what you achieved Similar to the job descriptions, focus on what you accomplished and how what you studied is relevant to the job that you are applying for. For example: - Awarded a Distinction - Studied creative and technical compositing of visual effects using Nuke - Gained a strong knowledge of industry practices and production proven techniques ### Awards/Achievements If you, or a team that you were a part of, have won a prestigious award or achieved something great in the visual effects industry (published research, won a scholarship, contributed tools and tutorials to the community which have been recognised, etc.), it’s great to list that on your CV. It’s again all about giving the recruiter tangible metrics to help judge your skill level and value. Your awards and achievements can be listed in reverse chronological order, but they don’t necessarily have to be. You can also list them in order of prestige or importance. Whichever way you prefer, include the name of the award, the year, and optionally, the issuer. It can be brief: you will have more space to flesh out the details on your LinkedIn profile. ### Expertise It’s a good idea to list a few skills that you excel at on your CV, to draw the recruiter’s attention to what your strengths are. It could be Compositing in Nuke, Team Management, Tool Building, Python Scripting, Visual Development, etc. A short and sweet bullet point list is your friend in this section of your CV. Don’t include visual skill bars. They are completely arbitrary and do not prove anything. What does… eyeballing… roughly 80% skilled in Nuke even mean? There is no frame of reference. Instead, just list Nuke as an expertise and let the recruiter be the judge of your skill level. Be ready to back up your claims. If you list a skill in the Expertise section, the Experience section of your CV should reinforce why that is your expertise. For example, if you list Team Management in the Expertise section, you have to back that up by including what you did to make you a great team manager, in the Experience section. Some examples: - Managed a team of \[number\] compositors, delivering \[number\] shots for \[the show\]. - Provided accurate shot briefs and creative and technical feedback to artists. - Developed advanced Nuke tools and templates for artists to produce creative effects and technical composites, and to ensure visual continuity across sequences. - Built and maintained informative show wikis and sophisticated ShotGrid pages for the artists. - Held bi-weekly online training sessions for the compositing and roto/prep teams company-wide, teaching advanced techniques in Nuke. - Acted as the central point of contact for artist queries and troubleshooting. That way, the recruiter will know that your claims are not invented out of thin air. There is substance to them. ### Languages If you are multilingual, and especially if one or more of your languages are relevant to the job, list them on your CV. You might be applying for a job in a foreign office, and even though most people speak English, being able to speak their native language is a great bonus. Be honest about your proficiency in each language you list, though. ### Hobbies If you like, feel free to add a Hobbies section to your CV to further build the impression of who you are as a person. Bonus points if your hobbies are related to compositing. It's great if you are a bit specific here, like for example putting macro-photography or landscape photography, instead of just photography. ## Language & Tone Of Voice We are not lawyers or doctors, and our work language reflects that. There is no need to be overly formal in your writing. That’s not to say you should go full-blown casual, and use slang and an overload of emojis. Keep it professional, still. You wouldn’t wear a suit to an interview for a compositor role, but not a one-sie, either. Keep your CV, and your dress code, to smart casual. Use positively charged verbs that help establish you as an authority in the subject, such as provided, managed, developed, or built. Use an active voice instead of a passive voice when writing ("I composited the shot…" versus "the shot was composited by me…"). Keep sentences short. Your CV should be an easy read for the recruiter. Make sure to spell check the entire CV. Triple check, and get others to look at it as well. Ensure there are no typos, and that sentences are grammatically correct. This will help give the recruiter a good impression of you when they read your CV. ## References As part of their hiring process, some recruiters may ask for one or two references who can vouch for you. A reference should be someone in a position above yours. Someone who supervised you and has a good understanding of how you work. And importantly – someone who has got a positive impression of you. There is no need to put “References provided upon request” on your CV. If references are required, they will be requested. Having said that, if they are required for the application process you should prepare your references. First of all, ask them for their consent beforehand. And if they agree to be your reference, let them know when they should be expecting a call or email. If required, provide the recruiter with: - The reference’s full name - Their job title and company - Their email address - Their telephone number (include the country code if relevant) Make sure to spell check all of the reference’s information. ## Filetype And Filename The filetype of your CV should be the industry standard PDF. Saving it as a PDF ensures the formatting stays correct and that it is viewable on any type of computer or device the recruiter might be using. The filename should at minimum include the word CV and your full name: CV\_Kenn\_Hedin\_Kalvik.pdf This will make it easy to find and to be recognised by the recruiter. You could also add the current year at the end of the filename. Especially, if you are reapplying to a company after some time: CV\_Kenn\_Hedin\_Kalvik\_2022.pdf Make sure to spell check the filename. ## Copy/Paste Frustratingly for you as a job seeker, some companies require a separate form to be filled out on their applications page, with all the information you already put in your CV. If you’re interested in working for the company you’ll just have to bite the bullet and copy/paste everything into the form. I hope you found Part 4 of this guide useful. The first four (short) parts were free, but we're only scratching the surface. The main meat of the guide is coming up in the next four (paid) parts. Next up is [Part 5: Write An Outstanding Job Application](https://www.keheka.com/how-to-get-hired-as-a-compositor-part-5-write-an-outstanding-job-application/). For more productivity tips, see [Productivity](https://www.keheka.com/tag/productivity/). [Sign up for the newsletter!](https://www.keheka.com/#/portal/signup) ### How To Get Hired As A Compositor – Part 3: Create A Spectacular Showreel URL: https://www.keheka.com/how-to-get-hired-as-a-compositor-part-3-create-a-spectacular-showreel/ Last updated: 2024-02-07T12:44:08.000Z In this 8-part guide, I will take you through best practices for every step of the journey to getting hired as a compositor. ➜ Part 3 is about how to create a spectacular showreel that will elevate you above the competition. [Buy the entire 8-part guide as a PDF](https://keheka.lemonsqueezy.com/checkout/buy/d3b013f6-d032-4a6f-a13f-ebbe5b303ba3?ref=keheka.com) You can find the previous parts of the guide here: [Part 1: Set Powerful Goals](https://www.keheka.com/how-to-get-hired-as-a-compositor-part-1-set-powerful-goals/) [Part 2: Build A Strong Network](https://www.keheka.com/how-to-get-hired-as-a-compositor-part-2-build-a-strong-network/) ## Why You Should Level Up Your Showreel Your showreel is your main weapon in the competition for getting hired as a compositor. No matter how impressive your CV might be, if your showreel is terrible and displays poor skill then that overrides everything. The decision will be made to not hire you. The opposite is also true: if your showreel is outstanding but your CV is not, that is much easier to forgive. You will definitely be scrutinised more during the interview to ensure you actually did the work that’s shown in your reel – but if you did, there is a good chance you will get the job. So you should absolutely focus on making your showreel as spectacular as you possibly can. Whet your blade until its edge is razor sharp. ## Showreel Goals The way you structure your showreel is important. You have five main goals, which are: 1. Immediately grab the attention of the viewer. That means starting out with your most impressive work. Hook them in with spectacular shots. 2. Hold on to their attention throughout the showreel. Continue with great and interesting shots that display your mastery of the ‘bread and butter’ compositing skills, like keying, CG integration, projections, etc. Let them know that you know your stuff. 3. Finish strong. End your showreel on a high note, i.e. with a striking shot. If you end on a boring, unimpressive shot it detracts from the overall impression. It’s like eating an amazing meal, and then having a dessert that tastes bad. Sure, the meal was great, but you might not be leaving the restaurant feeling as satisfied as you’d want to. Make sure that your dessert is tasty. 4. Leave them wanting more. Keep the showreel brief and avoid oversaturating the viewer with shots that drag on and on. Your showreel is a teaser trailer for your skills as a compositor. The viewer should be left with the feeling of: That was amazing, I want to see more. 5. Make sure they know how to contact you. Add a short information screen at the start of your showreel containing your details. And then again at the end. You want to reduce any friction there may be for the recruiter to contact you. Let’s look into how you can achieve all of the goals above. ## Runtime Your showreel should not be any longer than two minutes in total. That’s roughly the maximum attention span you can expect a showreel to attract today. I would actually aim for about 1 minute and 30 seconds all in all – and that's only if you have enough great material to use. That means you have to be brutal when cutting the shots. Only the best of the best should make it into your showreel. Get a second opinion from another compositor, and a third from yet another, if you can. Absolutely do NOT pad your showreel with mediocre shots. Many people do this to make their reel longer and try to show more work experience. Avoid doing this. The vast majority of recruiters would much rather watch 30 seconds of greatness than 90 seconds of mediocrity. ## Intro/Outro There is no need for a lengthy, flashy, animated intro and/or outro in your showreel. Simply add a 3-5 seconds long, easily readable information screen at the start, and then again at the end, containing: - Your name - Your (specific) title - Your email address - Your phone number (optional) 💡 Make sure to spell check your name and contact details. If you are uncomfortable adding your contact details to your showreel (for instance if it’s a public one), you can password protect it. More on that later. Don't get me wrong, you can absolutely design the information screen to look sleek, but having a twenty second visual effect revealing the word Showreel and your name, before dissolving into a cloud of smoke is not just unnecessary; it is frankly a waste of time. There is no need to write 'Thank you for watching' at the end of your showreel. However polite it may be, it comes across as amateurish. Instead, end your showreel with the information screen as described above, making it as easy as possible for the recruiter to contact you. ## Shot Selections Your showreel should be snappy, because you want to keep the viewer’s attention all the way through. Think of it as a commercial for your skills. It should be energetic and interesting. Avoid including shots that are longer than about four to five seconds, unless they are extremely detailed and amazing. 💡 Often, you only need a small section of a long shot (i.e. just the beginning, the middle portion, or the end part) to give a great impression, and can safely cut the rest of the shot out. Remember, the longer you hold on a shot, the more room for scrutiny you allow the viewer. You want them to look at the shot, be impressed, and then move on to the next one. It's worth mentioning again: Only include your very best work, and be painfully honest with yourself about this. Padding your showreel with mediocre shots kills any momentum you've built up for the recruiter toward hiring you. Remember, you'll be judged by your worst work. The shot you worked the longest or hardest on might not be your best shot. Sometimes you have to kill your darlings. Curate your showreel shots for the role that you are applying for. If you are making a compositing showreel, the recruiter will not be interested in seeing model breakdowns, animation or lighting work. Those would be more relevant for a generalist role. When applying for a compositing role, including all those other disciplines actually detracts from your overall impression as a compositor because you are showing less of what the recruiter is looking for. Include a variation of different shots from different shows. Avoid having several very similar looking shots from the same sequence one after the other. Especially, if they all show the same type of skill or technique being used. It gets a bit dull for the viewer. Ideally, only include shots where you did all, or the majority, of the compositing work. If you only did part of the compositing work on a shot, you should be ultra-transparent about this. Never try to pass off other people's work as your own. Keep in mind, lying by omission is still lying. Show specific skills and techniques related to the role. For a compositor, shots with CG integration, keying work, projections, etc. are very useful to show off on your reel. You want the recruiter to tick boxes and see that you would be a good fit skillswise for the team and the project. For juniors, it’s okay to follow a cool tutorial and use a shot you made with it in your showreel – but don't just copy everything they did in the tutorial. Do something new with it; show that you learned the idea behind the technique and are able to apply it to something else. Only include shots that you are comfortable with and would be happy to work on in the future. If you dislike gore, for example, don’t include a blood splatter shot in your showreel. A recruiter may see that shot, relate it to the project they are hiring for, and pick you out based on that. And then you’d be working on gore shots for months on end. Note: it’s not a bulletproof way of avoiding types of work you don’t like, but it may filter out some of it. 💡 If you include any shots with a static camera in between shots with moving cameras, consider adding a small pan or zoom to make the still shots more dynamic and flow better within your showreel. ## Shot Descriptions Often, several compositors will work on the same shot, each contributing different things. It’s important to let the viewer know exactly what you have contributed to each shot in your showreel, so that they can properly assess your skill level. To do this, you can write a short description of your contribution to each shot as an insert at the bottom of the frame in your showreel. Be specific, but concise. If you only added the background building signs, and not the gigantic foreground robot, be very clear about this. Never lie, or lie by omission, about what you have contributed to a shot. 💡 Even if you did all of the compositing work on a shot, still add a description to clarify that you did. If you add clear descriptions in your showreel, there is no need to make a separate shot description document listing all the shots with thumbnails and explaining what you have contributed to them. Your shots will be discussed in the interview as well, and you will have further opportunity to go into detail about your work. 💡 Make sure to spell check any text in your showreel. ## Shot Breakdowns It is okay to include a few compositing breakdowns in your showreel, but limit the amount and mainly show final work. Perhaps a maximum of a 70/30 split between composites and breakdowns – if you do decide to include them. It is enough to show just the befores and afters in the breakdowns. For instance, the blue screen plate with the foreground character first, and then the final comp with the replaced background. There is no need for wiping through numerous passes in between, and showing every step of the composite. 💡 A junior mistake is to show too many steps. Recruiters don't need to see the before and after where you added lens distortion, a vignette, or grain. Keep it simple and just show the scan, and then the final composite. (Unless you have very significant and interesting steps in between). Also, if you do add breakdowns, avoid including them for very simple shots. A breakdown should show a significant change from before to after, to warrant its existence. ## Music George Lucas famously said that “sound is half the experience” in the context of watching movies. I agree with that statement, however the reality is that showreels will often be watched on mute. Look at it from the recruiter’s perspective – intently watching numerous showreels every day gets tiring, especially if the audio is jarring. Remember, the music that you really like might sound awful to someone else’s ears. I don’t think that should stop you from adding music to your showreel, however. It just means there are certain things you should take into consideration when doing so: - Avoid super niche and odd (to the general public) music. Any music you add should be easy to like. - Look for instrumentals, or songs without too many lyrics to distract from the visuals. - Get permission to use the music you pick - especially if your showreel is public and not password protected. You can search for royalty free music online. - Don't prolong or shorten a shot significantly because you're trying to match it to a song. Cut your shots to show your best work. Adding only a couple of extra seconds to an already long shot can really make it feel like it drags on. - Pick music that matches the energy of your showreel. Large, sweeping environments may fit different music than fast-paced gun fights. ## Confidentiality There is a high level of trust involved in the visual effects industry. Leaking content before it gets released is one of the greatest sins. You may get sued for breach of contract/NDA, as well as face immediate termination of employment. Your name will be tarnished within the industry and it will be difficult to find work again. Don’t make this mistake. Instead, show that you are a trustworthy person: - Never put pre-release content in your showreel. - Get permission first for the shots you do put in your showreel. - Put your showreel on a site like for example [Vimeo](https://vimeo.com/) where you can password protect it. ## Permissions The last few years has seen a shift into a much, much stricter regime when it comes to getting permission to use material for showreels. Especially if there is talent (actors/actresses) present in the shot. Their contracts have become exceedingly strict about how they are portrayed publicly, and which images they allow to be used. And so, VFX studios have to seek explicit permission from the client, who has to seek explicit permission from the production company, before any showreel shots are released. That means, on some shows you will unfortunately not get permission to use the shots you have worked on for your showreel. It can be a huge letdown but that is regrettably how it is for the time being. Some artists wait until the Blu-ray is released and rip clips of the shots that they worked on for their showreel. Be very careful with this – it is not recommended and can have legal repercussions. Especially, if your showreel is not password protected and is available to the public. The good news is that recruiters are aware of the showreel material shortage. You may just have to explain your experience in more detail during the interview instead. ## Showreel Specifications Although a lot of shows are delivered in 4K these days, rendering your showreel at a resolution of 1920 x 1080 is still pretty standard. If you have 4K shots, though, feel free to upload in 4K. For the best video quality, please follow [Vimeo’s guidelines](https://vimeo.zendesk.com/hc/en-us/articles/360056550451-Video-and-audio-compression-guidelines) for video and audio compression. I hope you found Part 3 of this guide useful. Next up is [Part 4: Write An Impressive CV](https://www.keheka.com/how-to-get-hired-as-a-compositor-part-4-write-an-impressive-cv/). For more productivity tips, see [Productivity](https://www.keheka.com/tag/productivity/). [Sign up for the newsletter!](https://www.keheka.com/#/portal/signup) ### How To Get Hired As A Compositor – Part 2: Build A Strong Network URL: https://www.keheka.com/how-to-get-hired-as-a-compositor-part-2-build-a-strong-network/ Last updated: 2024-02-07T12:42:51.000Z In this 8-part guide, I will take you through best practices for every step of the journey to getting hired as a compositor. ➜ Part 2 is about where to find the right people to connect with, and how to go about it professionally. [Buy the entire 8-part guide as a PDF](https://keheka.lemonsqueezy.com/checkout/buy/d3b013f6-d032-4a6f-a13f-ebbe5b303ba3?ref=keheka.com) You can find the first part of the guide here: [Part 1: Set Powerful Goals](https://www.keheka.com/how-to-get-hired-as-a-compositor-part-1-set-powerful-goals/) ## Why You Should Network Before you even start applying for a role, it’s a very good idea (I would even go so far as to say it's a must) to work on expanding your professional network. You should start making connections in the VFX industry while you are still in university or while you are still employed at your current company – for the same reason you don’t wait to plant a crop until you’re hungry. Investing time in networking before searching for a job will often pay dividends. Someone you connect with today could be the person who leads you to a job offer a few months or years down the line. And vice versa, you may be able to help refer someone you know for a role. Networking is mutually beneficial. If you become someone who others can turn to for help, you'll find that they will often return the favour. ## LinkedIn There are a few ways to go about networking. The easiest way is on LinkedIn. In the search bar at the top of the page, type in recruiter, talent acquisition, hr, or similar search phrases, and then click on People. Connect with all the VFX recruiters you can find, even those hiring for companies you don't necessarily want to work for. Just as you are likely to move around companies, recruiters move around, too. Later on, they might be hiring for a great company that you are interested in. And then you will already be connected, and will see their recruitment post or get a private message from them. 💡 Make sure your LinkedIn profile is professional and up to date. Have a look at [Part 4: Write An Impressive CV](https://www.keheka.com/how-to-get-hired-as-a-compositor-part-4-write-an-impressive-cv/) of this guide for tips. Choosing the correct industry in the Intro part of your profile should also help narrow your search results down to the most relevant. I have mine set to Motion Pictures & Film. Recruiters are usually keen on connecting with you, and so it’s often enough to just hit the Connect button next to their name. Though, it doesn’t hurt at all to personalise your invitation with a short and friendly message. I wouldn’t phrase the message in the invitation as a question they’d have to answer directly, however. People can have a tendency to delay or outright avoid accepting the invitation if they don’t have an answer there and then. Make it as easy as possible for them to connect with you. You could write something simple such as: Hey \[FirstNameOfRecruiter\], I saw that you are recruiting compositors for \[CompanyName\] and I thought it would be great to connect with you to stay up to date with your job openings. Thanks, \[YourFirstName\] Obviously make it your own, but write something short that is non-demanding, non-urgent, and just easy to say yes to. There are hundreds of recruiters out there posting VFX jobs on LinkedIn. Try to connect with a significant portion of them. You can also search for the Head of Compositing or Head of 2D at a VFX company you want to work for, or someone with a similar role who is involved in hiring, and connect with them to get on their radar. Build up a large network and you’ll start seeing more and more opportunities come your way. ## Other Recruitment Sites LinkedIn is the biggest platform out there but there are other websites you can check out as well, such as [Zerply](https://zerply.com/), [Google Jobs](https://www.google.com/search?q=compositor+recruitment&ibp=htl;jobs&sa=X&ved=2ahUKEwiN1uSS4Jz7AhUSEcAKHVPIDMoQutcGKAF6BAgVEAY#htivrt=jobs&htidocid=OOplaoFMYlwAAAAAAAAAAA%3D%3D&fpstate=tldetail) (search for compositor recruitment and click on Jobs to get to this page), [Total Jobs](https://www.totaljobs.com/jobs/compositor?searchOrigin=Resultlist%5Ftop-search), or [Indeed](https://uk.indeed.com/jobs?q=compositor). For a list of several VFX companies and their careers pages, have a look at [UK Screen Alliance](https://www.ukscreenalliance.co.uk/subpages/job-vacancies/). Use these websites to connect with recruiters, discover job openings, research what companies are looking for, and find out what the rates are in your area. 💡 Speaking of rates, [Glassdoor](https://www.glassdoor.co.uk/) is another useful website for researching that, as well as looking into each company’s culture and reputation. (As always, take what you read with a grain of salt and look at overall trends for guidance). The websites above are UK-focused and so if you are in a different country please search for similar VFX recruitment sites local to you. ## Events Another great way of networking is to attend industry events such as [FMX](https://fmx.de/) or [SIGGRAPH](https://www.siggraph.org/). There, you can engage with VFX business professionals in a setting where people welcome new connections. Look up which events are happening near you and if you can, attend them. Similarly, if your school or university throws a showcase event or organises a VFX company visit, go ahead and attend those. Or, you may find there are social events being held near you, such as the [Bring Your Own Animation](https://london.siggraph.org/event/byoa-bring-animation/) in London. There may even be an [online webinar](https://www.foundry.com/events) coming up which you can attend. 💡 Dress smart at these events. Give firm handshakes – this is such an old piece of advice, and yet people still don't do it. You’ll physically make people feel they are in safe hands if you do. Use an open and friendly body language so that others feel comfortable approaching you. Simply smiling and being positive will attract people. Do your homework. Check to see if companies you are interested in will attend the event you're going to (they often post on social media if they are), and find out who is going. Look them up, research the company, and you will have more thoughtful questions to ask when you meet. Make sure to bring along your showreel and CV. A laptop or tablet is great for playing your showreel to recruiters. It’s all about being prepared and making it as easy as possible for them to look at your work. It’s natural to gravitate towards people that you already know at such events, but networking is also about meeting people outside of your circle. If you’re a bit shy, try to consciously push the boundaries of your comfort zone. Introducing yourself and striking up a friendly conversation, or extending an invitation for someone to join a conversation you’re already part of will go a long way. Networking is a long term pursuit, and so attend events regularly if you can, and follow up with the people you talk to. It’s about building relationships and trust – which usually doesn’t happen overnight. At the events, avoid standing in the doorway. Give people some time and space to breathe as they enter and let them go to the bar and get a drink first. A good place to stand is near the bar area so you meet people after they’ve got a drink in hand and are ready to mingle. Standing in line is also a great opportunity to chat with people. It can be a springboard for a productive conversation. And should the conversation happen to stagnate, there is a natural point to break it off once you get your drink or snacks. Avoid staying and hovering around the buffet if there is one, though. Let people get their food, and rather meet them near the tables or out on the floor. Break the ice. The person you want to talk to may (also) be nervous and will appreciate you approaching them. Remember, everyone is usually friendly but you have to go first. It might feel awkward to begin with, or sometimes you might feel rejected, but that is part of the learning curve. It gets better with practice. It can be helpful to bring a wing(wo)man and/or prepare icebreaker questions beforehand. Prepare a short and compelling description of yourself and your background, and be ready for when people ask you about it. It doesn’t need to be a super rehearsed, slick story, but it’s good to think of some talking points. Unprepared people will often ramble on, or give a staggered response with lots of umms and ahhs, trying to get to an interesting point. That will lose the other person’s interest quickly. Be authentic. Don’t pretend to be someone you’re not and take on a different personality. Just be yourself – the best version of you. If you’re naturally introverted or a bit shy, just listen more than you speak. As long as you are interested and ask thoughtful questions, people will still feel they had a great conversation with you. Try to remember people’s names. Most people don’t and so if you do, you’ll stand out. A good trick is to connect their name with one of their unique physical features or traits. If someone is called Esmeralda and she has distinct, bright green eyes, you could for example link emerald eyes with Esmeralda to remember her name. You can also write their name down on your phone after meeting them, along with a couple of notes about the conversation. Don’t stay on your phone for too long, though! It closes you off to people who might want to approach you. It’s not only about you. Listen to other people and what they are looking for. Actively ask them questions and genuinely show interest in them. Paraphrase them to show that you understand what they are saying. Networking is a two way street. You may be able to help them as well. And you’ll find that you can learn a lot by just listening. Each person you meet is a vault containing a wealth of insight, knowledge and experience. And interestingly, the more interested you are the more interesting you become. Avoid only approaching people that you perceive to be directly useful to you. Try to meet with a diverse group of people. They may expand your ideas, and you may really enjoy spending time with them. You’ll avoid getting stuck in an echo chamber, and will build more interesting and pleasant relationships. Be a good guest. Behave (don’t get drunk), avoid sitting in a corner by yourself, and make an effort to reach out to people. Take advantage of the great opportunities to connect that you have right in front of you. After the event, connect on LinkedIn with the people you met and follow up with them. I would do it within 24 hours so their memory of you is still fresh. Send them a thank you message if they gave you advice, or invite them to continue the conversation. At events you might not get the time to delve too deeply into a subject, as everyone moves around and speaks with multiple people throughout the day or evening. Proactively share information that you think would be useful to others. If you know of a role someone might be looking for, or a tool or tutorial for a technique you discussed with them, share it. It’s a great way to get in touch with people, and to provide value to their lives. ## At Work Building relationships with people you already work with can help you grow in your current role or help you step into the next one. You might even find a mentor, or become a mentor for someone else. Networking doesn’t always have to be about expanding outside of your current work situation, there is often value to find within. And since you and your fellow employees are in the same boat, it’s easy and natural to connect. Keep in mind, pretty much everything covered in the Events section applies to work as well, though it will be less formal. You are essentially making friends and helping each other out. Speaking of events again, really make efforts to attend social work events. It’s a fantastic way of getting to know the people you work with and strengthening your relationships. I’m still really good friends with a group of people I worked with seven years ago, and we all still chat pretty much daily in our Whatsapp group, even though most of us are at different companies now. ## Small Freelance Jobs If you are just starting out, you can also network by searching for small freelance jobs online and offering your services. These mutually low risk jobs can be a great way to get your foot in the door, and can lead to more work later on. 💡 Clients are often more open to hiring recent graduates for these projects. As an example, early on in my career I applied to work remotely for a Dutch company on a small project which then led me to working on six freelance projects in total for the same company. The pay might be a little low to start off with but it gets the flywheel going. I would not advise you to work for free, though, unless you are starved for showreel material and the project is small and won’t take too much of your time. ## Courses Whether it’s at university or via a short training course, meeting like minded people with a common interest in VFX is a wonderful thing. In a natural setting like this you can learn a lot from each other. Help each other to progress and to understand different subjects and techniques. You’ll have similar goals and a lot of common ground. Take advantage of that and build each other up. You may end up working together with some of your classmates later on. How great would it be if you were already good friends and could support each other? Keep in touch with your teachers, too. If you made the effort to do well in their course, they may recommend you for a role. One of my teachers ended up getting me two different freelance jobs after I finished university. And again, pretty much everything covered in the Events section applies to courses as well, although it will be much less formal, even less than at work. ## Friends If you have friends in a VFX company or know someone related to it in some way, there is no shame in asking them for help with providing a recommendation. Many companies have an internal referral system which can help highlight you as a candidate and fast track you to an interview. The VFX industry is a small world and you will likely run into the same people several times throughout your career. Being a nice person and building a reputation for being a great compositor will get you far. I hope you found Part 2 of this guide useful. Next up is [Part 3: Create A Spectacular Showreel](https://www.keheka.com/how-to-get-hired-as-a-compositor-part-3-create-a-spectacular-showreel/). For more productivity tips, see [Productivity](https://www.keheka.com/tag/productivity/). [Sign up for the newsletter!](https://www.keheka.com/#/portal/signup) ### How To Get Hired As A Compositor – Part 1: Set Powerful Goals URL: https://www.keheka.com/how-to-get-hired-as-a-compositor-part-1-set-powerful-goals/ Last updated: 2024-02-07T12:40:47.000Z In this 8-part guide, I will take you through best practices for every step of the journey to getting hired as a compositor. ➜ Part 1 is about how to set realistic, tangible goals that will help lead you in the right direction. [Buy the entire 8-part guide as a PDF](https://keheka.lemonsqueezy.com/checkout/buy/d3b013f6-d032-4a6f-a13f-ebbe5b303ba3?ref=keheka.com) ## Why You Should Set Goals The first step in your job search should be to set goals for what you want to achieve. This is because goals affect behavioural change. They encourage you to take action, they keep you focused, and they hold you accountable. They’re a way of challenging and pushing yourself to reach further, and can be very powerful when used in the right way. It’s worth digging a little deeper into this process, rather than simply thinking ‘I want to get hired as a compositor’ and leaving it at that. Let’s dive in. ## What’s Your Vision For The Future Setting realistic and productive goals starts with imagining your life ahead. What's your vision for the future? What do you want your life to look like two years, five years, or ten years from now? Visualising your ideal future and figuring out what you truly want is sometimes half the battle. You have to be completely honest with yourself, and carefully consider what you want to plan and commit to achieve. Think about what inspires you, and what your values are. Your goals should feel meaningful to you, otherwise your motivation to follow through is likely to wane. Visualise the bigger picture first, and get perspective on what’s important in your life. 💡 If you get stuck, follow your curiosity. It’s usually a great indicator for what you should be looking into. Your goals should give you a clear sense of direction, represent something to aspire to, and help define your purpose. Setting goals puts you in the driver’s seat of your existence because you actively acknowledge what you want out of life and start to take control of your future. – So, it's time to brainstorm: - What would you do if you knew you couldn’t fail? - What does a happy life and success look like to you? ## What’s In Your Control Focus on setting goals for things that are within your control. Ideally, your goals should not depend on anything or anyone but you. What can you directly be responsible for? If one of your goals is to work on a Marvel movie, that outcome is not necessarily up to you. Circumstances outside of your control may lead you to work on other projects. Instead, a more useful goal would be to improve your skills to reach a standard high enough to be able to work on a Marvel movie. Now that's a goal which you can break down and analyse, create objectives for, and work your way towards. And, if the opportunity arises to work on a Marvel movie later on, you will be ready. Even if it doesn't, you'll still be able to create VFX of the same calibre. 'Working on a Marvel movie' should be the byproduct of your goal, not the goal itself. However, it should still help inform your decisions about what to do going forward. ## What's The Path Forward Plan out how you can get from where you are to where you want to be. For example, if you are currently working in the advertising industry, and plan on continuing to do so, that's unlikely to be the path that will lead you to working on a Marvel movie. At some point you will have to change course and move over to the motion pictures industry where you can get experience working on movies. That might feel like a big step and so let's break it down – How can you get there? A stepping stone may be to work on TV shows. The VFX in Netflix projects have reached a very high level now, and getting experience working on some of them would help bridge the gap between advertising and motion pictures. Remember, what you want should be the byproduct of your goals, and so if you want to work on Netflix projects you should aim to reach a skill level high enough to qualify you as a candidate. Work on improving your keying skills, practise CG integration, learn how to properly do projection work, develop your eye for detail, and so on. Break your overall goals down into smaller subgoals, each with its own objectives. Ask yourself: What's the smallest step I can take? And then get going. Consistently make efforts to work your way through your plan. Many small steps will take you far. And any step is better than none. For example, my website and all the posts on it are a sum of many small steps I have taken in researching, developing, organising, writing and rewriting (hopefully) useful information. On some days I write for hours, on other days only for 15 minutes. But I try my best to continually make progress. You may have a similar experience when progressing toward your goals. Just keep in mind that consistency is the key. ## Set S.M.A.R.T. Goals To help with setting goals, you can use the S.M.A.R.T. system: - Specific. Vague goals won’t help you set anything into action. You should have clear and established aims. Who, what, where, when, which, why, and how? If your goals are too broad and undefined they can feel overwhelming and difficult to achieve. Break them down into subgoals and objectives, and be specific. 'Improve keying skills' is too broad of a goal – it has to be broken down into actionable steps. 'Practise IBK keying on uneven green screens', 'Restore hair detail using [multiplication keying](https://www.keheka.com/multiply-key-technique-for-extracting-fine-detail/)', 'Learn to build [edge mattes](https://www.keheka.com/perimeter-advanced-edge-mattes/) for despilling', etc. are more helpful goals, and can be specified even further, still: 'Practise the IBK stacking and IBK dilate techniques on poorly lit green screens with dynamic lighting changes, where the foreground subject is out of focus'. That's a pretty solid What part of the objective. - Measurable. Your goals should be measurable in some sense. If not by numbers or statistics, at least by some metric or milestone that will help you keep track of how far you’ve come, and how close you are to reaching your goal. For example, 'By Friday next week, complete tutorials XYZ about lens distortion and understand how to use it correctly when compositing CG renders'. - Attainable. Your goals can definitely be ambitious, but they should also be within reach. If you are a roto/prep artist and plan on becoming a VFX supervisor on a Marvel movie within six months, that’s just not plausible. Make sure to do your research and be realistic about what you want to achieve. Going from being a roto/prep artist to becoming a junior compositor in six months – as a small step toward becoming a VFX supervisor – that is certainly a much more attainable goal. You want to set yourself up for success, not place impossible expectations on yourself. You do want to push your comfort zone a bit, though. When a goal is difficult, but not impossible, you may find that you will work harder to achieve it. - Relevant. Are your goals and objectives contributing to the bigger picture? Going off and learning how to do water simulations in Houdini is great, but it probably won’t do as much for your compositing career as studying keying techniques in Nuke. It’s quite simple; if you want to become a great compositor, pay particular attention to mastering skills relevant to compositing. The sun’s rays do not burn until brought to a focus. - Time-bound. Set realistic timeframes for your goals. If they’re too short, then complex and time-consuming tasks won’t be done on time which will just lead to frustration. And if you set too generous deadlines for simple goals, you’ll squander your potential and feel unproductive. It will take time to find the sweet spot, but keep adjusting as you go and you will get there. And when you do, you’ll find that having a realistic deadline pushes you to work harder and to stay focused. As you can tell, it takes a lot of research to set specific, actionable goals. Just remember, the time you spend is purely an investment in yourself. If you commit to it, it will help give you clarity in life. ## Combat 'Out Of Sight, Out Of Mind' Write down your goals. Using the tips above, have an honest brainstorm session and put down on paper everything that you really want to achieve. Afterwards, organise all your notes. Order your goals, subgoals, and objectives by priority. Colour code them if you like, make a list, or create a collage. Make it visual – in any manner that helps you. That way, your goals don't just stay in your head as thoughts and dreams, but become more tangible and real. And whether they take the shape of simple written notes, a vision board, or a colourful action plan, keep your goals somewhere visible. Somewhere you visit every day, like on the refrigerator. They will serve as a daily, visual reminder of what you want to achieve in life, and nudge you to work towards it. Not to mention, they will proudly display your progress which can be a real motivational boost. As an example, I have a physical calendar on my refrigerator. In addition to the daily agenda column I have columns for working out and for writing posts for my website. I bought a bunch of cheap star stickers, and every time I do a workout or publish an article I stick a star on that day, in the relevant column. It's just a simple, visual way to track progress and help motivate me. But it's so effective. Feel free to experiment with different things, something else might work better for you, specifically. ## Revisit Your Goals Regularly Life does not typically follow a linear path, and neither do your goals and objectives. They are likely to change and evolve over time, and so you should regularly re-evaluate them. Every three to six months is a good rule of thumb. 💡 Set a recurring reminder in your calendar to check in on your goals. For each goal, ask yourself: - Is this goal still important to me? Will achieving this goal still bring (enough) value to my life? Pursuing a goal may mean sacrificing in other areas of your life, and you might find that some goals are not worth it. - Is this goal still relevant to my career path? New information may have come to light which has rendered the goal obsolete. A tool or technique you wanted to learn may have been superseded since the last time you set your goals. Or, you may have fallen in love with digital matte painting or another discipline on your journey, and have decided to pursue that instead. - Is there a better goal which should replace it? Identify the rewards and consequences, and consider changing the goal to optimise your path forward. - Are there any (new) obstacles in my path towards this goal? If so, make a plan for how to overcome or circumvent them. - Are there any new goals or objectives I should add? You may have discovered new things and learned a lot since the last time you checked in. Goals also tend to become more specific the further along your career path you are. Update or add goals and objectives as needed. And, as an overarching question, ask yourself: - Am I heading in the right direction? Should I course-correct? Reflect on your progress so far and on where you are currently heading, and assess if that is still in line with what you want. Just by asking yourself the few questions above, you should get a good idea of which goals you need to reinforce, readjust, reprioritise, or remove. ## Celebrate Victories Lastly, don’t forget to give yourself a well deserved pat on the back and celebrate when you finish your objectives and reach your goals. You are actively taking steps to improve your life. That’s a powerful thing. I hope you found Part 1 of this guide useful. Next up is [Part 2: Build A Strong Network](https://www.keheka.com/how-to-get-hired-as-a-compositor-part-2-build-a-strong-network/). For more productivity tips, see [Productivity](https://www.keheka.com/tag/productivity/). [Sign up for the newsletter!](https://www.keheka.com/#/portal/signup) ### The Edge Of Chaos URL: https://www.keheka.com/the-edge-of-chaos/ Last updated: 2023-02-09T16:31:42.000Z How to apply a concept from Chaos theory to improve your skill progression. ## The Goldilocks Zone There is a concept in [Chaos theory](https://en.wikipedia.org/wiki/Chaos%5Ftheory) which I think serves as a great analogy to an important part of real life: progress. It’s called The edge of chaos and is a hypothetical transition zone between order and disorder. This region is fertile for creation and experimentation, for invention and reinvention, and for adaptation and innovation. Here, interspersed and interplaying with established information, the noise of chaos subsides. New structures of information take shape, and order emerges. It’s where growth and progress take place. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2022/10/TEOC_1.png) Visualising the edge of chaos. If disorder is the unknown; yet to be explored and organised into something meaningful – order is what we do know and have already categorised. And the things we have a good grasp of fall within our comfort zone. Through evolution, our brains have become hardwired to recognise patterns, and order is comforting because it is predictable. For the same reason, disorder may make us uneasy. Retreating too far into our comfort zone, though, means we sacrifice progress and innovation for simplicity, stability, and predictable repetitiveness. It is more about maintaining what is, than evolving towards what is to become. Venturing too far out into the unknown and enveloping ourselves in disorder, on the other hand, means we encounter too much complexity/flexibility coupled with little to no sense of direction. Structures and focus dissipate, and not much of use is accomplished out there. At the edge of chaos, where the two opposing entities meet, we find a Goldilocks zone. It’s where creative ideas materialise; where we learn something new; or where we build upon something we already know. ## Expanding The Comfort Zone We are able to expand our comfort zone from the edge of chaos, because we have a firm point of reference behind us to help with navigating the unknown ahead. By gradually absorbing and digesting pieces of information from the chaos and arranging them into useful knowledge, we build our comfort. Take learning a new language, for example. You could learn 100 words and practice them every day until you get super comfortable with writing and pronouncing them. However, if you didn’t continue progressing your learning, those words alone wouldn't actually get you very far. Communicating in a new language requires constant expansion of your comfort zone. You would have to read and listen to native sentences and conversations, piece together context and structure, learn the rules and irregularities, and expand your vocabulary to be able to truly use the language. This takes effort, almost like you are mentally stretching your brain. It’s the same with learning how to play an instrument. Or learning to code. Or becoming a better compositor. In any area you want to progress, you have to push yourself out of your comfort zone and into the edge of chaos. It’s a better place for learning, and for fostering innovative ideas. ## Cross-pollination That’s not to say progression or innovation can’t happen in the comfort zone. It is just less likely. There is a way to increase your odds, though. If you are skilled in more than one area and you discover a way of connecting them, you may find that the sum is greater than its parts. You’ll be able to operate deeper within the comfort zones of each skill, while still creating something new and unique. As a simple example, combine woodworking with a bit of engineering, and you get the motorised standing desk. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2022/10/TEOC_2.png) Cross-pollination of skill sets. Innovation happens in the intersection between skills. This happens naturally in teams, where people with different skill sets come together and share ideas and information. Part of one person’s unknown may very well be someone else’s comfort zone. ## The Path Forward How can musician X have the confidence to perform live in front of 20,000 people? I get nervous presenting for 20 people on a Zoom call, you might say. Well, they didn't start out performing for 20,000 people. Likely, they performed for their parents and friends as children. Then, in school plays. Open mic nights. Small gigs. Then, bigger and bigger concerts – until they now can perform for huge audiences without letting their nerves get to them. It takes time and effort to expand your comfort zone. And you don’t have to sprint to the edge of chaos right away; you can build up to it. The important thing is to dedicate time, and to be consistent. Set aside time daily or weekly to work on your skill, in focussed practice. If you want to write a book, you could for example set aside one hour every morning to write. It does take sacrifice – you may have to get up one hour earlier than usual to do it, or you may have to browse social media for one hour less each day. You don’t have to stay at the edge of chaos around the clock, though. It takes work and can be frustrating at times. Weave in and out of the edge and take breaks to charge up your mental battery. Just don’t stay in your comfort zone for too long. Momentum, or lack of it, can make or break progress. As you progress, regularly reflect on what you have accomplished, and course-correct when needed. It can be easy to put the blinders on and accidentally veer off course, going down a path you didn’t intend to. (Look out for happy accidents, though!). Lastly, engage and collaborate with others. Symbiosis can be powerful. While each of you stretch your comfort zones, suddenly you may find an overlap of skill sets which leads to a great idea for a new product, a new technique, or a new point of view. I hope you found this article useful. For more productive inspiration, see [Productivity](https://www.keheka.com/tag/productivity/). [Sign up for the newsletter!](https://www.keheka.com/#/portal/signup) ### How To Build A Show Specific Grain Tool In Nuke URL: https://www.keheka.com/how-to-build-a-show-specific-grain-tool/ Last updated: 2025-02-16T09:46:48.000Z ⭐ Compositing Supervisors are often expected to make a show specific grain tool at the beginning of a project. Here is a deep dive tutorial showing you exactly how to do it… _This post is for paying subscribers only._ ### Manipulating Deep Data In Nuke URL: https://www.keheka.com/manipulating-deep-data/ Last updated: 2025-02-16T09:47:19.000Z ⭐ Manipulating Deep data opens up opportunities to do some cool and useful things in Nuke… _This post is for paying subscribers only._ ### Erode Dilate Technique In Nuke URL: https://www.keheka.com/erode-dilate-technique/ Last updated: 2023-02-09T16:32:14.000Z The Erode Dilate technique is very versatile and can be used for wire removal, cleaning blue/green screens, removing noise, filling holes in core mattes when keying, and more. \- ## The Setup The Erode Dilate technique is quite simple, and only requires two nodes. The idea is to erode in the pixels in the image, and then dilate them back out again by the same amount, and vice versa. \- By eroding pixels in and dilating them back out by the same amount you kill bright detail, and by dilating pixels out and eroding them back in by the same amount you kill dark detail. The larger structures in the image will also degrade but typically remain fairly similar to before. \- I usually use the Erode (filter) node but you can use any Erode or Dilate node you prefer. Let’s create two Erode (filter) nodes and connect them to each other. Set the channels to rgba in both nodes if you also want to affect the colours and not just the alpha channel. \- You will be eroding and dilating by the exact same amount, so in order to only have to adjust one value, you can add this expression in the second Erode (filter) node's size knob: \- \-parent.FilterErode1.size \- (In this case the first Erode (filter) node is called FilterErode1). \- The expression above simply takes the size value from the first Erode (filter) node and returns the negative of that value. So a value of 1 becomes -1, and a value of -1 becomes 1. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2022/09/FilterErodeExpression.png) Expression linking the two Erode (filter) nodes. \- ## Removing Wires Wires tend to be darker than the background, so in this case set the first Erode (filter) node to a negative value so that the pixels are dilated out first, then eroded back in. 0:00 / 1× The Erode Dilate technique is great for quickly removing wires. \- 💡 The technique is sensitive to surrounding pixels, so if for example a person moves in front, it will grab values from them. Keymix as needed. \- ## Cleaning Screens If there is dark dirt or seams on the screen, follow the same procedure as for wire removal above. However, if you want to remove something bright, set the first Erode (filter) node to a positive value so that the pixels are eroded in first, then dilated back out. 0:00 / 1× The Erode Dilate technique is great for quickly removing small dirt or seams from a green/blue screen. \- 💡 You can separate the width and height of the erosion/dilation by clicking on the little button with the 2 on it next to the size slider in the Erode (filter) nodes. This can be useful if the wire/seam you want to remove is vertical or horizontal. \- ## Removing Noise In specific scenarios, the Erode Dilate technique can be used for noise reduction. For example when you have low sampled smoke renders with noise in them: 0:00 / 1× The Erode Dilate technique is great for removing noise from CG smoke or similar renders where the overall structure in the image can easily survive a slight degradation. \- ## Filling Holes In Core Mattes One of the more common uses for the Erode Dilate technique is to fill in holes in core mattes when keying: 0:00 / 1× The Erode Dilate technique is great for filling in holes in core mattes when keying. Note: it will ruin edges and fine detail, so only use the technique for the core matte. Keymix as needed. \- ## Creative Look Development The Erode Dilate technique also has other interesting use cases. For example, you can create particular types of looks or effects, such as this cellular webbing effect: 0:00 / 1× You can use the Erode Dilate technique to create some interesting visual effects, like the cellular webbing structures in the video above. \- Here, I just wrapped the Erode (filter) nodes in two Colorspace nodes, going to the YCbCr colour space and back again, and in the Erode (filter) nodes I changed the channels to red (luminance in YCbCr), and set the filters to gaussian. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2022/09/Webbing.png) The setup for the webbing effect. \- I hope you found this tutorial useful. For more Nuke tips & tricks, see [Nuke](https://www.keheka.com/tag/nuke/). \- [Sign up for the newsletter!](https://www.keheka.com/#/portal/signup) \- ### Sticking A Projection Onto Animated Geometry In Nuke URL: https://www.keheka.com/sticking-a-projection-onto-animated-geometry/ Last updated: 2024-05-25T20:30:55.000Z How to project an image or paint a texture onto animated geometry, and have it stick to it. \- ## Projection Method If you want to project an image/texture onto animated geometry you can use the setup below. It projects the texture onto the geometry on a reference frame and outputs the projection as a UV texture map. The result is then applied back to the animated geometry. 0:00 /0:02 1× An example texture (Stick text) is projected onto a moving sphere. \- ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2022/09/SAPOAG_ProjectionMethod.png) The setup for the Projection Method. Keep in mind that your image does take a filter hit when rendered out as a UV texture map, so make sure to use a high enough resolution in your Reformat, and sharpen as necessary. \- ❗ In newer versions of Nuke, frameholding the animated geometry separately no longer works. Instead, use a single FrameHold node as shown below: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2024/05/New_Setup.png) The new setup. \- ## UV Paint Method You can also paint directly on the UV texture map and apply the result as a texture to your animated geometry using the setup below. 0:00 /0:02 1× An example smiley face is painted onto a moving sphere. \- ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2022/09/SAPOAG_UVpaintMethod.png) The setup for the UV Paint Method. Note that in this case there is no need to connect a camera to the first ScanlineRender node. \- I have made both setups available for download below: [Sticking A Projection Onto Animated Geometry v1.0Download a copy of the setup. (Paste the text into your Node Graph).Sticking\_A\_Projection\_Onto\_Animated\_Geometry\_v1.0\_keheka.txt6 KBdownload-circle](https://www.keheka.com/content/files/2022/09/Sticking%5FA%5FProjection%5FOnto%5FAnimated%5FGeometry%5Fv1.0%5Fkeheka.txt "Download") \- I hope you found this tutorial useful. For more Nuke tips & tricks, see [Nuke](https://www.keheka.com/tag/nuke/). \- [Sign up for the newsletter!](https://www.keheka.com/#/portal/signup) \- ### Re-Using CG Renders Across A Sequence In Nuke URL: https://www.keheka.com/re-using-cg-renders-across-a-sequence/ Last updated: 2023-02-09T16:32:27.000Z Often, when working on a sequence in which multiple shots have similar camera angles, the CG background will only be rendered for one hero shot. The other shots will then re-use the same CG to save extra work and render time. Here is how to accurately align the CG background in shots where it is being re-used. \- ## Import What You Need To re-use the hero shot’s CG render in another shot you can make use of projections in Nuke. For that, you will need to import: - The hero shot’s CG render - The camera that the CG was rendered with - The geometry (if any) - The camera for the shot you are currently working on - The lens distortion for the shot you are currently working on \- ## Pick A Reference Frame If the hero shot’s CG render has multiple frames, pick a reference frame that closely matches the camera angle in your shot. Framehold the CG render on that frame. Also, Framehold the camera that the CG was rendered with on the same frame. This will be your projection camera. \- (If the hero shot’s CG render only has one frame, just make sure to Framehold the camera that the CG was rendered with on the same frame). \- ## Line Up The Projection Geometry Should you have geometry matching the CG render, then great, you may be able to use that as-is. If not, you can create a point cloud from the CG render, and line up Cards, Cubes, or other Nuke geometry to it. \- You can create a point cloud from the CG render by using a PositionToPoints node, setting the surface point to the position pass, and the surface normal to the normal pass. If you have Deep renders, you can use a DeepToPoints node and plug in your deep and camera to create a point cloud. \- View the point cloud in 3D space and move your Cards or other geometry to line up with features such as walls, roofs, streets, etc. It’s important to make the Cards/geometry large enough so that they will catch all of the projection and not crop any of it. \- ## Project The CG Render Once you have the CG render and projection camera frameheld on the reference frame, and the projection geometry lined up and ready to go, project the CG render by using a Project3D node. If there is overscan in the render that you want to keep downstream, make sure to [project the overscan properly](https://www.keheka.com/projecting-overscan-with-no-cropping/). \- ## Render The Projection Next, connect a ScanlineRender node and use the camera from the current shot as the render camera. Finally, add the lens distortion from the current shot. The re-used CG background composited into your shot should now line up exactly with the hero shot. \- ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2022/09/Setup.png) The setup and general workflow. \- 💡 The same method applies for re-using a matte painting across a sequence. \- I hope you found this tutorial useful. For more Nuke tips & tricks, see [Nuke](https://www.keheka.com/tag/nuke/). \- [Sign up for the newsletter!](https://www.keheka.com/#/portal/signup) \- ### Add Or Remove Flickering In Nuke URL: https://www.keheka.com/add-or-remove-flickering-in-nuke/ Last updated: 2023-02-09T16:32:33.000Z Being able to composite subjects/objects into dynamically lit scenes is an essential part of any compositor's skill set. And so is removing unwanted flickering from a shot. \- There are many scenarios where there is an element of dynamic lighting in a shot. A certain animated interaction with the lighting and the scene which you have to accurately analyse and then match or remove to properly integrate your composite. \- Let’s look at two methods for achieving this. \- ## Dynamic Grade Method The first method is my go-to approach and works really well in the majority of cases. Especially when there are flickering lights with multiple colours in the scene, such as the images from a TV set, the lights at a concert venue, or a flashing child's toy. \- This approach involves accurately analysing the lighting changes and dynamically match-grading what you are compositing into the scene. (Or, reversing the lighting changes if you want to remove the flickering). \- You can do this with the super useful CurveTool node, a Grade node, and some simple expressions: \- ### Start With A Curve Tool Create a CurveTool node and set the operation to Avg Intensities. \- ### Adjust The Region Of Interest Resize and reposition the Region Of Interest (ROI) in the CurveTool node near to where you want to composite your subject/object. You want to capture the lighting changes in that area only, and not potentially different lighting changes elsewhere in the frame. \- 💡 It's usually best to pick a relatively flat area so that sharp highlights or other anomalies don’t pollute the intensity data. \- If needed, track/animate the ROI to follow the area you picked. (For example if there is a camera move, or the subject/object moves). \- ### Analyse The Image Hit the Go! button in the CurveTool node, select your frame range, and hit OK to analyse the lighting changes. Once it is done calculating you will end up with animated values in the IntensityData tab of the CurveTool node. These describe the average intensity of the lighting in the selected ROI for every frame that was analysed. \- ### Use The Intensity Data We want to use the intensity data from the CurveTool node to drive an automated grade. To match/remove the intensity changes over time, we need to pick a reference frame, and compare each frame with it to calculate the changes. We can do that with a simple divide operation. \- Create a Grade node, make sure black clamp and white clamp are unticked, and add the below expressions in either the gain or multiply knob, for each of the red, green and blue channels, respectively (substitute 25 with your reference frame number): \- CurveTool1.intensitydata.r / CurveTool1.intensitydata.r(25) \- CurveTool1.intensitydata.g / CurveTool1.intensitydata.g(25) \- CurveTool1.intensitydata.b / CurveTool1.intensitydata.b(25) \- (Here, the CurveTool node is named CurveTool1 and the reference frame is frame 25). \- These expressions simply take the intensity data on the current frame and divide it by the intensity data on the reference frame, for each channel. Which gives you per-frame ratios describing the changes in the average lighting intensity from the reference frame. \- Grade your patch, element, CG render, matte painting, etc. to sit into the scene on the reference frame. Then, connect the Grade node with the expressions above to it, to match the flickering to your scan. \- To stabilise the intensity changes instead, i.e. to remove the flicker, simply tick the reverse checkbox in the Grade node and connect it to your scan. \- ## Dynamic Dissolve Method The second method is great for when the lights in the shot only change between two main states. It could for instance be a dying light bulb flickering on and off, a Neon sign blinking in an alley, or the camera shutter speed being out of sync with the on-set lighting, resulting in lights flickering in the shot. \- (There may still be more lighting states, but all of them would fall somewhere between the two main states. For example, fully on, halfway on, and fully off). \- This approach involves the exact same lighting analysis as before, and then making two versions of what you are compositing into your scene (e.g. patch, element, CG render, matte painting, etc.): \- A version graded to sit into the first main lighting state (i.e. light fully on), and another version graded to sit into the second main lighting state (i.e. light fully off). Then, automating a Dissolve node to animate between the two states frame by frame using a normalised intensity data curve. \- 💡 You can make even more versions if you have multiple main lighting states, but it becomes more work mixing between them. I would only recommend this method for shots with two main lighting states. \- ### Normalising The Intensity Data To drive a Dissolve node using the intensity data we have to normalise the values between 0 and 1. \- The formula for normalising a value V on a curve is: Vnormalised = (V – Vminimum) / (Vmaximum – Vminimum) \- Translated into plain English this means the normalised value equals the current value minus the lowest value on the curve, divided by the highest value on the curve minus the lowest value on the curve. \- To avoid doing this calculation by hand you can use a tool such as Ben McEwan’s [CurveRemapper](https://github.com/BenMcEwan/nuke%5Fpublic#bm%5Fcurveremapper). Copy the intensity data from your CurveTool into the CurveRemapper, set the new minimum to 0 and the new maximum to 1, and run the calculation. Then, copy the output animation into the which knob of a Dissolve node. \- Connect the 0 input of the Dissolve node to the darkest version of your patch, element, CG render, matte painting, etc., and the 1 input to the brightest. \- And there you have it, your composite will match the flickering in the scan. \- ## DeFlicker Tool To make the whole process as easy as possible, I have made a DeFlicker tool which has options for using both methods described in this article. \- For the Dynamic Grade Method, adjust the ROI and hit the Analyse Region button. Select your mode, i.e. Remove Flicker or Match Flicker, and set your reference frame. Connect a mask if you wish to limit the grading effect, and unpremultiply and mix back as needed. \- ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2022/09/DeFlickerA.png) \- For the Dynamic Dissolve Method, adjust the ROI and hit the Analyse Region button. Then hit the Normalise button, followed by the Create Dissolve button. You can either expression link the Dissolve node, or copy the animation to it, by ticking or unticking the Link Output checkbox. \- ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2022/09/DeFlickerB.png) \- Credit goes to Rob Bannister and his [Flicker](http://www.bannisterpost.com/downloads/flicker/) tool for the Normalise → Dissolve part of the DeFlicker tool. I used his code as a base and modified the frame range part. \- [ DeFlicker v1.1 Download a copy of the DeFlicker tool. (Paste the text into your node graph). DeFlicker\_v1.1\_keheka.txt 8 KB download-circle ](https://www.keheka.com/content/files/2022/11/DeFlicker%5Fv1.1%5Fkeheka.txt "Download") \- 💡 There are plenty of variations of the above methods out there, and other ways of deflickering in Nuke such as using [FurnaceCore DeFlicker2](https://learn.foundry.com/nuke/content/reference%5Fguide/furnacecore%5Fnodes/f%5Fdeflicker2.html) or the [Blur/Divide](https://www.youtube.com/watch?v=Qxp7jjDhQWY) technique, but the two methods in this article usually work 99% of the time. \- I hope you found this tutorial useful. For more Nuke tips & tricks, see [Nuke](https://www.keheka.com/tag/nuke/). \- [Sign up for the newsletter!](https://www.keheka.com/#/portal/signup) \- ### Grade Stacking In Nuke URL: https://www.keheka.com/grade-stacking/ Last updated: 2025-02-16T09:47:45.000Z ⭐ If you need to remove a distracting highlight, make a sunny scene flat and overcast, or grade a shot day-for-night, here is a very useful grading technique... _This post is for paying subscribers only._ ### Retiming Cameras In Nuke URL: https://www.keheka.com/retiming-cameras-in-nuke/ Last updated: 2023-02-09T16:32:56.000Z If you have a camera that has been matchmoved to a scan and you later end up having to retime that scan, you can easily retime the camera in Nuke and avoid having to redo the camera tracking work. \- In order to do this you can use a retime curve, expressed in frames, from the Kronos, OFlow, or TimeWarp node. For the other retiming nodes such as Retime and TimeOffset, the approach is a little bit different. \- ## Kronos/OFlow If you are retiming the scan using a Kronos/OFlow node, you can make a retime curve by changing the Timing dropdown menu (knob name: timing2) to Frame, and then setting keyframes just below, in the knob called timingFrame2. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2022/08/Kronos.png) By retiming the scan this way instead of just setting the output speed, you will make a curve in the timingFrame2 knob which maps the retimed frame onto the current frame, for every frame. And we can use this curve to retime the camera. \- To do that, open up the camera's properties. For each of the animated knobs in the camera (in all the tabs!), right click on the Animation menu button (the one with the squiggly curve all the way to the right of the animated values), and go to Edit expression. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2022/08/Translate.png) The Animation menu button next to the translate animation. \- ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2022/08/Curve_expression.png) In the window that pops up, the expression will say curve which just means there are animated values stored in that knob, represented as a curve over time, and that the expression will output the value of that curve on the current frame. (The expression updates on every single frame, outputting the value of the curve for that frame). \- The expanded expression curve(frame) would do exactly the same thing, just written more explicitly. Again, it just means: “Hey Nuke, look at this curve – what is the value on the current frame? Output that, please.” \- Now, since we have retimed the scan we don’t want the expression to output the value of the curve as it is on the current frame. What we want is to change the expression so that it outputs the value of the curve as it is on the retimed frame instead. And with the retime curve that we created earlier, we can do just that. \- So, instead of putting (frame) after curve in the expression, we replace that with the timingFrame2 from the Kronos node, like so: curve(Kronos1.timingFrame2) (In this example the Kronos node is named Kronos1). ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2022/08/Kronos_expression.png) Remember to do this for all the animated knobs in the camera, and that’s it – you now have a retimed camera. \- If you are using an OFlow node instead of a Kronos node, the method is exactly the same. Just swap out Kronos for OFlow in the expression, like so: curve(OFlow1.timingFrame2) (In this example the OFlow node is named OFlow1). ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2022/08/OFlow_expression.png) \- ## TimeWarp If you are retiming the scan using a TimeWarp node, you can make a retime curve by setting keyframes straight in the knob named lookup. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2022/08/TimeWarp.png) And in the camera you would change the expressions like so: curve(TimeWarp1.lookup) (In this example the TimeWarp node is named TimeWarp1). ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2022/08/TimeWarp_expression.png) \- ## Retime As mentioned at the beginning, if you are retiming the scan using a Retime node, the approach is a little bit different. You start by setting your speed and then compare the input range and the output range. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2022/08/Retime.png) Then, transfer those values into for example a TimeWarp node: Go to the first frame of the output range and set a keyframe in the TimeWarp node with the corresponding value from the first frame of the input range. In the example above, both are 1\. So on frame 1 set a keyframe with value 1 in the TimeWarp’s lookup knob. \- Next, go to the last frame of the output range and set a keyframe in the TimeWarp node with the corresponding value from the last frame of the input range. In the example above, you would go to frame 261 and set a keyframe with value 522 in the TimeWarp’s lookup knob. \- Now you have a retime curve which you can use in the expressions in your camera like described in the TimeWarp section. \- Note: If you in addition to the speed are also changing the input range and output range in the Retime node, you will have to manually calculate how many frames that offset equates to and add that into the expression like so: curve(TimeWarp1.lookup + 10) (In this example the TimeWarp node is named TimeWarp1, and the additional offset is +10 frames). \- ## TimeOffset If you are retiming the scan using a TimeOffset node, you can just select all the keyframes in your camera in the Dope Sheet and move them over the same amount of frames as the TimeOffset. \- If you wanted to add an expression, however, you would use the time\_offset knob from the TimeOffset node, like so: curve(frame + TimeOffset1.time\_offset) (In this example the TimeOffset node is named TimeOffset1). ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2022/08/TimeOffset_expression.png) This expression simply takes the current frame and applies the time offset value to it in order to get the retimed frame. Then outputs the value of the curve on that frame. \- ## Baking The Expressions If you for instance want to export your camera as an Alembic file from Nuke, you will need to bake the expressions you have made into raw keyframes. To do this, right click on the Animation menu button for each animated value in the camera which has an expression in it, then go to Edit → Generate. In the window that pops up, select the frame range you want and hit OK to bake the expression into keyframes. \- ## Versatile Technique This technique of retiming animations using expressions works not only for cameras but also for any other node in Nuke with animation on it. If you for instance have 2D tracked your scan, and later retime the scan, you can apply the same expressions in the exported Transform\_MatchMove node, for example. Or if you have animated a Grade node to match flickering in the scan, you can retime that animation as well. \- I hope you found this tutorial useful. For more Nuke tips & tricks, see [Nuke](https://www.keheka.com/tag/nuke/). \- [Sign up for the newsletter!](https://www.keheka.com/#/portal/signup) \- ### Projecting Overscan With No Cropping In Nuke URL: https://www.keheka.com/projecting-overscan-with-no-cropping/ Last updated: 2023-02-09T16:33:03.000Z The Project3D node in Nuke does not always play well with images that contain overscan. Despite un-ticking the crop checkbox in the node it will frustratingly often still crop the areas in the overscan. \- Similar to the [Bypass Bounding Box Cropping](https://www.keheka.com/bypass-bounding-box-cropping/) technique, we can reformat the image format to encompass the whole bounding box in order to work around this problem: \- Add a Reformat node to the image with overscan. In the Reformat, set the type to scale, the resize type to none, and then tick/enable the center checkbox. Then, increase the scale until the format fully encompasses the bounding box. \- However, by changing the image format the projection no longer lines up. That is because the focal length in the projection camera is no longer appropriate. It should be wider (lower value) to account for the new, enlarged view of the image. Luckily, the focal length is proportional to the scaling that you have just applied. So, if you scaled up the image format by for example 1.2, just divide the focal length by 1.2 in only the projection camera to realign it. \- (To be extra clear, you are keeping the render camera unchanged. That means you will have to copy the render camera to make a separate projection camera if you were using the usual Framehold method – since you are changing the focal length parameter in the projection camera to be different to that in the render camera). \- Next, make sure to adjust the overscan value in the ScanlineRender node if overscan is needed downstream. \- Et voilà! Crop begone! \- I have included a demonstration script download to show the methodology in practice. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2022/08/POWNC_Demo.png) \- [ Overscan Projection Demonstration v1.0 Download a copy of the Overscan Projection setup. (Paste the text into your node graph). Overscan\_Projection\_Demonstration\_v1.0\_keheka.txt 6 KB download-circle ](https://www.keheka.com/content/files/2022/08/Overscan%5FProjection%5FDemonstration%5Fv1.0%5Fkeheka.txt "Download") \- I hope you found this tutorial useful. For more Nuke tips & tricks, see [Nuke](https://www.keheka.com/tag/nuke/). \- [Sign up for the newsletter!](https://www.keheka.com/#/portal/signup) \- ### Checking Grain Using The Viewer Input Process In Nuke URL: https://www.keheka.com/checking-grain-using-the-viewer-input-process/ Last updated: 2023-02-09T16:33:10.000Z You may have been utilising a gizmo such as the QC\_Helper to assist you with checking grain. While it is very useful, it can be inconvenient having to copy/paste the gizmo and reconnect it around in the script everywhere you want to do your grain checking. \- Instead, you can use Nuke’s Viewer Input Process to make things easier. It is a way to apply a node or group of nodes to the image before displaying it. The Viewer Input Process will only affect the Viewer and will not get applied when you render out your comp (for example if you were to accidentally leave it activated). \- In the Viewer settings (to access, press S while hovering your mouse over the Viewer), scroll down to the input process field. By default it will say VIEWER\_INPUT. That is the name of the node or group that Nuke will use to apply the Viewer Input Process. If you change the name to for example Grade1 and create a Grade node in your script named Grade1, Nuke will use that node. I tend to leave it as VIEWER\_INPUT and just name my node or group the same so that it is clear at a glance which node does what in the script. \- With that in mind, let’s recreate the grain checking part of the QC\_Helper gizmo and turn it into a Viewer Input Process. First, make a Group node and name it VIEWER\_INPUT: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2022/08/VIEWER_INPUT.png) \- Inside, add the following nodes and settings: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2022/08/VIEWER_INPUT_internals.png) \- Here, we are converting the incoming image to log space, then subtracting a blurred version of itself to only keep the high frequency detail, i.e. the grain, and finally grading that grain up to better see it. You can also gamma up the image a bit if you want, either in the Grade node or by using the Viewer Gamma, to help make the grain more visible. \- Keep this VIEWER\_INPUT node disconnected somewhere in your comp script, and anytime you want to check the grain, hit Alt (Option) + P to activate it. You can also click the little IP button at the top of the Viewer. \- ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2022/08/NoIP.png) Image without the Viewer Input Process activated. \- ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2022/08/IP.png) The same image but with the Viewer Input Process activated. \- Using the Viewer Input Process to activate the grain checker like this is great for [tech checking](https://www.keheka.com/tech-check-checklist/); when you are switching back and forth between multiple scans and comp versions. You only ever have to keep one copy of the VIEWER\_INPUT group in the script, and you can freely view any part of the script and the grain checker will be applied. \- I hope you found this tutorial useful. For more Nuke tips & tricks, see [Nuke](https://www.keheka.com/tag/nuke/). \- [Sign up for the newsletter!](https://www.keheka.com/#/portal/signup) \- ### Multiplication Key Technique For Extracting Fine Detail In Nuke URL: https://www.keheka.com/multiply-key-technique-for-extracting-fine-detail/ Last updated: 2025-02-16T09:48:08.000Z ⭐ The Multiplication Key technique is great for restoring fine or tricky detail such as hair and motion blurred edges… _This post is for paying subscribers only._ ### How To Create A Force Emanating From A Point In Nuke URL: https://www.keheka.com/force-emanating-from-a-point/ Last updated: 2023-02-09T16:33:28.000Z A while back, my friend Reuben was looking for ideas to create a force emanating from a point in Nuke. I came up with a 3D setup that generates a textured matte that endlessly emanates outward, or absorbs inward, depending on the direction you animate it. \- The idea is simple: Create a Cylinder and animate a Noise texture along the length of the Cylinder. Then, add a DisplaceGeo with a Ramp to the Cylinder to make a wide cone, and point a camera straight down the funnel. \- 💡 By animating the texture using the Transform tab in the Noise properties you can achieve infinite scrolling. \- ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2022/06/3D_Setup.png) \- The result when viewed through the camera: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2022/06/Unpatched.png) \- Notice the seam at the bottom where the UVs wrap around the Cylinder. In order to patch that area, I created a second Cylinder with a slightly smaller radius, rotated and time offset the Noise texture, and masked it off to only patch over the seam. The completed matte looks like this: \- 0:00 / 1× \- This matte can be used to drive grades, IDistorts, the [Glass](http://www.nukepedia.com/gizmos/transform/glass) node, and much more. \- 💡 If you do not need the 3D functionality, you can create essentially the same matte in 2D by using a SphericalTransform node. Connect the SphericalTransform node to your Noise, set the input to Latlong, the output to Mirror Ball, and rotate the output 90 degrees around the Y axis. (If you are using the old SphericalTransform node, set the input to Lat Long map, the output to Mirror Ball, and rotate the output 90 degrees around the Z axis). \- Here, the matte is applied through an IDistort onto a rotating Noise texture: 0:00 / 1× \- Here, the matte is reversed and applied through a Glass node onto a different Noise texture: 0:00 / 1× \- And here, the matte is slowed down and applied through a Glass node onto a random picture I took of All Souls Langham Place: 0:00 / 1× \- The above are only a few examples of what you can do with it. You could also create black holes, nebulas, many different types of energy effects, and all sorts of cool stuff. Animate the camera, change the speed, size and look of the Noise texture. Change, animate, or add effects to the input image sequence going into the IDistort or Glass node, etc. There are a ton of options. Experiment and have fun with it! \- You can download the setup for the matte here: [ Force Emanating From A Point v1.0 Download a copy of the Force Emanating From A Point setup. (Paste the text into your node graph). Force\_Emanating\_From\_A\_Point\_v1.0\_keheka.txt 5 KB download-circle ](https://www.keheka.com/content/files/2022/06/Force%5FEmanating%5FFrom%5FA%5FPoint%5Fv1.0%5Fkeheka.txt "Download") \- I hope you found this tutorial useful. For more Nuke tips & tricks, see [Nuke](https://www.keheka.com/tag/nuke/). \- [Sign up for the newsletter!](https://www.keheka.com/#/portal/signup) \- ### Advanced Calculations Using The Number Fields In Nuke URL: https://www.keheka.com/advanced-calculations-using-the-number-fields-in-nuke/ Last updated: 2023-02-09T16:33:34.000Z You may already be aware that Nuke has a handy feature where you can use almost any number field in a node's properties as a calculator. \- Take a Grade node, for example, and let us say that you want to find 25% of 3.88\. You can multiply 3.88 by 0.25 in any of the number fields, for example in the gain field: \- ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2022/05/Mult-1.png) \- Then hit enter, and Nuke will calculate the result for you: 0.97. \- 💡 The number field that pops up when you click on a keyframe point in the Curve Editor and then double-click its values does not support performing calculations and may crash Nuke if you attempt it. \- ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2022/05/Curve.jpg) \- Having this built-in calculator can be useful for many things, for example when addressing client notes. For instance, if you get a note to reduce the highlights by 15%, you can then just multiply your value by 0.85. \- 💡 One caveat is that you should always double check that the visual change corresponds with your adjustment. Sometimes you will have to multiply by more or less than 0.85 to achieve a 15% visual difference. Especially if something is very bright or very dark. \- The number fields in Nuke support all of the basic mathematical operations, so you can add, subtract, divide, and multiply to your heart's content. – You may very well already be doing so. \- ## Advanced Functions However, did you know that you can use the same number fields to calculate advanced functions? There are a ton of options, ranging from simple to complex. Below are a few examples: Finding the square root of a number: sqrt (x) where x is the number. \- Converting degrees to radians, or vice versa: degrees (x) or radians (x) where x is the angle in radians or degrees, respectively. \- Rounding a number to the nearest integer: rint (x) where x is the number. \- For a list of all the supported functions, see The Foundry’s website [Adding Mathematical Functions to Expressions](https://learn.foundry.com/nuke/content/comp%5Fenvironment/expressions/adding%5Fmath%5Ffunctions.html). \- These functions can be typed directly into the number fields to be calculated instantly, they can be used in expressions, and they can be interwoven with each other to make more powerful functions. And they can be applied to any animation you have already made. \- For example, if you have an animation curve and you want to round every value on the curve to the nearest whole number, you can right-click on the animation, select Add expression and type in rint (curve). This is essentially what happens in a Kronos or OFlow node when you select Frame as the Method. \- I hope you found this tutorial useful. For more Nuke tips & tricks, see [Nuke](https://www.keheka.com/tag/nuke/). \- [Sign up for the newsletter!](https://www.keheka.com/#/portal/signup) \- ### Upgrade Your Light Wraps Using Facing Ratios In Nuke URL: https://www.keheka.com/upgrade-your-light-wraps-using-facing-ratios/ Last updated: 2023-03-12T22:42:58.000Z How to produce a more physically accurate light wrap by treating it with a facing ratio pass. \- ## The Bane Of Light Wraps A common issue when compositing is that light wraps often have that soft, undefined inner edge that looks a bit fake. See for example the soft ring shape in the object below: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2022/05/FR_02.jpg) \- The exact same light wrap treated with a facing ratio pass looks much more natural, and more accurately reacts to the surfaces of the object: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2022/05/FR_01.jpg) \- Let us take a closer look. Here is the first light wrap effect isolated: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2022/05/FR_04.jpg) \- And here, that same isolated light wrap effect is treated with a facing ratio pass: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2022/05/FR_03.jpg) \- The difference is quite impressive. So, how can you do this with your light wraps? Let us look into the aforementioned facing ratio pass. \- ## What Is A Facing Ratio Pass A facing ratio pass is a matte which describes the orientation of the surfaces of an object relative to the camera. If a surface is facing directly towards the camera, the matte will be white (have a value of 1) in that area of the image. If a surface is facing 90 degrees perpendicular to the camera, the matte will be black (have a value of 0). \- Surfaces that are angled somewhere between will have grey values between 0 and 1\. (If you would have been able to see the surfaces facing away from the camera, their values would have been negative, down to -1 for directly opposite-facing surfaces). \- And so the matte represents a facing ratio – a ratio of how much a surface is facing the camera – from 0 to 1. \- You may already be getting this facing ratio pass in your AOVs from your lighting artist. If not, you can generate it yourself in Nuke. Let us look into how to achieve this. \- ## Back To Basics To understand how to make a facing ratio pass, it may be useful to first refresh your memory of some A-level mathematics. Forgive me if it starts out too basic, I hope it will all make sense shortly. \- ### Axes In A Coordinate System A 3D coordinate system such as the one in Nuke has (as the name suggests) three dimensions. Each dimension is illustrated by its own axis: the X axis, the Y axis, and the Z axis. These are all 90 degrees perpendicular to each other and represent different directions in 3D space. \- ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2022/05/XYZ.png) Using the Axis node to visually represent the three axes in Nuke’s 3D coordinate system. \- Which axis points in which direction is arbitrary. In Nuke, relative to camera space, the X axis points left and right, the Y axis points up and down, and the Z axis points toward and away from us. \- Where the axes all intersect is called the origin. If you assign values along each axis to describe how far along the axis you are, the origin would be the starting point, and have a value of 0 along all three axes. (X=0, Y=0, Z=0). \- The values going from the origin and to the right along the X axis (relative to camera space) are positive, and the values going to the left from the origin are negative. And similarly, the values going up on the Y axis from the origin are positive, and the ones going down are negative. The values going toward us on the Z axis are positive and the ones going away from us are negative. \- ### World Space Versus Camera Space How the 3D coordinate system is orientated depends on your frame of reference. \- In world space, the X, Y, and Z axes are all locked in relation to the world. They are absolute. As the camera moves around, the axes stay put in the world. If the Z axis points toward/away from the camera, and you rotate the camera 90 degrees sideways, now the Z axis points left and right in relation to the camera. Instead, now the X axis points toward/away from the camera. (Because the camera moved while the axes did not). \- In camera space (a.k.a. screen space), the X, Y, and Z axes are all locked relative to the camera/screen. As the camera moves around, the axes follow along so that they always stay the same relative to the camera. The camera essentially becomes the (moving) origin. The X axis always points left and right on the screen, the Y axis always points up and down, and the Z axis always points toward and away from the screen. No matter where the camera points, the axes follow. If the Z axis points toward/away from the camera, and you rotate the camera 90 degrees sideways, the Z axis still points toward/away from the camera. \- ### Normals Normals are vectors pointing along the X, Y and Z axes. They describe where a surface is facing. They always point 90 degrees outward from the face of a surface. From the normals you can derive the rotational values of the surface. \- Normals are usually rendered with reference to world space. When we render a 2D representation of normals (such as the normals pass in the CG render), each vector component is rendered to a separate colour channel: - The red channel will have values for the X component of the vectors. - The green channel will have values for the Y component of the vectors. - The blue channel will have values for the Z component of the vectors. \- Like with the world space axes, the world space normals also stay locked in relation to the world when the camera moves around. If you align the camera to the Z axis and look at the normals, the surface of an object facing toward the camera will look blue (because that surface is facing along the Z axis). It will have positive values in the Z component of the normal vectors, which is in the blue channel. But if the camera rotates around 90 degrees sideways, the surface that is now facing the camera will look red (because that surface is facing along the X axis). It will have positive values in the X component of the normal vectors, which is in the red channel. \- If you instead convert the world space normals into camera space normals, now the surfaces of an object facing the camera will always look blue. They will have positive values in the Z component of the normal vectors, which is in the blue channel. The surfaces that are not directly facing the camera will have lower and lower values in the blue channel, down to 0 for the surfaces that are 90 degrees perpendicular to the camera. (If you would have been able to see the surfaces facing away from the camera, their values would have been negative). \- Hopefully, this sounds familiar. By using camera space normals you can make a facing ratio pass, describing an object's orientation in relation to the camera. With this, you can turn a generic light wrap into a much more physically accurate light wrap. \- ## How To Create A Facing Ratio Pass You can use your camera to convert the world space normals into camera space normals, which are needed for making the facing ratio pass. The World matrix in the camera’s properties describes the camera’s translation, rotation, scale, etc. in 3D space, relative to the origin. \- It is a 4x4 matrix, which means the rotation happens in the top left 3x3 elements. From a to i – highlighted in blue – in the illustration below: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2022/05/4x4_Transformation_Matrix.png) \- If you invert the camera’s World matrix and apply it to the camera, you bring the camera back to the origin. Essentially going from camera space (relative) to world space (absolute). \- If you instead apply the same inverted matrix to the normals (which are in world space), you then bring them into camera space. Meaning the Z component (blue channel) of the normal vectors will always be facing the camera. \- You can do this using a ColorMatrix node. Link the Camera’s World matrix to the matrix in the ColorMatrix node and tick the invert checkbox to invert it. Keep in mind, the Camera’s World matrix is a 4x4 matrix and the ColorMatrix node’s matrix is a 3x3 matrix. Luckily, we are only interested in the values for the rotation. (Since normals describe which direction a surface is facing). Which means you will have to link the values as follows: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2022/05/ColorMatrix.png) \- 💡 Note that you will be skipping world\_matrix.3, world\_matrix.7, and world\_matrix.11 (m, n, and o in the previous matrix illustration, respectively), and the whole bottom row of world\_matrix.12 to world\_matrix.15 (j, k, l, and p, respectively), in order to link the 4x4 matrix to the 3x3 matrix. \- Apply this ColorMatrix node to your normals pass and you will have created a facing ratio pass in the blue channel. \- ## How To Use The Facing Ratio Pass Once you have generated the facing ratio pass, invert the blue channel. That is because you want the surfaces that are facing the camera to receive less light wrap than the surfaces that are at an angle to the camera. \- Imagine for example a shoulder with a bright light behind it. To be physically accurate you would want more light wrap around the top of the shoulder than on the front of the shoulder. (Because the front of the shoulder is more occluded from the light than the top is). \- Then, shuffle the blue channel into the red and green channels because you will be multiplying the RGB channels with the light wrap. \- Next, add a Grade node to be able to adjust the falloff and strength of the matte. Make sure to tick black clamp and white clamp, so that all the values in your facing ratio pass stay between 0 and 1. \- Finally, multiply the result with your light wrap (the effect only) before adding that to your comp with a Merge (plus). That way, you will get a light wrap that correctly adjusts based on the angle of the object in relation to the camera. \- ## A Convenient Tool I have wrapped everything in this tutorial up into a handy tool together with an example scene which you can download below. \- [ Facing Ratio From Normals v1.0 Download a copy of the Facing Ratio From Normals setup. (Paste the text into your node graph). Facing\_Ratio\_From\_Normals\_v1.0\_keheka.txt 7 KB download-circle ](https://www.keheka.com/content/files/2022/05/Facing%5FRatio%5FFrom%5FNormals%5Fv1.0%5Fkeheka.txt "Download") \- ### Interface ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2022/05/FRFN.png) The controls are simple: 1. Connect the node to your normals and select your normals pass in the drop-down menu. 2. Type or copy/paste in your camera name. 3. Adjust the grading on your facing ratio matte as necessary. 4. Multiply the output of this node with your light wrap (effect only). \- ## Not Just Light Wraps While using the facing ratio pass to upgrade light wraps is perhaps the more common use for the pass in compositing, the pass is really versatile and can be used for many interesting things: - You can multiply the output of the node with your CG reflections using a Merge (multiply) to get a [Fresnel effect](https://en.m.wikipedia.org/wiki/Fresnel%5Fequations). - You can use it as a matte for colour grading your CG render, for example to make a two-tone tinted car paint effect. - You can create [fake refractions using an IDistort and normals](https://vimeo.com/30058027), and then use the facing ratio pass to add more realism to the lighting and visibility through the object. - You can make multiple facing ratios with different grades to create a heat map/heat vision effect. - You can use the facing ratio or the inverted facing ratio as a mask for the opacity of an object and animate it to create a ghostly effect. - You can use it in the same way as with the light wrap but with a glow or other light source instead. - The sky is the limit. I am sure it is possible to build a toon shader look using the pass with a more advanced setup. Maybe you have some other cool ideas for how to apply the facing ratio! \- I hope you found this tutorial useful. For more Nuke tips & tricks, see [Nuke](https://www.keheka.com/tag/nuke/). \- [Sign up for the newsletter!](https://www.keheka.com/#/portal/signup) \- ### Organise Your Work For Other People URL: https://www.keheka.com/organise-your-work-for-other-people/ Last updated: 2023-02-09T16:33:44.000Z Short term creative momentum without reflection can cause long term productivity loss. Here is how to steer clear of that trap. \- ## The Problem When working, many of us are forward-thinking and focussed on doing. We have our blinders on, pursuing the task at hand with some level of tunnel vision. This is great for making progress rapidly. Yet without hindsight, and some degree of foresight, the work can get disorganised very quickly. \- Imagine putting 1,000 unlabelled boxes haphazardly into storage in a warehouse, and six months later needing the contents of one specific box. It would be a massive pain to find. Even if you somehow remembered where that specific box was located, what if you were off sick and someone else would need to find it? \- Instead, imagine all the 1,000 boxes labelled and sorted in a system where anyone could find any box needed. There would be an upfront time cost to set this up, but the cost savings from there on out would end up being greater. Hopefully this all seems logical, and you agree the latter is the better course of action in this scenario. \- Yet many people do not apply the same logic in comparable situations. You may be dealing with a number of things on a daily basis, such as: - Notes. - Scripts. - Code. - Spreadsheets. - Folder structures and file naming. - Physical organisation. \- Inevitably, other people will have to take over your work. The easier it is for them to hit the ground running, the better. You may even have to return to the work yourself after an extended period of time, and the same applies. I would argue that it is disrespectful to your colleagues, not to mention counterproductive, to leave them to figure out your mess. \- “Clutter is nothing more than postponed decisions.” – Barbara Hemphill \- Passing on disorganised work forces your lack of decisions onto others, creating more work and frustration. \- ## What To Do About It Throughout the day, regularly look back at your work and simply tidy it up. Course correct. Label as you go, explaining briefly what something is or how something works. It does not need to be a whole tutorial, but it should give another person picking it up a good idea of what is going on. \- Document your code, label your boxes, annotate, comment, and describe your work. \- At the same time, also look ahead. Do you foresee any issues that can be prevented by putting a better system into place? Like sorting the boxes in the first example. Building a better system is, again, an upfront time cost which pays off over and again in time. \- “You do not rise to the level of your goals. You fall to the level of your systems.” – James Clear \- Mr Clear is onto something here. Consistency is key for being productive, and building consistency means building dependable systems to fall back on. Remember, it is easier to keep something clean than it is to make something clean. \- ## The Benefits Future You is a different person. Organising your work to be easily readable and understandable by other people means that Future You will have an easier time picking it up as well. Have you at any point returned to your work after some time and thought, what the hell did I do here? How did this work? Shooting yourself in the foot this way is perfectly avoidable. \- Not to mention, in order to explain concisely how something works, you need to have a good understanding of it. And so it furthers your knowledge and your understanding to organise your work and explain it to others in a simple way. \- Not only that, keeping your work organised literally saves money. You will make fewer mistakes and have a much easier time [troubleshooting](https://www.keheka.com/troubleshooting-your-nuke-script/) in an effective way when you do. Which means you will spend less time doing unnecessary work. \- I hope you found this insightful. For more productive inspiration, see [Productivity](https://www.keheka.com/tag/productivity/). \- [Sign up for the newsletter!](https://www.keheka.com/#/portal/signup) \- ### Bypass Bounding Box Cropping In Nuke URL: https://www.keheka.com/bypass-bounding-box-cropping/ Last updated: 2023-02-09T16:33:49.000Z Some nodes and gizmos crop the overscan in your image and set the bounding box to the size of the format, for example Kronos or MotionBlur. This can be frustrating when you need the overscan downstream but instead get a cropped result. \- Luckily, it is possible to bypass this problem. The trick is to treat the bounding box as if it were the format. The offending nodes cannot crop the overscan if there is no overscan. \- To do this, add a Reformat node to your image, before the node which crops the bounding box. In the Reformat, set the type to scale, the resize type to none, and then tick/enable the center checkbox. \- 💡 By setting the resize type to none, you avoid taking a filter hit to your image. This is important because you will want to keep the image fidelity intact. \- Next, adjust the scale in the Reformat so that it is large enough for the format to encompass the whole bounding box of the input image. Then, add your bounding box-cropping node. It will act on the whole image since there is no overscan. \- Lastly, add another Reformat node with the type set to to format, the output format set to the same format as the input image, the resize type set to none, and both the center and preserve bounding box checkboxes ticked/enabled. \- And voilà! You have outsmarted the crop. \- ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2022/04/BypassBBoxCropping.png) \- [ Bypass Bounding Box Cropping v1.0 Download a copy of the Bypass Bounding Box Cropping setup. (Paste the text into your node graph). Bypass\_Bounding\_Box\_Cropping\_v1.0\_keheka.txt 866 Bytes download-circle ](https://www.keheka.com/content/files/2022/04/Bypass%5FBounding%5FBox%5FCropping%5Fv1.0%5Fkeheka.txt "Download") \- I hope this technique will be useful to you. For more Nuke tips & tricks, see [Nuke](https://www.keheka.com/tag/nuke/). \- [Sign up for the newsletter! ](https://www.keheka.com/#/portal/signup) \- ### Warp Transformations In Nuke URL: https://www.keheka.com/warp-transform/ Last updated: 2023-02-09T16:33:54.000Z You may have used gizmos such as iTransform or TransformDisplace before. If you are unfamiliar with these tools, they enable you to mask transformations to only affect a certain area of your image. \- The brilliant thing about these gizmos is how they handle the soft areas of the input mask (where the alpha values are between 0 and 1). Unlike Nuke's native TransformMasked node, when you feather and/or soften the input mask it affects the amount of transformation applied to the image in the soft areas, and not the transparency. So you can soft transform or warp a section of your image while smoothly blending between the transformed area and the original image. \- The gizmos do this by applying the transformations to a UV coordinate system instead of to the image directly. Then, the transformed UV coordinates are piped into an iDistort or STMap node which is what actually transforms the image. \- The transformations applied to the UV coordinates can safely be soft masked because it only affects the instructions (which pixels to move and by how much) sent to the node distorting the image, and not the image directly. \- You can use a similar approach to build a setup that works with any transformation, or series of transformations, such as a Gridwarp or CornerPin2D, and not only the standard Transform node. \- This is useful in a number of scenarios. From common tasks such as aligning mismatched CG and fixing tracks, to even animating morphing effects. It could be used to set up some really creative effects if you think outside of the box. \- In the setup, you can take advantage of the IDistort’s slider called UV scale to adjust the overall amount of the transformation to apply. A value of 1 being 100%. If the client asks for 20% less of a complex effect that you have set up using multiple warps and transforms, you can just slide it to 0.8\. Or add 20%? Just set it to 1.2\. It is a great way of quickly addressing feedback without having to go back in and readjust potentially dozens of keyframes in multiple nodes. \- ## The Setup ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2022/04/WarpTransform.png) From the Input at the top, which you would connect to your image, you branch off a pipe and remove all channels. You only need the incoming format of the image, and nothing else. Then you add an AdjBBox node so you can add overscan as needed later on. \- Next follows an Expression node. Here you set up x and y coordinates in the red and green channels, respectively. This will map values across the image based on the pixel positions. The pixel in the bottom left corner of the frame, where the pixel position is x=0, y=0, will be black because the red and green channels will both receive a value of 0. \- The value of the pixel in the top right corner of the frame will depend on the format. For UHD, for example, the red channel would be 3840 and the green channel would be 2160\. And all the pixels in between and outside of these two pixels will have values mapped accordingly, based on their positions. \- ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2022/04/Expression.png) \- Next in the setup, you apply your transformation. This could be any transformation node or series of nodes. Then, you subtract the original coordinates from the transformed ones, leaving you with the difference. That is, the instructions for how to move the pixels in the image. \- Below that, you mask these instructions using a Roto node. You can connect any matte you would like here, and then soften it as much as needed. \- You now have the complete instructions you need for distorting your image. Copy the red and green channels into the forward.u and forward.v channels of the main pipe. \- ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2022/04/Copy.png) \- Then, add an IDistort node set to affect the RGBA channels using the forward channels as the UV channels. \- ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2022/04/IDistort.png) \- Lastly, add a Remove node to remove the forward channels which are no longer needed after the IDistort node. \- The setup is now ready for action: 1. Connect your image to the input at the top. 2. Add your transformation nodes in the green backdrop section. 3. Add your mask and soften it as needed in the yellow backdrop section. 4. Adjust the UV scale in the IDistort as needed to increase or decrease the effect. \- [ Warp Transform v1.0 Download a copy of the Warp Transform setup. (Paste the text into your node graph). WarpTransform\_v1.0\_keheka.txt 4 KB download-circle ](https://www.keheka.com/content/files/2022/04/WarpTransform%5Fv1.0%5Fkeheka.txt "Download") \- I hope the Warp Transform setup will be useful to you. For more Nuke tips & tricks, see [Nuke](https://www.keheka.com/tag/nuke/). \- [Sign up for the newsletter! ](https://www.keheka.com/#/portal/signup) \- ### Concealer – Advanced Retouching Tool For Nuke URL: https://www.keheka.com/concealer-advanced-retouching/ Last updated: 2023-02-09T16:33:59.000Z Cosmetic retouching in Nuke can be a time consuming and complicated process. Concealer is very easy to use and gives you professional results in a fraction of the time. \- Inspired by [Mads Hagbarth Damsbo’s SmartBlur](https://vimeo.com/694618268). \- [ Concealer v1.0 Download a copy of Concealer. (Paste the text into your node graph). Concealer\_v1.0\_keheka.txt 16 KB download-circle ](https://www.keheka.com/content/files/2022/04/Concealer%5Fv1.0%5Fkeheka.txt "Download") \- ## Cosmetic Clean Up Beauty work comes in many forms. It could be removing acne or wrinkles from an actor's face, cleaning up dirty spots on a surface, or even removing facial tracking markers painted with Sharpie on an actor. \- Painting these out frame by frame, or warping a patch to accurately match to a distorting face – and then animating a grade to match changes in lighting – can be tedious and cumbersome. Concealer takes care of it all procedurally. \- All you need to do is to track a mask for the blemish, and connect it to the mask input. Then, tweak the settings in the properties until the blemish is removed. It works great for removing small spots and bigger wrinkles or structural blemishes, such as creases on a prosthetic body suit. \- ## Interface ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2022/04/Concealer01.png) ➔ Quickly and easily remove blemishes using the standard options: - Adjust which High Frequency portion of your image to preserve. - Adjust which Low Frequency portion of your image to remove. - Enable Two Pass for applying the effect twice. - Control your bounding box with Crop To Format. - Soften your input mask with Blur Mask. \- ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2022/04/Concealer02.png) ➔ Further manipulate the image and remove artefacts using the advanced options: - Enable Remove Chroma Artefacts and adjust the Size to remove colour artefacts. - Enable Frequency Deletion and adjust the Range to delete certain frequencies from your image. - Enable Generate New Low Frequency Pixels and adjust the Size to fill the low frequency portion of the image with new pixels. \- I hope you find Concealer useful. For more Nuke tools, see [Nuke](https://www.keheka.com/tag/nuke/). \- [Sign up for the newsletter! ](https://www.keheka.com/#/portal/signup) \- ### Professional Rotoscoping In Nuke URL: https://www.keheka.com/professional-rotoscoping-in-nuke/ Last updated: 2023-02-09T16:34:04.000Z A deep dive into best practices for elevating your rotoscoping skills to a professional level in Nuke. \- ## Get Into The Right Frame Of Mind First things first, before you begin any rotoscoping work it is useful to have the right mindset. \- Until Machine Learning, Artificial Intelligence, and/or other technologies can produce sufficiently high quality mattes, rotoscoping will remain laborious manual work done by human hands. While I just cannot wait for when manual rotoscoping is a thing of the past - and we are seeing promising progress in that direction - it is currently very much a part of the visual effects industry and our everyday work. \- So for now, I think it is important to approach rotoscoping with the right expectations. While much of rotoscoping can be semi-automated, and approaching the task in a smart way can definitely reduce the workload – expect there to be focussed, manual work required. \- Yet, approaching the work intentionally and with a clear vision can actually make it an enjoyable and Zen-like experience. It is the type of work that has a tangible goal line from the start, and you can see concrete proof of progress along the way. Dopamine rewards from your brain come both often and easily as you mentally (or physically) tick checkboxes for goals and sub-goals. \- Keeping this in mind, the first stage of rotoscoping is familiarising yourself with the work at hand. \- ## Check The Brief Start off by examining the roto brief in detail. It may be in the form of an annotated brief in Shotgrid (or a similar project management tool), a discussion with your supervisor (or client for smaller freelance jobs), or a combination of both. Get as much clarity as possible, and make sure that you have all the information you need. Do not be afraid to ask again if something is unclear. \- Before you begin the rotoscoping work, you should know the answers to the following questions: - What is your time frame? When are you expected to complete the roto for your shot? Does that deadline seem reasonable? Remember to underpromise and overdeliver, rather than the other way around. - Which scan will you be working on? There may be multiple scans under the same shot, or there could even be a scan filed under a different shot name that is being used for your shot. Make sure that you are using the correct one – triple-check, if needed. - Which frame range will you be working on? It may only be a section of the shot's work range. Or, it could even be a longer range than the work range, if rotoscoping is being done before retiming the scan. - Is there any retiming of the scan? Will you be working on the retimed scan, or the original? - Is there any extraction or reframing of the scan? Will you be working on the scan before or after that happens? - Should the different elements in the shot that you will be rotoscoping be split into separate channels? Which ones go where? For example, the foreground character in the Red channel, and the background car in the Green channel. - Will you be rendering your mattes with motion blur, or without – or perhaps both options? - What is the naming convention for each matte? Make sure you set the correct names in each Write node. - Which portion of the scan exactly will you be rotoscoping? And how much coverage will you need? For example, a full-body roto of actor A, but only from the knees and up. It may be worth asking the compositing artist for a quick mock-up if it is unclear what coverage will be required. - How accurate does the roto edge need to be? Is it a very precise shape for a close-up shot, or more of a background garbage matte? - How much detail is required? Will for instance the compositor handle the hair detail of a person, and you will only need to roto the general head shape? - Does any shape have to be specifically split out from the rest of the subject/object? For example, when rotoscoping a car, do the windows need to be rotoscoped separately, or is only one matte for the whole car required? - Do subjects/objects overlap in the frame, and if so, how should that be handled? Will you still need to accurately roto each of them as they overlap, or are you allowed to be looser with your splines in the overlapping areas? - Does it make sense to combine multiple things in one matte? Such as, rotoscoping the outline of a background crowd versus splitting each person out separately. - Could something more easily and accurately be keyed? It might be worth suggesting that the compositing artist creates part of the matte. (Or, asking if you are allowed to use keying for part of the matte creation). For example, the hair detail of a person. \- Once you have confirmed the exact requirements of the brief, you can plan how to best approach the task and decide on your angle of attack. \- ## Plan Your Approach Play the scan that you will be rotoscoping, on repeat, and analyse the movement that you will be tracing. Sometimes it helps to also play the scan in reverse, or at a lower frame rate, to really focus in on what is happening in the shot. \- Look for things such as: - Is the camera moving? The majority of the time, even with small camera moves, it is worth the effort to track the shot to assist with rotoscoping. - Does the subject/object that you will be rotoscoping have an overall motion that you can track? For the same reason as in the point above. - What type of movement is there? For example, is there fast-changing or jittering motion in the shot? Or, more straight and linear movements? This will let you know how many keyframes you can expect to place. - Where are the key moments that define the gross motion of the subject/object in the timeline? Finding these will help you reduce the amount of keyframes needed overall. - How complex are the shapes that you will be rotoscoping? This will inform where to make use of segmentation to manage the rotoscoping task and keep your splines from becoming unwieldy. - Does what you will be rotoscoping significantly change shape over the shot? It may make sense to create different splines to fit each form, and hand over between them. For example, if a person turns away from facing the camera to showing their profile. - Does what you will be rotoscoping go out of frame or get occluded at some point(s)? This will inform if setting a Lifetime per spline will be necessary. Also, see if the subject/object comes back into frame or gets revealed again later in the shot. Perhaps you can continue using the same splines throughout. - Is there significant motion blur? This will inform where to align your splines and how much motion blur is required to be added to them. - Is the subject/object that you will be rotoscoping out of focus? Similar to motion blur, this will also inform where to align your splines. (And, how much defocus is required to be added to them – although the compositor will usually handle the defocusing). \- Now that you have a good idea of what to consider when approaching your rotoscoping task, let us look at how to proceed in more detail. \- ## Make The Computer Do The Heavy Lifting Even without the advanced tools of the (hopefully near) future, to rotoscope efficiently you should aim to make the computer do as much of the work as practical. There are two main ways to achieve this: 1. Track the shot. Your shot may have a camera move, and/or the subject or object may move around in frame. This adds complexity to the motion path of what you are rotoscoping. It is highly likely worth it to track the camera or the subject/object, and remove this additional motion from the equation. Applying the tracking data to your roto will typically reduce the amount of keyframes needed for rotoscoping a subject or object dramatically. 2. Set smart keyframes. Let the computer (correctly) interpolate between your keyframes as much as possible. By setting keyframes in logical places you will reduce the amount of keyframes needed overall. You will also reduce or eliminate the amount of counter-animation needed to align your splines between keyframes. \- Let us break down each of these two ways of making the computer work for you. \- ### 1\. Track The Shot When starting your rotoscoping task, always consider if you could benefit from tracking the shot, whether it be the camera's or the subject/object's motion. Unless the camera is locked off and the subject/object is not moving, chances are the answer will be yes. \- Initially, check if there is already a matchmove camera for your shot. If not, it could be worth requesting it or making one yourself. Having a matchmove camera means you will get the camera’s motion for free in your roto, reducing the amount of keyframes needed for your splines. \- You could set up Cards or other geometry in 3D space, and project your roto onto them with your Camera. You could also use a 2.5D solution such as the Card3D node in conjunction with the Camera. Or you could generate 2D tracking points using Reconcile3D nodes with your Camera and strategically placed Axis nodes. \- Otherwise, you could go down the 2D tracking route. There are a number of options, the most common being the standard Tracker node in Nuke – with a 1, 2, 3, or 4-point track, depending on how your subject/object and camera are moving. \- - A 1-point track captures the X and Y position only. - A 2-point track captures the X and Y position, and the Z-rotation (clockwise or anti-clockwise rotation of the image). In some cases, you can get sufficiently accurate scaling with two points, but three is recommended. - A 3-point track captures the X and Y position, the Z-rotation, and accurate scaling. Three points are usually enough for most 2D tracking needs. - A 4-point track captures all of the above but also allows you to export a CornerPin2D node which can distort and matchmove your roto within the features that you have tracked. - Any more points only add to the accuracy of the 2D track, and bias the center, i.e. the origin for rotation and scaling. (However, you could also add the points as UserTracks in a CameraTracker node for a 3D camera solve). \- 💡 Before you track using the Tracker node, remember to first choose the warp type under Auto-Tracking in the Settings tab according to how the feature that you want to track is moving. It defaults to Translate, but if your feature rotates or scales it might lose the track. Also, enable the adjust for luminance changes checkbox in the same tab if your shot flickers, to help with the track. \- Whichever method you use for tracking your shot, there are several ways of using tracking data effectively. \- A straightforward way would be to export a Transform\_Matchmove node from the Tracker, and add it after your Roto node to apply the tracking data. A superior way, in my opinion, is to link the tracking data in the Tracker to the Transform tab of the Roto node, on the Root layer. That way, no matter where you connect your Viewer in the script, your splines will retain the tracking information and display correctly. \- Another benefit is that any changes in the Transform tab (such as scaling) will affect the splines themselves – changing the matte before pixels are output from the Roto node, and not after. That means your mattes do not get softened edges from filtering hits, like when you add a Transform\_Matchmove node after the Roto node. \- To link the tracking data of your Tracker to your Roto node, open up the properties of both nodes and go to the Transform tabs of each. Select the Root layer in the Roto node and hit Ctrl (Cmd) and Left Mouse Button drag the Animation menu buttons next to the translate, rotate, scale, and center knobs in the Tracker node to their respective buttons in the Roto node. I would suggest renaming the Root layer to RootTRACK, or similar, in order to make it very clear that there is now tracking data linked to it. \- ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2022/04/TrackerRotoLinked.png) \- 💡 By applying the tracking data to the Root layer, every spline in the Roto node that you have created, and any that you create going forward, will automatically get matchmoved. \- You could of course copy the tracking data over, instead of linking it. I prefer to link it so I know where the tracking data is coming from at a glance. I also like to keep one central source for the tracking data instead of making multiple identical copies around in the script. \- #### Stabilise As Needed It is easier to judge how something is warping if you view and roto it while stabilised. Then after you finish your roto work, apply the matchmove to the Roto node. Incidentally, a good way to check if your track is solid is to stabilise your scan using it. And so, you can hit two birds with one stone with this approach. \- Stabilising your scan using the Tracker node is quite straightforward. Just export a Transform\_Stabilise node from the Tracker and connect it to your scan. Then roto on the stabilised scan. Finally, export a Transform\_Matchmove node from the Tracker and apply it to your Roto. It will then line up with your original scan. \- 💡 If stabilising using multiple trackers, invert their order when matchmoving again to ensure you correctly reverse the stabilisation. \- To stabilise your scan using a matchmove camera is also fairly simple: \- ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2022/08/StabiliseMatchmoveCameraProjection.png) \- Let us break down the setup in the picture above. \- First, in the Stabilise section, the incoming undistorted scan is being projected onto a Card which has been placed at the desired position in 3D space. This could be on the wall of a building, the front of a street sign, or anywhere you want to stabilise the undistorted scan. \- 💡 You can use the point cloud or tracking cones to help set up Cards or geometry in the right position in 3D space. Use the snap feature (snap\_menu button) in the Cards’ or geometry’s properties to snap to vertices, or manually move your Cards or geometry into position. \- Since we are stabilising, the order of the projection is inverted compared to normal projections. The matchmove camera is being used as the projection camera – as is. That means each frame of the undistorted scan will be projected live onto the Card, from the position of the matchmove camera on that frame. \- The first ScanlineRender node is being used to render out this projection. It renders through the same matchmove camera which importantly now has been frameheld on the desired reference frame. This will stabilise the undistorted scan at the position of the Card, relative to the reference frame. \- 💡 When creating a projection camera, instead of making a copy of the matchmove camera and deleting all the keyframes on the reference frame, simply add a Framehold node and input your reference frame. \- Next, the Roto section is where you would do your roto work on the stabilised scan. \- Finally, the Matchmove section projects the roto onto the same Card, using the projection camera and matchmove camera the normal way around. Here, you would also add your lens distortion at the end. \- 💡 Using ApplyMaterial means that you can use the same Card twice and avoid having to make another copy. (And having to remember to update it if you move the first one). \- Always remember to plug a Reformat node into the BG input of the ScanlineRender nodes (and into your Cards if using the ApplyMaterial method) to set your format correctly. If nothing is connected they will take the Root format from the project which may or may not be what you want. \- Now that tracking the shot is accounted for, let us move onto the next way of making the computer work for you. \- ### 2\. Set Smart Keyframes When rotoscoping, where you place your keyframes on the timeline has an impact on how much work you will need to do, and the likelihood of getting boiling edges. Ideally, you want to set the fewest amount of keyframes as is practical, to accurately follow your shape and get a clean edge. \- To begin with, as you start playing through the scan, look for the frame where the subject/object that you will be rotoscoping is the closest to the camera and has the most detail. It should have all or most of its edges visible. Make that frame your starting point. Create your spline there, and establish the first keyframe. \- Then, work your way outward from that point. By doing this, you avoid having to add further control points to the spline later on when more detail would be revealed. Adding more points can affect and clutter the spline on previously set keyframes, and make it harder to work with the spline going forward. \- As you move outward from the starting point, identify the extremes of the movement. The highest point of a jump, the lowest point of an arm swing, etc. Find the apex of the motion and set your next keyframe there. Continue looking for the other apices of the motion and set keyframes there. The computer will interpolate between the extremes, and move your splines (close) to where they need to be for the in-between keys. \- (If you instead were to set a keyframe on the median of the motion, you would have to go back and add extra keyframes for the peaks and valleys, and potentially have to 'fight' the motion of your splines). \- The next thing to look for is the moment when the motion comes to a rest. Set a keyframe where this occurs. That way, the computer will interpolate motion only as it happens, and not continue moving the splines into the resting phase. (Forcing you again to fight the motion with more keyframes). Make sure to also set a keyframe before the motion starts up again to allow the computer to better interpolate the resting period. Continue setting keyframes at these moments throughout the shot. \- Once you have set up the main keyframes at the apices of the motion, and have defined the resting phases, you can start working on the in-between frames. Use the same approach again; adding keyframes at the secondary apices and resting phases in between your main keyframes. Look for where your splines deviate the most from the subject/object, and you will know where to set your in-between keyframes. \- Rinse and repeat, adding as many in-between keyframes as needed until the splines accurately follow the subject or object. \- 💡 For quick and dirty rotoscoping such as garbage matting for a temp comp, the above still applies and is a useful approach. However, if you just want to hammer out some rough keyframes, you can use the Shift + Left/Right Arrow Key shortcuts to jump back or forth on the timeline by the amount of frames set in the Viewer. This is by default set to 10 frames. I would suggest changing it to 8, as you can more easily add keyframes halfway in between, when more granularity is needed. From every 8 frames, to every 4 frames, to every 2 frames, to every 1 frame. \- Now that you have a better understanding of where and when to set keyframes, and how to make the computer work for you, let us dive into spline management. \- ## Segment Your Subject/Object To achieve a high quality matte you should aim to segment the subject or object that you are rotoscoping into multiple shapes. By breaking a complex shape such as a person into smaller, more manageable shapes, it becomes much easier to keep a consistent edge - especially when parts go in and out of view. \- Splitting a large job into smaller tasks also makes it easier to tackle and keep track of the job. It even makes it simpler to share the workload between multiple people. And, if you need to make changes later on, it is much easier to adjust smaller sections rather than one giant, unwieldy spline. \- Make sure to pick logical places such as bone joints or hinges for segmenting your subject/object. If you for example are rotoscoping an arm, then making splines for the upper arm, forearm, and hand is a good start. \- 💡 Keep enough overlap between the separate splines so that you are not inadvertently leaving gaps in your matte. \- When you have multiple splines in a Roto node, it can be easy to accidentally include a spline in your selection that you did not intend to, and inadvertently change it. To avoid this, you can tick the padlock symbol next to the spline in the Roto node’s properties when you have completed work on it. This will temporarily lock it and make it uneditable. That way, you will be unable to select it by mistake in the Viewer. Should you need to edit the spline later on, you can just untick the padlock symbol again. \- If your subject/object significantly changes shape throughout the shot, make separate splines for each variation and hand over between them. It is normally the better approach over attempting to make one spline fit multiple scenarios. Especially when one shape has less detail than the other, and you would have to move a lot of superfluous control points around to fit. \- ## Stay Consistent Staying consistent with your splines helps you avoid sliding, boiling or wobbling edges in your matte. \- When you create a spline, place the control points at natural features of the subject/object. Then, keep the control points at their corresponding positions throughout the shot. For example, if you make a control point by the knuckle of a finger, keep that point locked on the knuckle for the whole shot. \- 💡 You can toggle label points to show control point numbers and make it easier to keep track of your control points. The label points option can be found in the top screen left Viewer menu of the Roto node. \- Limit the amount of control points on your spline. You should be able to capture the detail of your subject/object, and no more. Having too many points makes animating your spline more difficult. Consistently being economical with your control points will reduce the amount of work needed to adjust your splines. \- Rotoscope only one whole object at a time for the entire frame range, e.g. just a hand. That way, you will more closely follow its shapes and make adjustments specific to its movements. You will set keyframes on frames that are right for that particular shape. The best frames for keyframing the hand may be different to the best ones for the forearm or the upper arm. \- When it comes to motion blurred or out of focus edges, it differs from studio to studio where you would align your roto edge. I would suggest that your splines should follow the centre point of the soft edge \- the midpoint between fully opaque and fully transparent - to allow Nuke to correctly calculate the motion blur, and blur the edge. But whichever approach you take, stick to it, and keep it consistent throughout the shot. \- ## Keep It All Organised With sometimes dozens and dozens of splines in your Roto nodes it is a good idea to keep them organised. It will help both yourself and others that will pick up your script to work more efficiently. \- Add labels to your Roto nodes with a brief description of what they contain, e.g. "BG Cars", or “SL Hand”. \- Add layers in the Roto nodes for each separate section, e.g. "Legs" or "Head", or even more detailed such as "Left Upper Arm", depending on how many splines you have. Then sort the relevant splines into their corresponding layers. This makes it quicker and easier to find what you need if you have to make a change later on. You could also link separate tracking data to each layer, should you wish. \- Add Backdrops to group your Roto nodes and describe what they contain. Or, simply label them as Roto to make it easy to recognise them at a glance. \- Set a Lifetime for every spline that is not active throughout the whole shot. You can set a spline’s lifetime in the Lifetime tab of the Roto node. Or, by Left Mouse Button clicking on the spline under the Life column in the Roto tab, and picking an option from there. (All frames, start to frame, single frame, frame to end, or frame range). Alternatively. you could animate the spline’s opacity to 0\. By killing splines like this when they are not active, you avoid rogue splines hanging around or tracking back into the frame. \- Change the spline colours for easier differentiation between sections of roto. For example, you could have one colour per limb of a character, or different colours per artist if you are sharing work with someone else. Or, you could colour the splines according to progress, for example changing the colour to green when you have completed a spline. \- Change the fill colours of your splines when outputting RGBA from the Roto node. This is useful if you are making a Multimatte-style roto with many shapes, each with their own colour, and you need to bypass the limit of the standard four mattes output to the RGBA channels. It can also be useful if you are rotoscoping overlapping shapes individually, and want to better visualise where each matte goes. (Instead of all of them merging into one white shape in the overlapping area). \- Keep your B-pipe flowing straight by using the Mask and Stencil operations versus the In and Out operations when merging your mattes. \- Layer your mattes and Roto nodes from background to foreground. Laying them out logically like this in your script makes it easier for you and others to find what you are looking for quickly. \- Use Roto nodes instead of RotoPaint nodes when you are only rotoscoping using splines and do not need the additional paint features. This will visually make it clearer in your script that only rotoscoping is happening within the node. \- ## Control Your Splines A good method for keeping your edges clean and consistent, is to first and foremost transform your whole spline, and not its individual control points. You can do that by using the transformation box which appears when you select two or more control points on a spline. Once the spline has been transformed into position you can tweak the individual control points as needed. \- Below are some tips for controlling your splines: \- Move individual control points by selecting your spline and Left Mouse Button dragging a point in the Viewer. \- Move multiple control points, or all of your spline, by Left Mouse Button dragging over and selecting multiple points, or the whole spline, then Left Mouse Button dragging the transformation box. You can also hit Ctrl (Cmd) + A to select all the points on a spline. Just make sure that you select the correct spline first if you have multiple splines in your Roto node. Otherwise Ctrl (Cmd) + A will select all the splines. This also applies to Left Mouse Button dragging over splines. Without selecting the spline you want first, it will select control points from all overlapping splines. \- Rotate your spline or control point selection by hovering your mouse over one of the corners of the transformation box until the rotation controls appear, then Left Mouse Button dragging to the left and right. \- 💡 When rotating the transformation box, Nuke will snap to every 15 degree angle by default. To apply more precise rotation, hold Shift after you have started rotating. \- Set the anchor point of a spline or control point selection to where it would be in the real world. For example, on the shoulder for the upper arm, on the elbow for the forearm, or on the wrist for the hand. Set the anchor point by Ctrl (Cmd) + Left Mouse Button clicking on the transformation box. \- 💡 The anchor point resets when deselecting the spline. \- Scale your spline or control point selection by Left Mouse Button dragging any of the scale points along the transformation box. The two left and right side points will scale the selection separately in X, the two top and bottom points will scale separately in Y, and the four corner points will scale in both directions. You can lock in the proportions of your spline by holding Shift while scaling from a corner point. \- Skew your spline or control point selection by holding Shift and Left Mouse Button dragging any of the non-corner points along the transformation box. \- You can also use the Transform tab in the Roto node to move each spline, but since these knobs have separate keyframes to your splines it can get confusing if you use both. I would recommend using this tab only for globally offsetting all the keyframes after you have animated them, or for linking tracking data to your Roto node. \- You can access per-spline and per-point options by selecting one or more control points on a spline and Right Mouse Button clicking above it/them. There you can do the normal things like adjusting the smoothness and feather, but also copy control point positions or animations between splines. Remember that you can also copy splines and their animation freely between Roto and RotoPaint nodes. \- If you need to do temporary roto work on a proxy format, for instance if you have not received the full resolution scans yet, reformat the proxy scans to the full resolution before rotoscoping. Transitioning to rotoscoping on the full resolution scans when they arrive will be much smoother as you can just swap the scans directly. If that is not possible, for example if you do not know what the full resolution will be yet, you can roto on the proxy format and upscale your roto later like this: \- In your Roto node, select the Root layer and go to the Transform tab. Set the center to x = 0, y = 0, and set the scale to \[full format width\] divided by \[proxy format width\]. E.g. 3840/1280 (= 3). That will upscale your roto work to fit the full resolution format. Or vice versa if you did roto work on a too high resolution format. By scaling up or down inside the Transform tab of the Roto node, you scale the splines and not the pixels output by the Roto node. So your mattes do not get filtered (soft) along the edges like with a normal reformat after the Roto node. \- ## Focus On The Edges Rotoscoping is all about edge work. Maintaining a clean and consistent edge that follows your subject/object accurately is key. By following the best practices described so far you should have come a long way already. There are, however, a few more things to consider: \- ### Manage Your Feathering The internal feather controls in the Roto node use a fairly crude box filter which can lead to undesired results around cusped edges. This applies to all the different types of falloff in the feather\_type dropdown menu. Instead, either Ctrl (Cmd) + Left Mouse Button drag out a feathered edge from the control points, and/or use a Blur node to get a better soft edged result. \- ### Soften Your Hard Edges In almost no cases will a matte edge be razor sharp. The compositor (which might be you) should be softening the matte edges slightly, or in the case of garbage mattes, quite a bit. You want to avoid hard edges and obvious matte lines showing up in smoke elements, etc. \- ### Apply Accurate Motion Blur As mentioned previously, your splines should typically follow the centre point of the motion blurred edge - the midpoint between fully opaque and fully transparent - to allow Nuke to correctly calculate the motion blur for your matte. \- Keep in mind that you will need to activate motion blur for each spline by Left Mouse Button clicking on the little motion blur symbol next to each spline in the properties. The symbol will change from one rectangle to three when motion blur has been enabled. (This procedure is the same as ticking the on checkbox in the Motion Blur tab). \- Once motion blur has been enabled, control the motion blur in the Motion Blur tab. [The Foundry’s website](https://learn.foundry.com/nuke/content/comp%5Fenvironment/rotopaint/adding%5Fmotionblur.html) explains this in excellent detail. \- ## Check Your Work Please, do not be the person who hands over their work without checking it first. Take pride in your efforts and thoroughly examine your mattes both on the run and frame by frame, before delivering your work. - Matte holes. Check for any holes in your mattes where there might not be enough overlap between your splines. - Edge problems. Check for any sliding, wobbling or boiling edges, and any edge chatter. - Rogue matte shapes. Ensure that all splines that need it have their lifetime set correctly. They should not remain floating in frame, or track back into frame later in the shot. - Edge accuracy. Ensure your edges are accurately following your subject/object. Not too loose to bring in unnecessary background detail, and not too tight to lose edge detail from the subject/object. - Alpha values. Nuke expects alphas to only have values between 0 and 1\. Values outside of this range may break the mathematical operations. For safety, clamp all mattes using the Clamp node. - Matte naming. Ensure all your mattes are rendered using the correct naming convention. - Format. Double-check that your format is correct. - Frame range. Double-check that your frame range is correct. - Channels. Double-check that you are separating your mattes correctly and placing them into the correct channels. - Motion blur. If rendering with motion blur, make sure each spline has its motion blur toggle switched on. \- A great way of checking your rotoscoping work is to Keymix your plate (A) with a neutral grey Constant (B) using your matte as the mask input. This is useful for general roto checking because a neutral grey backing will make your rotoscoped plate stand out, better prepared for scrutiny. It is also specifically useful for spotting where the edge is not tight enough, and too much of the background has been included. \- You can also Keymix a bright red or green Constant (A) with your plate (B) using your matte as the mask input. (Notice how the input order is inverted from the previous example). This is useful for checking where the edge is too tight, and not enough of the subject/object has been included. \- 💡 Do not roto while viewing these Keymix nodes, they are only for checking. They can give a deceptive edge, and you are much better off viewing your plate while working. \- To check for holes in your matte, switch the colour of the neutral grey Constant in the first example above, to a bright pink or other high-contrast colour not found in your plate. It will show through any holes in your matte. \- 💡 If you search on Nukepedia, you will find a whole array of roto checker tools with many options for checking your mattes. \- Nuke’s built-in matte overlay function (hotkey M in the Viewer) can be useful, however I have found the options above to be better for checking mattes more accurately and easily. \- ## Find Your Rhythm Getting into the “Zone” and finding a good rhythm when rotoscoping may take a little while at first. Try to set aside a chunk of uninterrupted time to allow yourself to really get stuck into your task. Armed with all the tools and techniques above, you should eventually be able to almost go into auto-pilot mode. You may even find it to be a Zen-like experience at times. \- It is all about getting started, though. About overcoming the initial inertia, and building momentum. Once you have started, it becomes much easier to keep going. And before you know it, an hour or two have flown by and you will have been amazingly productive. Almost without recognising it. \- By practising over time, your rotoscoping skills will become a well-oiled machinery, and you will be able to switch on more quickly and easily. \- ## Speed Up Your Work In addition to the methods that have been detailed so far in this article, there are several other ways of speeding up your rotoscoping work: \- ### Learn The Hotkeys Hit O in the node graph to create a Roto node. \- Hit Enter to close the shape when you are creating a spline. \- Hit Ctrl (Cmd) + Alt (Option) + Left Mouse Button click to add more points to your spline. (Select the spline first). \- Hit Z to smooth out a control point, and Shift + Z to cusp a control point. \- Alt (Option) + Left/Right Arrow Key jumps to the previous/next keyframe on the timeline. \- Ctrl (Cmd) + Left/Right Arrow Key jumps halfway between your current frame and the previous/next keyframe. \- Shift + Left/Right Arrow Key jumps a set amount of frames backwards or forwards on the timeline based on the increment set in the bottom of the Viewer. (The default is 10). \- To move your spline accurately, you can use the Numpad numbers 1 through 9. Just pressing the numbers will move the spline around by 1 pixel. Pressing Shift + the numbers will move the spline around by 10 pixels. And pressing Ctrl (Cmd) + the numbers will move the spline around by 1/10th of a pixel. \- ### Use Caching/Localising When rotoscoping, you will be playing your scan over and over, and moving back and forth on the timeline very often. Caching and/or localising your scan will speed up your work because you avoid having to wait more than necessary for each frame to buffer. \- ### Activate The ROI If you are rotoscoping a small section of frame, make use of the Region Of Interest feature in the Viewer. This will stop Nuke from calculating more of the frame than necessary, speeding things up for you. \- ### Make Use Of A Proxy Format If you are working on high resolution footage it can be worth it to render out a proxy format, or scale down the resolution of the footage in the Viewer menu. If you do this, make sure to disable the proxy mode for fine edge work. \- ### Limit The Bounding Box Unless you specifically need it, crop any overscan from your Roto nodes and your matte renders. Keeping the bounding box to the format size reduces the amount of calculations Nuke will have to do. \- ### Use Ripple Edit Carefully The ripple edit function is very useful for adjusting multiple keyframes at a time, for example if you need to shift your splines globally across several frames. But ripple edit is a double-edged sword. If you forget to switch it off you could end up ruining a large portion of your roto work. Use it very intently. \- 💡 A red border appears around the Viewer window when ripple edit is activated. \- ## Get Creative The Roto node does not only have to be used for making mattes to cut out subjects and objects. You can play around with it and create interesting effects. \- For example, if you set the output to RGBA and draw a straight line using an open spline, you can grade it, add a nice exponential glow, and voilà: you have a laser beam which you can animate. Ideal for plasma guns or light sabres, or just simple lasers. Multiply in a Noise pattern for added texture. \- You could draw some splines into the shape of helicopter rotor blades (top view), animate them to spin fast and crank up the motion blur, then put that on a Card for some added motion and realism to an animated still of a distant helicopter. \- Or you could draw some round shapes to create the lights on top of high rise buildings or bridges - the ones that flash for airplanes. Grade them for example red, animate their opacity up and down, and add some glow. Make sure to add another, smaller and brighter core to simulate the bulb inside - that always makes it look more realistic. \- The above are just some simple examples, feel free to let your imagination run wild. You could create magic effects, graphic designs, wipes, experimental art, and a lot more. Combine the Roto node with other nodes or gizmos like for example Glows, TimeEcho or different types of distortions. Think a little bit outside of the box, and a wide range of possibilities will open up. \- ## Save Money On Licencing For every NukeX or Nuke Studio licence with a valid maintenance that you have (or the studio you work for has), you get two additional [Nuke Assist](https://learn.foundry.com/nuke/13.1/content/getting%5Fstarted/meet%5Fnuke/about%5Fnuke%5Fassist.html) licences. These are stripped down versions of Nuke specifically intended to be used for rotoscoping, painting and tracking. You can save money by using, or having your roto/prep artists use, these licences instead of a full Nuke or NukeX licence. \- ## Consider Other Great Software While this guide is specifically written for Nuke, it would be remiss of me to not mention some other excellent software which can help with your rotoscoping. \- BorisFX’s [Mocha Pro](https://borisfx.com/products/mocha-pro/) and [Silhouette](https://borisfx.com/products/silhouette/?collection=silhouette&product=silhouette) are fantastic tools for tracking and rotoscoping, among other tasks. Mocha’s planar tracker, for example, is leaps and bounds ahead of Nuke’s offering. It is well worth becoming familiar with these tools, and using them in conjunction with Nuke. Exporting solid tracking data from Mocha to use when rotoscoping in Nuke can be a real time saver. \- I hope you found this rotoscoping guide useful. For more Nuke tips & tricks, see [Nuke](https://www.keheka.com/tag/nuke/). \- [Sign up for the newsletter! ](https://www.keheka.com/#/portal/signup) \- ### Perimeter – Advanced Edge Matte Tool For Nuke URL: https://www.keheka.com/perimeter-advanced-edge-mattes/ Last updated: 2023-02-09T16:34:11.000Z The EdgeDetect node in Nuke is good, but limited. Perimeter is a more advanced option for making custom edge mattes. [ Perimeter v1.0 Download a copy of Perimeter. (Paste the text into your node graph). Perimeter\_v1.0\_keheka.txt 36 KB download-circle ](https://www.keheka.com/content/files/2022/03/Perimeter%5Fv1.0%5Fkeheka.txt "Download") ## Features ➔ Fast. Perimeter has been streamlined to be efficient and lightweight. \- ➔ Powerful. Customise and fine tune your edge matte to get it exactly right. \- ➔ Accurate. Under the hood, Perimeter is using [Erode\_Fine by SpinVFX](https://github.com/SpinVFX/spin%5Fnuke%5Fgizmos/) for sub-pixel accuracy. \- ## Interface ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2022/03/Global_Controls.png) ➔ Global controls for quickly setting up the edge matte: - Select the Source channel to use for creating the edge matte. By default, it is the alpha channel of the Source input. - (Optional) Select the Mask channel to use for the mask. By default, it is the alpha channel of the Mask input, if connected. - Expand the edge matte both inward and outward at the same time. - Apply a Round filter to round out the edges of the matte. - Soften the edge matte both inward and outward. - Offset the edge matte inward or outward. (💡 Works as intended when both the Enable Inner and Enable Outer checkboxes are ticked). - Control the output bounding box. A side will output the edge matte’s bounding box. B side will output the Source input’s bounding box. Union will output the union of A and B. Or, Crop the bounding box to the Source input's format (i.e. not its bounding box). - Add Source interaction. Mask or stencil the edge matte by the Source. \- ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2022/03/Individial_Controls.png) ➔ Individual controls for fine tuning the inner and outer edges: - Expand the edge matte inward or outward individually. - Enable/disable the inner or outer edge individually. - Soften the inner or outer edge individually. - Limit the softening to the inside or outside individually, or let it spill over from one to the other. - Mix back the opacity of the inner or outer edge individually. \- ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2022/03/Before_After.jpg) Example: Using Perimeter to make a custom edge matte with a softer inside than outside edge. \- I hope you find Perimeter useful. For more Nuke tools, see [Nuke](https://www.keheka.com/tag/nuke/). \- [Sign up for the newsletter! ](https://www.keheka.com/#/portal/signup) \- ### Troubleshooting Your Nuke Script URL: https://www.keheka.com/troubleshooting-your-nuke-script/ Last updated: 2023-02-09T16:34:16.000Z Diagnosing an issue with your composite is not always straightforward. Here is how to approach troubleshooting your Nuke script in order to increase your chances of successfully fixing the problem. \- ## The Root Of All Evil When there is an error in the comp, a common mistake is to tackle the issue by patching or painting over it at the end of the script. Band-Aid solutions like that often end up causing new problems when changes are made upstream. Instead, fixing the problem at its root is highly likely to be the better approach. \- First, you will have to do a bit of detective work. A good way of locating the root of the problem is by using a systematic process of elimination; keep bisecting the script until you pinpoint the cause of the issue: 1. Connect your Viewer halfway down the script from the top. 2. If the issue is present in the first half, then you connect the Viewer halfway up from the middle – i.e. a quarter of the way down the script from the top. 3. If the issue is not present in the first half, you instead connect the Viewer halfway down from the middle – i.e. three quarters of the way down the script from the top. 4. Keep going, splitting each half into halves, until you isolate the issue. \- 💡 Having an organised script with a clear B-spine is very beneficial here, as it will be much easier to split the script in halves. You can also enable and disable the Merge nodes in the spine to help find which branches contain a problem and exactly where it starts occurring. \- Once you have found the cause, you can fix the problem at the source. That fix will propagate throughout the script, and you can safely make other changes later on without the risk of breaking the composite. \- ## Have You Tried Turning It Off And On Again? Once in a while, even after diligently troubleshooting a script, an issue might elude you. It might only show up in the render, and not when viewing the composite in Nuke. Or, it might only show up when viewing the composite in Nuke, and not in the render. Worse yet, the problem might occur on different frames every time you render the composite or view it in Nuke. \- These situations can be very frustrating as the mismatch may seem completely random and difficult to fix. Just remember, both Nuke and your computer are complex machineries with many, many moving parts. Sometimes bugs can crop up, or processes can hang. Often, clearing the cache is just what is needed. \- 💡 To clear your cache in Nuke, in the top menu bar go to Cache → Clear All. \- If that does not solve your problem, try restarting Nuke and/or your computer. \- ## Divide And Conquer If a restart does not solve the issue, it is time to go to war. In order to isolate and eliminate the problem, you can use the divide and conquer technique. \- Start by making a fresh, empty Nuke script and copy/paste your entire problematic script into the new script. Sometimes a bug can cause a script to become corrupted, and transferring the contents to a new script may solve the issue. \- If it persists, the problem could be caused by the computer's RAM filling up, or the CPU not being able to handle an intensive load. (More likely with larger, heavier scripts). Split a section of the script into a separate precomposite script, and render it out. Then, only bring the precomposite render into the main script. There is a [Precomp node](https://learn.foundry.com/nuke/content/reference%5Fguide/other%5Fnodes/precomp.html) in Nuke that simplifies this task for you. \- Rinse and repeat until you find out what is causing the problem. That way, either you will be able to fix it, or, in case of RAM/CPU issues, the problem disappears by itself because the more lightweight script can now be handled by your machine and the render farm. \- ## Non-trivial Pursuits The problem may yet persist, and so it can be useful to ask some questions to shed more light on the issue: \- ### Can the issue be replicated? If you can make the error happen at will, you will also know when it is fixed. However, if the issue seems to happen randomly, you will have to dig a little deeper and do more testing to ensure it has been fixed properly. \- ### Have any nodes been (dis)connected by accident? Occasionally, when copy/pasting or even moving around a selection of nodes in a script, some of the nodes do not get connected correctly. Instead, they are left floating above or below the pipe: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2022/03/Disconnected_Node.jpg) In both cases above, the Grade node is not properly connected to the pipe. On the left, it is floating above the pipe. You can tell by the short, unconnected output arrow below the Grade node. (Circled in red). \- On the right, the Grade node is underneath the pipe. You can tell by the pipe visually going over the node. The same short, unconnected output arrow below the Grade node is also present. (Both circled in red). \- If you moved the Grade node to one side, you would see that there are two pipes there. One connecting the Blur node to the Grade node, and one connecting the Blur node to the ColorCorrect node. \- If that was not enough, the opposite issue can also happen: nodes can accidentally get connected in the wrong place. Double-check to make sure all your nodes are connected correctly. \- ### Can you change the order of your nodes? Try to change the sequence in which you are connecting nodes; it could make all the difference. [Concatenating](https://learn.foundry.com/nuke/content/comp%5Fenvironment/transforming%5Felements/node%5Fconcatenation.html) your transformations may for example solve filtering artefacts. \- ### Are you working with the correct unit of measurement? Different software may use different units of measurement. The lighting artist may be working in Houdini where 1 unit = 1 metre but your camera may be in Maya scale where 1 unit = 1 centimetre. If so, then you will have to multiply the utility passes (position, depth, etc.) from the Houdini renders by 100 to get the correct scale in relation to the camera in Nuke. \- ### Are you sure it is not just a human error? We all make mistakes. For example, have you forgotten about a $gui expression in a node, which is causing it to behave differently when rendered as opposed to when viewed in Nuke? Or have you left a node or setting disabled that should be enabled? Look closer at your script and double-check if you or someone else have made a mistake. \- ### Is there useful information in the error logs? Nuke and/or your render farm could be giving you clues as to what the issue is. Have a look at the logs and see what they can tell you. \- ### When did it stop working? Perhaps you can revert to a previous, functioning version. Have a look in your auto-save folder and see if there are any versions saved before the problem started occurring. \- ### Is there another, working setup? A correctly working setup may already exist which you can duplicate, removing the need to troubleshoot yours. \- ### Did you recently change something? A change to a default setting, or the installation of a new tool might have had unintended consequences. It could be worth it to return your system to a more primitive state, or you could try [running Nuke in safe mode](https://support.foundry.com/hc/en-us/articles/206986449). \- ### Do other people encounter the same issue with your script? It could be a local setting or an outdated software version on your specific machine that is causing the problem. Or, it could even be the hardware itself. GPU acceleration requires a compatible graphics card, for instance. Compare and investigate as needed. \- ### Are you changing multiple things at a time? You may have to limit yourself to only change one thing at a time, methodically, until you can say for certain where the root cause of a problem is located. If you change several things at a time they may counteract each other. Besides, this way it will be easier to keep track of which solutions you have attempted. \- ### Could the problem be external? If your script unexpectedly starts running very slowly it could be because of a network issue. Or perhaps files on your system have been moved, causing Read nodes to error out. Ask if others are having similar issues. \- ### Is there a colleague you can ask for help? Know your limits and if you need to, ask a colleague to help diagnose your script. It does not necessarily have to be a more senior artist, sometimes you just need a new or different perspective. \- ### Have you taken a break? You can not always force a solution. Try to step away from the problematic script for a while and come back with fresh eyes. \- ### Is it time to start over? It is definitely worth attempting to restore a corrupt script, or troubleshoot a broken setup. However, if nothing is working after a reasonable amount of effort there is little point in wasting more time. Rebuild or reinstall as needed. \- ## The Usual Suspects When it comes to troublesome nodes and settings, Nuke does have a few repeat offenders. And sometimes, an issue might not even stem from the composite itself. Rather, it can arise from something else, such as a bug in Nuke – for example with the user interface. Here are some things to keep in mind: \- ➔ The maths behind all masking, premultiplying, or anything alpha-related in Nuke, is based on the premise that alpha values stay between 0 and 1\. Therefore, values outside of that range can break the maths and cause issues. Make sure to clamp your alphas to avoid this. \- ➔ Before you apply any blur or defocus operation, ensure the size of your bounding box is reasonable. Adding a heavy defocus to an image with a massive bounding box can slow down or crash your script. Instead, crop your bounding box to a more manageable size first. \- ➔ The default setting to affect All channels in ZDefocus, VectorBlur and other such heavy nodes can also slow down your script or cause crashes. Instead, change them to only affect the RGBA channels, or remove unnecessary channels upstream. It could greatly reduce the number of calculations needed. \- ➔ The CornerPin node can balloon your bounding box to the extreme if you are not careful. Make sure to connect a Crop node after it to keep your bounding box in check. \- ➔ The various Erode nodes can cause streaking artefacts, sometimes appearing as horizontal black lines in the rendered image. It seems to happen more often when the bounding box is smaller than the format, so try cropping the bounding box to the format first. Erodes can also introduce negative values to your alpha. Remember to clamp your matte after using them. \- ➔ The Project3D node is not too fond of overscan. If you are projecting a matte painting or a patch with a large bounding box outside of the format, try instead to reformat the image to the bounding box before projecting it: Add a Reformat node, and in the Properties panel set the type to scale and the resize type to none. Then, increase the scale until the format covers the bounding box. \- ➔ The Roto node can suddenly stop creating keyframes, or you may become unable to delete keyframes or select your roto shapes. If so, restart Nuke to fix the issue. \- ➔ The RotoPaint node tends to cause issues when it contains a massive amount of paint strokes. Try to limit each RotoPaint node to a maximum of around 200-300 paint strokes, and create new RotoPaint nodes if you need to continue painting beyond that soft limit. \- ➔ It is usually a good idea to work on particle systems in a separate script to your main script, as these can be extremely heavy to load and render. The particle emitter can also be buggy unless it is set to start at frame 0\. If so, start your frame range at frame 0, render out the particles, and then TimeOffset the render to the correct range in your main script. \- ➔ Heavy setups such as multiple Kronos nodes combined with projections, particle systems, etc., can lead to the frame buffer breaking. Make use of precomping to avoid this. \- ➔ Using the Proxy mode in the Viewer can cause issues: projections, Roto shapes, etc. may no longer line up as you expect. Disable the proxy mode as needed. \- ➔ If you cannot seem to interact with any of the node connections in your script, check if they have accidentally been locked in the Project Settings → Lock all connections. Untick that setting to unlock them. \- ➔ If your node properties will not open in the Properties panel, check if it has been locked. Untick the little padlock icon at the top of the Properties panel to unlock it. \- ## Optical Trickery In some cases, an issue can be caused by how you view your render, or by certain optical peculiarities. \- ### Moiré Patterns If you take a picture of your monitor while it is switched on, you are likely to pick up some strange grid patterns in the picture. The sensor in your camera is not able to perfectly capture the fine, repetitive detail of the small grids of pixels in your monitor. The result is a wave-like, shimmering pattern that changes as you move your camera around at different angles to the monitor. \- This type of effect can sometimes happen when you transform an image in Nuke using a standard filter such as cubic. In particular, the combination of slow, animated transformations and fine detail in the transformed image may cause this effect. It can manifest as the same wavy pattern, or as jittery motion that looks a bit odd. \- If you find that an image starts behaving strangely after applying a transformation to it, try changing the filter type in the node that is performing the transformation. (Or, in the last transformation node in a concatenated stack). There is a filter called Notch that you can use specifically for these situations. It does add some softening to the image but it should hide the Moiré patterns. \- 💡 If you are experiencing issues with Moiré patterns, make sure you are viewing your render with proxy mode disabled, at a 1:1 ratio, and at 100% zoom level in your Viewer. If the pattern is still present, try to apply the Notch filter to your transformations. \- ### Frame Rate And Compression Many of us are working remotely, and are streaming from our office workstations to our laptops or desktops at home. There is a cost of quality associated with this. It comes in the form of reduced frame rates and increased compression. This can result in not being able to spot issues in a render on the run, or seeing issues which are not actually in the render and flagging false positives. \- 🙃 I remember watching several versions of a comp in remote dailies as the comp progressed over a week. At the end of the week, we went into the office and watched the comp in the screening room. Only then did we spot that there was a subtle but noticeable jitter in the animation. \- ### Viewer LUTs If your colours seem off it could be because you are applying the wrong Viewer LUT when viewing your composite. Ensure that you have selected the correct LUT in the viewerProcess dropdown menu (above the Viewer Gain slider) in Nuke. \- ## How To Handle Corruption On occasion, a Nuke script may become corrupted. The first thing you should check is your auto-save folder. There could be a working version of the script saved from not too long ago, and you would not lose much work by reverting to the older version. \- There are often several versions saved in the auto-save folder. One method to determine which of them could be working is to look at their file sizes. If most of the auto-saved scripts are, say 1 MB, but the recent ones are only 5 KB, then try opening the latest script with the normal file size. \- ### Break Out The Notepad However, if you would like to restore something from a corrupt script, you can open it in a text editor and attempt to salvage nodes from there. The code for each node will follow a similar pattern: ClassOfNode { settings settings settings … } Knowing that, you can find and copy specific nodes from a script directly from the text editor. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2022/03/Salvage_Node_Text_Editor.png) Example: Salvaging a Grade node from a text editor by copying the text highlighted in grey and pasting it into a fresh Nuke script. \- ### Connect The Dots There are two main ways that nodes are connected to each other when you are looking at a script in the text editor. The first way is by one node following directly after another in the text. The exception to this is when it says inputs 0 below the node’s class name, meaning there are no inputs connected: ClassOfNode { inputs 0 settings settings settings … } In the previous picture with the text editor, an example of the first way of connecting nodes is the ColorCorrect following directly after the Grade node. Meaning, the output of the Grade node is connected to the input of the ColorCorrect node in Nuke. \- The second way nodes are connected is by the use of the set and push commands: \- #### set \[stack 0\] The set command stores the previous node (the one directly above the set command in the text editor) in a variable. That way, it can be referenced for connection later via the push command. \- In the picture, the Checkerboard is being stored in a variable named N2099800. That happens on line 43: set N2099800 \[stack 0\]. \- #### push $ The push command tells the following node (the one directly below the push command in the text editor) to connect to the node stored in the variable, instead of to the previous node. \- In the picture, the Checkerboard is the source for two separate pipes. One pipe with the Blur node, and one pipe with the Grade and ColorCorrect nodes. First, the Blur node is connected to the Checkerboard. (It follows the Checkerboard in the text – starting on line 44). \- Then, the Checkerboard is being used again as an input for the Grade node. That happens on line 51: push $N2099800. Without line 51, the Grade node would instead be connected to the Blur node. And as mentioned, the ColorCorrect node follows directly after the Grade node, and is therefore connected to it. \- Finally, the two pipes are connected to a Dissolve node. The order of the two pipes in the text editor dictate the order in which they are connected to the Dissolve node. The Dissolve node follows directly after the ColorCorrect node, and so its main input (labelled 0 on the Dissolve node in Nuke) is connected to the ColorCorrect node. \- Line 71, inputs 2, tells us that the Dissolve node’s second input (the input labelled 1 on the Dissolve node in Nuke) is connected. If only the main input was connected, line 71 would not be there. And so, the second input of the Dissolve node is connected to the second pipe. (The one with the Blur node). \- If, however, one or both of the inputs of the Dissolve node were to be disconnected, leaving one or both of the pipes with no output connection, the special command push 0 would appear in the relevant pipe(s). \- #### push 0 This command clears the stack so that the next node is not automatically connected to the previous one. \- There are many more nuances to the syntax in a .nk script, and the documentation is sparse. It gets a bit more complicated the more inputs you have. For example, there would be several push commands stacked (in order) before a Switch node with multiple connected inputs in Nuke. Or, connecting the additional A2, A3, etc. inputs of a Merge node would lead to text lines such as inputs 4+1. \- There is a logic behind it all, but it can get confusing and hard to keep track of things. Especially if the script has become corrupt and parts are missing. Hopefully, with the above knowledge you will be able to salvage some of your work. \- ## Report Issues Lastly, if you encounter bugs in Nuke, The Foundry’s website explains how you can [report and track software bugs or issues](https://support.foundry.com/hc/en-us/articles/207753085-Q100068-Using-the-Bug-Tracker). \- I hope you found these troubleshooting tips useful. For more Nuke tips & tricks, see [Nuke](https://www.keheka.com/tag/nuke/). \- [Sign up for the newsletter! ](https://www.keheka.com/#/portal/signup) \- ### Tech Check Checklist For Compositors URL: https://www.keheka.com/tech-check-checklist/ Last updated: 2025-02-16T09:48:43.000Z ⭐ There are many things to keep track of while tech checking a shot. Here is a handy checklist to make it easier... _This post is for paying subscribers only._ ### Secrets Of The Grade Node In Nuke URL: https://www.keheka.com/secrets-of-the-grade-node/ Last updated: 2023-02-09T16:34:31.000Z The Grade node in Nuke is fairly straightforward. However, some things are not explained very well, or at all, in the tooltips. Let us dive into the secrets of the Grade node, starting with the node indicators/decorators. \- ## Node Indicators/Decorators The node indicators/decorators make it easy to see what is going on in your Grade node at a glance. They are the icons on the Grade node itself, displayed in the Node Graph. Below is an image from [Nukepedia](http://www.nukepedia.com/written-tutorials/nuke-node-decorators-and-indicators) which explains what each icon means: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2022/03/Node_decorators.jpg) Credits: Frank Rueter & Nick Joseph. \- While the node indicators/decorators do not show the values of your grades (although if you were so inclined you could add TCL expressions to the label for that), they do indicate many other useful things. \- For instance, which channels are being processed by or passed through the node, if there are expressions linked to the knobs, when and how the node is being disabled, and more. The picture above quite neatly sums up the information that is communicated via the node indicators/decorators. And The Foundry's website explains each in more detail: [Node Indicators](https://learn.foundry.com/nuke/content/getting%5Fstarted/using%5Finterface/working%5Fnodes.html#NodeIndicators). \- ## Hidden Hotkeys Next up, there are some hotkeys for manipulating the colour wheel that you may not have discovered yet. I find them to be very useful on a daily basis: \- ### Adjust The Hue Only Hold down Ctrl/Cmd and drag the Left Mouse Button to the right and left to adjust the hue, while keeping the saturation and the brightness locked. You will see a dashed circle appear on the colour wheel which will constrain the movement so that only the hue will be changed. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2022/03/Ctrl-drag.png) \- ### Adjust The Saturation Only Hold down Shift and drag the Left Mouse Button to the right and left to adjust the saturation, while keeping the hue and the brightness locked. You will see a dashed, straight line appear on the colour wheel which will constrain the movement so that only the saturation will be changed. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2022/03/Shift-drag.png) \- ### Adjust The Brightness Only Hold down both Ctrl/Cmd and Shift, and drag the Left Mouse Button to the right and left to adjust the brightness, while keeping the hue and the saturation locked. This time there is no dashed line, but as you drag your mouse back and forth you will see the colour wheel go brighter and darker. \- I find this particular hotkey very useful for lifting the blackpoint (lift), or for adjusting the brightness without affecting the colour. ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2022/03/Ctrl-Shift-drag.png) \- ## Fringe Lastly, the lone wolf in the Grade node, fringe. What each of the knobs in the Grade node does, is explained fairly well in their tooltips. (Which you can access by hovering your mouse over a knob). Except for fringe. \- In my opinion, "Use 4\*(1-mask)\*mask to mix." is not an artist friendly explanation of what the knob does. While the knob’s name itself is a clue as to what it is for, I think this knob could use a better explanation. \- When enabling the fringe tick box, the grading is only mixed by the edges of the mask – the areas where the mask has grey values between 0 and 1\. I.e. excluding the fully opaque areas with a value of 1 and the fully transparent areas with a value of 0\. With fringe disabled, the grading is mixed by the entire masked area. I.e. where the mask value is above 0. \- By connecting the following mask and ticking fringe, the grading would only be mixed by the thin area between the fully white and fully black values. (Partly marked with the red sample box). Effectively turning this mask... ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2022/03/Matte.png) \- ...into this mask: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2022/03/Fringe-1.png) You can use fringe to adjust the grading on areas covered by the edges of your mask, for example to correct dark or bright fringing. \- ## The Jig Is Up As you might expect, these secrets are not only limited to the Grade node but apply to the other nodes in the Color menu as well, for example ColorCorrect, Exposure, HueCorrect, and Saturation. Give them a go – happy grading! \- I hope you found these hidden features useful. For more Nuke tips & tricks, see [Nuke](https://www.keheka.com/tag/nuke/). \- [Sign up for the newsletter! ](https://www.keheka.com/#/portal/signup) \- ### The Importance Of Play URL: https://www.keheka.com/the-importance-of-play/ Last updated: 2024-01-29T19:21:52.000Z Introducing play in tough situations can unexpectedly change your whole experience for the better. \- ## The Arctic Challenge Back in 2005 I got drafted for mandatory military service and spent a year serving in the Norwegian Army. I was stationed north of the Arctic Circle at a camp called Heggelia, where I experienced some extreme nature and weather conditions. \- The dark winter months brought at times blistering snow storms and piercing cold. I personally encountered temperatures as low as -42 ℃ (-43.6 ℉) out on a training exercise. One night I actually found myself waking up inside our tent with my sleeping bag covered in ice. \- But that same winter often revealed an astonishing beauty beyond what I had experienced before. The peaceful blanket of silence that follows a heavy snowfall. The crystal clear night skies packed with more stars than I had ever seen before, and the Northern lights slowly dancing across the atmosphere. It was where I first recognised that the light pollution from cities is a theft of wonder. \- Then there was the surreal midnight sun in the summer. Weeks where the sun never set. I remember getting into an 'MB', a Mercedes-Benz military Jeep, with a group of friends from the base after midnight, and driving up a mountain road to the top. We watched the sun shining on the landscape as if it was midday. \- 0:00 /0:09 1× Heading back down at 01:22 in the morning. \- I experienced a lot in the army. Some things were more challenging than others. Fully submerging myself in a frozen lake to simulate falling through the ice, and learning how to get out on my own. Entering a small, sealed hut in the forest and having tear gas canisters lit inside to experience their effects first hand. Surviving hell week with very little food, very little sleep, and an unprecedented amount of strain on the body and mind. \- We operated in physically and mentally tough conditions, and many of the tasks and challenges presented to us were simply not fun, just hard. In those situations, everything boils down to your mindset. With the right frame of mind you can do the most excruciatingly demanding or tedious work and still have fun. The secret is to play. To allow room in your mind for playfulness, even when you are tired, frustrated, hangry or otherwise. Let me give you an example. \- ## Battle Griffin Toward the end of a 3-week long NATO winter training exercise, Battle Griffin, my team was tasked with setting up a communications hub on a snowy mountain, about 500 metres (1640 ft) above sea level. We would be connecting other nodes in the surrounding areas to the network, and building redundancy into the system. \- Note: Redundancy in this case means that you are connected to the network via multiple routes. That way you are not reliant on any one node, and a single point of failure will not cause a loss of communication. \- There were four of us in the team. I was the team leader and with me I had the driver and two other soldiers. Our means of transportation was the all-terrain carrier BV-206. This vehicle is similar to a tank in that it runs on tracks rather than wheels. It can go almost anywhere (and is even fully amphibious, too!). So we were able to drive up the steep, snowy mountain side to the designated location for setting up camp. \- Still, it was hard work. At the back of our BV-206 we had a normal road trailer with additional equipment. Since the trailer did not have tracks we had to park it on a tractor road about 100 metres (328 ft) below the campsite. This meant that we had to carry quite a bit of heavy equipment through the snow up the last stretch. \- After some days up on the mountain, nearing the end of the exercise, our supplies were running low. The paraffin which we used to power the heater/cooker in our tent soon ran out. We had contacted Provisioning prior and had been informed they were running a day late, which meant we would not get any paraffin for the night. The temperature was far below freezing and we had to keep the heating running somehow to stay safe. \- The particular type of heater we were using is called a Multi-fuel, which, as the name suggests, can run on multiple types of fuel. Including firewood. We were all cold, hungry, and exhausted after three long weeks, and chopping down frozen trees in deep snow was not exactly on anyone’s wish list. Yet, it was something we had to do. \- ## Mental Shift Thankfully, our driver realised that there was an opportunity to play, and to incorporate fun into the task. He suggested that instead of our axe we use the BV-206\. A 6.9 metres (23 ft), 5+ tonnes (11,000+ lbs) unstoppable axe. What a phenomenal idea. His playful mindset instantly spread throughout the team. \- Instead of trekking through the deep snow and spending tons of energy chopping down a frozen tree, we could essentially mow it down with tremendous force and feel like action movie bad-asses. It did not matter that we would still have to cut the tree into logs afterward, all the tedium and dread had been whisked away from the situation and replaced with a joyful spirit. \- It became fun. \- ## What About You While this story is quite a specific example of play, I think we can all take away some important lessons into our daily lives. \- ### Play At Work If you are having a tough time at work – perhaps you are working on a troublesome project – why not inject some playfulness into it? Have a bit of banter with your colleagues, add some fun challenges, and make the situation more enjoyable for everyone. It is such a good thing for your mental state. Before you know it, you are not dreading work, you are having fun. And fun is infectious. \- Looking back at all the places I have worked at, the most enjoyable times were always when we allowed ourselves to play, no matter which projects we were working on at the time. (Special shout out to DNEG 2015 vibes!) \- ### Play In Life I think the same thing is true for relationships, fitness, and finances. \- You might be going through a rough patch with your partner, perhaps lockdown was particularly hard. Allow yourselves room for play and make spending time together fun again! Do something unusual and interesting to break up the monotony and get back on the right track. \- You might be struggling to lose weight or to gain muscle, but could you perhaps create fun challenges to help build momentum? Is there a better approach to your problem than what you are currently doing? It might be hiding in plain sight. \- Or, you might be struggling with finances. Could you make saving into a game or a challenge: how much can you save per day, week, month? Any creative solutions for saving more or spending less? Maybe you can automate it and lessen the mental burden. \- Shift to a positive mindset, I promise you it will be worth it. \- ### Be Open To Playful Solutions By allowing room for play you are inherently allowing room for creativity and for creative solutions to your problem. Perhaps doing something silly is the right thing to do. We had fun acquiring that firewood, but our approach was also hands down the more effective one. We saved time and effort using our unconventional method. \- Similarly in life, it could be worth it to try a more playful approach. Perhaps there is a golden solution waiting to be uncovered. \- I hope you found this story insightful. For more reflections, see [Advice](https://www.keheka.com/tag/advice/). \- [Sign up for the newsletter! ](https://www.keheka.com/#/portal/signup) \- ### Copy Paste Differentiate URL: https://www.keheka.com/copy-paste-differentiate/ Last updated: 2023-02-09T16:34:52.000Z ## What Is It? Copy Paste Differentiate is the practice of templating common tasks and reusing recurring structures in your day-to-day work. It is centred on the idea that saving a little bit of work, many times over, will end up saving you a lot of work in the long run. \- ## How Does It Work? First, take some time to analyse and look for repetitive patterns in your life to which it is possible to apply this practice. You might have to think a little bit outside of the box! Be granular. It can be a sub-task of a sub-task, as it is often here you will find time to be saved. It does not matter if you can only save a few seconds – as long as it is something that repeats often enough it will be worth it. \- Example If you can save five seconds each time you perform a task, and you perform that task 20 times per day, then over a year that will save you – on that single task alone – almost an entire working day: 7 hours, 13 minutes and 20 seconds. \- The maths 5 seconds per time x 20 times per day x 260 days per year (amount of working days in 2022 in the UK) / 3600 seconds per hour = 7.22 hours per year. \- Now imagine that you save five seconds each time on 10-15 (sub-)tasks a day. You could save weeks over a year or two, months over longer periods. Time is the only truly limited currency in life; you can not get it back. Spend it, and save it (i.e. redirect how you spend it), wisely. \- There are many ways to save time, and while this post is more biassed towards technology and software, the Copy Paste Differentiate practice applies to many real life scenarios as well. So whether you write 100 lines of code per day and decide to automate your coding using 3rd party software, or you hammer down 100 nails per day and decide to get a nail gun, there is value in approaching your work with this mindset. \- ### Create Templates If you frequently perform a task and find yourself repeating much of the process each time, it is likely worth your time to build a template for that task. Set up a core structure which can be reused every time as a base, and then be further refined upon and differentiated to suit the custom needs of the task. \- When I am working in Nuke I rely heavily on ToolSets. I create ToolSets for every task that I do often enough to warrant it. Most of the time they are very simple setups that only take 10-20 seconds to build from scratch, but because I use those setups so many times, it becomes worth it to turn them into templates. For example, every time I start working on a new shot, I know I will always need an organised section at the bottom of the script with some Backdrops and nodes for rendering, version management, and references. I like to have a Backdrop labelled File Out with a Crop node, a Remove (keep rgb) node and a Write node, and below that, Backdrops labelled Current Version, Previous Versions and References. I also like to put a VIEWER\_INPUT node here at the bottom with a grain tech checker. Now, building this setup from scratch every time I start a new script would probably only take a minute of my time. But over, say 500 shots, that adds up. \- I apply this mindset to every software I use. For instance, I have set up templates for Google Docs and Sheets to quickly get up and running when writing a post or making a spreadsheet. Somewhat related, I have also set up Quick Access shortcuts in Windows Explorer, customised my phone’s home screen and pull-down menu, and saved bookmarks and collections in Firefox. All so that I can focus on spending my time on more useful things than just redoing something I have done many times before and know inside out. \- There is a modular approach to templating. You are essentially making building blocks which you can slot into your tasks. If I need to precomp something in Nuke, I slot in my Precomp setup which has a bright yellow Backdrop labelled Precomp (so I can easily recognise it), and a small pipe structure with a Switch node and Write node set up. I have made hundreds and hundreds of precomps since I built that little setup, and it has saved me hours. \- What you are templating does not necessarily have to be actual content, though. Even if you just copy the formatting between documents you can save yourself some time. Have a think about which options are available to you specifically. \- ### Automate Repetitive Work If you code or perform other tasks in which there is a lot of repetition involved, it is well worth your time looking into (semi-)automation. Take for instance my website: I am using a lot of HTML code to customise how my posts look. The standard Editor does not have an option for changing the text colour, for example. So if I want to emphasise words using this colour, I have to wrap the text in these HTML tags: this colour \- Writing out these tags every time, or even keeping a separate cheat sheet to copy back and forth from, takes time. Instead, I have set up an [AutoHotkey](https://www.autohotkey.com/) script which can quickly be activated by pressing some hotkeys, and it does the task for me. I have made scripts to insert a whole range of HTML code snippets, making it very easy to format the text how I want it. Changing the text size, indentation, and highlighting, or [inserting a link](https://www.keheka.com/), line breaks, and so forth, is just a second away each time. \- ### Change The Default Settings If you find yourself manually changing the layout or any of the default settings of a software every time you launch it, consider changing them permanently. \- I prefer to set the label text size of my Backdrops in Nuke to 100 so I can easily recognise the different parts of my scripts when zoomed out. I use a lot of Backdrops as part of organising my Nuke scripts, and manually changing that value every time would lead to quite a bit of wasted time. \- I also use two monitors at work and have set up Nuke to automatically launch my custom dual monitor layout on startup. And there are many, many more such settings I have changed in various software, each of which saves me a little bit of time every day. In aggregate over say a year, it really adds up. \- ## Why Does It Benefit You? The Copy Paste Differentiate practice helps you become more productive in five ways: \- ### Benefit #1 If it is not clear by now, practising Copy Paste Differentiate saves time because it alleviates repetitive work. Keep in mind that it might take some time before it becomes cost-effective, as it will depend on how often you perform a task. \- ### Benefit #2 It keeps your work organised. Setting up templates means you only have to tidy up the setup once. Using them going forward means your work is already organised from the get-go. \- ### Benefit #3 It alleviates blank page syndrome. By using templates you can instantly populate a script, page, or worksheet. It makes it easier to get started on something new because it gives you that initial push and builds your momentum. \- ### Benefit #4 It helps reduce decision fatigue. If you have a template then you do not have to invent something new every time. You do not have to make decisions on formatting, how to organise something, or what it should look like. Limiting a potentially overwhelming amount of options means it becomes easier to choose. \- ### Benefit #5 It helps avoid mistakes such as typos. Because you are using tried and tested templates, for example code snippets, you do not have to worry as much about things like typos or formatting mistakes. \- Tip: Revisit your templates, default settings, or automated scripts once in a while and update them as necessary. After some time of actually using them you might realise there is something else you can optimise. \- I hope the practice of Copy Paste Differentiate will be useful to you. For more productivity tips, see [Productivity](https://www.keheka.com/tag/productivity/). \- [Sign up for the newsletter! ](https://www.keheka.com/#/portal/signup) \- ### Time To Work URL: https://www.keheka.com/time-to-work/ Last updated: 2023-02-09T16:34:58.000Z ## Do You Accept? Imagine being offered a deal where you would be given £1000 every single hour of the day, 24/7, under the following conditions: - You would have to spend the £1000 within the hour it was given to you. - Any amount that you did not spend within the hour would be lost forever and would not be retrievable. - The deal could end at any moment, and you would not know beforehand when it would end. \- Assuming you accept the deal, how would you spend the £1000? You could not put the money in your savings account and save it for later. After each hour the money would be gone, either through your spending it or not. It would fall on your shoulders to spend it in some meaningful way, and you would be accountable for if and when you did not. \- Hopefully, you would use the money for good. To improve your life and the lives of others, and to make the world a better place in some way. It would probably be wise to invest in yourself to start off; spending the money in such a way that you would close the gap between you and the best possible version of yourself. To gain surplus energy to then start helping others, and doing as much good as would be within your power. Just think, £1000 every single hour would provide fantastic opportunities to make real, impactful changes for the better. \- ## It Is All Potential Every single day you are given potential. You may not be given £1000 every hour, but you are given an hour. An hour to spend. It has to be spent, and you are never getting that hour back. So how do you spend your hours? \- You can not save them. There is no such thing as saving time, really. Time is spent, constantly, always. What you are doing when you are saving time is simply redirecting how you are spending your time. You are changing what you are buying with the £1000. \- If you discovered a 50% off special offer and consequently only paid £500 for something that usually costs £1000, then great, you would have £500 left to spend within that hour. But that £500 would only exist as potential until you actually spent it on something. Fail to spend it and it would be lost. \- Similarly, if you found an amazing productivity tool or technique that saved you half an hour from a typical hour’s work, then you would have half an hour left to spend within that hour. Half an hour of extra potential. So what do you do with the potential you have in the 24 hours of each day? \- ## 24/7 You need to eat, sleep and rest, of course, those are basic human needs. After all, it would be difficult to make sound decisions on how to reach your potential every hour if you were sluggish, tired, and not able to concentrate. But also, you might have a 9-5 job to pay the bills; you need to make a living in order to, well, live. However, apart from the time spent doing all of those things, the rest of the hours in your day are negotiable, right? \- Actually, I would argue that all of the hours in your day are. You might not think that it is possible to reach your potential every hour, 24/7\. That you can not possibly improve your own and others' lives without being awake and present. \- Yet, do you think that your favourite musician is awake every time you listen to their songs? Or your favourite YouTuber is online when you watch their videos? Do you think that the revenue of a successful business is tied directly to the CEO’s time? Absolutely not. They are making money in their sleep as people are buying their (hopefully) great products. \- ## It Is In Your Hands You have the ability to make something that works for you to help others, even when you are not awake or present. Something beyond yourself. Maybe even [something that outlives you](https://en.wikipedia.org/wiki/The%5FDenial%5Fof%5FDeath?ref=keheka.com). What is your potential? What is your mission? Get to work on (finding) it. Remember, the deal could end at any moment. \- In my case, my mission is to share my knowledge and help improve your life. Wherever you are, whenever you see my work, 24/7, even when I sleep. \- I hope you found this insightful. For more productive inspiration, see [Productivity](https://www.keheka.com/tag/productivity/). \- [Sign up for the newsletter! ](https://www.keheka.com/#/portal/signup) \- ### How To Win An Emmy URL: https://www.keheka.com/how-to-win-an-emmy/ Last updated: 2024-01-29T19:22:49.000Z ## Backstory In 2019 our team at [DNEG](https://www.dneg.com/show/chernobyl/?ref=keheka.com) won the Emmy Award for Outstanding Special Visual Effects in a Supporting Role for the HBO series Chernobyl. \- I was one of the Lead Compositors on the show, and was responsible for overseeing a team of 12 compositors. DNEG produced a wide variety of visual effects across \~550 VFX shots for the series. We created everything from the expansive Chernobyl environment including the massive nuclear reactor and explosion, to the tense helicopter missions, [the nail-biting 90 second rooftop liquidators scene](https://beforesandafters.com/2019/08/01/breaking-down-that-intense-handheld-rooftop-liquidator-shot-in-chernobyl/?ref=keheka.com), and all the way to the less glamorous work involved in maintaining authenticity. The truly invisible visual effects that viewers would hopefully not even think to question, such as replacing modern street signs, windows and cars. Or even, adding digital pubic hair to the actors playing the miners who were tunnelling under the reactor naked. (Manscaping wasn't as common back in the 80's as it is now). So there certainly was a range of different challenges. \- Our focus was on creating photo realistic visual effects to compliment the fantastic storytelling by the writer Craig Mazin and his team, and making sure every shot looked as authentic as possible – as if it were taking place in the Soviet Union in 1986\. An immense amount of scientific research and real world reference study went into the project, enabling us to lift the visuals to a whole new level and emphasise the story. \- And it paid off: Chernobyl’s storytelling and visuals resonated with audiences worldwide and it became the highest rated TV show of all time on [IMDb](https://www.imdb.com/title/tt7366338/?ref=keheka.com): ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2022/02/Cher.jpg) Note: It has since dropped down in the rankings but remains in the top 5 as of the time of writing. \- After the amazing audience reception, Chernobyl went on to receive 19 nominations and win 10 awards at the Emmys, including the 2019 Emmy Award for Outstanding Special Visual Effects in a Supporting Role. We were ecstatic. All our hard work was rewarded with industry recognition, beautiful winged statuettes (for the supervisors), and official certificates. \- This is what the Emmy Award looks like up close: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2022/02/Emmy_Resized.jpg) Fun fact: The Emmy is holding an atom representing the electron of science and her wings represent the muse of art, according to the [official Emmys website](https://www.emmys.com/academy/about/statuette?ref=keheka.com). \- And this is what the official certificate looks like: ![](https://storage.ghost.io/c/9a/44/9a44322e-a7f2-4402-a9a7-2c12ba7ce910/content/images/2022/02/Certificate_Resized.jpg) Side note: Because the certificates are issued in Los Angeles, they are printed on US Letter instead of the more common A4 paper sheets used here in Europe. Therefore, they are wider (215.9 mm vs. 210 mm) and shorter (279.4 mm vs. 297 mm) than our typical A4 frames, and I very carefully had to trim the sides to fit. \- Winning the Emmy was a pretty unreal experience for us and looking back on it I think it is worth breaking down how we got to that point. \- ## So How Did We Do It? \- ### #1: Standing On The Shoulders Of Giants First of all, to the credit of the director Johan Renck, to our visual effects supervisor Max Dennison, and to all of the pre-production and production teams, the footage and material we received to work with in post-production were of exceptional quality. The amount of work they had put in before any compositing started was gargantuan. We were standing on the shoulders of giants. \- They made the decision to pursue authenticity, and instead of just filming everything in a blue screen studio, they travelled all over Eastern Europe in search of authentic locations. \- Keep in mind the original reactor at Chernobyl was destroyed in the explosion and is today covered in a massive steel and concrete sarcophagus, which is further enclosed in the New Safe Confinement steel and polycarbonate structure — and to top it all off, the surrounding area has restricted access in a 30 km radius known as the Chernobyl Exclusion Zone. \- It was clear that the location scouting teams had to look elsewhere. They did a fantastic job at finding great sites and getting permits for filming and obtaining LIDAR and photogrammetry references, for example at Ignalina Nuclear Power Plant in Lithuania, where Chernobyl's twin RBMK reactor still stands (now decommissioned). \- And so when it came time for creating the visual effects in post-production, right off the bat we had fantastic raw material. They say you can't polish a turd, and while we can do a lot in the world of visual effects, this still often holds true. Inherently bad footage or assets are an issue, and the worse the quality is, the harder it is for us to make something great out of it. What we received starting out in post already put us leaps and bounds ahead of any competition at that stage. \- ### #2: Going The Extra Mile Working on this show was no Sunday stroll in the park. There were high demands and high expectations on every level, and this permeated the mindsets of the crew. We weren't haphazardly piecing together a rusty old van, so to speak — rather, we were meticulously constructing and fine tuning a performance race car. \- Everything we did was grounded in reality. What happened at Chernobyl had never happened before and there isn't photographic evidence for some of the events that occurred, such as what the operators saw when they looked into the reactor core after the explosion, or what the blue pillar of light in the ionised air above the reactor really looked like. In those cases we based our work on scientific research and eyewitness accounts to make the visuals plausible and realistic. For the most part, however, we had real world references. And we went to great lengths to ensure that what you see in the series is as authentic as possible. \- Satellite dishes and even modern UPVC double-glazing on windows were removed from buildings. Cars, tram tracks and wires that were not consistent with the era were removed from the city streets. Modern helicopter liveries were replaced with contemporary counterparts. (In most cases the helicopters were full-CG, though). Near-empty fields were turned into a vehicle graveyard with hundreds of radioactive fire engines, helicopters, trucks and cars. And, of course, we reconstructed the entire Chernobyl power plant, extended sets, and more. You would be surprised at how much was altered in order to recreate the 80’s Soviet Union. \- We also made sure to keep every camera move legal, as in, physically possible. There were no ‘super hero’ cameras high up in the sky flying around the helicopters, for example. The CG cameras were always grounded in some way, whether handheld or on a tripod at ground level, connected to a crane, or inside a helicopter looking out. It was all done to further the illusion of reality. \- Would the vast majority of viewers notice or even care if we left the double-glazed windows in? Or realise the raging reactor core was behaving in a scientifically plausible way? Probably not. Very likely, it was not strictly necessary to go to the lengths we went to, in order to tell the story successfully. But by going the extra mile, we infused the series with authenticity all throughout and gave the audiences very little cause for interruption in their suspending disbelief. The story is king, like Pixar’s motto famously says, and the visual effects were all strongly supporting his throne. \- ### #3: Sacrificing For The Greater Good Related to going the extra mile, I would like to touch on the topic of sacrifice. I was personally conflicted whether to include this point because I can not in good conscience recommend sacrificing what I believe is necessary time off, for work. But even with a fairly healthy VFX budget there is no denying that we all sacrificed evenings and weekends working on the visual effects for the show. And without that extra time to develop the visuals, the end result might not have been equally as powerful. \- I insist that this can and should be solved with better time management, planning, and bidding. Overtime is a wider issue in the visual effects industry due to over-ambitious bidding and moving goalposts, among other things — however I wanted to bring up the point of sacrifice regardless. We did more than what could be reasonably expected of us, to turn something great into something excellent. Even the Head of the TV department, who was a former compositor, joined in and helped finish the compositing work in the last days before delivery. \- ### #4: Being Lucky A.K.A. Great Timing You can do everything right and still lose. And that is exactly what happened to us the year before, when we were nominated for the 2018 Emmy Award for Outstanding Special Visual Effects, for the Netflix series Altered Carbon. \- It was a massive show, one of Netflix's largest investments at the time, and with a very healthy budget we were able to create incredibly high quality visual effects. World class, award winning visual effects. As we approached the award season we felt, with good reason, that we had a really good shot at winning the Emmy. Alas, we were joined in the nominations, and beaten by, Game of Thrones which was hugely popular at the time. And to their credit, the visual effects were fantastic on that show, well deserved. \- So competition definitely matters: who you are running up against has a big impact on your chances of winning. To our luck, in 2019 we were not pit against Game of Thrones or other such behemoths and therefore had a higher chance of winning. It partly came down to timing. \- I hope you found this story insightful. For more reflections, see [Advice](https://www.keheka.com/tag/advice/). \- For an in-depth interview with the VFX Supervisor Max Dennison about Chernobyl, check out [Art of VFX](https://www.artofvfx.com/chernobyl-max-dennison-vfx-supervisor-dneg-tv/?ref=keheka.com). \- [Sign up for the newsletter! ](https://www.keheka.com/#/portal/signup) \- ### The Leapfrog Technique URL: https://www.keheka.com/the-leapfrog-technique/ Last updated: 2023-02-09T16:35:08.000Z ## What Is It? The Leapfrog Technique is a productivity booster that lets you reduce downtime by working on tasks in alternate succession. \- ## How Does It Work? Let’s say for example that you have three tasks which you need to complete: Task A, Task B, and Task C. For now, let’s suppose they all have the same priority and deadline. (Priority weighting is covered further below). \- Tip: With the tasks all being equally important I would recommend to begin with the task that appeals to you the most. The most fun — or the least boring — one. Getting the ball rolling is a crucial step, so use any advantages (even if slight) to help boost your initial motivation. \- ### Step 1 Let’s say that you begin with Task A. After working on the task for a while, you may find that you hit a wall or your progression slows down. This could for example be due to: - Downtime such as waiting for a reply to an email or verbal feedback with necessary information to continue. - Sending a render to the render farm and waiting for it to complete. - Writer’s block. - Server maintenance. - Emotional dread of continuing to do something tedious. — Or, anything else that causes the task to grind to a halt. \- ### Step 2 If this happens, then you temporarily stop spending time on your current task and immediately start working on the next task on your list. In the leapfrog metaphor, the current task actively bends down and lets the next task spring into action. Let’s say the next task is Task B. With a fresh spring in your step due to the novelty of starting on this new task, your productivity tends to rise again. You leap forward, taking advantage of the downtime on Task A. \- ### Step 3 By the time you either finish Task B or again hit a wall, you bend down that task and pursue one of two options: #### Option 1 Either, enough time has passed and you are now ready to return to Task A: - Whatever delay there was may be over by now. - Your subconscious mind has been quietly working on the problem in the background, and an idea for continuing the work has emerged. - The friction to work on the task has eased in some way. If so, then loop back to Task A and leap forward again. #### Option 2 Or, Task A is still blocked in some way: If so, then keep both Task A and Task B bent down, and spring Task C into action. \- ### Step 4 Rinse and repeat the cycle, and as you finish tasks, line up new ones and keep leapfrogging. \- Tip: The Leapfrog Technique can scale to any number of tasks, however 2-5 tasks is usually a good number to aim for to avoid diluting your efforts. \- #### Priority Weighting If your tasks have different priorities or deadlines then the same method applies. However, you would obviously start with the most important task first, followed by the second and third priorities. You would also much more heavily rely on, and more frequently prod, Option 1 in Step 3 above. \- ## Why Does It Benefit You? The Leapfrog Technique helps you become more productive in four ways: \- ### Benefit #1 It keeps you active and engaged with your tasks — continuously moving forward and making progress. Working on tasks in alternate succession naturally keeps your momentum up. Conversely, stopping up and waiting in between tasks means that it will take more work and more willpower to overcome the inertia and start again. \- ### Benefit #2 It helps you stop doing unproductive things during (what doesn't need to be) downtime, e.g. spending half an hour on social media while waiting for an email reply. Allowing yourself to get distracted in this way ends up delaying your work for longer than necessary. That half an hour would have been prime time to spend progressing another task. Distraction. \- ### Benefit #3 Progress is a great motivator and you get an energy boost/dopamine hit by finishing a task. This in turn makes you want to continue to work and keep the ball rolling because you feel good about it. \- ### Benefit #4 The technique turns procrastination into productive procrastination. Sometimes it can be hard to muster the discipline to work on a particular task — even if you know all the steps that you need to take in order to complete it. (And there is nothing else hindering you). Especially when the next steps are boring or tedious. Temporarily switching over to working on your next task instead makes your procrastination productive, and lets you return to the first task later on with fresh eyes. \- Tip: Keep in mind that successfully completing tasks is very satisfying and slightly addictive in a way, even more so when you are on a roll. Do remember to take breaks. Your mind and body need to rest regularly. \- I hope The Leapfrog Technique will be useful to you. For more productivity tips, see [Productivity](https://www.keheka.com/tag/productivity/). \- [Sign up for the newsletter! ](https://www.keheka.com/#/portal/signup) \-