Creating Digital Art with Houdini
Vendors
Persons
Edv Ku
Events
Subscribe:  iCal  |  Google Calendar
London XE   17, Aug — 20, Aug
Cologne DE   19, Aug — 21, Aug
Cologne DE   22, Aug — 26, Aug
Seattle US   28, Aug — 30, Aug
Atlanta US   30, Aug — 4, Sep
Latest comments

Thanks for sharing, the lighting on the wheels and coins is beautiful, very painterly.

by Catalyst
5 hours ago

The site is in Japanese, but the program was in English for me.

by wilfred van den berg
8 hours ago

that new c&c mobile game is a slab in the face.... fuck ea

Creating Digital Art with Houdini
30 August, 2016
Interview

We’ve had the enormous pleasure of talking with Edv Ku – a very talented digital artist from Lithuania. He talked about the way he produces incredible digital art with Houdini.

#514

#516

ProEXR File Description =Attributes= cameraAperture (float): 36.000000 cameraFarClip (float): 0.000000 cameraFarRange (float): 1000.000000 cameraFov (float): 9.431318 cameraNearClip (float): 0.000000 cameraNearRange (float): 0.000000 cameraProjection (int): 0 cameraTargetDistance (float): 239.684723 cameraTransform (m44f): [{0.979661, 0.0210063, -0.199554, -48.2707}, {-0.200656, 0.10256, -0.974278, -235.552}, {-1.86264e-007, 0.994505, 0.104689, 32.8907}, {0, 0, 0, 1}] channels (chlist) compression (compression): Zip16 dataWindow (box2i): [0, 0, 1199, 1199] displayWindow (box2i): [0, 0, 1199, 1199] gamma (float): 1.000000 lineOrder (lineOrder): Increasing Y pixelAspectRatio (float): 1.000000 screenWindowCenter (v2f): [0.000000, 0.000000] screenWindowWidth (float): 1.000000 tiles (tiledesc): [64, 64] =Channels= A (uint) B (uint) CESSENTIAL_Direct.A (half) CESSENTIAL_Direct.B (half) CESSENTIAL_Direct.G (half) CESSENTIAL_Direct.R (half) CESSENTIAL_Emission.A (half) CESSENTIAL_Emission.B (half) CESSENTIAL_Emission.G (half) CESSENTIAL_Emission.R (half) CESSENTIAL_Indirect.A (half) CESSENTIAL_Indirect.B (half) CESSENTIAL_Indirect.G (half) CESSENTIAL_Indirect.R (half) CESSENTIAL_Reflect.A (half) CESSENTIAL_Reflect.B (half) CESSENTIAL_Reflect.G (half) CESSENTIAL_Reflect.R (half) CESSENTIAL_Refract.A (half) CESSENTIAL_Refract.B (half) CESSENTIAL_Refract.G (half) CESSENTIAL_Refract.R (half) CESSENTIAL_Translucency.A (half) CESSENTIAL_Translucency.B (half) CESSENTIAL_Translucency.G (half) CESSENTIAL_Translucency.R (half) CESSENTIAL_Volumetrics.A (half) CESSENTIAL_Volumetrics.B (half) CESSENTIAL_Volumetrics.G (half) CESSENTIAL_Volumetrics.R (half) CGeometry_NormalsDotProduct.A (half) CGeometry_NormalsDotProduct.B (half) CGeometry_NormalsDotProduct.G (half) CGeometry_NormalsDotProduct.R (half) CGeometry_NormalsShading.A (half) CGeometry_NormalsShading.B (half) CGeometry_NormalsShading.G (half) CGeometry_NormalsShading.R (half) CGeometry_Velocity.A (half) CGeometry_Velocity.B (half) CGeometry_Velocity.G (half) CGeometry_Velocity.R (half) CGeometry_ZDepth.A (half) CGeometry_ZDepth.B (half) CGeometry_ZDepth.G (half) CGeometry_ZDepth.R (half) CMasking_ID_material_ID.A (half) CMasking_ID_material_ID.B (half) CMasking_ID_material_ID.G (half) CMasking_ID_material_ID.R (half) CMasking_WireColor.A (half) CMasking_WireColor.B (half) CMasking_WireColor.G (half) CMasking_WireColor.R (half) CShading_Alpha.A (half) CShading_Alpha.B (half) CShading_Alpha.G (half) CShading_Alpha.R (half) CShading_Beauty_.33.A (half) CShading_Beauty_.33.B (half) CShading_Beauty_.33.G (half) CShading_Beauty_.33.R (half) CShading_Beauty_0.A (half) CShading_Beauty_0.B (half) CShading_Beauty_0.G (half) CShading_Beauty_0.R (half) CShading_Components_direct.A (half) CShading_Components_direct.B (half) CShading_Components_direct.G (half) CShading_Components_direct.R (half) CShading_Components_indirect.A (half) CShading_Components_indirect.B (half) CShading_Components_indirect.G (half) CShading_Components_indirect.R (half) CShading_Shadows.A (half) CShading_Shadows.B (half) CShading_Shadows.G (half) CShading_Shadows.R (half) CTexmap.A (half) CTexmap.B (half) CTexmap.G (half) CTexmap.R (half) G (uint) R (uint)

#530

Introduction

I grew up in a small town in Lithuania. With most of my family members having some sort of an artistic background themselves, they enrolled me into the Gymnasium of Art. I find it funny how I spent 12 years studying art there, and still had little passion for the subject. At year 11 though, we had an optional class for drafting – which I took just for fun – and that’s where I fell in love with 3D. After graduation I started freelancing, then went on to study animation design at De Montfort University. I primarily worked on architectural visualizations for a while. Lately though I’ve been getting some project work on VFX for feature films, a couple of VR games and interactive documentaries, and also some digital sculpting work.

What are the main things that guided you to using Houdini?

The Internet did – with some passion you can learn the most complex of things on your own. “The Magic of Houdini” by William Michael Cunningham was a great introduction for me – and after that a whole ton of classes. The Houdini Forum (sidefx.com/forum) was also great, because Houdini still seems pretty niche and not as mainstream – at least not amongst indie artists – and the whole community seemed very supportive and welcomed newcomers very warmly.

#514capture

#527capture

#534capture

Your works look nothing like actual stuff you’d use in the game or a film – this is truly art in terms of ‘gallery art’. Could you talk a bit about the design philosophy behind your work? How do you treat your 3D productions? What do you want to achieve with them?

My most recent generation of renders would not fit in anywhere else but a gallery, or maybe an album cover. “Design philosophy” comes from the visions that form up when I’m really tired and am not able to think “straight”. Producing a piece of work daily helped me push forward with the creative process as well. It’s an enjoyable work ethic to go by because you’re able to let yourself loose and not worry too much about following rules. I’m still very much a purist at heart and still value quality over quantity, but quick expressive pieces are essential to me as I find them more fresh and more deeply felt.

As for what I’d like to achieve with my work, it’s probably still a bit too early to talk about that. I’ve had a few well-defined ideas in my mind for some time now of where I’d like to go with my projects next, but it’s still a couple of years before they’re realized probably, if ever.

#529_444-v2.gif

ProEXR File Description =Attributes= cameraAperture (float): 36 cameraFarClip (float): 1e+030 cameraFarRange (float): 1000 cameraFov (float): 10.1807 cameraNearClip (float): 0 cameraNearRange (float): 0 cameraProjection (int): 0 cameraTargetDistance (float): 1950.41 cameraTransform (m44f): [{-1.96587e-008, -0.705345, 0.708865, 1374.32}, {1, -1.38662e-008, 1.39354e-008, 6.55603}, {0, 0.708865, 0.705345, 1362.95}, {0, 0, 0, 1}] channels (chlist) compression (compression): Zip16 dataWindow (box2i): [0, 0, 1199, 1199] displayWindow (box2i): [0, 0, 1199, 1199] gamma (float): 1 lineOrder (lineOrder): Increasing Y pixelAspectRatio (float): 1 screenWindowCenter (v2f): [0, 0] screenWindowWidth (float): 1 tiles (tiledesc): [64, 64] type (string): "tiledimage" =Channels= A (float) B (float) G (float) R (float)

#510

#526v2

ProEXR File Description =Attributes= cameraAperture (float): 36 cameraFarClip (float): 1000 cameraFarRange (float): 1000 cameraFov (float): 13.5342 cameraNearClip (float): 0 cameraNearRange (float): 0 cameraProjection (int): 0 cameraTargetDistance (float): 200 cameraTransform (m44f): [{0.0871554, -0.761532, 0.64224, 885.551}, {0.996195, 0.0666252, -0.0561885, -62.6177}, {0, 0.644693, 0.764441, 985.544}, {0, 0, 0, 1}] channels (chlist) compression (compression): Zip16 dataWindow (box2i): [0, 0, 1199, 1199] displayWindow (box2i): [0, 0, 1199, 1199] gamma (float): 1 lineOrder (lineOrder): Increasing Y pixelAspectRatio (float): 1 screenWindowCenter (v2f): [0, 0] screenWindowWidth (float): 1 tiles (tiledesc): [64, 64] type (string): "tiledimage" =Channels= A (float) B (float) G (float) R (float)
ProEXR File Description =Attributes= cameraAperture (float): 50 cameraFNumber (float): 8 cameraFarClip (float): 1e+030 cameraFarRange (float): 1000 cameraFocalLength (float): 70 cameraFov (float): 38.8911 cameraNearClip (float): 0 cameraNearRange (float): 0 cameraProjection (int): 0 cameraTargetDistance (float): 610.742 cameraTransform (m44f): [{0.535129, 0.761612, 0.365491, 583.33}, {0.84477, -0.482452, -0.231524, -236.954}, {0, 0.432651, -0.901561, 287.004}, {0, 0, 0, 1}] channels (chlist) compression (compression): Zip dataWindow (box2i): [0, 0, 1999, 999] displayWindow (box2i): [0, 0, 1999, 999] lineOrder (lineOrder): Increasing Y name (string): "" pixelAspectRatio (float): 1 screenWindowCenter (v2f): [0, 0] screenWindowWidth (float): 1 type (string): "scanlineimage" =Channels= A (float) B (float) G (float) R (float) VRayAtmosphere.B (float) VRayAtmosphere.G (float) VRayAtmosphere.R (float) VRayCaustics.B (float) VRayCaustics.G (float) VRayCaustics.R (float) VRayGlobalIllumination.B (float) VRayGlobalIllumination.G (float) VRayGlobalIllumination.R (float) VRayLighting.B (float) VRayLighting.G (float) VRayLighting.R (float) VRayMtlID (uint) VRayObjectID (uint) VRayReflection.B (float) VRayReflection.G (float) VRayReflection.R (float) VRayRefraction.B (float) VRayRefraction.G (float) VRayRefraction.R (float) VRaySSS2.B (float) VRaySSS2.G (float) VRaySSS2.R (float) VRaySampleRate.B (float) VRaySampleRate.G (float) VRaySampleRate.R (float) VRaySpecular.B (float) VRaySpecular.G (float) VRaySpecular.R (float) Z (float)ProEXR File Description =Attributes= cameraAperture (float): 50.395 cameraFNumber (float): 0.43 cameraFarClip (float): 1e+030 cameraFarRange (float): 1000 cameraFocalLength (float): 111 cameraFov (float): 25.5793 cameraNearClip (float): 0 cameraNearRange (float): 0 cameraProjection (int): 0 cameraTargetDistance (float): 339.325 cameraTransform (m44f): [{-0.990552, 0.111589, 0.0797166, 24.2343}, {0.137138, 0.80601, 0.575796, 179.383}, {1.11759e-008, 0.581288, -0.813698, 158.946}, {0, 0, 0, 1}] channels (chlist) compression (compression): Zip dataWindow (box2i): [0, 0, 699, 1199] displayWindow (box2i): [0, 0, 699, 1199] lineOrder (lineOrder): Increasing Y name (string): "" pixelAspectRatio (float): 1 screenWindowCenter (v2f): [0, 0] screenWindowWidth (float): 1 type (string): "scanlineimage" =Channels= A (float) B (float) G (float) R (float) VRayAtmosphere.B (float) VRayAtmosphere.G (float) VRayAtmosphere.R (float) VRayCaustics.B (float) VRayCaustics.G (float) VRayCaustics.R (float) VRayGlobalIllumination.B (float) VRayGlobalIllumination.G (float) VRayGlobalIllumination.R (float) VRayLighting.B (float) VRayLighting.G (float) VRayLighting.R (float) VRayMtlID (uint) VRayReflection.B (float) VRayReflection.G (float) VRayReflection.R (float) VRayRefraction.B (float) VRayRefraction.G (float) VRayRefraction.R (float) VRaySSS2.B (float) VRaySSS2.G (float) VRaySSS2.R (float) VRaySampleRate.B (float) VRaySampleRate.G (float) VRaySampleRate.R (float) Z (float)

How does the production process on these works usually look like? It’s incredibly interesting how you blend the 3D objects, procedural stuff, color, light – there’s so much here.

I don’t know whether I could explain the whole workflow here thoroughly in just a few sentences. Maybe I’ll document the process at some point and post it somewhere.

Regarding the colors and light, I think that most of the secret lies in building shaders that are not physically accurate.

#251v2

ProEXR File Description =Attributes= cameraAperture (float): 36 cameraFarClip (float): 1000 cameraFarRange (float): 1000 cameraFov (float): 30.5101 cameraNearClip (float): 0 cameraNearRange (float): 0 cameraProjection (int): 0 cameraTargetDistance (float): 0.002 cameraTransform (m44f): [{-0.991917, 0.0509824, 0.116193, -2.09922}, {0.126886, 0.39855, 0.908327, 14.0238}, {-3.72529e-009, 0.915728, -0.401798, -3.07628}, {0, 0, 0, 1}] channels (chlist) compression (compression): Zip16 dataWindow (box2i): [0, 0, 849, 1399] displayWindow (box2i): [0, 0, 849, 1399] gamma (float): 1 lineOrder (lineOrder): Increasing Y pixelAspectRatio (float): 1 screenWindowCenter (v2f): [0, 0] screenWindowWidth (float): 1 tiles (tiledesc): [64, 64] type (string): "tiledimage" =Channels= A (float) B (float) G (float) R (float)

ProEXR File Description =Attributes= cameraAperture (float): 89 cameraFNumber (float): 2.31765 cameraFarClip (float): 1e+030 cameraFarRange (float): 1000 cameraFocalLength (float): 124.161 cameraFov (float): 39.0519 cameraNearClip (float): 0 cameraNearRange (float): 0 cameraProjection (int): 0 cameraTargetDistance (float): 11.7836 cameraTransform (m44f): [{0.668277, 0.704157, -0.239935, 18.1009}, {0.743912, -0.632564, 0.21554, 8.44939}, {0, -0.322531, -0.946559, 2.18727}, {0, 0, 0, 1}] channels (chlist) compression (compression): Zip dataWindow (box2i): [0, 0, 855, 1999] displayWindow (box2i): [0, 0, 855, 1999] lineOrder (lineOrder): Increasing Y name (string): "" pixelAspectRatio (float): 1 screenWindowCenter (v2f): [0, 0] screenWindowWidth (float): 1 type (string): "scanlineimage" =Channels= A (float) B (float) G (float) R (float) VRayAtmosphere.B (float) VRayAtmosphere.G (float) VRayAtmosphere.R (float) VRayCaustics.B (float) VRayCaustics.G (float) VRayCaustics.R (float) VRayGlobalIllumination.B (float) VRayGlobalIllumination.G (float) VRayGlobalIllumination.R (float) VRayLighting.B (float) VRayLighting.G (float) VRayLighting.R (float) VRayMtlID (uint) VRayObjectID (uint) VRayReflection.B (float) VRayReflection.G (float) VRayReflection.R (float) VRayRefraction.B (float) VRayRefraction.G (float) VRayRefraction.R (float) VRaySSS2.B (float) VRaySSS2.G (float) VRaySSS2.R (float) VRaySampleRate.B (float) VRaySampleRate.G (float) VRaySampleRate.R (float) VRaySpecular.B (float) VRaySpecular.G (float) VRaySpecular.R (float) Z (float)

How do you use the procedural possibilities of Houdini in your works and especially in the animations?

I’m all about proceduralism, always was. Back when I was using Max and Maya primarily for my projects, even though both are very modal by design I would still find some absurd ways to make them work procedurally – to the point where it would crash the application. The whole process of creating a 3D render is usually very fixed and inexpressive, but I sort of grew to appreciate and like that somehow. With Houdini however, you start feeling this strange sort of flow that is more similar to that of a painter’s, but instead of some paint and a palette, you’re brushing with snippets of code. The mess inside of a node network after each project actually resembles a palette, except that it’s alive and breathing. The whole workflow always stays non-destructive – nothing is ever fixed in place – and so you’re able to change just one line of code anywhere in the network and get a completely different looking render.

#420.gif

ProEXR File Description =Attributes= cameraAperture (float): 36 cameraFNumber (float): 8 cameraFarClip (float): 1e+030 cameraFarRange (float): 1000 cameraFocalLength (float): 100 cameraFov (float): 19.6245 cameraNearClip (float): 0 cameraNearRange (float): 0 cameraProjection (int): 0 cameraTargetDistance (float): 2553.3 cameraTransform (m44f): [{0.999995, 0.00327845, 0.000184445, 145.392}, {0.00328364, -0.998416, -0.0561706, -3197.16}, {0, 0.0561709, -0.998421, 432.691}, {0, 0, 0, 1}] channels (chlist) compression (compression): Zip dataWindow (box2i): [0, 0, 1079, 1079] displayWindow (box2i): [0, 0, 1079, 1079] lineOrder (lineOrder): Increasing Y name (string): "" pixelAspectRatio (float): 1 screenWindowCenter (v2f): [0, 0] screenWindowWidth (float): 1 type (string): "scanlineimage" =Channels= A (float) B (float) G (float) R (float) VRayAtmosphere.B (float) VRayAtmosphere.G (float) VRayAtmosphere.R (float) VRayGlobalIllumination.B (float) VRayGlobalIllumination.G (float) VRayGlobalIllumination.R (float) VRayLighting.B (float) VRayLighting.G (float) VRayLighting.R (float) VRayMtlID (uint) VRayReflection.B (float) VRayReflection.G (float) VRayReflection.R (float) VRaySSS2.B (float) VRaySSS2.G (float) VRaySSS2.R (float) VRaySpecular.B (float) VRaySpecular.G (float) VRaySpecular.R (float)

ProEXR File Description =Attributes= cameraAperture (float): 36 cameraFarClip (float): 1000 cameraFarRange (float): 1000 cameraFov (float): 61.6573 cameraNearClip (float): 0 cameraNearRange (float): 0 cameraProjection (int): 0 cameraTargetDistance (float): 200 cameraTransform (m44f): [{0, 0, 1, -66.4406}, {1, 0, 0, -79.3892}, {0, 1, 0, 744.714}, {0, 0, 0, 1}] channels (chlist) compression (compression): Zip16 dataWindow (box2i): [0, 0, 1199, 1199] displayWindow (box2i): [0, 0, 1199, 1199] gamma (float): 1 lineOrder (lineOrder): Increasing Y pixelAspectRatio (float): 1 screenWindowCenter (v2f): [0, 0] screenWindowWidth (float): 1 tiles (tiledesc): [64, 64] type (string): "tiledimage" =Channels= A (float) B (float) G (float) R (float)

#515

ProEXR File Description =Attributes= cameraAperture (float): 36 cameraFarClip (float): 1e+030 cameraFarRange (float): 1000 cameraFov (float): 21.0475 cameraNearClip (float): 0 cameraNearRange (float): 0 cameraProjection (int): 0 cameraTargetDistance (float): 458.809 cameraTransform (m44f): [{0.828913, -0.290147, 0.478245, 232.661}, {0.559378, 0.429954, -0.708686, -183.422}, {0, 0.854959, 0.518696, 270.928}, {0, 0, 0, 1}] channels (chlist) compression (compression): Zip16 dataWindow (box2i): [0, 0, 1399, 1399] displayWindow (box2i): [0, 0, 1399, 1399] gamma (float): 1 lineOrder (lineOrder): Increasing Y pixelAspectRatio (float): 1 screenWindowCenter (v2f): [0, 0] screenWindowWidth (float): 1 tiles (tiledesc): [64, 64] type (string): "tiledimage" =Channels= A (float) B (float) G (float) R (float)

What are the challenges of working with Houdini?

Houdini has got a pretty steep learning curve – I really don’t know if an application could be more transparent and non “black-box”. It’s a bit overwhelming at first, especially coming from another package that has got a bunch of pre-made tools for you, where most of the math happens behind the scenes and is hidden from the user. In Houdini you’ve got access to some very low-level operations, and you’ll be building your own set of instruments from scratch most of the time. The advantage of that is that you’re able to create a very specialized tool that functions exactly as you want it to – the downside for many artists is that they’ll have to learn to use the left side of their brains more.

#517

ProEXR File Description =Attributes= cameraAperture (float): 36 cameraFNumber (float): 8 cameraFarClip (float): 1e+030 cameraFarRange (float): 1000 cameraFocalLength (float): 75 cameraFov (float): 18.7481 cameraNearClip (float): 0 cameraNearRange (float): 0 cameraProjection (int): 0 cameraTargetDistance (float): 24.0268 cameraTransform (m44f): [{0.978987, -0.191624, -0.0697455, -4.46264}, {-0.203922, -0.919947, -0.334833, -22.6755}, {0, 0.34202, -0.939693, 7.52272}, {0, 0, 0, 1}] channels (chlist) compression (compression): Zip dataWindow (box2i): [0, 0, 749, 1099] displayWindow (box2i): [0, 0, 749, 1099] lineOrder (lineOrder): Increasing Y name (string): "" pixelAspectRatio (float): 1 screenWindowCenter (v2f): [0, 0] screenWindowWidth (float): 1 type (string): "scanlineimage" =Channels= A (float) B (float) G (float) R (float) VRayAtmosphere.B (float) VRayAtmosphere.G (float) VRayAtmosphere.R (float) VRayCaustics.B (float) VRayCaustics.G (float) VRayCaustics.R (float) VRayGlobalIllumination.B (float) VRayGlobalIllumination.G (float) VRayGlobalIllumination.R (float) VRayLighting.B (float) VRayLighting.G (float) VRayLighting.R (float) VRayMtlID (uint) VRayObjectID (uint) VRayReflection.B (float) VRayReflection.G (float) VRayReflection.R (float) VRayRefraction.B (float) VRayRefraction.G (float) VRayRefraction.R (float) VRaySSS2.B (float) VRaySSS2.G (float) VRaySSS2.R (float) VRaySampleRate.B (float) VRaySampleRate.G (float) VRaySampleRate.R (float) VRaySpecular.B (float) VRaySpecular.G (float) VRaySpecular.R (float) Z (float)

#528 2

#317

As for myself, there’s definitely room for improvement in VEX (Houdini scripting language) – and building custom solvers and understanding L-systems are on my radar next.

Edv Ku, 3d artist

Make sure to check artist’s website and Instagram pages!

Interview conducted by Kirill Tokarev

Leave a Reply

Be the First to Comment!

avatar
wpDiscuz