Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Configure and optimize rendering in 3ds Max — V-Ray and Corona render settings, render elements, light mix, batch rendering, network rendering, denoising, and post-production workflows. Use when tasks involve setting up production renders, optimizing render times, batch rendering multiple views, or configuring render farms for archviz and product visualization.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | 57% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 113% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 214% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 43% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 95% | 0% |
Configure production renders with V-Ray and Corona. Optimize quality vs. render time for architectural visualization, product shots, and animation.
maxscript-- V-Ray GI for interior archviz (production quality) local vr = renderers.current -- Assumes V-Ray is active renderer -- Primary: Brute Force (most accurate for interiors) vr.gi_on = true vr.gi_primary_type = 0 -- 0=Brute Force, 2=Irradiance Map, 3=Light Cache vr.gi_primary_subdivs = 8 -- Secondary: Light Cache (fast, good for secondary bounces) vr.gi_secondary_type = 3 -- Light Cache vr.lightcache_subdivs = 1500 -- Higher = cleaner but slower vr.lightcache_storeDirectLight = true vr.lightcache_showCalcPhase = false -- Bounce depth vr.options_maxDepth = 8 -- Interior: 6-12 bounces -- Exterior: 4-6 bounces -- Product: 4-8 bounces
maxscript-- Progressive sampler (recommended for production) vr.imageSampler_type = 3 -- Progressive vr.progressiveMaxTime = 0 -- No time limit (noise threshold stops it) vr.progressiveNoiseThreshold = 0.005 -- 0.005 = production, 0.01 = draft -- Bucket sampler (for render farms — predictable time) vr.imageSampler_type = 1 -- Adaptive vr.twoLevel_baseSubdivs = 2 vr.twoLevel_fineSubdivs = 4 vr.imageSampler_maxSubdivs = 24 -- Higher for DOF/motion blur
The denoiser reduces noise in post, cutting render times by 30-50%:
maxscript-- Add V-Ray Denoiser render element fn addDenoiser strength:1.0 = ( local denoiser = VRayDenoiser() denoiser.enabled = true denoiser.mode = 1 -- 0=Only generate data, 1=Post-render denoise denoiser.preset = 2 -- 0=Mild, 1=Default, 2=Strong denoiser.strength = strength denoiser.radius = 10 -- Pixel radius for denoising denoiser ) addDenoiser strength:0.8 -- 0.8 avoids over-smoothing on fine details
Adjust individual light intensities and colors in post — no re-rendering needed:
maxscript-- Enable Light Mix render element fn addLightMix = ( local lm = VRayLightMix() lm.enabled = true lm ) -- After rendering, open V-Ray Frame Buffer → Light Mix tab -- Adjust each light's intensity and color interactively -- Save the configuration for batch application to other views
maxscript-- Add essential render elements for compositing fn addRenderElements = ( -- Reflection pass local refl = VRayReflection() refl.enabled = true -- Refraction pass local refr = VRayRefraction() refr.enabled = true -- Raw lighting (before materials) local rawLight = VRayRawTotalLighting() rawLight.enabled = true -- Object/Material ID (for masking in compositing) local objId = VRayRenderID() objId.enabled = true -- Z-Depth (for DOF in post) local zDepth = VRayZDepth() zDepth.enabled = true zDepth.zdepth_min = 0.0 zDepth.zdepth_max = 50.0 -- Adjust to scene scale (meters) -- Cryptomatte (advanced masking by object/material/asset) local crypto = VRayCryptomatte() crypto.enabled = true crypto.id_type = 0 -- 0=Node name, 1=Material name, 2=Object ID format "Added % render elements\n" 6 )
maxscript-- Assumes Corona is the active renderer local cr = renderers.current -- Quality cr.progressive_maxPasses = 0 -- Unlimited passes cr.progressive_noiseLevel = 3 -- Noise level % (3% = production) cr.progressive_timeLimit = 0 -- No time limit -- GI cr.gi_primarySolver = 0 -- UHD Cache (fast + accurate) cr.gi_uhdPrecision = 16 -- Higher = more accurate, slower cr.gi_secondarySolver = 2 -- Path Tracing cr.gi_maxBounces = 25 -- Corona handles bounces differently — 25 is standard -- Denoising cr.denoise_mode = 1 -- 0=None, 1=After render, 2=During render cr.denoise_amount = 0.65 -- 0-1, 0.65 preserves detail -- Light Mix (Corona has built-in Light Mix) cr.lightMix_enabled = true
maxscript-- Common archviz resolutions fn setResolution preset = ( case preset of ( "draft": (renderWidth = 1920; renderHeight = 1080) "hd": (renderWidth = 2560; renderHeight = 1440) "4k": (renderWidth = 3840; renderHeight = 2160) "production": (renderWidth = 4000; renderHeight = 2250) -- 16:9 at 4K+ "print-a3": (renderWidth = 4961; renderHeight = 3508) -- 300 DPI A3 "print-a2": (renderWidth = 7016; renderHeight = 4961) -- 300 DPI A2 "panorama": (renderWidth = 8000; renderHeight = 4000) -- 2:1 for VR "square-ig": (renderWidth = 3000; renderHeight = 3000) -- Instagram ) format "Resolution set to %x%\n" renderWidth renderHeight )
maxscript-- Use 3ds Max's built-in Batch Render (Rendering → Batch Render) fn setupBatchRender cameras outputDir = ( -- Clear existing batch entries batchRenderMgr.deleteAllViews() for cam in cameras do ( local idx = batchRenderMgr.createView cam batchRenderMgr.setViewCamera idx cam batchRenderMgr.setViewOutputFile idx (outputDir + "/" + cam.name + ".exr") batchRenderMgr.setViewEnabled idx true -- Each view can override resolution, frame range, etc. ) -- Start batch render batchRenderMgr.render() ) -- Collect all cameras and render local allCameras = for c in cameras where classOf c != Targetobject collect c setupBatchRender allCameras "D:/output"
bash# Render specific camera 3dsmaxcmd.exe "D:/scene.max" -camera "Camera01" -outputFile "D:/output/cam01.exr" ^ -width 4000 -height 2250 -v 5 # Render animation range 3dsmaxcmd.exe "D:/scene.max" -camera "WalkthroughCam" ^ -start 0 -end 300 -outputFile "D:/output/frame_.exr" ^ -width 1920 -height 1080 # With V-Ray standalone (faster, less memory) vray.exe -sceneFile="D:/scene.vrscene" -imgWidth=4000 -imgHeight=2250 ^ -imgFile="D:/output/render.exr" -display=0
maxscript-- V-Ray Distributed Rendering vr = renderers.current vr.system_distributedRender = true vr.system_distributedRender_port = 20207 -- Add render nodes vr.system_drhost_number = 3 vr.system_drhost_entry 1 "192.168.1.10" 20207 vr.system_drhost_entry 2 "192.168.1.11" 20207 vr.system_drhost_entry 3 "192.168.1.12" 20207
| Setting | Draft (30s) | Preview (5min) | Production (30min+) | |---|---|---|---| | Noise threshold | 0.05 | 0.02 | 0.005 | | GI subdivs | 500 | 1000 | 2000 | | Max subdivs | 8 | 16 | 24-32 | | Light bounces | 4 | 6 | 8-12 | | Resolution | 1920×1080 | 2560×1440 | 4000×2250 | | Denoiser | Strong | Medium | Light |
maxscript-- 1. Use V-Ray Proxy for heavy geometry (furniture, vegetation) fn convertToProxy obj outputPath = ( select obj local proxy = VRayMeshExport() proxy.fileName = outputPath proxy.meshType = 1 -- .vrmesh format proxy.autoCreateProxies = true proxy.exportAnimation = false proxy ) -- 2. Reduce light subdivs for fill lights (not visible in reflections) for light in lights do ( if classOf light == VRayLight and light.multiplier < 5 then ( light.subdivs = 8 -- Low subdivs for subtle fill lights ) ) -- 3. Use V-Ray displacement instead of geometry detail -- 4. Enable adaptive lights for scenes with many lights vr.options_light_adaptiveLights = 2 -- Full adaptive
maxscript-- EXR (recommended — 32-bit HDR, lossless) rendOutputFilename = "D:/output/render.exr" -- Multi-channel EXR (all render elements in one file) vr.output_splitgbuffer = false -- Single file vr.output_saveRawFile = true -- PNG (8-bit, for web/preview) rendOutputFilename = "D:/output/render.png" -- TIFF (16-bit, for print) rendOutputFilename = "D:/output/render.tif"
Other measured skills in the registry, with their headline benchmark lift.