Andriy Sopyliuk gave us an in-depth look at his shader setup and rendering workflow in Blender for a bottle owned by a 19th-century Carpathian outlaw who brewed deadly tinctures and collected the teeth of his victims.
Introduction
Hello! I'm Andriy Sopyliuk, a self-taught 3D artist from Ukraine. Recently, I completed an intensive texturing course at Varto School, which was my first experience with a structured workshop. In this article, I'd like to talk about the rendering and post-processing of my latest artwork, Serpent Tincture.
The first thing worth mentioning is that the model itself, including modeling, sculpting, UVs, and baking, was created by my mentor, Dmytro Mykhailyk. My task was to texture and render it. All participants worked with the same 3D model, but each student created a unique version by applying their own textures and telling a different story through the asset. You can now find many creative variations of this bottle published by other students as well. I'd be grateful if you took a moment to explore them on the Varto School ArtStation page.
This article will focus solely on the technical aspects of my project. I won't be covering reference gathering, inspiration, or the creative concept behind the asset. I also won't go into the texturing process or the rendering tips already covered during the course. Instead, I'll highlight the personal touches I added, the parts I'm most excited to share. The focus here is on the rendering workflow, shader setup in detail, and post-processing. My main goal during the rendering stage was to achieve a realistic look while still having a bit of artistic control over the final result. It's worth noting that I'm by no means an expert in nodes or rendering, everything I'm sharing here comes from countless hours of trial and error.
Environment Scene Setup in Blender
I started working on the rendering stage alongside texturing to ensure that the environment and textures would blend together organically. The first thing I did was parent all the bottle objects to an empty. This allowed me to experiment with different prop positions and use keyframes to save location and rotation.
HDRI
For the environment background and base light, I've used Day Environment HDRI 050 from ambientCG.
As for its settings, I've separated the intensity of the visible background and light that scatters on meshes with a quick node setup:
What did this give me? Better control over separating the main object from the background. Take a look at this comparison. As you can see, the second image feels more pleasant to the eye, and the bottle's silhouette stands out much more clearly.
Sunlight & Shadows
If you look closely, you might notice that the shadows have soft edges with a warm tint. I achieved this by using two Sun lights. The second Sun is parented to the first, so they always share the same location and rotation. The main light casts sharp shadows because of its narrow angle of 0.15 degrees and a color temperature of 6000K. The second sunlight has a wider angle of 1 degree and a temperature of 4500K, which helps soften the shadows and add warmth.
Depending on the situation, the second light's intensity is divided by 2 or 3.
The shadows were created using tree models. One important detail is to vary the distance between the leaves and the ground, this helps produce both sharp and soft shadows. In real life, you can often notice this effect under trees: the closer the leaves are to the ground, the sharper the shadow, while higher leaves cast softer, more diffused shadows.
Leaves are visible on the background as well, giving a bit more depth to the HDRI and nice bokeh with light interaction.
Enhancing Megascans Model Textures
I used a barrel model from Quixel Megascans as the floor for the scene. However, I needed sharper textures for some of the close-up shots. So, I separated just the top part of the barrel, repacked the UVs, and baked the textures from the original model using Marmoset Toolbag.
The textures already looked sharper after baking, but I enhanced them a bit in Substance 3D Painter. As you can see, the bottom part of the barrel appears more blurred compared to the top.
Other Environment Scene Details
Small details like debris, leaves, pine needles, branches, and spider webs all contribute to a more natural and believable forest scene. I experimented a lot with different lighting setups, HDRIs, and scene assets, for example, trying rocks or tree stumps instead of the barrel. If you're working on an environment and you're not happy with how it looks, don't be afraid to redo it. Every new iteration will likely be an improvement. Just make sure to save backup copies of the versions you liked along the way.
Studio Scene Setup
Very basic scene with studio HDRI as a main light source, but with some additional tweaks. Both Multiply Mix nodes add more depth to the scene by increasing glossy strength as well as adding a bit of blue tint.
The visible floor is just a simple plane with a smooth bend. Be sure to add a ceiling as well, this makes a huge difference by creating more shadows and preventing the background from looking like plain white. And that's basically it for the scene setup. It's fairly simple, so now let’s move on to the more complex part: shader settings.
Shader Settings
Fabric
I wanted to emphasize the silhouette more without adding an actual rim light to the scene. So, I created a rim effect directly in the shader by using an Emission shader with the albedo as its color, then mixing it with the fabric textures and using a Fresnel mask to control the visibility.
Paper
Paper, like many other materials, allows light to pass through it. The simplest approach would be to mix a Principled BSDF shader with a Translucent BSDF, but I wanted more artistic control, so I applied the effect only to the edges. Applying translucency across the entire surface caused some of the finer details, like the text on the paper, to become too blurred, which I wanted to avoid.
To isolate the edges, I used a combination of a Vector Math node set to Dot Product and a Bevel node. I then mixed this result with the albedo texture to help preserve the brightest surface details. For the translucency color, I used the albedo with a high intensity value of 15, which makes the effect appear much brighter in the final render.
Minerals
The node setup for this material is pretty dense, so let’s break it down.
I started by mixing Glass BSDF and Refraction BSDF, making sure to connect the Roughness input and adjust the albedo’s brightness and saturation to get the desired look.
Next, I added a subtle rim light effect, similar to what I used in the fabric shader. To add some dust on top of the minerals, I used a black and white mask created in Substance 3D Painter, nothing fancy, just a combination of a position mask and some grunge textures.
The final part of the shader handles colored shadows. While Blender can render them, the effect is extremely subtle, and rendering it is very slow. To fake it, I used additional nodes to simulate the colored shadow effect more efficiently. As a finishing touch, I added volume inside the minerals to give them extra depth. If you're making a similar setup, make sure to enable Volume in the Light Paths settings (2-3 samples are usually enough).
Have a look at the comparison of only Glass and Refraction mix against the completed shader:
Glass
The shader starts with a simple mix of Glass BSDF and Refraction BSDF, but with a separate Glass node used for backfaces to help reduce normal map artifacts. After that, I once again added a rim light effect using Emission. In this case, the effect is quite noticeable, you can see the comparison in the GIF below.
Next, I mixed everything with a Principled BSDF to remove the glass shader in areas covered by dust.
For the dust mask, I used the albedo of the glass itself, since the dusty areas appear much darker in albedo. I simply clamped the values to isolate them.
Additionally, I experimented with a transparent shadows setup. While it didn't make much of a difference in the final renders, since the bottle is wrapped in fabric, it worked surprisingly well as a fake glass shadow test. The idea behind it is to eliminate internal glass shadows while keeping just the outer contour, mimicking how real glass behaves (but without the complexity of caustics). I originally discovered this by accident while experimenting with node setups, and I will definitely be using it in future projects.
Rope
Not only shader settings, but geometry as well. I created small fibers and loose threads on the rope using the Quick Fur tool in Blender. I then refined the result with several modifiers: Trim, Set Hair Curve Profile, Interpolate, Noise, Frizz, and Shrinkwrap. For the material, I used a mix of Transparent BSDF and Hair BSDF, setting the color to match the rope. This subtle detail helped make the material feel more tactile and believable, especially in close-up shots.
Creating a Realistic Camera
One of my real-life hobbies is photography, and I've always wanted to have more realistic lens controls in 3D. Over time, I experimented with different methods, including modeling the lens itself with accurate IOR values for the glass. While that approach technically worked, it was incredibly difficult to control and far too performance-heavy for practical use in a real project.
Recently, thanks to a recommendation from a friend, I discovered the Lens Sim add-on for Blender. The add-on offers fully customizable lens settings, chromatic aberration, vignetting, distortion, lens softness, and more. Although it's still in development and has some flaws, it's already a very powerful tool, and now I can't imagine working on a render without it. For the environment renders, I used the Helios-44 preset. It's a lens I own and really like for its unique character in real life.
The add-on includes a wide range of settings, but for this project, I added lens dirt, a small amount of bloom (0.01), and some glare (0.1) to introduce subtle imperfections. There's not much technical data available online for my specific variant of the Helios-44, it's quite an old lens, so I didn't adjust the individual glass elements. However, I did tweak the Abbe values slightly to replicate the distorted chromatic aberration look. In a previous personal project on ArtStation, I also tried to recreate that same chromatic aberration effect, but instead of modifying Abbe values, I used Custom Ramp settings.
Just like in real life, chromatic aberration in 3D slightly blurs the image, after all, it's a lens imperfection. However, I still wanted to showcase the textures I created without that blurriness. After a lot of tweaking and test renders, I ended up going with the simple solution: rendering two separate versions of the shot, one with chromatic aberration enabled, and one without. It's not the most physically accurate method, but as I mentioned at the beginning, I like to keep a bit of artistic control in my renders, and this was one of those cases.
The only downside is that the focus shifts slightly between the two versions, but that won't be noticeable in the final result. What's left is to combine those renders, which I will cover later.
Rendering & Settings
As I said earlier, I'm rendering two versions of each shot. The main version is without chromatic aberration in order to preserve as many details as possible.
In the Render tab, settings vary slightly depending on the shot, but I usually start with the configuration shown above and adjust from there.
I lower the Noise Threshold value to 0.025 when I need more detail or if the render appears too noisy. Similarly, I can increase the number of samples to 1000 for shots containing small parts that require more samples, but in that case, ensure the Noise Threshold isn't set too low; otherwise, render times will increase drastically.
For the second render with chromatic aberration, a Noise Threshold of 0.1 and 200 samples is more than enough. I also enable Fast GI Approximation for this render to speed things up. It introduces some differences, but they aren't noticeable in the final image after post-processing.
In the Light Paths section, I set Diffuse and Glossy bounces to 3-4, which is generally enough. Volume bounces are set to 3, which is necessary for proper depth and lighting in the minerals shader.
For clamping, setting Indirect Light to 15 helps preserve a bit more highlight information, but keep in mind it can introduce more fireflies. Under the Film tab, I reduce the Pixel Filter Width to 0.7 to get slightly sharper renders. I export both Noisy and Denoised versions of the image in TIFF format. In addition, I generate black and white Cryptomatte masks for key elements like the bottle, barrel, and cobweb, these are used later during the post-processing stage.
Post-Processing in Photoshop
A step that many artists unfortunately tend to overlook. Here's my pipeline for finalizing the renders:
- Mixing noisy and denoised images;
- Adding chromatic aberration;
- Slight adjustments to temperature and calibration using Camera Raw;
- Adding sharpness;
- Minor color tweaks with Color Balance and Color Lookup, ensuring color consistency across shots;
- Adding grain.
I rely heavily on Smart Filters for many layers, a very powerful tool. For some reason, many people either fear using them or simply don't know how they work. If that's the case, I highly recommend learning more about Smart Filters, they'll give you much greater control over your layers.
For the first two layers, I place the denoised image on top of the noisy one at about 80% opacity. Then, using masks, I selectively remove the denoising effect where it becomes too strong and blurry, preserving the original details.
Chromatic Aberration
As mentioned earlier, I render the second image with chromatic aberration at a lower quality to reduce render times. To fix focus inaccuracies and preserve detail, I duplicate the chromatic aberration layer and group both copies together, setting the group's opacity to 80%.
The first layer's color blending mode is set to Color, while the second layer uses Luminosity with its opacity reduced to 20%. Then, I apply a black and white mask of the bottle to the group to remove chromatic aberration from the bottle's surface, ensuring the textures remain sharp. However, I keep a subtle amount of the effect on the object's edges and bright spots, where chromatic aberration is most noticeable, so the bottle doesn't stand out unnaturally from the background. Have a look at the comparison between the denoised image and the completed image with chromatic aberration.
Basic Color Calibration
I apply a slight edit using Camera Raw to adjust the temperature and fine-tune the color calibration. Since my scene is almost entirely filled with foliage, the final renders tend to look a bit too green, this is my usual way of balancing the overall color.
Sharpness
Sharpness is a very powerful tool that needs to be used carefully, as it can easily ruin a render if overdone. There are several ways to add sharpness, including Camera Raw adjustments, the Sharpen filter, or High Pass, which is my preferred method. Why High Pass? Because it offers easy control over opacity, blending mode, and most importantly, the sharpness radius, which can be adjusted anytime when used with Smart Filters.
I usually work with three sharpness layers set to around 70% opacity:
- The first layer has a radius set to 1 and affects the entire image;
- The second layer uses a radius of 3, with masking applied to the edges of the main object and other areas I want to emphasize;
- The third layer has a radius between 7 and 15, depending on the shot, and is masked to affect only specific details like minerals, metal wires, wood carvings, and some fabric and paper edges.
Masking
Masks can drastically change the look of a render. They allow you to separate the main object from the background and add depth by selectively increasing or decreasing brightness in certain areas. My favorite way to use masks is by adding Curves adjustment layers and tweaking only the middle part of the curve, either lifting it up or pulling it down. After that, I paint the layer mask to control exactly where the effect applies. I also use masks exported from Blender after rendering.
Colors
The next step is adding the final color correction. I use a few Color Balance layers to achieve the desired look, along with a Color Lookup adjustment set to Drop Blues, but at a low opacity.
The final Color Balance layer helps match all the renders together. Since each shot uses different sun and HDRI positions, the colors vary across the images. To ensure consistency, I open all the renders in Photoshop side by side using Window > Arrange > Tile. This way, I can work on all of them simultaneously and make sure the colors align perfectly.
Grain
Finally, one of the most important steps, adding grain. And no, not the noise straight from Blender or any other render software. Every real camera, whether it’s a professional one or a cheap phone, introduces some grain in its images. Often, this grain contains color artifacts, but I prefer adding only the monochromatic variant to avoid ruining the textures.
I start with a 50% gray fill layer and add grain using Camera Raw. Then, I duplicate this layer, apply slightly different grain settings by adjusting Size and Roughness, and blend both layers using a grunge texture. The final effect is an uneven grain pattern, which I set to the Overlay blending mode.
After analyzing some real photos, I noticed that the grain tends to be much more prominent in the shadows than in the highlights. To replicate this, I duplicated the grain layer again, changed its blending mode to Soft Light, and masked the shadow areas of the image using Select > Color Range. In the settings, I switched Select to Shadows and lowered the Range to 0, controlling the smoothness of the transition between light and shadow with the Fuzziness slider.
Conclusion
And that's it, the full breakdown of my rendering and shading process. Many details had to be missed to keep the article concise, but I hope this gives you a clear insight into my approach and techniques.
Unfortunately, due to the limitations of the .gif format, many details are lost in the comparison images. If you'd like to take a closer look, I've uploaded all the original images to Google Drive. In the folder, you'll also find a few full-quality render comparisons, both the raw renders straight from Blender and the final, edited versions. Feel free to explore them in more detail.
If you have any questions or want to discuss anything in more detail, feel free to reach out to me on my ArtStation page. I'm always happy to connect and share knowledge. This project was a great opportunity to explore texturing and rendering techniques on a shared 3D model, one that many other talented artists worked on as well. Once again, I highly encourage you to check out their unique texture variations and creative approaches on the Varto School ArtStation page.
While this article focuses on art and techniques, it's impossible for me to ignore that Ukraine, my home, is still deeply affected by the ongoing war. If you're able, please consider supporting Ukraine in any way you can, whether through donations or simply standing in solidarity. Every bit of support truly makes a difference. Thank you very much for your attention and for taking the time to read about my process. I hope this article inspires you in your own creative journey. Stay safe and keep creating!