Creating A Fluffy Cloud Bed in 3D Studio MAX with Chi Luan Nguyen

Chi Luan Nguyen is a VFX artist based in Ho Chi Minh city, Vietnam. This fluffy cloud bed has been done during his free time, using 3...

Chi Luan Nguyen is a VFX artist based in Ho Chi Minh city, Vietnam.

This fluffy cloud bed has been done during his free time, using 3Ds Max, FumeFX, and V-Ray was used for rendering.

 Here’s something about it.

I. References and Challenges

He started with searching around on Google and Pinterest for references. This is one of the most interesting images He’ve seen so far.
Image ref for overall look
Image reference for overall look

The most difficult in such a scene like this is amount of cloud clusters and their individual behaviors. Every cloud had been created in different climate conditions. Some cloud is denser, but another is softer. Some is in bold shape but another seems being dispersed under wind. They’re all vary in size, shape, density,...

II. Cloud shapes creation

Creating every cloud shape may takes some time, but a few of them then scatter randomly is way faster, and more productive.
Cloud base shapes are created very quickly with simple modifiers in 3Ds Max. Since there’s no perfection in nature, our shapes can be created randomly without taking care too much about its form. We’ll generate smoke on them anyway.

Basic shapes are created randomly

Basic shapes are created randomly

III. FumeFX Simulation

As reference image above, each cloud has different form and look. A large amount of various clouds form into an overall scene. Of course we're trying to achieve that look but Chi Luan Nguyen won’t simulate every cluster. He sim them at once!
Particles spawned onto cloud shape for particle based smoke sim
Particles spawned onto cloud shape for particle based smoke sim
A simple particles layer is spawned on cloud shape for used in particle-based smoke simulation. I had created 3 cloud shapes so there’re 3 different FumeFX Domains. Here’s one of them. They’re setup with highly random value in Radius, Temperature, Turbulence, Gravity, Vorticity Strength,...

FumeFX simulation for each cloud shape
FumeFX simulation for each cloud shape

Here’s the cloud shape in viewport:
Cloud Shape In Viewport

Chi Luan Nguyen have defined Particle Age in PFlow with largely randomness, my cloud sim has higher density at the beginning and much softer in the second half of sequence. And because he just need one frame for each cloud, so that means, for each FumeFX Domain which is simulated from frame 0 to 100, He have up to 100 clouds slightly different from each other.

FumeFX Preview
With just one FumeFX Domain, we can have a lot of clouds by loading different frames
IV. Clouds population

The next step is scatter clouds to camera view. There will be a huge amount of clouds, so it’s impossible to place them by hand. Then, Maxscript and PFlow are great day savers.
With a simple PFlow setup, He scattered 3 base cloud geometries have been created from the start to scene, varying their Scale, Rotation, Position. By this way, He have his scene roughly layout and define transform matrix for my real clouds later on.

Cloud Scattering Using Pflow
Base cloud shapes are scattered to several planes for layout the scene
V. Using MaxScript for placing render clouds

From PFlow, He already have defined Position, Rotation and Scale data for each cloud based on corresponding data get from each particle. There are total 1,500 particles for placing 1,500 clouds.
Before placing real clouds, He transfer those particles data to Point Helpers. The reason for that is Helpers are easy to control, such as moving, rotating, or seeing in poor viewport of 3Ds Max.
Here is step-by-step instruction for the first Particle Source. For those whose aren’t familiar with scripting, this part could be a little bit struggle, but just following slowly, it’s should fine.

1. Create a Point Helper.
2. Name it base on PF source. This is important because 3Ds Max will read it. His is “Cloud_001_Marker_001”. You can use any name but it must be easy to recognize.
3. Clone it to the same number of particle number. In this case, mine first PF source has 500 particles, so He cloned more 499 helpers. At this point, he have Cloud_001_Marker_001, Cloud_001_Marker_002, Cloud_001_Marker_003,... so on.
4. Select Particle Source, check on Final Script Update option, then press Edit button.
5. An Event Handler Window will appear. Just delete everything and paste this script to it:
pf_node_current = particleFlow.scriptRunner()if (pf_node_current != undefined) then ( count = pf_node_current.NumParticles() Cloud001_Marker_Arr = $Cloud_001_Marker* as array Cloud001_Marker_Arr.pos = [0,0,-1000000] minCount = amin #(count,Cloud001_Marker_Arr.count)  for i in 1 to count do (  pf_node_current.particleIndex = i  Cloud001_Marker_Arr[i].transform = pf_node_current.particleTM ))
6. Close the window and go to one frame so that PFlow can update the script.
Here’s the result:

Each Point Helpers has exact transform data from corresponding particle ID
Chi Luan Nguyen will explain the script a bit more before going to next two PF Sources:

count = pf_node_current.NumParticles() Collect all particle exist in system
Cloud001_Marker_Arr = $Cloud_001_Marker* as array Collect all Helpers we have created above to a group called Cloud001_Marker_Arr. This line will collect all objects that have their name begin with “Cloud_001_Marker”. That’s why I say naming is very important.
for i in 1 to count do (  pf_node_current.particleIndex = i  Cloud001_Marker_Arr[i].transform = pf_node_current.particleTM )
Those line will assign transform data from particle ID 1 to Cloud_001_Marker_001, particle ID 2 to Cloud_001_Marker_002,... so on. After the script being called, all helpers have exactly Position, Rotation and Scale value from particles. 

Repeat these steps for the other two PF Sources, He have total 1.500 helpers for 1,500 particles. That’s really big amount.

VI. Loading .VBD cache using V-RayVolumeGrid

Cloud rendering could lead to several issues, for example, shadow casting and illumination. With V-RayVolumeGrid, we can load and use .VDB sequence cached from FumeFX then render in V-Ray for better result and control.
Render test V-RayVolumeGrid
Render test V-RayVolumeGrid
Just create 3 V-RayVolumeGrid objects and load .VDB cache from 3 FumeFX Domains. Loading mode is Cache Index and choose any frame. This is just for rendering test. Assign Smoke Color and adjust Smoke Opacity at your own taste.

Remember check option “Only if selected” in Preview panel. This is very important to keep your scene from crash later on.
Let summarize, We have 3 FumeFX Domains which are simulated 100 frames each. And because we just need to load one frame for each V-RayVolumeGrid cloud. Therefore, we have 300 individual clouds in total. And, we have 1,500 helpers to define where to place 1,500 clouds. Next part is distributing clouds to helpers

VII. Clouds distribution and randomizing.

Again, MaxScript will be used because there’re 1,500 clouds at all. 
First of all, he have 3 groups of 500 helpers defined by 3 PF Sources. His method is using first 500 helpers groups to distribute 500 V-RayVolumeGrid objects that load data from FumeFX Domain 01. The next 500 is for FumeFX Domain 02 and the last 500 is for FumeFX Domain 03. Very simple!
From the last step, we have 3 V-RayVolumeGrid objects represent 3 FumeFX Domains. Let’s start with the first one.
Select the first V-RayVolumeGrid, rename it to relative helpers group. His is “VrGrid_Cloud001_001” but you can name it whatever you want. Just make sure MaxScript can identify and sort it by name in calling.
Clone up to 499 objects because there are 500 helpers.
Urgen: DO NOT SELECT ALL OF THEM!!! Because “only if selected” preview mode is turned on, our scene is still fine despite there are 500 volumetric objects. When not selected, they’re just a bounding box. Very light!
You don’t need to select them and align to helpers. MaxScript will handle that very quickly and even more.
Open Script Editor (Scripting Tab > New Script), paste this in blank page:
VrG01 = $VrGrid_Cloud001* as arrayCloud001_Marker_Arr = $Cloud_001_Marker* as array
for i = 1 to VrG01.count do( VrG01[i].transform = Cloud001_Marker_Arr[i].transform VrG01[i].t2f = random 15 100 VrG01[i].smoketransp = random 0.001 0.02)
Press Ctrl+E to evaluate the script. When the script is execute, MaxScript collects all V-VrayVolumeGrid objects that have name begin with “VrGrid_Cloud001* to a group called VrG01, and collects all helpers have name begin with “Cloud001_Marker” to a group call Cloud001_Marker_Arr.
Then, each member of VrG01 group will have exactly transformation data from corresponding helper in Cloud001_Marker_Arr group. You can see the method is using particle system to define transform matrix (position, rotation, scale) of helpers, then pass these data to a set of V-RayVolumeGrid.
Next two lines are telling each member in VrG01 group load a random .VDB cache file in range from frame 15 to 100, and have a random Smoke Opacity from 0.001 to 0.02.
Repeat this again for the rest 1,000 helpers and don’t forget how important naming roles.
This is raw render of 1,500 clouds:
Render of 1,500 V-RayVolumeGrid objects
Render of 1,500 V-RayVolumeGrid objects
Final Render
... and Final
And, the last things are turn the lights on, hit render and bring to the post.

[ #FumeFX ]

>> See Also:

[post_ads] More tutorial [post_ads_2]


Feature Video


2D,8,32 Bits,1,3d,35,3D Coat,3,3D Studio Max,682,3D Tracking,4,3Delight,1,3DO,1,3ds,2,3ds Max,251,3ds max rigging,2,Adam Kormendi,1,Adobe Bridge,1,Adobe Illustrator,7,Adobe Premiere,5,After Effect,177,After Effects,63,aiStandard,1,Alembic,3,Alex Cheparev,1,Amazon Lumberyard,1,Amid Rajabi,4,Andrew Price,4,Anima,6,Animation,409,ArchiCAD,1,Architecture,137,Archviz Animation,1,Arion,1,Arnold,70,Arnold for C4D,12,Arnold for Cinema 4D,5,Arnold for Maya,41,ARQUI9,4,Art,5,ART Renderer,1,Arvid Schneider,1,Audio,2,Audio Visuals,1,AutoCAD,2,Autodesk,7,Autodesk 123D,1,Autodesk Flame,5,Autodesk Maya,234,Autodesk Mudbox,22,Autodesk Scaleform,1,Autodesk Smoke,9,Autodesk Smoke basic,2,Autodesk Softimage,16,Autodesk University,2,Automotive,40,Avid Media Composer,1,AvizStudio Tools - ATiles,1,Ben Douglas,7,Ben Mauro,2,Bezier Deformer,1,bhGhost,1,Bifrost,10,Bitmap2Material,2,Blackmagic,3,Blender,128,Blender Cycles,5,Blender Hair,1,Blizzard Entertainment,1,Bodypaint,1,Bone Dynamics,1,Boris Continuum Complete,1,Boris FX,1,Bottleship VFX,3,Box3,1,Breakdown,4,BW Design,4,C4DtoA,1,Camera Mapping,6,camera projection,5,CAMERA TRACKER,1,CARA VR,2,Cartoon,3,CAT,1,CG event,1,Character,157,Christoph Schindelar,2,Christophe Desse,3,Cinema 4D,437,Cinema 4D MoGraph,17,Cineware,2,Clarisse,3,cloth,20,Cloud,2,Coat3D,6,Cobwebs Script,1,Collapse,1,Color Finesse,1,Color Grading,8,COLORWAY,2,Compositing,170,Concept,13,Contour Generator,1,Cornucopia3D,1,CORONA,33,Corona for 3ds Max,15,Corona for Cinema 4D,4,Corona Volume Grid,1,Crazybump,1,Creature Design,17,Crowd,23,Cryptomatte,1,Cubebrush,1,CurseStudio,2,Cycles4D,3,CYCLO Studio,1,Daniel Cahill,1,Daryl Obert,1,Data Operators,1,DDO,2,DDO Painter,5,Deep Compositing,1,DEM Data,1,DEM Earth,1,Denoiser,1,Design,20,destruction,19,Digital Anarchy,1,DMM,1,Download,14,Dynamesh,3,Dynamics,1,Eat3D,6,Editing,1,EEVEE,2,Element 3d,13,emPolygonizer4,1,emReader,1,Entagma,1,Environment,143,Escape Studios,1,Evermotion,18,explosion,17,Exterior,2,Farid Ghanbari,2,fayIN,4,FBX,2,Feature,598,FEM,2,fibermesh,2,finalRender,3,Fire,6,Flame Painter,1,Flex Modifier,1,Flicker Free,1,FlippedNormals,4,Fluid,26,Fluids,1,Food,1,Forest Pack Pro,22,FoxRenderfarm,1,FragNoiser,1,FreeForm PRO,2,FreeFrom Pro,1,Freezing effect,1,Frischluft Lenscare,1,Fryrender,2,Fstorm for 3ds Max,1,FStorm Render,3,FumeFX,33,Fusion,18,FX,3,FxChannelHouse,1,Game,57,Gary M Davis,1,Gary M. Davis,1,Geekatplay,1,Genome,1,Geo Maya Hair,2,Ghost Town Media,1,Gleb Alexandrov,2,Glu3D,1,Glyn Dewis,1,GMH2,2,Golaem Crowd,4,Google Sketchup,3,GoZ,1,GPU Render,4,Greyscalegorilla,6,Groundwiz,1,GrowFX,8,Growth Effect,1,Hair Farm,1,Hair Fur,70,Hammer Chen,3,Hard Surface,7,HDR Light Studio,3,HDRI,19,Helmet,1,HIERO,1,HIEROPLAYER,1,HitFilm,1,HOT4d,1,Houdini,245,Houdini beginner,10,Houdini Engine,4,Houdini Engine for UE4,3,Houdini Vex,1,Hristo Velev,1,Ian Spriggs,1,iClone,1,IES,2,illustrations,4,Imagineer Systems,1,InDesign,1,Interior,40,Interview,1,Iray,8,Iray for 3ds Max,1,Iray for Cinema 4D,1,Iray for Maya,2,Iray for Rhino,1,Isotropix,1,Itoo Software,5,Ivy Generator,1,Jamie Cardoso,1,Joker Martini,1,Keying,2,Keyshot,50,KeyShot for ZBrush,2,Knald,2,Krakatoa,31,Krakatoa for Cinema 4D,6,Krakatoa MX,4,Lagoa,1,Learn Squared,1,Lee Griggs,1,Leuchtkraft,1,Lighting,98,Lightroom,5,Lightwave,6,Linear Light Workflow,1,Liquid,35,LOD,1,Luis Miguel Mora,1,Luis Miguelma,1,Lumberyard,1,Lumion,3,Maciej Kuciara,1,MadCar,2,Magic Bullet Looks,3,Making of,178,Management,1,Mantra,1,Mantra PBR,5,Marc Brunet,2,Marcos Sampaio,1,Mari,21,Marmoset Toolbag,11,Marvelous Designer,33,MASH,3,MassFX,3,Massfx Toolkit,3,Massive,1,Match Photo,3,Matchmoving,12,Mateiral,2,Material,15,Material Manager Pro,1,Materials,106,Matte Painting,9,Max Fluid,1,MAXDEPTH,1,Maxon,3,Maxscript,8,Maxwell,4,Maya,164,Maya LT,4,Maya Modeling,5,Maya Rendering,9,MCG,1,Megascans,19,Mental ray,23,MeshFusion,1,MeshRoom,1,Miarmy Crowd,1,Mike Hermes,1,MILA,1,MILA material,1,Mischief,1,Mixamo3D,10,Mobox,1,Mocha,36,Mocha Import+,2,mochaImport+,1,Modeling,423,Modo,45,MODO 801,7,motion,8,Motion Capture,1,Motion Graphics,236,Motionbuilder,3,Move Title,2,mParticles,4,MultiScatter,6,Muscle,2,Naiad,15,NanoMesh,1,NanoTile Textures,1,NATRON,1,NCloth,7,NDO,1,NDO Painter,1,nDynamics,1,Newton 2,1,nHair,2,Niels PRAYER,1,Nils Piirma,1,Nodes 2,1,Normal Map,1,Novedge,2,NOX Renderer,1,nParticles,5,Nuke,92,nvidia,2,Ocean FX,2,Octane,44,Octane for 3dsMax,3,Octane for Blender,1,Octane for Cinema 4D,22,Octane for Houdini,4,Octane for Maya,1,Octane Render,10,Omnitiles,2,Onyx Tree,2,Optical Flares,1,Ornatrix,25,Ornatrix for 3dsmax,6,Ornatrix for Maya,6,OSL,1,Paint Effects,1,Painter,8,Painting,24,Paintstorm,1,Particl,1,Particle,118,Particle Flow,4,Particle Flow Box 3,1,Particle Skull,4,Paul H. Paulino,1,Paul Neale,1,PBR,1,PFlow,10,Phoenix,5,Phoenix FD,26,Phoenix FD for 3ds Max,19,Phoenix FD for Autodesk Maya,1,Photogrametry,3,Photography,15,Photorealistic,67,Photoshop,266,Pixar,1,Pixel Lab,2,Plan,1,Plant,18,Plexus,5,Plugins,19,Polybrush,1,polyRandomizer,1,Populate Tool,4,Post Production,38,Procedural,9,Procedural Modeling,7,Product,7,Ptex,2,Pulldownit,8,Pulldownit for 3ds Max,3,Python,7,Qualoth,1,QuickVFX,3,Quixel,13,Quixel Mixer,2,Quốc Duy Ngô,1,rad,1,Radius Effector,1,RailClone,13,Rainer Duda,1,RandomControl,1,Rayfire,27,re,1,RealFlow,49,RealFlow for C4D,4,RealityCapture,1,Realtime,41,RealtimeUK,1,RebusFarm,1,Red giant,6,Redshift,63,Render,64,Render Engine,2,Rendering,572,RenderMan,9,Retouching,13,Rhino,5,Rigging,70,Robot,3,Rohan Dalvi,5,RSMB,1,Sam Welker,1,Sardi Pax,1,Scan,1,Scanline,1,Scene,4,Sci-fi,10,Script,17,Scripting,9,Sculpt,66,Sea Surface,1,Shader,109,Shaders,1,Shahin Toosi,1,Shape Morph,1,SIGGRAPH 2017,1,Simcloth,2,Simulation,232,SiNi Software,1,SkecthUP,5,Sketch,2,SketchBook Pro,1,SketchUP,8,Skin,4,Skin shader,6,Slow Motion,1,Smelt,1,Smoke,18,Snow,6,SnowGun Painter,1,Softbody,6,Softimage,17,Sound design,2,Sound Effectors,1,Sound Tracking,1,SpeedTree,2,SplineLand,1,Spotlight,1,SSS,2,Star Wars,1,Stardust,2,Stereoscopic,1,Stingray,4,Stoke MX,4,Stormtrooper,1,Studio Light Rig,1,Substance,3,Substance Designer,33,Substance Painter,32,Substance Painter for UE,2,Synth eyes,1,SynthEyes,3,Tamas Medve,1,Tape Helper,1,Terragen,2,Terrain,11,Terry White,1,texture,51,Texturing,221,The Foundry,2,Think Particle Cloud Generator,1,ThinkBox Frost,12,ThinkBox XMesh,1,Thinking Particles,12,Thinking Partilce,13,thinkingParticles,19,Thomas Brown,1,Tim van Helsdingen,1,Timelapse,16,Tomek Michalski,1,Toolbox#2,1,TP Toolkit Pro,1,Tracking,42,Tranform,4,Trapcode,4,Trapcode Echospace,1,Trapcode form,4,Trapcode Mir,2,Trapcode particular,9,Trapcode Sound Keys,1,Trapcode Tao,3,Turbulence FD,6,Tutorial,532,Tutorials,339,Tyler Jordan,2,Unity 3D,13,Unreal Engine,46,Unreal Engine 4,32,Unreal Engine Blueprint,3,Unreal for Archviz,7,Unwrap,8,Unwrella,1,V-Ray for Maya,5,V-Ray for Softimage,1,V-Ray NEXT,1,VDB,1,Vehicle,2,VFX,462,Video Copilot,11,Video Editing,8,Videocopilot,5,Volume Break,1,VolumeBraker,1,VR,12,VR post-production,2,Vray,341,Vray for 3dsMax,46,Vray for C4D,5,Vray for Maya,14,Vray for NUKE,8,Vray Hair,2,VRay Rhino,5,Vray RT,4,VRayInstancer,1,VrayPattern,3,VRscans,2,Vue,9,Water Surface,4,Weight Containers,1,Wind,1,World Machine,3,X Particles,1,X-particles,19,Xgen,10,xNormal,1,Xpresso,6,XrayUnwrap,1,Yeti,3,Yones Bana,2,Zbrush,153,ZBrush 4R7,3,Ziva VFX,3,ZModeler,1,Zookeeper,1,
CG TUTORIAL : Creating A Fluffy Cloud Bed in 3D Studio MAX with Chi Luan Nguyen
Creating A Fluffy Cloud Bed in 3D Studio MAX with Chi Luan Nguyen
Loaded All Posts Not found any posts VIEW ALL Readmore Reply Cancel reply Delete By Home PAGES POSTS View All RECOMMENDED FOR YOU LABEL ARCHIVE SEARCH ALL POSTS Not found any post match with your request Back Home Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sun Mon Tue Wed Thu Fri Sat January February March April May June July August September October November December Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec just now 1 minute ago $$1$$ minutes ago 1 hour ago $$1$$ hours ago Yesterday $$1$$ days ago $$1$$ weeks ago more than 5 weeks ago Followers Follow THIS PREMIUM CONTENT IS LOCKED STEP 1: Share. STEP 2: Click the link you shared to unlock Copy All Code Select All Code All codes were copied to your clipboard Can not copy the codes / texts, please press [CTRL]+[C] (or CMD+C with Mac) to copy