PageSourceSearch

https://www.patternpainter.com/en/documentation

html patternpainter.com collected 2026-10-04 09:59:07 UTC 110,599 bytes, 1 lines download raw bytes

1<!DOCTYPE html><!--BH5AfFMZ4oQkgnxLFp_mj--><html lang="en" class="scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/1a4aa50920b5315c-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/7d4881bb7e1bf84d-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" as="image" href="/images/pattern-painter-logo.svg"/><link rel="stylesheet" href="/_next/static/css/05c0f76e6452b714.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/4b08ac2d7e18999c.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/35046233962d3c65.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/afed6626323151be.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/11acfcc816f4f045.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-4426231b5ac5d879.js"/>
1<script src="/_next/static/chunks/4bd1b696-c023c6e3521b1417.js" async=""></script>
1<script src="/_next/static/chunks/255-3d881dfa8c72bc56.js" async=""></script>
1<script src="/_next/static/chunks/main-app-f9b5d20365cb8be2.js" async=""></script>
1<script src="/_next/static/chunks/870fdd6f-ae1619c0027118e7.js" async=""></script>
1<script src="/_next/static/chunks/230-85464a322a95e835.js" async=""></script>
1<script src="/_next/static/chunks/273-1744ca5b82c756df.js" async=""></script>
1<script src="/_next/static/chunks/619-ba102abea3e3d0e4.js" async=""></script>
1<script src="/_next/static/chunks/239-0efcf3b33fe933aa.js" async=""></script>
1<script src="/_next/static/chunks/app/%5Blang%5D/documentation/page-4d9f2bb3177e475c.js" async=""></script>
1<script src="/_next/static/chunks/app/layout-16b031734bd5905d.js" async=""></script>
1<script src="/_next/static/chunks/app/%5Blang%5D/layout-2177a32881154cd1.js" async=""></script>
1<script src="/_next/static/chunks/app/%5Blang%5D/not-found-5c853adc5e10448f.js" async=""></script>
1<meta name="next-size-adjust" content=""/><link rel="icon" href="/favicon.ico" type="image/x-icon" sizes="48x48"/>
1<script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script>
1</head><body class="__variable_5afde0 __variable_c29908 __variable_d88d3c __variable_bd6af6 __variable_eb12ad antialiased"><div hidden=""><!--$--><!--/$--></div><div lang="en" class="locale-en flex min-h-screen flex-col text-foreground"><header class="sticky top-0 z-50 w-full border-b transition-colors duration-300 border-transparent"><div class="container-page flex items-center justify-between gap-4 py-3"><a class="flex shrink-0 items-center gap-2 text-lg font-extrabold text-accent" href="/en"><img alt="" width="28" height="28" decoding="async" data-nimg="1" class="h-7 w-7 object-contain" style="color:transparent" src="/images/pattern-painter-logo.svg"/><span>Pattern Painter</span></a><nav class="hidden items-center gap-6 md:flex"><a class="flex items-center gap-2 text-base font-medium transition-colors hover:text-primary text-foreground" href="/en"><svg data-prefix="fas" data-icon="house" class="svg-inline--fa fa-house h-4 w-4" role="img" viewBox="0 0 576 512" aria-hidden="true"><path fill="currentColor" d="M575.8 255.5c0 18-15 32.1-32 32.1l-32 0 .7 160.2c0 2.7-.2 5.4-.5 8.1l0 16.2c0 22.1-17.9 40-40 40l-16 0c-1.1 0-2.2 0-3.3-.1c-1.4 .1-2.8 .1-4.2 .1L416 512l-24 0c-22.1 0-40-17.9-40-40l0-24 0-64c0-17.7-14.3-32-32-32l-64 0c-17.7 0-32 14.3-32 32l0 64 0 24c0 22.1-17.9 40-40 40l-24 0-31.9 0c-1.5 0-3-.1-4.5-.2c-1.2 .1-2.4 .2-3.6 .2l-16 0c-22.1 0-40-17.9-40-40l0-112c0-.9 0-1.9 .1-2.8l0-69.7-32 0c-18 0-32-14-32-32.1c0-9 3-17 10-24L266.4 8c7-7 15-8 22-8s15 2 21 7L564.8 231.5c8 7 12 15 11 24z"></path></svg>Home</a><a aria-current="page" class="flex items-center gap-2 text-base font-medium transition-colors hover:text-primary text-primary underline decoration-primary underline-offset-8" href="/en/documentation"><svg data-prefix="fas" data-icon="book" class="svg-inline--fa fa-book h-4 w-4" role="img" viewBox="0 0 448 512" aria-hidden="true"><path fill="currentColor" d="M96 0C43 0 0 43 0 96L0 416c0 53 43 96 96 96l288 0 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l0-64c17.7 0 32-14.3 32-32l0-320c0-17.7-14.3-32-32-32L384 0 96 0zm0 384l256 0 0 64L96 448c-17.7 0-32-14.3-32-32s14.3-32 32-32zm32-240c0-8.8 7.2-16 16-16l192 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-192 0c-8.8 0-16-7.2-16-16zm16 48l192 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-192 0c-8.8 0-16-7.2-16-16s7.2-16 16-16z"></path></svg>Documentation</a><a class="flex items-center gap-2 text-base font-medium transition-colors hover:text-primary text-foreground" href="/en/contact"><svg data-prefix="fas" data-icon="envelope-open-text" class="svg-inline--fa fa-envelope-open-text h-4 w-4" role="img" viewBox="0 0 512 512" aria-hidden="true"><path fill="currentColor" d="M215.4 96L144 96l-36.2 0L96 96l0 8.8L96 144l0 40.4 0 89L.2 202.5c1.6-18.1 10.9-34.9 25.7-45.8L48 140.3 48 96c0-26.5 21.5-48 48-48l76.
16 0 49.9-36.9C232.2 3.9 243.9 0 256 0s23.8 3.9 33.5 11L339.4 48 416 48c26.5 0 48 21.5 48 48l0 44.3 22.1 16.4c14.8 10.9 24.1 27.7 25.7 45.8L416 273.4l0-89 0-40.4 0-39.2 0-8.8-11.8 0L368 96l-71.4 0-81.3 0zM0 448L0 242.1 217.6 403.3c11.1 8.2 24.6 12.7 38.4 12.7s27.3-4.4 38.4-12.7L512 242.1 512 448s0 0 0 0c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64c0 0 0 0 0 0zM176 160l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-160 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-160 0c-8.8 0-16-7.2-16-16s7.2-16 16-16z"></path></svg>Contact</a><div class="relative inline-block text-left"><button class="flex items-center gap-2 rounded-md border border-border-tint px-3 py-1.5 text-sm font-medium text-foreground transition-colors hover:border-primary hover:text-primary" aria-haspopup="listbox" aria-expanded="false" aria-label="Language: English"><svg data-prefix="fas" data-icon="globe" class="svg-inline--fa fa-globe h-3.5 w-3.5" role="img" viewBox="0 0 512 512" aria-hidden="true"><path fill="currentColor" d="M352 256c0 22.2-1.2 43.6-3.3 64l-185.3 0c-2.2-20.4-3.3-41.8-3.3-64s1.2-43.6 3.3-64l185.3 0c2.2 20.4 3.3 41.8 3.3 64zm28.8-64l123.1 0c5.3 20.5 8.1 41.9 8.1 64s-2.8 43.5-8.1 64l-123.1 0c2.1-20.6 3.2-42 3.2-64s-1.1-43.4-3.2-64zm112.6-32l-116.7 0c-10-63.9-29.8-117.4-55.3-151.6c78.3 20.7 142 77.5 171.9 151.6zm-149.1 0l-176.6 0c6.1-36.4 15.5-68.6 27-94.7c10.5-23.6 22.2-40.7 33.5-51.5C239.4 3.2 248.7 0 256 0s16.6 3.2 27.8 13.8c11.3 10.8 23 27.9 33.5 51.5c11.6 26 20.9 58.2 27 94.7zm-209 0L18.6 160C48.6 85.9 112.2 29.1 190.6 8.4C165.1 42.6 145.3 96.1 135.3 160zM8.1 192l123.1 0c-2.1 20.6-3.2 42-3.2 64s1.1 43.4 3.2 64L8.1 320C2.8 299.5 0 278.1 0 256s2.8-43.5 8.1-64zM194.7 446.6c-11.6-26-20.9-58.2-27-94.6l176.6 0c-6.1 36.4-15.5 68.6-27 94.6c-10.5 23.6-22.2 40.7-33.5 51.5C272.6 508.8 263.3 512 256 512s-16.6-3.2-27.8-13.8c-11.3-10.8-23-27.9-33.5-51.5zM135.3 352c10 63.9 29.8 117.4 55.3 151.6C112.2 482.9 48.6 426.1 18.6 352l116.7 0zm358.1 0c-30 74.1-93.6 130.9-171.9 151.6c25.5-34.2 45.2-87.7 55.3-151.6l116.7 0z"></path></svg><span>EN</span><svg data-prefix="fas" data-icon="chevron-down" class="svg-inline--fa fa-chevron-down h-2.5 w-2.5 transition-transform " role="img" viewBox="0 0 512 512" aria-hidden="true"><path fill="currentColor" d="M233.4 406.6c12.5 12.5 32.8 12.5 45.3 0l192-192c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L256 338.7 86.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l192 192z"></path></svg></button></div></nav><div class="flex items-center gap-2 md:hidden"><div class="relative inline-block text-left"><button class="flex items-center gap-2 rounded-md border border-border-tint px-3 py-1.5 text-sm font-medium text-foreground transition-colors hover:border-primary hover:text-primary" aria-haspopup="listbox" aria-expanded="false" aria-label="Language: English"><svg data-prefix="fas" data-icon="globe" class="svg-inline--fa fa-globe h-3.5 w-3.5" role="img" viewBox="0 0 512 512" aria-hidden="true"><path fill="currentColor" d="M352 256c0 22.2-1.2 43.6-3.3 64l-185.3 0c-2.2-20.4-3.3-41.8-3.3-64s1.2-43.6 3.3-64l185.3 0c2.2 20.4 3.3 41.8 3.3 64zm28.8-64l123.1 0c5.3 20.5 8.1 41.9 8.1 64s-2.8 43.5-8.1 64l-123.1 0c2.1-20.6 3.2-42 3.2-64s-1.1-43.4-3.2-64zm112.6-32l-116.7 0c-10-63.9-29.8-117.4-55.3-151.6c78.3 20.7 142 77.5 171.9 151.6zm-149.1 0l-176.6 0c6.1-36.4 15.5-68.6 27-94.7c10.5-23.6 22.2-40.7 33.5-51.5C239.4 3.2 248.7 0 256 0s16.6 3.2 27.8 13.8c11.3 10.8 23 27.9 33.5 51.5c11.6 26 20.9 58.2 27 94.7zm-209 0L18.6 160C48.6 85.9 112.2 29.1 190.6 8.4C165.1 42.6 145.3 96.1 135.3 160zM8.1 192l123.1 0c-2.1 20.6-3.2 42-3.2 64s1.1 43.4 3.2 64L8.1 320C2.8 299.5 0 278.1 0 256s2.8-43.5 8.1-64zM194.7 446.6c-11.6-26-20.9-58.2-27-94.6l176.6 0c-6.1 36.4-15.5 68.6-27 94.6c-10.5 23.6-22.2 40.7-33.5 51.5C272.6 508.8 263.3 512 256 512s-16.6-3.2-27.8-13.8c-11.3-10.8-23-27.9-33.5-51.5zM135.3 352c10 63.9 29.8 117.4 55.3 151.6C112.2 482.9 48.6 426.1 18.6 352l116.7 0zm358.1 0c-30 74.1-93.6 130.9-171.9 151.6c25.5-34.2 45.2-87.7 55.3-151.6l116.7 0z"></path></svg><span>EN</span><svg data-prefix="fas" data-icon="chevron-down" class="svg-inline--fa fa-chevron-down h-2.5 w-2.5 transition-transform " role="img" viewBox="0 0 512 512" aria-hidden="true">
1<path fill="currentColor" d="M233.4 406.6c12.5 12.5 32.8 12.5 45.3 0l192-192c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L256 338.7 86.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l192 192z"></path></svg></button></div><button aria-expanded="false" aria-controls="mobile-nav" aria-label="Menu" class="rounded-md border border-border-tint px-3 py-1.5 text-foreground transition-colors hover:border-primary hover:text-primary"><svg data-prefix="fas" data-icon="bars" class="svg-inline--fa fa-bars h-4 w-4" role="img" viewBox="0 0 448 512" aria-hidden="true"><path fill="currentColor" d="M0 96C0 78.3 14.3 64 32 64l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 128C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 288c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32L32 448c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0c17.7 0 32 14.3 32 32z"></path></svg></button></div></div></header><div class="flex-1"><main><div class="fixed top-0 left-0 w-full h-1 bg-transparent z-50"><div class="h-full bg-gradient-to-r from-primary via-foreground to-primary transition-all duration-150 ease-out shadow-[0_0_10px_rgba(105,220,251,0.5)]" style="width:0%"></div></div><div class="container-page py-12 md:py-16" style="opacity:1"><div class="space-y-10" style="opacity:0;transform:translateY(20px)"><div class="w-full"><p class="text-xl mb-6"><strong>Pattern Painter</strong> is a Unity Editor tool for placing Game Objects in geometric patterns across your scene. Drag a Paint Volume over meshes and terrain, or select one object and fit the volume to it. It is built for fast level-design iteration, from small props to dense prefab runs.</p><ul class="grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-4 gap-x-6 gap-y-4 text-lg"><li class="flex items-center whitespace-nowrap"><svg data-prefix="fas" data-icon="diamond" class="svg-inline--fa fa-diamond w-2 h-2 text-primary mr-2 flex-shrink-0" role="img" viewBox="0 0 512 512" aria-hidden="true"><path fill="currentColor" d="M284.3 11.7c-15.6-15.6-40.9-15.6-56.6 0l-216 216c-15.6 15.6-15.6 40.9 0 56.6l216 216c15.6 15.6 40.9 15.6 56.6 0l216-216c15.6-15.6 15.6-40.9 0-56.6l-216-216z"></path></svg><span class="truncate">Grid</span></li><li class="flex items-center whitespace-nowrap"><svg data-prefix="fas" data-icon="diamond" class="svg-inline--fa fa-diamond w-2 h-2 text-primary mr-2 flex-shrink-0" role="img" viewBox="0 0 512 512" aria-hidden="true"><path fill="currentColor" d="M284.3 11.7c-15.6-15.6-40.9-15.6-56.6 0l-216 216c-15.6 15.6-15.6 40.9 0 56.6l216 216c15.6 15.6 40.9 15.6 56.6 0l216-216c15.6-15.6 15.6-40.9 0-56.6l-216-216z"></path></svg><span class="truncate">Checkerboard</span></li><li class="flex items-center whitespace-nowrap"><svg data-prefix="fas" data-icon="diamond" class="svg-inline--fa fa-diamond w-2 h-2 text-primary mr-2 flex-shrink-0" role="img" viewBox="0 0 512 512" aria-hidden="true"><path fill="currentColor" d="M284.3 11.7c-15.6-15.6-40.9-15.6-56.6 0l-216 216c-15.6 15.6-15.6 40.9 0 56.6l216 216c15.6 15.6 40.9 15.6 56.6 0l216-216c15.6-15.6 15.6-40.9 0-56.6l-216-216z"></path></svg><span class="truncate">Line</span></li><li class="flex items-center whitespace-nowrap"><svg data-prefix="fas" data-icon="diamond" class="svg-inline--fa fa-diamond w-2 h-2 text-primary mr-2 flex-shrink-0" role="img" viewBox="0 0 512 512" aria-hidden="true"><path fill="currentColor" d="M284.3 11.7c-15.6-15.6-40.9-15.6-56.6 0l-216 216c-15.6 15.6-15.6 40.9 0 56.6l216 216c15.6 15.6 40.9 15.6 56.6 0l216-216c15.6-15.6 15.6-40.9 0-56.6l-216-216z"></path></svg><span class="truncate">Circle</span></li><li class="flex items-center whitespace-nowrap"><svg data-prefix="fas" data-icon="diamond" class="svg-inline--fa fa-diamond w-2 h-2 text-primary mr-2 flex-shrink-0" role="img" viewBox="0 0 512 512" aria-hidden="true"><path fill="currentColor" d="M284.3 11.7c-15.6-15.6-40.9-15.6-56.6 0l-216 216c-15.6 15.6-15.6 40.9 0 56.6l216 216c15.6 15.6 40.9 15.6 56.6 0l216-216c15.6-15.6 15.6-40.9 0-56.6l-216-216z"></path></svg><span class="truncate">Oval</span></li><li class="flex items-center whitespace-nowrap"><svg data-prefix="fas" data-icon="diamond" class="svg-inline--fa fa-diamond w-2 h-2 text-primary mr-2 flex-shrink-0" role="img" viewBox="0 0 512 512" aria-hidden="true">
1<path fill="currentColor" d="M284.3 11.7c-15.6-15.6-40.9-15.6-56.6 0l-216 216c-15.6 15.6-15.6 40.9 0 56.6l216 216c15.6 15.6 40.9 15.6 56.6 0l216-216c15.6-15.6 15.6-40.9 0-56.6l-216-216z"></path></svg><span class="truncate">Triangle</span></li><li class="flex items-center whitespace-nowrap"><svg data-prefix="fas" data-icon="diamond" class="svg-inline--fa fa-diamond w-2 h-2 text-primary mr-2 flex-shrink-0" role="img" viewBox="0 0 512 512" aria-hidden="true"><path fill="currentColor" d="M284.3 11.7c-15.6-15.6-40.9-15.6-56.6 0l-216 216c-15.6 15.6-15.6 40.9 0 56.6l216 216c15.6 15.6 40.9 15.6 56.6 0l216-216c15.6-15.6 15.6-40.9 0-56.6l-216-216z"></path></svg><span class="truncate">Rectangle</span></li><li class="flex items-center whitespace-nowrap"><svg data-prefix="fas" data-icon="diamond" class="svg-inline--fa fa-diamond w-2 h-2 text-primary mr-2 flex-shrink-0" role="img" viewBox="0 0 512 512" aria-hidden="true"><path fill="currentColor" d="M284.3 11.7c-15.6-15.6-40.9-15.6-56.6 0l-216 216c-15.6 15.6-15.6 40.9 0 56.6l216 216c15.6 15.6 40.9 15.6 56.6 0l216-216c15.6-15.6 15.6-40.9 0-56.6l-216-216z"></path></svg><span class="truncate">Pentagon</span></li><li class="flex items-center whitespace-nowrap"><svg data-prefix="fas" data-icon="diamond" class="svg-inline--fa fa-diamond w-2 h-2 text-primary mr-2 flex-shrink-0" role="img" viewBox="0 0 512 512" aria-hidden="true"><path fill="currentColor" d="M284.3 11.7c-15.6-15.6-40.9-15.6-56.6 0l-216 216c-15.6 15.6-15.6 40.9 0 56.6l216 216c15.6 15.6 40.9 15.6 56.6 0l216-216c15.6-15.6 15.6-40.9 0-56.6l-216-216z"></path></svg><span class="truncate">Hexagon</span></li><li class="flex items-center whitespace-nowrap"><svg data-prefix="fas" data-icon="diamond" class="svg-inline--fa fa-diamond w-2 h-2 text-primary mr-2 flex-shrink-0" role="img" viewBox="0 0 512 512" aria-hidden="true"><path fill="currentColor" d="M284.3 11.7c-15.6-15.6-40.9-15.6-56.6 0l-216 216c-15.6 15.6-15.6 40.9 0 56.6l216 216c15.6 15.6 40.9 15.6 56.6 0l216-216c15.6-15.6 15.6-40.9 0-56.6l-216-216z"></path></svg><span class="truncate">Zigzag</span></li><li class="flex items-center whitespace-nowrap"><svg data-prefix="fas" data-icon="diamond" class="svg-inline--fa fa-diamond w-2 h-2 text-primary mr-2 flex-shrink-0" role="img" viewBox="0 0 512 512" aria-hidden="true"><path fill="currentColor" d="M284.3 11.7c-15.6-15.6-40.9-15.6-56.6 0l-216 216c-15.6 15.6-15.6 40.9 0 56.6l216 216c15.6 15.6 40.9 15.6 56.6 0l216-216c15.6-15.6 15.6-40.9 0-56.6l-216-216z"></path></svg><span class="truncate">Arrow</span></li><li class="flex items-center whitespace-nowrap"><svg data-prefix="fas" data-icon="diamond" class="svg-inline--fa fa-diamond w-2 h-2 text-primary mr-2 flex-shrink-0" role="img" viewBox="0 0 512 512" aria-hidden="true"><path fill="currentColor" d="M284.3 11.7c-15.6-15.6-40.9-15.6-56.6 0l-216 216c-15.6 15.6-15.6 40.9 0 56.6l216 216c15.6 15.6 40.9 15.6 56.6 0l216-216c15.6-15.6 15.6-40.9 0-56.6l-216-216z"></path></svg><span class="truncate">Star</span></li><li class="flex items-center whitespace-nowrap"><svg data-prefix="fas" data-icon="diamond" class="svg-inline--fa fa-diamond w-2 h-2 text-primary mr-2 flex-shrink-0" role="img" viewBox="0 0 512 512" aria-hidden="true"><path fill="currentColor" d="M284.3 11.7c-15.6-15.6-40.9-15.6-56.6 0l-216 216c-15.6 15.6-15.6 40.9 0 56.6l216 216c15.6 15.6 40.9 15.6 56.6 0l216-216c15.6-15.6 15.6-40.9 0-56.6l-216-216z"></path></svg><span class="truncate">Concentric Circles</span></li><li class="flex items-center whitespace-nowrap"><svg data-prefix="fas" data-icon="diamond" class="svg-inline--fa fa-diamond w-2 h-2 text-primary mr-2 flex-shrink-0" role="img" viewBox="0 0 512 512" aria-hidden="true"><path fill="currentColor" d="M284.3 11.7c-15.6-15.6-40.9-15.6-56.6 0l-216 216c-15.6 15.6-15.6 40.9 0 56.6l216 216c15.6 15.6 40.9 15.6 56.6 0l216-216c15.6-15.6 15.6-40.9 0-56.6l-216-216z"></path></svg><span class="truncate">Radial Spokes</span></li><li class="flex items-center text-primary whitespace-nowrap"><svg data-prefix="fas" data-icon="plus" class="svg-inline--fa fa-plus w-2 h-2 text-primary mr-2 flex-shrink-0" role="img" viewBox="0 0 448 512" aria-hidden="true">
1<path fill="currentColor" d="M256 80c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 144L48 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l144 0 0 144c0 17.7 14.3 32 32 32s32-14.3 32-32l0-144 144 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-144 0 0-144z"></path></svg><span class="truncate">more to come!</span></li></ul></div><div class="flex flex-col gap-10 md:flex-row"><aside class="md:w-1/4"><div class="scroll-offset sticky top-24 self-start"><nav class="space-y-2"><h2 class="text-xl font-bold mb-4">Table of Contents</h2><ul class="list-disc list-inside space-y-2"><li><a class="hover:underline text-accent border-b" href="#getting-started">Getting Started</a><ul class="list-decimal list-inside ml-6 space-y-1"><li><a class="hover:underline " href="#surface-source">Surface Source</a></li><li><a class="hover:underline " href="#step-1">Placement Mode</a></li><li><a class="hover:underline " href="#step-2">Prefab Settings</a></li><li><a class="hover:underline " href="#step-3">Alignment Settings (Optional)</a></li></ul></li><li><a class="hover:underline " href="#developer-notes">Developer Notes</a></li><li><a class="hover:underline " href="#known-limitations">Known Limitations</a></li><li><a class="hover:underline " href="#release-history">Release History</a></li></ul></nav></div></aside><div class="w-full min-w-0 md:w-3/4"><div class="w-full"><section id="getting-started" class="space-y-8 scroll-offset" style="opacity:0;transform:translateY(20px)"><h2 class="text-2xl font-bold text-accent mb-4 border-b border-border-soft pb-3"><svg data-prefix="fas" data-icon="circle-arrow-right" class="svg-inline--fa fa-circle-arrow-right w-5 h-5" role="img" viewBox="0 0 512 512" aria-hidden="true"><path fill="currentColor" d="M0 256a256 256 0 1 0 512 0A256 256 0 1 0 0 256zM297 385c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l71-71L120 280c-13.3 0-24-10.7-24-24s10.7-24 24-24l214.1 0-71-71c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0L409 239c9.4 9.4 9.4 24.6 0 33.9L297 385z"></path></svg> <!-- -->Getting Started<!-- --> </h2><div class="doc-card"><p class="text-lg leading-relaxed">The basic workflow is:</p><ol class="list-decimal list-inside mt-4 text-lg leading-relaxed space-y-2"><li>Place a Paint Volume: drag it over your scene, or select one object and press Fit Volume to Selection.</li><li>Project a pattern of Placement Points and tweak its settings to your needs.</li><li>Instantiate a Prefab at each Placement Point.</li></ol><p class="text-lg mt-6 leading-relaxed">Optionally:</p><ul class="list-disc list-inside mt-4 text-lg leading-relaxed space-y-2"><li>Adjust the rotation of generated Game Objects.</li><li>Align objects to other surfaces, like terrains and other meshes.</li></ul></div></section><section id="surface-source" class="space-y-8 scroll-offset" style="opacity:0;transform:translateY(20px)"><div class="mb-8 scroll-offset"><h3 class="text-xl font-semibold text-primary mt-8 mb-4 border-b border-border-tint pb-2">Surface Source</h3><div class="doc-card space-y-4"><p class="leading-relaxed"><svg data-prefix="fas" data-icon="arrow-pointer" class="svg-inline--fa fa-arrow-pointer w-4 h-4" role="img" viewBox="0 0 320 512" aria-hidden="true"><path fill="currentColor" d="M0 55.2L0 426c0 12.2 9.9 22 22 22c6.3 0 12.4-2.7 16.6-7.5L121.2 346l58.1 116.3c7.9 15.8 27.1 22.2 42.9 14.3s22.2-27.1 14.3-42.9L179.8 320l118.1 0c12.2 0 22.1-9.9 22.1-22.1c0-6.3-2.7-12.3-7.4-16.5L38.6 37.9C34.3 34.1 28.9 32 23.2 32C10.4 32 0 42.4 0 55.2z"></path></svg>Open the Pattern Painter UI via <!-- --> <span class="inline-block px-3 py-1 my-2 bg-button text-accent border border-border-soft rounded-md"><strong><code>Tools &gt; Pattern Painter</code></strong></span></p><img alt="Pattern Painter tool menu" loading="lazy" width="510" height="50" decoding="async" data-nimg="1" class="object-fill w-full h-full mx-auto my-4 border border-border-soft rounded-md shadow-md" style="color:transparent" srcSet="/_next/image?url=%2Fdocumentation%2Ftool-menu.png&amp;w=640&amp;q=75 1x, /_next/image?url=%2Fdocumentation%2Ftool-menu.png&amp;w=1080&amp;q=75 2x" src="/_next/image?url=%2Fdocumentation%2Ftool-menu.png&amp;w=1080&amp;q=75"/><p class="leading-relaxed">Section 1 of the window decides which surfaces receive Placement Points. It offers two options: Paint Volume, or Off to hide every Scene view preview. Your choice is remembered from then on.</p><img alt="Section 1, Surface Source, showing the mode toggle, volume shape and dimension fields, Surface Layers, Highlight Surfaces In Volume, and the three volume buttons" loading="lazy" width="510" height="50" decoding="async" data-nimg="1" class="object-fill w-full h-full mx-auto my-4 border border-border-soft rounded-md shadow-md" style="color:transparent" srcSet="/_next/image?url=%2Fdocumentation%2Fsurface-source-section.png&amp;w=640&amp;q=75 1x, /_next/image?url=%2Fdocumentation%2Fsurface-source-section.png&amp;w=1080&amp;q=75 2x" src="/_next/image?url=%2Fdocumentation%2Fsurface-source-section.png&amp;w=1080&amp;q=75"/><div class="grid grid-cols-1 gap-4 sm:grid-cols-2"><div class="card-hover p-4 leading-relaxed"><h4 class="font-semibold text-accent mb-2"><svg data-prefix="fas" data-icon="cube" class="svg-inline--fa fa-cube w-4 h-4 mr-2" role="img" viewBox="0 0 512 512" aria-hidden="true">
1<path fill="currentColor" d="M234.5 5.7c13.9-5 29.1-5 43.1 0l192 68.6C495 83.4 512 107.5 512 134.6l0 242.9c0 27-17 51.2-42.5 60.3l-192 68.6c-13.9 5-29.1 5-43.1 0l-192-68.6C17 428.6 0 404.5 0 377.4L0 134.6c0-27 17-51.2 42.5-60.3l192-68.6zM256 66L82.3 128 256 190l173.7-62L256 66zm32 368.6l160-57.1 0-188L288 246.6l0 188z"></path></svg>Paint Volume (default)</h4><p>Drag a box or cylinder over geometry you have already built. Whatever surface lies inside it receives points, whoever owns it: several meshes at once, a terrain, or geometry you cannot re-parent. The volume is editor state: it never enters the Hierarchy, never adds a component, and never dirties a scene.</p></div><div class="card-hover p-4 leading-relaxed"><h4 class="font-semibold text-accent mb-2"><svg data-prefix="fas" data-icon="hand-pointer" class="svg-inline--fa fa-hand-pointer w-4 h-4 mr-2" role="img" viewBox="0 0 448 512" aria-hidden="true"><path fill="currentColor" d="M128 40c0-22.1 17.9-40 40-40s40 17.9 40 40l0 148.2c8.5-7.6 19.7-12.2 32-12.2c20.6 0 38.2 13 45 31.2c8.8-9.3 21.2-15.2 35-15.2c25.3 0 46 19.5 47.9 44.3c8.5-7.7 19.8-12.3 32.1-12.3c26.5 0 48 21.5 48 48l0 48 0 16 0 48c0 70.7-57.3 128-128 128l-16 0-64 0-.1 0-5.2 0c-5 0-9.9-.3-14.7-1c-55.3-5.6-106.2-34-140-79L8 336c-13.3-17.7-9.7-42.7 8-56s42.7-9.7 56 8l56 74.7L128 40zM240 304c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 96c0 8.8 7.2 16 16 16s16-7.2 16-16l0-96zm48-16c-8.8 0-16 7.2-16 16l0 96c0 8.8 7.2 16 16 16s16-7.2 16-16l0-96c0-8.8-7.2-16-16-16zm80 16c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 96c0 8.8 7.2 16 16 16s16-7.2 16-16l0-96z"></path></svg>Painting onto one object</h4><p>Select the object and press Fit Volume to Selection. The volume wraps around it, and its surfaces receive points like any other surface inside a volume. As of 4.1.0 this replaces Selected GameObject, which is no longer a Surface Source; if you last used it, the tool opens in Paint Volume.</p></div><div class="card-hover p-4 leading-relaxed"><h4 class="font-semibold text-accent mb-2"><svg data-prefix="fas" data-icon="eye-slash" class="svg-inline--fa fa-eye-slash w-4 h-4 mr-2" role="img" viewBox="0 0 640 512" aria-hidden="true"><path fill="currentColor" d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c8.4-19.3 10.6-41.4 4.8-63.3c-11.1-41.5-47.8-69.4-88.6-71.1c-5.8-.2-9.2 6.1-7.4 11.7c2.1 6.4 3.3 13.2 3.3 20.3c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zM373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5L373 389.9z"></path></svg>Off</h4><p>Use Off when you do not need a preview. It hides the Paint Volume wireframe, shell, surface highlight, and grips, plus prefab ghosts and placement-point spheres. It does not clear the volume, pattern, or prefab settings, so choose Paint Volume again when you are ready to continue.</p></div></div><img alt="A box Paint Volume dragged over several separate meshes, with the caught surfaces tinted and placement points on each of them" loading="lazy" width="1905" height="1019" decoding="async" data-nimg="1" class="w-full h-auto mx-auto my-4 border border-border-soft rounded-md shadow-md" style="color:transparent" srcSet="/_next/image?url=%2Fdocumentation%2Fpaint-volume-over-geometry.png&amp;w=1920&amp;q=75 1x, /_next/image?url=%2Fdocumentation%2Fpaint-volume-over-geometry.png&amp;w=3840&amp;q=75 2x" src="/_next/image?url=%2Fdocumentation%2Fpaint-volume-over-geometry.png&amp;w=3840&amp;q=75"/><h4 class="text-lg font-semibold text-primary mt-6">Placing a volume</h4><p class="leading-relaxed">Drag the grips in the Scene view, or type exact numbers into the window. Three buttons do the rest:</p><ul class="list-disc list-inside mt-2 ml-8 leading-relaxed space-y-2"><li>Fit Volume to Selection wraps the volume around whatever you have selected. It is how you paint onto a single object.</li><li>Move Volume to View lands the volume on the surface under the middle of the Scene view, centered so half its height sits above that surface. It is not a recenter on the camera pivot.</li><li>Reset Volume returns the volume to its default size and position.</li></ul><img alt="A cylinder Paint Volume in the Scene view with its four radius grips at the compass points" loading="lazy" width="1626" height="861" decoding="async" data-nimg="1" class="w-full h-auto mx-auto my-4 border border-border-soft rounded-md shadow-md" style="color:transparent" srcSet="/_next/image?url=%2Fdocumentation%2Fpaint-volume-cylinder.png&amp;w=1920&amp;q=75 1x, /_next/image?url=%2Fdocumentation%2Fpaint-volume-cylinder.png&amp;w=3840&amp;q=75 2x" src="/_next/image?url=%2Fdocumentation%2Fpaint-volume-cylinder.png&amp;w=3840&amp;q=75"/><div class="callout callout-tip"><svg data-prefix="fas" data-icon="lightbulb" class="svg-inline--fa fa-lightbulb callout-icon" role="img" viewBox="0 0 384 512" aria-hidden="true">
1<path fill="currentColor" d="M272 384c9.6-31.9 29.5-59.1 49.2-86.2c0 0 0 0 0 0c5.2-7.1 10.4-14.2 15.4-21.4c19.8-28.5 31.4-63 31.4-100.3C368 78.8 289.2 0 192 0S16 78.8 16 176c0 37.3 11.6 71.9 31.4 100.3c5 7.2 10.2 14.3 15.4 21.4c0 0 0 0 0 0c19.8 27.1 39.7 54.4 49.2 86.2l160 0zM192 512c44.2 0 80-35.8 80-80l0-16-160 0 0 16c0 44.2 35.8 80 80 80zM112 176c0 8.8-7.2 16-16 16s-16-7.2-16-16c0-61.9 50.1-112 112-112c8.8 0 16 7.2 16 16s-7.2 16-16 16c-44.2 0-80 35.8-80 80z"></path></svg><div class="callout-content"><strong class="block mb-1">Tip<!-- -->:</strong>Hold Alt (Option on macOS) while dragging a grip to resize symmetrically: the side under the cursor keeps following it, the opposite side mirrors, and the volume&#x27;s center stays put. Press Alt after starting the drag. Pressing it first lets the Scene view claim it for camera orbit.</div></div><video class="w-full h-auto mx-auto my-4 border border-border-soft rounded-md shadow-md" autoPlay="" muted="" loop="" playsInline="" preload="metadata" poster="/documentation/paint-volume-alt-resize-poster.png" width="1920" height="1080"><source src="/documentation/paint-volume-alt-resize.mp4" type="video/mp4"/>Video showing a Paint Volume grip resizing symmetrically while Alt is held</video><div><h4 class="text-lg font-semibold text-primary mt-6 mb-2"><svg data-prefix="fas" data-icon="ruler-vertical" class="svg-inline--fa fa-ruler-vertical w-4 h-4 mr-2" role="img" viewBox="0 0 256 512" aria-hidden="true"><path fill="currentColor" d="M0 48C0 21.5 21.5 0 48 0L208 0c26.5 0 48 21.5 48 48l0 48-80 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l80 0 0 64-80 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l80 0 0 64-80 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l80 0 0 64-80 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l80 0 0 48c0 26.5-21.5 48-48 48L48 512c-26.5 0-48-21.5-48-48L0 48z"></path></svg>The volume is bounded at both ends</h4><p class="leading-relaxed">Projection starts at the volume&#x27;s top face and travels exactly the volume&#x27;s height. Geometry above the volume no longer occludes what is inside it, and geometry below the volume is no longer caught. This is what lets you paint one floor of a building, or the ground under a canopy.</p><img alt="A Paint Volume under a ceiling places points on the floor below it and none on the ceiling above" loading="lazy" width="1421" height="661" decoding="async" data-nimg="1" class="w-full h-auto mx-auto my-4 border border-border-soft rounded-md shadow-md" style="color:transparent" srcSet="/_next/image?url=%2Fdocumentation%2Fpaint-volume-bounded-ray.png&amp;w=1920&amp;q=75 1x, /_next/image?url=%2Fdocumentation%2Fpaint-volume-bounded-ray.png&amp;w=3840&amp;q=75 2x" src="/_next/image?url=%2Fdocumentation%2Fpaint-volume-bounded-ray.png&amp;w=3840&amp;q=75"/></div><div><h4 class="text-lg font-semibold text-primary mt-6 mb-2"><svg data-prefix="fas" data-icon="mountain-sun" class="svg-inline--fa fa-mountain-sun w-4 h-4 mr-2" role="img" viewBox="0 0 640 512" aria-hidden="true"><path fill="currentColor" d="M560 160A80 80 0 1 0 560 0a80 80 0 1 0 0 160zM55.9 512l325.2 0 75 0 122.8 0c33.8 0 61.1-27.4 61.1-61.1c0-11.2-3.1-22.2-8.9-31.8l-132-216.3C495 196.1 487.8 192 480 192s-15 4.1-19.1 10.7l-48.2 79L286.8 81c-6.6-10.6-18.3-17-30.8-17s-24.1 6.4-30.8 17L8.6 426.4C3 435.3 0 445.6 0 456.1C0 487 25 512 55.9 512z"></path></svg>Terrain</h4><p class="leading-relaxed">Terrain is a first-class surface. Terrains are sampled directly, so they need no Collider and the heights are exact. A terrain that has been rotated cannot be sampled and is skipped with a message saying so. Terrain trees and detail meshes are never targets.</p><img alt="Placement points following the exact contours of a Unity terrain across a hillside" loading="lazy" width="1926" height="1007" decoding="async" data-nimg="1" class="w-full h-auto mx-auto my-4 border border-border-soft rounded-md shadow-md" style="color:transparent" srcSet="/_next/image?url=%2Fdocumentation%2Fpaint-volume-terrain.png&amp;w=2048&amp;q=75 1x, /_next/image?url=%2Fdocumentation%2Fpaint-volume-terrain.png&amp;w=3840&amp;q=75 2x" src="/_next/image?url=%2Fdocumentation%2Fpaint-volume-terrain.png&amp;w=3840&amp;q=75"/></div><div><h4 class="text-lg font-semibold text-primary mt-6 mb-2"><svg data-prefix="fas" data-icon="ruler-vertical" class="svg-inline--fa fa-ruler-vertical w-4 h-4 mr-2" role="img" viewBox="0 0 256 512" aria-hidden="true">
1<path fill="currentColor" d="M0 48C0 21.5 21.5 0 48 0L208 0c26.5 0 48 21.5 48 48l0 48-80 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l80 0 0 64-80 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l80 0 0 64-80 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l80 0 0 64-80 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l80 0 0 48c0 26.5-21.5 48-48 48L48 512c-26.5 0-48-21.5-48-48L0 48z"></path></svg>Create floors in empty space</h4><p class="leading-relaxed">Enable Fill Misses at Volume Bottom to create new floors, bridges, and floating platforms without a temporary base mesh. Each point still uses the nearest eligible mesh or terrain hit; only misses fall back to the volume&#x27;s bottom face. The setting is off by default and never fills outside the true box or cylinder footprint.</p></div><div><h4 class="text-lg font-semibold text-primary mt-6 mb-2"><svg data-prefix="fas" data-icon="layer-group" class="svg-inline--fa fa-layer-group w-4 h-4 mr-2" role="img" viewBox="0 0 576 512" aria-hidden="true"><path fill="currentColor" d="M264.5 5.2c14.9-6.9 32.1-6.9 47 0l218.6 101c8.5 3.9 13.9 12.4 13.9 21.8s-5.4 17.9-13.9 21.8l-218.6 101c-14.9 6.9-32.1 6.9-47 0L45.9 149.8C37.4 145.8 32 137.3 32 128s5.4-17.9 13.9-21.8L264.5 5.2zM476.9 209.6l53.2 24.6c8.5 3.9 13.9 12.4 13.9 21.8s-5.4 17.9-13.9 21.8l-218.6 101c-14.9 6.9-32.1 6.9-47 0L45.9 277.8C37.4 273.8 32 265.3 32 256s5.4-17.9 13.9-21.8l53.2-24.6 152 70.2c23.4 10.8 50.4 10.8 73.8 0l152-70.2zm-152 198.2l152-70.2 53.2 24.6c8.5 3.9 13.9 12.4 13.9 21.8s-5.4 17.9-13.9 21.8l-218.6 101c-14.9 6.9-32.1 6.9-47 0L45.9 405.8C37.4 401.8 32 393.3 32 384s5.4-17.9 13.9-21.8l53.2-24.6 152 70.2c23.4 10.8 50.4 10.8 73.8 0z"></path></svg>Surface Layers</h4><p class="leading-relaxed">Decides which layers can receive points. Objects Pattern Painter created are always excluded, whatever this is set to, so a second run never paints on the first run&#x27;s output.</p></div><div><h4 class="text-lg font-semibold text-primary mt-6 mb-2"><svg data-prefix="fas" data-icon="wand-magic-sparkles" class="svg-inline--fa fa-wand-magic-sparkles w-4 h-4 mr-2" role="img" viewBox="0 0 576 512" aria-hidden="true"><path fill="currentColor" d="M234.7 42.7L197 56.8c-3 1.1-5 4-5 7.2s2 6.1 5 7.2l37.7 14.1L248.8 123c1.1 3 4 5 7.2 5s6.1-2 7.2-5l14.1-37.7L315 71.2c3-1.1 5-4 5-7.2s-2-6.1-5-7.2L277.3 42.7 263.2 5c-1.1-3-4-5-7.2-5s-6.1 2-7.2 5L234.7 42.7zM46.1 395.4c-18.7 18.7-18.7 49.1 0 67.9l34.6 34.6c18.7 18.7 49.1 18.7 67.9 0L529.9 116.5c18.7-18.7 18.7-49.1 0-67.9L495.3 14.1c-18.7-18.7-49.1-18.7-67.9 0L46.1 395.4zM484.6 82.6l-105 105-23.3-23.3 105-105 23.3 23.3zM7.5 117.2C3 118.9 0 123.2 0 128s3 9.1 7.5 10.8L64 160l21.2 56.5c1.7 4.5 6 7.5 10.8 7.5s9.1-3 10.8-7.5L128 160l56.5-21.2c4.5-1.7 7.5-6 7.5-10.8s-3-9.1-7.5-10.8L128 96 106.8 39.5C105.1 35 100.8 32 96 32s-9.1 3-10.8 7.5L64 96 7.5 117.2zm352 256c-4.5 1.7-7.5 6-7.5 10.8s3 9.1 7.5 10.8L416 416l21.2 56.5c1.7 4.5 6 7.5 10.8 7.5s9.1-3 10.8-7.5L480 416l56.5-21.2c4.5-1.7 7.5-6 7.5-10.8s-3-9.1-7.5-10.8L480 352l-21.2-56.5c-1.7-4.5-6-7.5-10.8-7.5s-9.1 3-10.8 7.5L416 352l-56.5 21.2z"></path></svg>Highlight Surfaces In Volume</h4><p class="leading-relaxed">On by default. Tints the surfaces that will receive points, so you can see what the volume has caught before pressing anything. Terrain gets its footprint draped over it instead. Turn it off on weak hardware.</p></div><p class="leading-relaxed mt-4">Volume Color, in Settings and Support, tints the volume&#x27;s wireframe, shell, highlight, and grips independently of Preview Color. Both are saved per user, so upgrading does not reset them.</p><img alt="The Settings and Support section, showing Select Language, Preview Transparency, Preview Color, and Volume Color" loading="lazy" width="510" height="50" decoding="async" data-nimg="1" class="object-fill w-full h-full mx-auto my-4 border border-border-soft rounded-md shadow-md" style="color:transparent" srcSet="/_next/image?url=%2Fdocumentation%2Fsettings-and-support.png&amp;w=640&amp;q=75 1x, /_next/image?url=%2Fdocumentation%2Fsettings-and-support.png&amp;w=1080&amp;q=75 2x" src="/_next/image?url=%2Fdocumentation%2Fsettings-and-support.png&amp;w=1080&amp;q=75"/><div class="callout callout-note"><svg data-prefix="fas" data-icon="note-sticky" class="svg-inline--fa fa-note-sticky callout-icon" role="img" viewBox="0 0 448 512" aria-hidden="true">
1<path fill="currentColor" d="M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l224 0 0-112c0-26.5 21.5-48 48-48l112 0 0-224c0-35.3-28.7-64-64-64L64 32zM448 352l-45.3 0L336 352c-8.8 0-16 7.2-16 16l0 66.7 0 45.3 32-32 64-64 32-32z"></path></svg><div class="callout-content"><strong class="block mb-1">Note<!-- -->:</strong>A volume is world-space rather than scene-bound, so it is still there in the next scene you open. Move Volume to View is the quickest way to bring it back to where you are working.</div></div><div class="callout callout-warning"><svg data-prefix="fas" data-icon="triangle-exclamation" class="svg-inline--fa fa-triangle-exclamation callout-icon" role="img" viewBox="0 0 512 512" aria-hidden="true"><path fill="currentColor" d="M256 32c14.2 0 27.3 7.5 34.5 19.8l216 368c7.3 12.4 7.3 27.7 .2 40.1S486.3 480 472 480L40 480c-14.3 0-27.6-7.7-34.7-20.1s-7-27.8 .2-40.1l216-368C228.7 39.5 241.8 32 256 32zm0 128c-13.3 0-24 10.7-24 24l0 112c0 13.3 10.7 24 24 24s24-10.7 24-24l0-112c0-13.3-10.7-24-24-24zm32 224a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z"></path></svg><div class="callout-content"><strong class="block mb-1">Warning<!-- -->:</strong>Projection is straight down. A volume pushed into a vertical wall cannot place points on the wall. With Fill Misses at Volume Bottom off it produces almost nothing; with the setting on, misses land on the volume bottom. Use volumes for ground, floors, and roofs.</div></div></div></div></section><section id="step-1" class="space-y-8 scroll-offset" style="opacity:0;transform:translateY(20px)"><div class="mb-8 scroll-offset"><h3 class="text-xl font-semibold text-primary mt-8 mb-4 border-b border-border-tint pb-2">Placement Mode</h3><div class="doc-card space-y-4"><p class="leading-relaxed"><svg data-prefix="fas" data-icon="arrow-pointer" class="svg-inline--fa fa-arrow-pointer w-4 h-4" role="img" viewBox="0 0 320 512" aria-hidden="true"><path fill="currentColor" d="M0 55.2L0 426c0 12.2 9.9 22 22 22c6.3 0 12.4-2.7 16.6-7.5L121.2 346l58.1 116.3c7.9 15.8 27.1 22.2 42.9 14.3s22.2-27.1 14.3-42.9L179.8 320l118.1 0c12.2 0 22.1-9.9 22.1-22.1c0-6.3-2.7-12.3-7.4-16.5L38.6 37.9C34.3 34.1 28.9 32 23.2 32C10.4 32 0 42.4 0 55.2z"></path></svg>Open the Pattern Painter UI via <!-- --> <span class="inline-block px-3 py-1 my-2 bg-button text-accent border border-border-soft rounded-md"><strong><code>Tools &gt; Pattern Painter</code></strong></span></p><img alt="Pattern Painter tool menu" loading="lazy" width="510" height="50" decoding="async" data-nimg="1" class="object-fill w-full h-full mx-auto my-4 border border-border-soft rounded-md shadow-md" style="color:transparent" srcSet="/_next/image?url=%2Fdocumentation%2Ftool-menu.png&amp;w=640&amp;q=75 1x, /_next/image?url=%2Fdocumentation%2Ftool-menu.png&amp;w=1080&amp;q=75 2x" src="/_next/image?url=%2Fdocumentation%2Ftool-menu.png&amp;w=1080&amp;q=75"/><p class="mt-2 leading-relaxed"><svg data-prefix="fas" data-icon="arrow-pointer" class="svg-inline--fa fa-arrow-pointer w-4 h-4" role="img" viewBox="0 0 320 512" aria-hidden="true"><path fill="currentColor" d="M0 55.2L0 426c0 12.2 9.9 22 22 22c6.3 0 12.4-2.7 16.6-7.5L121.2 346l58.1 116.3c7.9 15.8 27.1 22.2 42.9 14.3s22.2-27.1 14.3-42.9L179.8 320l118.1 0c12.2 0 22.1-9.9 22.1-22.1c0-6.3-2.7-12.3-7.4-16.5L38.6 37.9C34.3 34.1 28.9 32 23.2 32C10.4 32 0 42.4 0 55.2z"></path></svg> <!-- -->With a Surface Source set in section 1, section 2 is where you choose the pattern itself. Pick Grid, Line, or Circle, then adjust its settings.</p><p class="mt-2 leading-relaxed"><svg data-prefix="fas" data-icon="wrench" class="svg-inline--fa fa-wrench w-4 h-4" role="img" viewBox="0 0 512 512" aria-hidden="true"><path fill="currentColor" d="M352 320c88.4 0 160-71.6 160-160c0-15.3-2.2-30.1-6.2-44.2c-3.1-10.8-16.4-13.2-24.3-5.3l-76.8 76.8c-3 3-7.1 4.7-11.3 4.7L336 192c-8.8 0-16-7.2-16-16l0-57.4c0-4.2 1.7-8.3 4.7-11.3l76.8-76.8c7.9-7.9 5.4-21.2-5.3-24.3C382.1 2.2 367.3 0 352 0C263.6 0 192 71.6 192 160c0 19.1 3.4 37.5 9.5 54.5L19.9 396.1C7.2 408.8 0 426.1 0 444.1C0 481.6 30.4 512 67.9 512c18 0 35.3-7.2 48-19.9L297.5 310.5c17 6.2 35.4 9.5 54.5 9.5zM80 408a24 24 0 1 1 0 48 24 24 0 1 1 0-48z"></path></svg> <!-- -->For modular floors, assign your pieces in Prefab Settings, choose Grid, then click Adjust to Mesh under Cell Size. It copies the shared X/Z mesh footprint into the grid so a Paint Volume can fill with edge-to-edge tiles. The button is available only when every assigned prefab has matching X/Z mesh bounds; empty slots and colliders are ignored.</p><div class="space-y-2"><h4 class="text-lg font-semibold text-primary">Line Shapes</h4><p class="leading-relaxed">Under Line &gt; Shapes, the Line pattern traces an outline. Every shape places exactly one object on every corner, with even spacing along each side, so points never bunch up or double at a corner.</p><ul class="list-disc list-inside mt-2 ml-8 leading-relaxed space-y-2"><li>Zigzag runs Size X long and Size Y from peak to peak. Teeth sets the number of peaks. It is an open path, so both ends get a point.</li><li>Arrow fills Size (width × length) and points forward.</li><li>Star is a five-pointed star whose Size is its outer diameter, pointing forward.</li><li>Arc: a partial arc, less than 360 degrees, has a point on both ends. A full circle places its seam point once.</li></ul><div class="callout callout-note"><svg data-prefix="fas" data-icon="note-sticky" class="svg-inline--fa fa-note-sticky callout-icon" role="img" viewBox="0 0 448 512" aria-hidden="true">
1<path fill="currentColor" d="M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l224 0 0-112c0-26.5 21.5-48 48-48l112 0 0-224c0-35.3-28.7-64-64-64L64 32zM448 352l-45.3 0L336 352c-8.8 0-16 7.2-16 16l0 66.7 0 45.3 32-32 64-64 32-32z"></path></svg><div class="callout-content"><strong class="block mb-1">Note<!-- -->:</strong>A shape&#x27;s Size stops at 1.5 times the longest side of the Paint Volume.</div></div></div><p class="mt-2 leading-relaxed"><svg data-prefix="fas" data-icon="arrow-pointer" class="svg-inline--fa fa-arrow-pointer w-4 h-4" role="img" viewBox="0 0 320 512" aria-hidden="true"><path fill="currentColor" d="M0 55.2L0 426c0 12.2 9.9 22 22 22c6.3 0 12.4-2.7 16.6-7.5L121.2 346l58.1 116.3c7.9 15.8 27.1 22.2 42.9 14.3s22.2-27.1 14.3-42.9L179.8 320l118.1 0c12.2 0 22.1-9.9 22.1-22.1c0-6.3-2.7-12.3-7.4-16.5L38.6 37.9C34.3 34.1 28.9 32 23.2 32C10.4 32 0 42.4 0 55.2z"></path></svg> <!-- -->You will see a live preview of Placement Points (green spheres) projected onto the surface. Live preview keeps updating automatically up to 50,000 placement points.</p><img alt="Live preview of Placement Points" loading="lazy" width="510" height="50" decoding="async" data-nimg="1" class="object-fill w-full h-full mx-auto my-4 border border-border-soft rounded-md shadow-md" style="color:transparent" srcSet="/_next/image?url=%2Fdocumentation%2Fdefault-grid-pattern.png&amp;w=640&amp;q=75 1x, /_next/image?url=%2Fdocumentation%2Fdefault-grid-pattern.png&amp;w=1080&amp;q=75 2x" src="/_next/image?url=%2Fdocumentation%2Fdefault-grid-pattern.png&amp;w=1080&amp;q=75"/><div class="callout callout-tip"><svg data-prefix="fas" data-icon="lightbulb" class="svg-inline--fa fa-lightbulb callout-icon" role="img" viewBox="0 0 384 512" aria-hidden="true"><path fill="currentColor" d="M272 384c9.6-31.9 29.5-59.1 49.2-86.2c0 0 0 0 0 0c5.2-7.1 10.4-14.2 15.4-21.4c19.8-28.5 31.4-63 31.4-100.3C368 78.8 289.2 0 192 0S16 78.8 16 176c0 37.3 11.6 71.9 31.4 100.3c5 7.2 10.2 14.3 15.4 21.4c0 0 0 0 0 0c19.8 27.1 39.7 54.4 49.2 86.2l160 0zM192 512c44.2 0 80-35.8 80-80l0-16-160 0 0 16c0 44.2 35.8 80 80 80zM112 176c0 8.8-7.2 16-16 16s-16-7.2-16-16c0-61.9 50.1-112 112-112c8.8 0 16 7.2 16 16s-7.2 16-16 16c-44.2 0-80 35.8-80 80z"></path></svg><div class="callout-content"><strong class="block mb-1">Tip<!-- -->:</strong>Live preview updates automatically up to 50,000 placement points. For denser patterns, reduce density or click Calculate Placement Points when you are ready for the progress dialog.</div></div><p class="mt-2 leading-relaxed"><svg data-prefix="fas" data-icon="wrench" class="svg-inline--fa fa-wrench w-4 h-4 " role="img" viewBox="0 0 512 512" aria-hidden="true"><path fill="currentColor" d="M352 320c88.4 0 160-71.6 160-160c0-15.3-2.2-30.1-6.2-44.2c-3.1-10.8-16.4-13.2-24.3-5.3l-76.8 76.8c-3 3-7.1 4.7-11.3 4.7L336 192c-8.8 0-16-7.2-16-16l0-57.4c0-4.2 1.7-8.3 4.7-11.3l76.8-76.8c7.9-7.9 5.4-21.2-5.3-24.3C382.1 2.2 367.3 0 352 0C263.6 0 192 71.6 192 160c0 19.1 3.4 37.5 9.5 54.5L19.9 396.1C7.2 408.8 0 426.1 0 444.1C0 481.6 30.4 512 67.9 512c18 0 35.3-7.2 48-19.9L297.5 310.5c17 6.2 35.4 9.5 54.5 9.5zM80 408a24 24 0 1 1 0 48 24 24 0 1 1 0-48z"></path></svg> <!-- -->If they don&#x27;t appear:</p><ul class="list-disc list-inside mt-2 ml-8 leading-relaxed"><li>Move the camera closer to the object.</li><li>Adjust pattern settings to reduce point density, or use Calculate Placement Points when you are ready for a dense pattern.</li></ul><p class="mt-2 leading-relaxed"><svg data-prefix="fas" data-icon="arrow-pointer" class="svg-inline--fa fa-arrow-pointer w-4 h-4" role="img" viewBox="0 0 320 512" aria-hidden="true"><path fill="currentColor" d="M0 55.2L0 426c0 12.2 9.9 22 22 22c6.3 0 12.4-2.7 16.6-7.5L121.2 346l58.1 116.3c7.9 15.8 27.1 22.2 42.9 14.3s22.2-27.1 14.3-42.9L179.8 320l118.1 0c12.2 0 22.1-9.9 22.1-22.1c0-6.3-2.7-12.3-7.4-16.5L38.6 37.9C34.3 34.1 28.9 32 23.2 32C10.4 32 0 42.4 0 55.2z"></path></svg> <!-- -->Select a pattern and click <span class="inline-block px-3 py-1 mx-2 bg-button text-accent border border-border-soft rounded-md"><strong><code>“Calculate Placement Points”</code></strong></span>.</p><video class="object-fill w-full h-full mx-auto my-4 border border-border-soft rounded-md shadow-md" autoPlay="" muted="" loop="" playsInl
1ine="" preload="metadata" poster="/documentation/projected-placement-points-poster.png" width="510" height="50"><source src="/documentation/projected-placement-points.mp4" type="video/mp4"/>Video showing how to project placement points</video><img alt="message-example-3" loading="lazy" width="510" height="50" decoding="async" data-nimg="1" class="object-fill w-full h-full mx-auto my-4 border border-border-soft rounded-md shadow-md" style="color:transparent" srcSet="/_next/image?url=%2Fdocumentation%2Fmessage-3.png&amp;w=640&amp;q=75 1x, /_next/image?url=%2Fdocumentation%2Fmessage-3.png&amp;w=1080&amp;q=75 2x" src="/_next/image?url=%2Fdocumentation%2Fmessage-3.png&amp;w=1080&amp;q=75"/></div></div></section><section id="step-2" class="space-y-8 scroll-offset" style="opacity:0;transform:translateY(20px)"><div class="mb-8 scroll-offset"><h3 class="text-xl font-semibold text-primary mt-8 mb-4 border-b border-border-tint pb-2">Prefab Settings</h3><div class="doc-card space-y-4"><p class="leading-relaxed"><svg data-prefix="fas" data-icon="arrow-pointer" class="svg-inline--fa fa-arrow-pointer w-4 h-4" role="img" viewBox="0 0 320 512" aria-hidden="true"><path fill="currentColor" d="M0 55.2L0 426c0 12.2 9.9 22 22 22c6.3 0 12.4-2.7 16.6-7.5L121.2 346l58.1 116.3c7.9 15.8 27.1 22.2 42.9 14.3s22.2-27.1 14.3-42.9L179.8 320l118.1 0c12.2 0 22.1-9.9 22.1-22.1c0-6.3-2.7-12.3-7.4-16.5L38.6 37.9C34.3 34.1 28.9 32 23.2 32C10.4 32 0 42.4 0 55.2z"></path></svg> <!-- -->Assign one or more Prefabs in the <span class="inline-block px-3 py-1 mx-2 bg-button text-accent border border-border-soft rounded-md"><strong><code>“Prefab to Instantiate”</code></strong></span> field. The preview updates to the Prefab silhouette before you create anything.</p><div class="space-y-2"><h4 class="text-lg font-semibold text-primary">Multiple Prefabs and Empty Slots</h4><p class="leading-relaxed">Use + to add prefab slots and x to remove them. Assigned Prefabs repeat in slot order across every projected point, and the ghost preview uses that same order.</p><div class="callout callout-note"><svg data-prefix="fas" data-icon="note-sticky" class="svg-inline--fa fa-note-sticky callout-icon" role="img" viewBox="0 0 448 512" aria-hidden="true"><path fill="currentColor" d="M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l224 0 0-112c0-26.5 21.5-48 48-48l112 0 0-224c0-35.3-28.7-64-64-64L64 32zM448 352l-45.3 0L336 352c-8.8 0-16 7.2-16 16l0 66.7 0 45.3 32-32 64-64 32-32z"></path></svg><div class="callout-content"><strong class="block mb-1">Note<!-- -->:</strong>Empty slots are ignored. They do not show point spheres between assigned Prefab ghosts, consume projected points during creation, or shift the Prefab used when rotations are recalculated. If an assigned object still previews as spheres, make sure it or one of its children has a MeshFilter or SkinnedMeshRenderer with a Mesh.</div></div></div><video class="object-fill w-full h-full mx-auto my-4 border border-border-soft rounded-md shadow-md" autoPlay="" muted="" loop="" playsInline="" preload="metadata" poster="/documentation/projected-prefab-sizes-poster.png" width="510" height="50"><source src="/documentation/projected-prefab-sizes.mp4" type="video/mp4"/>Video showing how the projected points turn into prefab silhouettes</video><p class="mt-2 leading-relaxed"><svg data-prefix="fas" data-icon="wrench" class="svg-inline--fa fa-wrench w-4 h-4" role="img" viewBox="0 0 512 512" aria-hidden="true"><path fill="currentColor" d="M352 320c88.4 0 160-71.6 160-160c0-15.3-2.2-30.1-6.2-44.2c-3.1-10.8-16.4-13.2-24.3-5.3l-76.8 76.8c-3 3-7.1 4.7-11.3 4.7L336 192c-8.8 0-16-7.2-16-16l0-57.4c0-4.2 1.7-8.3 4.7-11.3l76.8-76.8c7.9-7.9 5.4-21.2-5.3-24.3C382.1 2.2 367.3 0 352 0C263.6 0 192 71.6 192 160c0 19.1 3.4 37.5 9.5 54.5L19.9 396.1C7.2 408.8 0 426.1 0 444.1C0 481.6 30.4 512 67.9 512c18 0 35.3-7.2 48-19.9L297.5 310.5c17 6.2 35.4 9.5 54.5 9.5zM80 408a24 24 0 1 1 0 48 24 24 0 1 1 0-48z"></path></svg> <!-- -->Optionally, assign a <strong>Parent Object</strong> from the scene to keep prefabs organized.</p><img alt="Assign Parent for Game Objects" loading="lazy" width="510" height="50" decoding="async" data-nimg="1" class="object-fill w-full h-full mx-auto my-4 border border-border-soft rounded-md shadow-md" style="color:transparent" srcSet="/_next/image?url=%2Fdocumentation%2Fparent-for-game-objects.png&amp;w=640&amp;q=75 1x, /_next/image?url=%2Fdocumentation%2Fparent-for-game-objects.png&amp;w=1080&amp;q=75 2x" src="/_next/image?url=%2Fdocumentation%2Fparent-for-game-objects.png&amp;w=1080&amp;q=75"/><p class="mt-2 leading-relaxed"><svg data-prefix="fas" data-icon="arrow-pointer" class="svg-inline--fa fa-arrow-pointer w-4 h-4" role="img" viewBox="0 0 320 512" aria-hidden="true">
1<path fill="currentColor" d="M0 55.2L0 426c0 12.2 9.9 22 22 22c6.3 0 12.4-2.7 16.6-7.5L121.2 346l58.1 116.3c7.9 15.8 27.1 22.2 42.9 14.3s22.2-27.1 14.3-42.9L179.8 320l118.1 0c12.2 0 22.1-9.9 22.1-22.1c0-6.3-2.7-12.3-7.4-16.5L38.6 37.9C34.3 34.1 28.9 32 23.2 32C10.4 32 0 42.4 0 55.2z"></path></svg> <!-- -->Click <!-- --> <span class="inline-block px-3 py-1 mx-2 bg-button text-accent border border-border-soft rounded-md"><strong><code>“Create Prefabs at Placement Points”</code></strong></span> <!-- --> to generate prefabs at the Placement Points. Pattern Painter reports both the previewed point count and the created object count when it finishes.</p><video class="object-fill w-full h-full mx-auto my-4 border border-border-soft rounded-md shadow-md" autoPlay="" muted="" loop="" playsInline="" preload="metadata" poster="/documentation/create-game-objects-poster.png" width="510" height="50"><source src="/documentation/create-game-objects.mp4" type="video/mp4"/>Video showing creation of Game Objects</video><div class="callout callout-note"><svg data-prefix="fas" data-icon="note-sticky" class="svg-inline--fa fa-note-sticky callout-icon" role="img" viewBox="0 0 448 512" aria-hidden="true"><path fill="currentColor" d="M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l224 0 0-112c0-26.5 21.5-48 48-48l112 0 0-224c0-35.3-28.7-64-64-64L64 32zM448 352l-45.3 0L336 352c-8.8 0-16 7.2-16 16l0 66.7 0 45.3 32-32 64-64 32-32z"></path></svg><div class="callout-content"><strong class="block mb-1">Note<!-- -->:</strong>Create, Align With Surface, and Recalculate Prefabs Rotation are undoable. Enable Number Created Instances when you want each object named with an order number.</div></div></div></div></section><section id="step-3" class="space-y-8 scroll-offset" style="opacity:0;transform:translateY(20px)"><div class="mb-8 scroll-offset"><h3 class="text-xl font-semibold text-primary mt-8 mb-4 border-b border-border-tint pb-2">Alignment Settings (Optional)</h3><div class="doc-card space-y-4"><p class="leading-relaxed"><svg data-prefix="fas" data-icon="arrow-pointer" class="svg-inline--fa fa-arrow-pointer w-4 h-4" role="img" viewBox="0 0 320 512" aria-hidden="true"><path fill="currentColor" d="M0 55.2L0 426c0 12.2 9.9 22 22 22c6.3 0 12.4-2.7 16.6-7.5L121.2 346l58.1 116.3c7.9 15.8 27.1 22.2 42.9 14.3s22.2-27.1 14.3-42.9L179.8 320l118.1 0c12.2 0 22.1-9.9 22.1-22.1c0-6.3-2.7-12.3-7.4-16.5L38.6 37.9C34.3 34.1 28.9 32 23.2 32C10.4 32 0 42.4 0 55.2z"></path></svg> <!-- -->Adjust the rotation of generated Game Objects using the <!-- --> <span class="inline-block px-3 py-1 mx-2 bg-button text-accent border border-border-soft rounded-md"><strong><code>“Prefab Rotation Mode”</code></strong></span> <!-- --> dropdown, then click <!-- --> <span class="inline-block px-3 py-1 mx-2 bg-button text-accent border border-border-soft rounded-md"><strong><code>“Recalculate Prefabs Rotation”</code></strong></span>.</p><video class="object-fill w-full h-full mx-auto my-4 border border-border-soft rounded-md shadow-md" autoPlay="" muted="" loop="" playsInline="" preload="metadata" poster="/documentation/adjust-prefab-rotation-poster.png" width="510" height="50"><source src="/documentation/adjust-prefab-rotation.mp4" type="video/mp4"/>Video showing how to adjust prefab rotation.</video><p class="leading-relaxed"><svg data-prefix="fas" data-icon="arrow-pointer" class="svg-inline--fa fa-arrow-pointer w-4 h-4" role="img" viewBox="0 0 320 512" aria-hidden="true"><path fill="currentColor" d="M0 55.2L0 426c0 12.2 9.9 22 22 22c6.3 0 12.4-2.7 16.6-7.5L121.2 346l58.1 116.3c7.9 15.8 27.1 22.2 42.9 14.3s22.2-27.1 14.3-42.9L179.8 320l118.1 0c12.2 0 22.1-9.9 22.1-22.1c0-6.3-2.7-12.3-7.4-16.5L38.6 37.9C34.3 34.1 28.9 32 23.2 32C10.4 32 0 42.4 0 55.2z"></path></svg> <!-- -->Face Toward Center Line and Face Away From Center Line turn each object toward, or away from, the nearest point on a line through the middle of the pattern, rather than one center point. The line runs along the longer side of the pattern and turns with it. Two rows face straight across at each other, like guards lining a hallway, and the ones at the ends no longer turn inward.</p><p class="leading-relaxed"><svg data-prefix="fas" data-icon="arrow-pointer" class="svg-inline--fa fa-arrow-pointer w-4 h-4" role="img" viewBox="0 0 320 512" aria-hidden="true">
1<path fill="currentColor" d="M0 55.2L0 426c0 12.2 9.9 22 22 22c6.3 0 12.4-2.7 16.6-7.5L121.2 346l58.1 116.3c7.9 15.8 27.1 22.2 42.9 14.3s22.2-27.1 14.3-42.9L179.8 320l118.1 0c12.2 0 22.1-9.9 22.1-22.1c0-6.3-2.7-12.3-7.4-16.5L38.6 37.9C34.3 34.1 28.9 32 23.2 32C10.4 32 0 42.4 0 55.2z"></path></svg> <!-- -->Rotation Offset (Y) adds one extra turn, from -180 to 180 degrees, on top of any mode, so turning every object a quarter turn, or all of them the other way, is a single slider. The preview shows it immediately; press Recalculate Prefabs Rotation to apply it to objects you already created.</p><h3 class="text-xl font-semibold text-primary mt-12">Align to Terrain (Optional)</h3><p class="mt-2 leading-relaxed"><svg data-prefix="fas" data-icon="arrow-pointer" class="svg-inline--fa fa-arrow-pointer w-4 h-4" role="img" viewBox="0 0 320 512" aria-hidden="true"><path fill="currentColor" d="M0 55.2L0 426c0 12.2 9.9 22 22 22c6.3 0 12.4-2.7 16.6-7.5L121.2 346l58.1 116.3c7.9 15.8 27.1 22.2 42.9 14.3s22.2-27.1 14.3-42.9L179.8 320l118.1 0c12.2 0 22.1-9.9 22.1-22.1c0-6.3-2.7-12.3-7.4-16.5L38.6 37.9C34.3 34.1 28.9 32 23.2 32C10.4 32 0 42.4 0 55.2z"></path></svg> <!-- -->To align objects to another surface, such as terrain, choose a target surface below the objects.<!-- --> </p><p class="leading-relaxed"><svg data-prefix="fas" data-icon="arrow-pointer" class="svg-inline--fa fa-arrow-pointer w-4 h-4" role="img" viewBox="0 0 320 512" aria-hidden="true"><path fill="currentColor" d="M0 55.2L0 426c0 12.2 9.9 22 22 22c6.3 0 12.4-2.7 16.6-7.5L121.2 346l58.1 116.3c7.9 15.8 27.1 22.2 42.9 14.3s22.2-27.1 14.3-42.9L179.8 320l118.1 0c12.2 0 22.1-9.9 22.1-22.1c0-6.3-2.7-12.3-7.4-16.5L38.6 37.9C34.3 34.1 28.9 32 23.2 32C10.4 32 0 42.4 0 55.2z"></path></svg> <!-- -->Then select the Alignment Layer of the terrain and click <!-- --> <span class="inline-block px-3 py-1 mx-2 bg-button text-accent border border-border-soft rounded-md"><strong><code>“Align With Surface”</code></strong></span>.</p><img alt="Cones placed in circular and line patterns sitting flush on the contours of a terrain after Align With Surface" loading="lazy" width="1537" height="851" decoding="async" data-nimg="1" class="w-full h-auto mx-auto my-4 border border-border-soft rounded-md shadow-md" style="color:transparent" srcSet="/_next/image?url=%2Fdocumentation%2Falign-to-terrain.png&amp;w=1920&amp;q=75 1x, /_next/image?url=%2Fdocumentation%2Falign-to-terrain.png&amp;w=3840&amp;q=75 2x" src="/_next/image?url=%2Fdocumentation%2Falign-to-terrain.png&amp;w=3840&amp;q=75"/><div class="callout callout-warning"><svg data-prefix="fas" data-icon="triangle-exclamation" class="svg-inline--fa fa-triangle-exclamation callout-icon" role="img" viewBox="0 0 512 512" aria-hidden="true"><path fill="currentColor" d="M256 32c14.2 0 27.3 7.5 34.5 19.8l216 368c7.3 12.4 7.3 27.7 .2 40.1S486.3 480 472 480L40 480c-14.3 0-27.6-7.7-34.7-20.1s-7-27.8 .2-40.1l216-368C228.7 39.5 241.8 32 256 32zm0 128c-13.3 0-24 10.7-24 24l0 112c0 13.3 10.7 24 24 24s24-10.7 24-24l0-112c0-13.3-10.7-24-24-24zm32 224a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z"></path></svg><div class="callout-content"><strong class="block mb-1">Warning<!-- -->:</strong>For best results, put the target terrain or mesh on its own Alignment Layer. The target should be below the objects, and generated prefabs should not be on the selected target layer.</div></div><div class="card p-4 mt-2"><p class="leading-relaxed"><svg data-prefix="fas" data-icon="circle-exclamation" class="svg-inline--fa fa-circle-exclamation w-4 h-4" role="img" viewBox="0 0 512 512" aria-hidden="true"><path fill="currentColor" d="M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm0-384c13.3 0 24 10.7 24 24l0 112c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-112c0-13.3 10.7-24 24-24zM224 352a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z"></path></svg> <!-- -->Important:</p><ul class="list-disc list-inside mt-2 ml-8 leading-relaxed"><li>Target surface must be on a selected, target-only Alignment Layer.</li><li>No Collider needs adding: alignment follows the target mesh surface, borrowing a Collider temporarily where there is none, and a terrain already carries its own.</li><li>It must be below the objects in world space (Y axis).</li></ul></div></div></div></section><section id="developer-notes" class="space-y-8 scroll-offset" style="opacity:0;transform:translateY(20px)"><div><h2 class="text-2xl font-bold text-accent mt-8 mb-4 border-b border-border-soft pb-3"><svg data-prefix="fas" data-icon="circle-arrow-right" class="svg-inline--fa fa-circle-arrow-right w-5 h-5" role="img" viewBox="0 0 512 512" aria-hidden="true">
1<path fill="currentColor" d="M0 256a256 256 0 1 0 512 0A256 256 0 1 0 0 256zM297 385c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l71-71L120 280c-13.3 0-24-10.7-24-24s10.7-24 24-24l214.1 0-71-71c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0L409 239c9.4 9.4 9.4 24.6 0 33.9L297 385z"></path></svg> <!-- -->Developer Notes</h2><div class="doc-card"><ul class="list-disc list-inside text-lg space-y-4"><li><strong>Pattern Painter</strong> supports Undo &amp; Redo for placement operations.<img alt="Undo Placement" loading="lazy" width="510" height="50" decoding="async" data-nimg="1" class="object-fill w-full h-full mx-auto my-4 border border-border-soft rounded-md shadow-md" style="color:transparent" srcSet="/_next/image?url=%2Fdocumentation%2Fundo-action-1.png&amp;w=640&amp;q=75 1x, /_next/image?url=%2Fdocumentation%2Fundo-action-1.png&amp;w=1080&amp;q=75 2x" src="/_next/image?url=%2Fdocumentation%2Fundo-action-1.png&amp;w=1080&amp;q=75"/></li><li>The high-density warning appears above 50,000 points when you click Calculate Placement Points.<img alt="Long Running Process Warning" loading="lazy" width="300" height="50" decoding="async" data-nimg="1" class="object-fill mx-auto my-4 border border-border-soft rounded-md shadow-md" style="color:transparent" srcSet="/_next/image?url=%2Fdocumentation%2Flong-running-warning.png&amp;w=384&amp;q=75 1x, /_next/image?url=%2Fdocumentation%2Flong-running-warning.png&amp;w=640&amp;q=75 2x" src="/_next/image?url=%2Fdocumentation%2Flong-running-warning.png&amp;w=640&amp;q=75"/></li><li>Press <!-- --> <strong><code>Space Bar</code></strong> <!-- --> to cancel long-running generation, projection, creation, rotation, or alignment work.<img alt="Long running process progress bar" loading="lazy" width="510" height="50" decoding="async" data-nimg="1" class="object-fill mx-auto my-4 border border-border-soft rounded-md shadow-md" style="color:transparent" srcSet="/_next/image?url=%2Fdocumentation%2Flong-running-progress-bar.png&amp;w=640&amp;q=75 1x, /_next/image?url=%2Fdocumentation%2Flong-running-progress-bar.png&amp;w=1080&amp;q=75 2x" src="/_next/image?url=%2Fdocumentation%2Flong-running-progress-bar.png&amp;w=1080&amp;q=75"/></li><li>Dense patterns are dramatically faster as of 4.0.0, but baking or combining complex meshes still improves projection and alignment cost.</li><li>Minimum point spacing is half your pattern&#x27;s own spacing, capped at 0.5 units. Before 4.0.0 it was a flat 0.5, which silently discarded points from patterns finer than that.</li><li>A Paint Volume is editor state, not a scene object. It adds no component, never enters the Hierarchy, and dirties no scene.</li></ul></div></div></section><section id="known-limitations" class="space-y-8 scroll-offset" style="opacity:0;transform:translateY(20px)"><h2 class="text-2xl font-bold text-accent mt-8 mb-4 border-b border-border-soft pb-3"><svg data-prefix="fas" data-icon="circle-arrow-right" class="svg-inline--fa fa-circle-arrow-right w-5 h-5" role="img" viewBox="0 0 512 512" aria-hidden="true"><path fill="currentColor" d="M0 256a256 256 0 1 0 512 0A256 256 0 1 0 0 256zM297 385c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l71-71L120 280c-13.3 0-24-10.7-24-24s10.7-24 24-24l214.1 0-71-71c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0L409 239c9.4 9.4 9.4 24.6 0 33.9L297 385z"></path></svg> <!-- -->Known Limitations</h2><div class="doc-card"><ul class="list-disc list-inside text-lg space-y-2"><li>Designed for 3D editor workflows with world up = Y; not tested as a dedicated 2D workflow.</li><li>Projection is straight down. A Paint Volume pushed into a vertical wall cannot place points on the wall. With Fill Misses at Volume Bottom off it produces almost nothing; with the setting on, misses land on the volume bottom. Use volumes for ground, floors, and roofs.</li><li>Very large, terrain-scale object placement can still be expensive. Split massive scatter jobs when a dedicated terrain scatterer would be a better fit.</li><li>A terrain that has been rotated cannot be sampled and is skipped. Terrain trees and detail meshes are never placement targets.</li></ul></div></section><section id="release-history" class="space-y-8 scroll-offset" style="opacity:0;transform:translateY(20px)"><h2 class="text-2xl font-bold text-accent mt-8 mb-4 border-b border-border-soft pb-3"><svg data-prefix="fas" data-icon="circle-arrow-right" class="svg-inline--fa fa-circle-arrow-right w-5 h-5" role="img" viewBox="0 0 512 512" aria-hidden="true">
1<path fill="currentColor" d="M0 256a256 256 0 1 0 512 0A256 256 0 1 0 0 256zM297 385c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l71-71L120 280c-13.3 0-24-10.7-24-24s10.7-24 24-24l214.1 0-71-71c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0L409 239c9.4 9.4 9.4 24.6 0 33.9L297 385z"></path></svg> <!-- -->Release History</h2><ul class="list-none list-inside text-lg space-y-3"><li class="card p-4"><button class="w-full text-left flex items-center justify-between hover:text-primary transition-colors"><span class="font-bold flex items-center gap-2"><strong>Version 4.1.0</strong> <span class="text-sm opacity-80">(<!-- -->2026-10-01<!-- -->)</span></span><svg data-prefix="fas" data-icon="chevron-up" class="svg-inline--fa fa-chevron-up w-4 h-4 flex-shrink-0" role="img" viewBox="0 0 512 512" aria-hidden="true"><path fill="currentColor" d="M233.4 105.4c12.5-12.5 32.8-12.5 45.3 0l192 192c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L256 173.3 86.6 342.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l192-192z"></path></svg></button><div class="mt-3 space-y-2 border-t border-border-soft border-opacity-20 pt-3"><p class="italic opacity-90">Three new Line shapes, rotation that faces a center line, a Rotation Offset slider, and a preview that matches what you create. Fit Volume to Selection replaces Selected GameObject.</p><ul class="list-disc list-inside mt-2 space-y-1 ml-4"><li class="leading-relaxed">New Line shapes under Line &gt; Shapes: Zigzag, Arrow, and Star. Zigzag runs Size X long and Size Y from peak to peak, with a new Teeth setting for the number of peaks, and gets a point on both ends. Arrow fills Size (width × length) and points forward. Star is five-pointed, with Size as its outer diameter.</li><li class="leading-relaxed">New Face Toward Center Line and Face Away From Center Line rotation modes. Each object faces the nearest point on a line through the middle of the pattern, so two rows of guards down a hallway look straight across at each other.</li><li class="leading-relaxed">New Rotation Offset (Y): one extra turn from -180 to 180 degrees on top of any rotation mode. The preview shows it immediately; press Recalculate Prefabs Rotation to apply it to objects you already created.</li><li class="leading-relaxed">Now also available for Unity 6.6 (URP), alongside Unity 2022.3, 6.0, and 6.3.</li><li class="leading-relaxed">Changed: Selected GameObject is no longer a Surface Source, so section 1 offers Paint Volume and Off. To paint onto one object, select it and press Fit Volume to Selection. If you last used Selected GameObject, the tool opens in Paint Volume.</li><li class="leading-relaxed">The Scene view preview now matches the objects you create. A prefab with a scaled root no longer previews at the wrong size, a rotated root is respected under Default Prefab Rotation, and a prefab whose pivot is off-center no longer drifts when facing the pattern center.</li><li class="leading-relaxed">Line patterns with an offset now face the right center under Face Toward Center of Pattern and Face Away From Center of Pattern, in the preview, on creation, and in Recalculate Prefabs Rotation.</li><li class="leading-relaxed">Line shapes place exactly one object on every corner, with even spacing along each side. The triangle no longer leaves a gap at its base, and the oval no longer crowds its narrow ends. Outlines and positions are unchanged; the number of points along them may differ slightly.</li><li class="leading-relaxed">Partial arcs now have a point on both ends, so a 180 degree arc is no longer lopsided. A full circle still places its seam point once.</li><li class="leading-relaxed">A shape&#x27;s Size no longer jumps to around 1000 when you drag its label past the edge of the window. It now stops at 1.5 times the longest side of the Paint Volume.</li></ul></div></li><li class="card p-4"><button class="w-full text-left flex items-center justify-between hover:text-primary transition-colors"><span class="font-bold flex items-center gap-2"><strong>Version 4.0.0</strong> <span class="text-sm opacity-80">(<!-- -->2026-09-03<!-- -->)</span></span><svg data-prefix="fas" data-icon="chevron-down" class="svg-inline--fa fa-chevron-down w-4 h-4 flex-shrink-0" role="img" viewBox="0 0 512 512" aria-hidden="true">
1<path fill="currentColor" d="M233.4 406.6c12.5 12.5 32.8 12.5 45.3 0l192-192c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L256 338.7 86.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l192 192z"></path></svg></button></li><li class="card p-4"><button class="w-full text-left flex items-center justify-between hover:text-primary transition-colors"><span class="font-bold flex items-center gap-2"><strong>Version 3.0.0</strong> <span class="text-sm opacity-80">(<!-- -->2025-06-16<!-- -->)</span></span><svg data-prefix="fas" data-icon="chevron-down" class="svg-inline--fa fa-chevron-down w-4 h-4 flex-shrink-0" role="img" viewBox="0 0 512 512" aria-hidden="true"><path fill="currentColor" d="M233.4 406.6c12.5 12.5 32.8 12.5 45.3 0l192-192c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L256 338.7 86.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l192 192z"></path></svg></button></li><li class="card p-4"><button class="w-full text-left flex items-center justify-between hover:text-primary transition-colors"><span class="font-bold flex items-center gap-2"><strong>Version 2.0.0</strong> <span class="text-sm opacity-80">(<!-- -->2025-04-14<!-- -->)</span></span><svg data-prefix="fas" data-icon="chevron-down" class="svg-inline--fa fa-chevron-down w-4 h-4 flex-shrink-0" role="img" viewBox="0 0 512 512" aria-hidden="true"><path fill="currentColor" d="M233.4 406.6c12.5 12.5 32.8 12.5 45.3 0l192-192c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L256 338.7 86.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l192 192z"></path></svg></button></li><li class="card p-4"><button class="w-full text-left flex items-center justify-between hover:text-primary transition-colors"><span class="font-bold flex items-center gap-2"><strong>Version 1.1.1</strong> </span><svg data-prefix="fas" data-icon="chevron-down" class="svg-inline--fa fa-chevron-down w-4 h-4 flex-shrink-0" role="img" viewBox="0 0 512 512" aria-hidden="true"><path fill="currentColor" d="M233.4 406.6c12.5 12.5 32.8 12.5 45.3 0l192-192c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L256 338.7 86.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l192 192z"></path></svg></button></li><li class="card p-4"><button class="w-full text-left flex items-center justify-between hover:text-primary transition-colors"><span class="font-bold flex items-center gap-2"><strong>Version 1.1.0</strong> </span><svg data-prefix="fas" data-icon="chevron-down" class="svg-inline--fa fa-chevron-down w-4 h-4 flex-shrink-0" role="img" viewBox="0 0 512 512" aria-hidden="true"><path fill="currentColor" d="M233.4 406.6c12.5 12.5 32.8 12.5 45.3 0l192-192c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L256 338.7 86.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l192 192z"></path></svg></button></li><li class="card p-4"><button class="w-full text-left flex items-center justify-between hover:text-primary transition-colors"><span class="font-bold flex items-center gap-2"><strong>Version 1.0.0</strong> <span class="text-sm opacity-80">(<!-- -->2025-02-18<!-- -->)</span></span><svg data-prefix="fas" data-icon="chevron-down" class="svg-inline--fa fa-chevron-down w-4 h-4 flex-shrink-0" role="img" viewBox="0 0 512 512" aria-hidden="true"><path fill="currentColor" d="M233.4 406.6c12.5 12.5 32.8 12.5 45.3 0l192-192c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L256 338.7 86.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l192 192z"></path></svg></button></li></ul></section></div></div></div></div></div></main><!--$--><!--/$--></div><footer class="mt-auto border-t border-border-soft bg-[#061626]/60"><div class="container-page py-12"><div class="flex flex-col gap-10 md:flex-row md:justify-between"><div class="max-w-xs space-y-3"><div class="flex items-center gap-2 text-lg font-extrabold text-accent"><img alt="" loading="lazy" width="24" height="24" decoding="async" data-nimg="1" class="h-6 w-6 object-contain" style="color:transparent" src="/images/pattern-painter-logo.svg"/><span>Pattern Painter</span></div><p class="text-sm leading-relaxed text-muted">Unity 2022.3, 6000.0, 6000.3, 6000.6<!-- --> · <!-- -->Built-in, URP, HDRP (URP on 6000.6)</p></div><div class="flex flex-wrap gap-12"><nav class="flex flex-col gap-2 text-sm"><a class="text-foreground transition-colors hover:text-primary" href="/en/documentation">Documentation</a><a class="text-foreground transition-colors hover:text-primary" href="/en/contact">Contact</a><a target="_blank" rel="noopener noreferrer" class="text-foreground transition-colors hover:text-primary" href="https://assetstore.unity.com/packages/tools/level-design/pattern-painter-308842">Get Pattern Painter</a></nav><nav class="flex flex-col gap-2 text-sm"><a class="text-muted transition-colors hover:text-primary" href="/en/legal/terms-of-service">Terms of Service</a><a class="text-muted transition-colors hover:text-primary" href="/en/legal/privacy-policy">Privacy Policy</a></nav></div></div><div class="mt-10 border-t border-border-soft pt-6 text-sm text-muted"><a target="_blank" rel="noopener noreferrer" class="font-semibold text-foreground transition-colors hover:text-primary" href="https://www.cromware.com">Cromware LLC</a> <!-- -->© <span>2026</span></div></div></footer></div>
1<script src="/_next/static/chunks/webpack-4426231b5ac5d879.js" id="_R_" async=""></script>
1<script>(self.__next_f=self.__next_f||[]).push([0])</script>
1<script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n4:I[9766,[],\"\"]\n5:I[8924,[],\"\"]\n6:I[1959,[],\"ClientPageRoot\"]\n7:I[9651,[\"266\",\"static/chunks/870fdd6f-ae1619c0027118e7.js\",\"230\",\"static/chunks/230-85464a322a95e835.js\",\"273\",\"static/chunks/273-1744ca5b82c756df.js\",\"619\",\"static/chunks/619-ba102abea3e3d0e4.js\",\"239\",\"static/chunks/239-0efcf3b33fe933aa.js\",\"514\",\"static/chunks/app/%5Blang%5D/documentation/page-4d9f2bb3177e475c.js\"],\"default\"]\na:I[4431,[],\"OutletBoundary\"]\nc:I[5278,[],\"AsyncMetadataOutlet\"]\ne:I[4431,[],\"ViewportBoundary\"]\n10:I[4431,[],\"MetadataBoundary\"]\n11:\"$Sreact.suspense\"\n13:I[7150,[],\"\"]\n:HL[\"/_next/static/media/1a4aa50920b5315c-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/7d4881bb7e1bf84d-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/css/05c0f76e6452b714.css\",\"style\"]\n:HL[\"/_next/static/css/4b08ac2d7e18999c.css\",\"style\"]\n:HL[\"/_next/static/css/35046233962d3c65.css\",\"style\"]\n:HL[\"/_next/static/css/afed6626323151be.css\",\"style\"]\n:HL[\"/_next/static/css/11acfcc816f4f045.css\",\"style\"]\n"])</script>
1<script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"BH5AfFMZ4oQkgnxLFp-mj\",\"p\":\"\",\"c\":[\"\",\"en\",\"documentation\"],\"i\":false,\"f\":[[[\"\",{\"children\":[[\"lang\",\"en\",\"d\"],{\"children\":[\"documentation\",{\"children\":[\"__PAGE__\",{}]}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/05c0f76e6452b714.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/4b08ac2d7e18999c.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"2\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/35046233962d3c65.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"3\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/afed6626323151be.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"4\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/11acfcc816f4f045.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],\"$L2\"]}],{\"children\":[[\"lang\",\"en\",\"d\"],[\"$\",\"$1\",\"c\",{\"children\":[null,\"$L3\"]}],{\"children\":[\"documentation\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"$L6\",null,{\"Component\":\"$7\",\"searchParams\":{},\"params\":{\"lang\":\"en\"},\"promises\":[\"$@8\",\"$@9\"]}],null,[\"$\",\"$La\",null,{\"children\":[\"$Lb\",[\"$\",\"$Lc\",null,{\"promise\":\"$@d\"}]]}]]}],{},null,false]},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[[\"$\",\"$Le\",null,{\"children\":\"$Lf\"}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]],[\"$\",\"$L10\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$11\",null,{\"fallback\":null,\"children\":\"$L12\"}]}]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$13\",[]],\"s\":false,\"S\":true}\n"])</script>
1<script>self.__next_f.push([1,"14:I[7025,[\"177\",\"static/chunks/app/layout-16b031734bd5905d.js\"],\"Analytics\"]\n"])</script>
1<script>self.__next_f.push([1,"2:[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"scroll-smooth\",\"children\":[\"$\",\"body\",null,{\"className\":\"__variable_5afde0 __variable_c29908 __variable_d88d3c __variable_bd6af6 __variable_eb12ad antialiased\",\"children\":[[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}],[\"$\",\"$L14\",null,{}]]}]}]\n"])</script>
1<script>self.__next_f.push([1,"8:{}\n9:\"$0:f:0:1:2:children:2:children:2:children:1:props:children:0:props:params\"\n"])</script>
1<script>self.__next_f.push([1,"15:I[4510,[\"266\",\"static/chunks/870fdd6f-ae1619c0027118e7.js\",\"230\",\"static/chunks/230-85464a322a95e835.js\",\"619\",\"static/chunks/619-ba102abea3e3d0e4.js\",\"239\",\"static/chunks/239-0efcf3b33fe933aa.js\",\"160\",\"static/chunks/app/%5Blang%5D/layout-2177a32881154cd1.js\"],\"DictionaryProvider\"]\n"])</script>
1<script>self.__next_f.push([1,"3:[\"$\",\"$L15\",null,{\"dictionary\":{\"name\":\"Pattern Painter\",\"banners\":{\"english_only\":\"\"},\"header\":{\"home\":\"Home\",\"documentation\":\"Documentation\",\"docs\":\"Docs\",\"contact\":\"Contact\"},\"hero\":{\"headline_lines\":[{\"before\":\"Supercharge Your Prototyping with\",\"accent\":\"\",\"after\":\"\"},{\"before\":\"\",\"accent\":\"Pattern Painter\",\"after\":\"\"}],\"description\":\"Drag a volume over the world you already built and paint patterns onto whatever is inside it: many meshes at once, or terrain. Preview dense patterns live, place large prefab runs in seconds, and keep every step reversible.\",\"cta\":\"Get Pattern Painter\",\"compatibility\":{\"label\":\"Works with\",\"unity\":\"Unity 2022.3, 6000.0, 6000.3, 6000.6\",\"pipelines\":\"Built-in, URP, HDRP (URP on 6000.6)\"}},\"feature_list\":{\"mesh_matched_tiles\":\"Fit matching modular tiles edge to edge across a Paint Volume with one-click grid sizing\",\"paint_anywhere\":\"Paint Onto the World You Already Built\",\"volume_over_geometry\":\"Drag a box or cylinder over existing geometry: nothing is re-parented, no component is added, and no scene is dirtied\",\"multi_surface_and_terrain\":\"Several meshes at once, or terrain sampled directly with no Collider required\",\"bounded_volume_ray\":\"The volume is bounded at both ends, so you can paint one floor of a building or the ground beneath a canopy\",\"powerful_object_placement\":\"Powerful Pattern-Based Object Placement\",\"grids_and_checkerboards\":\"Grids \u0026 Checkerboards - Perfect for level layouts, city grids, or building decorations\",\"lines_and_spokes\":\"Lines \u0026 Radial Spokes - Ideal for indicating paths, rows of enemies, or geometric formations\",\"circular_patterns\":\"Concentric Circles \u0026 Circular Lines - Great for arenas, ritual sites, or defense perimeters\",\"total_placement_control\":\"Total Control Over Placement\",\"adjust_pattern\":\"Adjust pattern rotation, offset, spacing, and density\",\"add_randomness\":\"Add randomization for a more natural look\",\"align_to_surface\":\"Align objects to collider or mesh surfaces\",\"dev_friendly\":\"Fast, Flexible, and Built for Big Iteration\",\"see_preview\":\"Preview up to 50,000 placement points live before creating objects\",\"undo_redo_support\":\"Undo/Redo support for creation, alignment, and rotation recalculation\",\"abort_long_processes\":\"Progress and cancellation for dense generation, creation, projection, and alignment\",\"status_messages\":\"Status messages show previewed and created counts\",\"cta\":\"Buy at Unity Asset Store\"},\"feature_benefits\":{\"description_parts\":[{\"text\":\"Whether you’re working on a \",\"style\":\"normal\"},{\"text\":\"platformer\",\"style\":\"strong\"},{\"text\":\", an \",\"style\":\"normal\"},{\"text\":\"RPG\",\"style\":\"strong\"},{\"text\":\", a \",\"style\":\"normal\"},{\"text\":\"strategy game\",\"style\":\"strong\"},{\"text\":\", or \",\"style\":\"normal\"},{\"text\":\"any\",\"style\":\"strong\"},{\"text\":\" hand-crafted world, \",\"style\":\"normal\"},{\"text\":\"Pattern Painter\",\"style\":\"accentStrong\"},{\"text\":\" helps you block out patterns, preview dense layouts, and create large prefab runs without turning iteration into scene-by-scene hand placement.\",\"style\":\"normal\"}]},\"documentation\":{\"callout_labels\":{\"tip\":\"Tip\",\"warning\":\"Warning\",\"note\":\"Note\"},\"pattern_list\":[\"Grid\",\"Checkerboard\",\"Line\",\"Circle\",\"Oval\",\"Triangle\",\"Rectangle\",\"Pentagon\",\"Hexagon\",\"Zigzag\",\"Arrow\",\"Star\",\"Concentric Circles\",\"Radial Spokes\"],\"and_more\":\"more to come!\",\"introduction\":\" is a Unity Editor tool for placing Game Objects in geometric patterns across your scene. Drag a Paint Volume over meshes and terrain, or select one object and fit the volume to it. It is built for fast level-design iteration, from small props to dense prefab runs.\",\"getting_started\":\"Getting Started\",\"table_of_contents\":\"Table of Contents\",\"workflow\":{\"basic_workflow\":\"The basic workflow is:\",\"workflow_one\":\"Place a Paint Volume: drag it over your scene, or select one object and press Fit Volume to Selection.\",\"workflow_two\":\"Project a pattern of Placement Points and tweak its settings to your needs.\",\"workflow_three\":\"Instantiate a Prefab at each Placement Point.\",\"optionally\":\"Optionally:\",\"adjust_rotation\":\"Adjust the rotation of generated Game Objects.\",\"align_to_surface\":\"Align objects to other surfaces, like terrains and other meshes.\"},\"surface_source\":{\"title\":\"Surface Source\",\"open_tool\":\"Open the Pattern Painter UI via \",\"tools_menu\":\"Tools \u003e Pattern Painter\",\"intro\":\"Section 1 of the window decides which surfaces receive Placement Points. It offers two options: Paint Volume, or Off to hide every Scene view preview. Your choice is remembered from then on.\",\"paint_volume_heading\":\"Paint Volume (default)\",\"paint_volume_body\":\"Drag a box or cylinder over geometry you have already built. Whatever surface lies inside it receives points, whoever owns it: several meshes at once, a terrain, or geometry you cannot re-parent. The volume is editor state: it never enters the Hierarchy, never adds a component, and never dirties a scene.\",\"one_object_heading\":\"Painting onto one object\",\"one_object_body\":\"Select the object and press Fit Volume to Selection. The volume wraps around it, and its surfaces receive points like any other surface inside a volume. As of 4.1.0 this replaces Selected GameObject, which is no longer a Surface Source; if you last used it, the tool opens in Paint Volume.\",\"off_heading\":\"Off\",\"off_body\":\"Use Off when you do not need a preview. It hides the Paint Volume wireframe, shell, surface highlight, and grips, plus prefab ghosts and placement-point spheres. It does not clear the volume, pattern, or prefab settings, so choose Paint Volume again when you are ready to continue.\",\"placing_heading\":\"Placing a volume\",\"placing_intro\":\"Drag the grips in the Scene view, or type exact numbers into the window. Three buttons do the rest:\",\"fit_to_selection\":\"Fit Volume to Selection wraps the volume around whatever you have selected. It is how you paint onto a single object.\",\"move_to_view\":\"Move Volume to View lands the volume on the surface under the middle of the Scene view, centered so half its height sits above that surface. It is not a recenter on the camera pivot.\",\"reset_volume\":\"Reset Volume returns the volume to its default size and position.\",\"callout_tip\":\"Hold Alt (Option on macOS) while dragging a grip to resize symmetrically: the side under the cursor keeps following it, the opposite side mirrors, and the volume's center stays put. Press Alt after starting the drag. Pressing it first lets the Scene view claim it for camera orbit.\",\"bounded_ray_heading\":\"The volume is bounded at both ends\",\"bounded_ray_body\":\"Projection starts at the volume's top face and travels exactly the volume's height. Geometry above the volume no longer occludes what is inside it, and geometry below the volume is no longer caught. This is what lets you paint one floor of a building, or the ground under a canopy.\",\"fill_misses_heading\":\"Create floors in empty space\",\"fill_misses_body\":\"Enable Fill Misses at Volume Bottom to create new floors, bridges, and floating platforms without a temporary base mesh. Each point still uses the nearest eligible mesh or terrain hit; only misses fall back to the volume's bottom face. The setting is off by default and never fills outside the true box or cylinder footprint.\",\"terrain_heading\":\"Terrain\",\"terrain_body\":\"Terrain is a first-class surface. Terrains are sampled directly, so they need no Collider and the heights are exact. A terrain that has been rotated cannot be sampled and is skipped with a message saying so. Terrain trees and detail meshes are never targets.\",\"surface_layers_heading\":\"Surface Layers\",\"surface_layers_body\":\"Decides which layers can receive points. Objects Pattern Painter created are always excluded, whatever this is set to, so a second run never paints on the first run's output.\",\"highlight_heading\":\"Highlight Surfaces In Volume\",\"highlight_body\":\"On by default. Tints the surfaces that will receive points, so you can see what the volume has caught before pressing anything. Terrain gets its footprint draped over it instead. Turn it off on weak hardware.\",\"volume_color\":\"Volume Color, in Settings and Support, tints the volume's wireframe, shell, highlight, and grips independently of Preview Color. Both are saved per user, so upgrading does not reset them.\",\"callout_note\":\"A volume is world-space rather than scene-bound, so it is still there in the next scene you open. Move Volume to View is the quickest way to bring it back to where you are working.\",\"callout_warning\":\"Projection is straight down. A volume pushed into a vertical wall cannot place points on the wall. With Fill Misses at Volume Bottom off it produces almost nothing; with the setting on, misses land on the volume bottom. Use volumes for ground, floors, and roofs.\"},\"step_one\":{\"adjust_to_mesh\":\"For modular floors, assign your pieces in Prefab Settings, choose Grid, then click Adjust to Mesh under Cell Size. It copies the shared X/Z mesh footprint into the grid so a Paint Volume can fill with edge-to-edge tiles. The button is available only when every assigned prefab has matching X/Z mesh bounds; empty slots and colliders are ignored.\",\"placement_mode\":\"Placement Mode\",\"open_tool\":\"Open the Pattern Painter UI via \",\"tools_menu\":\"Tools \u003e Pattern Painter\",\"select_game_object\":\"With a Surface Source set in section 1, section 2 is where you choose the pattern itself. Pick Grid, Line, or Circle, then adjust its settings.\",\"shapes_heading\":\"Line Shapes\",\"shapes_intro\":\"Under Line \u003e Shapes, the Line pattern traces an outline. Every shape places exactly one object on every corner, with even spacing along each side, so points never bunch up or double at a corner.\",\"shape_zigzag\":\"Zigzag runs Size X long and Size Y from peak to peak. Teeth sets the number of peaks. It is an open path, so both ends get a point.\",\"shape_arrow\":\"Arrow fills Size (width × length) and points forward.\",\"shape_star\":\"Star is a five-pointed star whose Size is its outer diameter, pointing forward.\",\"shape_arc\":\"Arc: a partial arc, less than 360 degrees, has a point on both ends. A full circle places its seam point once.\",\"shape_size_cap\":\"A shape's Size stops at 1.5 times the longest side of the Paint Volume.\",\"see_placement_points\":\"You will see a live preview of Placement Points (green spheres) projected onto the surface. Live preview keeps updating automatically up to 50,000 placement points.\",\"troubleshoot\":\"If they don't appear:\",\"move_camera\":\"Move the camera closer to the object.\",\"adjust_pattern\":\"Adjust pattern settings to reduce point density, or use Calculate Placement Points when you are ready for a dense pattern.\",\"select_pattern\":\"Select a pattern and click \",\"calculate_placement_points\":\"“Calculate Placement Points”\",\"calculate_placement_points_after\":\".\",\"callout_tip\":\"Live preview updates automatically up to 50,000 placement points. For denser patterns, reduce density or click Calculate Placement Points when you are ready for the progress dialog.\"},\"step_two\":{\"prefab_settings\":\"Prefab Settings\",\"set_prefab\":\"Assign one or more Prefabs in the \",\"prefab_to_instantiate\":\"“Prefab to Instantiate”\",\"green_spheres\":\" field. The preview updates to the Prefab silhouette before you create anything.\",\"multiple_prefabs_heading\":\"Multiple Prefabs and Empty Slots\",\"multiple_prefabs_body\":\"Use + to add prefab slots and x to remove them. Assigned Prefabs repeat in slot order across every projected point, and the ghost preview uses that same order.\",\"empty_slots_note\"
1:\"Empty slots are ignored. They do not show point spheres between assigned Prefab ghosts, consume projected points during creation, or shift the Prefab used when rotations are recalculated. If an assigned object still previews as spheres, make sure it or one of its children has a MeshFilter or SkinnedMeshRenderer with a Mesh.\",\"assign_parent\":\"Optionally, assign a \",\"parent_object\":\"Parent Object\",\"keep_organized\":\" from the scene to keep prefabs organized.\",\"click\":\"Click \",\"create_prefabs\":\"“Create Prefabs at Placement Points”\",\"generate_prefabs\":\" to generate prefabs at the Placement Points. Pattern Painter reports both the previewed point count and the created object count when it finishes.\",\"callout_note\":\"Create, Align With Surface, and Recalculate Prefabs Rotation are undoable. Enable Number Created Instances when you want each object named with an order number.\"},\"step_three\":{\"alignment_settings\":\"Alignment Settings (Optional)\",\"adjust_rotation\":\"Adjust the rotation of generated Game Objects using the \",\"prefab_rotation_mode\":\"“Prefab Rotation Mode”\",\"dropdown_click\":\" dropdown, then click \",\"recalculate_rotation\":\"“Recalculate Prefabs Rotation”\",\"recalculate_rotation_after\":\".\",\"center_line_modes\":\"Face Toward Center Line and Face Away From Center Line turn each object toward, or away from, the nearest point on a line through the middle of the pattern, rather than one center point. The line runs along the longer side of the pattern and turns with it. Two rows face straight across at each other, like guards lining a hallway, and the ones at the ends no longer turn inward.\",\"rotation_offset\":\"Rotation Offset (Y) adds one extra turn, from -180 to 180 degrees, on top of any mode, so turning every object a quarter turn, or all of them the other way, is a single slider. The preview shows it immediately; press Recalculate Prefabs Rotation to apply it to objects you already created.\",\"align_to_terrain\":\"Align to Terrain (Optional)\",\"create_temporary_surface\":\"To align objects to another surface, such as terrain, choose a target surface below the objects.\",\"select_alignment_layer\":\"Then select the Alignment Layer of the terrain and click \",\"align_with_surface\":\"“Align With Surface”\",\"align_with_surface_after\":\".\",\"important\":\"Important:\",\"alignment_layer\":\"Target surface must be on a selected, target-only Alignment Layer.\",\"require_collider\":\"No Collider needs adding: alignment follows the target mesh surface, borrowing a Collider temporarily where there is none, and a terrain already carries its own.\",\"surface_location\":\"It must be below the objects in world space (Y axis).\",\"callout_warning\":\"For best results, put the target terrain or mesh on its own Alignment Layer. The target should be below the objects, and generated prefabs should not be on the selected target layer.\"},\"developer_notes\":{\"title\":\"Developer Notes\",\"undo_redo\":\" supports Undo \u0026 Redo for placement operations.\",\"warning_dialog\":\"The high-density warning appears above 50,000 points when you click Calculate Placement Points.\",\"press\":\"Press \",\"space_bar\":\"Space Bar\",\"space_to_cancel\":\" to cancel long-running generation, projection, creation, rotation, or alignment work.\",\"bake_meshes\":\"Dense patterns are dramatically faster as of 4.0.0, but baking or combining complex meshes still improves projection and alignment cost.\",\"volume_is_not_a_scene_object\":\"A Paint Volume is editor state, not a scene object. It adds no component, never enters the Hierarchy, and dirties no scene.\",\"minimum_spacing\":\"Minimum point spacing is half your pattern's own spacing, capped at 0.5 units. Before 4.0.0 it was a flat 0.5, which silently discarded points from patterns finer than that.\"},\"known_limitations\":{\"title\":\"Known Limitations\",\"only_3d\":\"Designed for 3D editor workflows with world up = Y; not tested as a dedicated 2D workflow.\",\"performance_warning\":\"Very large, terrain-scale object placement can still be expensive. Split massive scatter jobs when a dedicated terrain scatterer would be a better fit.\",\"projection_direction\":\"Projection is straight down. A Paint Volume pushed into a vertical wall cannot place points on the wall. With Fill Misses at Volume Bottom off it produces almost nothing; with the setting on, misses land on the volume bottom. Use volumes for ground, floors, and roofs.\",\"rotated_terrain\":\"A terrain that has been rotated cannot be sampled and is skipped. Terrain trees and detail meshes are never placement targets.\"}
1,\"releases\":{\"title\":\"Release History\",\"versions\":[{\"version\":\"Version 4.1.0\",\"date\":\"2026-10-01\",\"message\":\"Three new Line shapes, rotation that faces a center line, a Rotation Offset slider, and a preview that matches what you create. Fit Volume to Selection replaces Selected GameObject.\",\"changes\":[\"New Line shapes under Line \u003e Shapes: Zigzag, Arrow, and Star. Zigzag runs Size X long and Size Y from peak to peak, with a new Teeth setting for the number of peaks, and gets a point on both ends. Arrow fills Size (width × length) and points forward. Star is five-pointed, with Size as its outer diameter.\",\"New Face Toward Center Line and Face Away From Center Line rotation modes. Each object faces the nearest point on a line through the middle of the pattern, so two rows of guards down a hallway look straight across at each other.\",\"New Rotation Offset (Y): one extra turn from -180 to 180 degrees on top of any rotation mode. The preview shows it immediately; press Recalculate Prefabs Rotation to apply it to objects you already created.\",\"Now also available for Unity 6.6 (URP), alongside Unity 2022.3, 6.0, and 6.3.\",\"Changed: Selected GameObject is no longer a Surface Source, so section 1 offers Paint Volume and Off. To paint onto one object, select it and press Fit Volume to Selection. If you last used Selected GameObject, the tool opens in Paint Volume.\",\"The Scene view preview now matches the objects you create. A prefab with a scaled root no longer previews at the wrong size, a rotated root is respected under Default Prefab Rotation, and a prefab whose pivot is off-center no longer drifts when facing the pattern center.\",\"Line patterns with an offset now face the right center under Face Toward Center of Pattern and Face Away From Center of Pattern, in the preview, on creation, and in Recalculate Prefabs Rotation.\",\"Line shapes place exactly one object on every corner, with even spacing along each side. The triangle no longer leaves a gap at its base, and the oval no longer crowds its narrow ends. Outlines and positions are unchanged; the number of points along them may differ slightly.\",\"Partial arcs now have a point on both ends, so a 180 degree arc is no longer lopsided. A full circle still places its seam point once.\",\"A shape's Size no longer jumps to around 1000 when you drag its label past the edge of the window. It now stops at 1.5 times the longest side of the Paint Volume.\"]},{\"version\":\"Version 4.0.0\",\"date\":\"2026-09-03\",\"message\":\"Paint Volume arrives: paint onto the world you already built, instead of selecting one Game Object first. Also a large performance, alignment, and localization pass.\",\"changes\":[\"New Adjust to Mesh for Grid Cell Size. Assign modular prefabs with matching X/Z mesh bounds, then size the grid in one click to fill a Paint Volume with edge-to-edge tiles. Colliders and empty prefab slots are ignored; mismatched or meshless prefabs disable the button.\",\"Empty prefab slots no longer show point spheres or leave holes in created patterns. Preview, creation, and rotation now cycle only through assigned prefabs.\",\"New Paint Volume. Drag a box or cylinder over your scene and every surface inside it receives points: several meshes at once, or a terrain. It adds no component, never enters the Hierarchy, and dirties no scene.\",\"The volume is bounded at both ends, so geometry above it no longer occludes and geometry below it is no longer caught. This is what lets you paint one floor of a building.\",\"Fill Misses at Volume Bottom creates new floors, bridges, and floating platforms without a temporary base mesh. Surface hits still win; only misses use the volume's bottom face.\",\"Terrain is a first-class surface, sampled directly with no Collider needed and exact heights.\",\"Surface Layers decides which layers can receive points, and Pattern Painter's own output is always excluded so a second run never paints on the first.\",\"Highlight Surfaces In Volume tints what the volume has caught before you press anything.\",\"Hold Alt (Option on macOS) while dragging a volume grip to resize symmetrically, the same gesture Unity's own bounds handles use.\",\"The volume's drag grips are larger, easier to grab, and draw through geometry, so a volume pushed into a hillside can still be resized 
1without orbiting around it.\",\"Move Volume to View now lands the volume on the surface you are looking at, rather than on the Scene view's pivot, which often left it underground.\",\"Breaking: Unity 2021.3 is no longer supported. The minimum is now Unity 2022.3. Projects on 2021.3 should stay on 3.0.0.\",\"Breaking: the tool now opens in Paint Volume mode. Set Surface Source to Selected GameObject for the previous behavior; the choice is then remembered. (4.1.0 retires that option; use Fit Volume to Selection instead.)\",\"Korean is now selectable in the Pattern Painter tool UI.\",\"Live preview now updates up to 50,000 placement points, raised from 5,000.\",\"Dense patterns calculate and create dramatically faster; very large prefab runs now show progress and can be canceled.\",\"Runs over 2,000 created objects can be grouped under a Pattern Painter Instances parent for fast single-step Undo.\",\"Preview Color lets you choose the tint for ghost previews and placement point handles.\",\"Volume Color tints the Paint Volume's wireframe, shell, highlight, and grips independently of Preview Color, which helps when a scene sits on the default cyan.\",\"Number Created Instances can name each created object in order when you need an easy scene count.\",\"Fine spacing below 0.5 units now keeps its expected points, making small props such as coins, tiles, and rivets practical.\",\"Align With Surface now follows mesh surfaces more reliably, no longer requires matching Colliders, and avoids aligning objects onto one another.\",\"Recalculate Prefabs Rotation is now undoable, and repeated Align With Surface no longer slowly rotates objects.\",\"The Prefab Rotation Mode dropdown no longer shows raw identifiers in English; two of its four entries read as unspaced code rather than plain English.\"]},{\"version\":\"Version 3.0.0\",\"date\":\"2025-06-16\",\"message\":\"A big new update with improvements and more pattern options!\",\"changes\":[\"New line patterns: Triangle, Rectangle, Pentagon, Hexagon, and Oval.\",\"All new patterns are fully customizable.\",\"Added support for multiple Prefabs in the same pattern.\",\"New 'Randomize Offset' option to break up repetitive patterns.\",\"Prefab Live Preview now shows rotation in the scene.\",\"Package size reduced by 87% by moving docs online, for faster downloads and a cleaner project.\",\"New animation when placing prefabs.\",\"Supports prefabs with over 65,535 vertices.\",\"Under-the-hood upgrades and bug fixes.\"]},{\"version\":\"Version 2.0.0\",\"date\":\"2025-04-14\",\"message\":\"A lot of improvements in this version, so we bumped it up a WHOLE version number!\",\"changes\":[\"New Logo! We have a shiny new logo.\",\"Updated the preview to show your GameObject's mesh to skinned mesh instead of just the bounds.\",\"User can control the transparency of the preview.\",\"Automatically set the spacing when you load a new GameObject to the tool.\",\"Improved the threshold to “align with surface normals” .\",\"Improved UI to show all setting and support options in their own section.\",\"Fixed a minor bug that c
1ould cause previous versions to get stuck in an infinite loop in certain cases where you re-load a scene.\",\"Code improvements under-the-hood to make it easier to maintain and improve the tool going forward.\"]},{\"version\":\"Version 1.1.1\",\"date\":\"\",\"message\":\"\",\"changes\":[\"Added Chinese (Simplified) localization for the entire tool UI!\",\"Language can be switched from a simple menu.\",\"Messages, buttons and documentation are fully localized in 4 languages.\"]},{\"version\":\"Version 1.1.0\",\"date\":\"\",\"message\":\"\",\"changes\":[\"Added Spanish localization for the entire tool UI!\",\"Language can be switched from a simple menu.\",\"Messages, buttons and documentation are fully localized in 4 languages.\",\"Improved UI layout to better accommodate localized text.\"]},{\"version\":\"Version 1.0.0\",\"date\":\"2025-02-18\",\"message\":\"This version includes the ability to create the following patterns \u0026 functionality:\",\"changes\":[\"A rectangular grid.\",\"A checkerboard.\",\"A straight line.\",\"A circular line.\",\"Concentric circles.\",\"Radial spokes outward from the center.\",\"Live preview of the pattern placement points.\",\"Show estimated size of Game Objects on the scene.\",\"User friendly status messages.\",\"Align with surface.\",\"Abort long-running process.\",\"Update rotation of created Game Objects.\",\"Specify the parent for the newly created Game Objects.\",\"Undo/Redo.\"]}]}},\"contact_form\":{\"contact_us\":\"Contact Us\",\"form_instructions\":\"Please use this form to submit a feature request or report a bug and we will get back to you as soon as possible.\",\"first_name\":\"First Name\",\"fist_name_required\":\"First name is required\",\"last_name\":\"Last Name\",\"last_name_required\":\"Last name is required\",\"email\":\"Email\",\"email_required\":\"Email is required\",\"invalid_email\":\"Invalid email format\",\"your_message\":\"Your Message\",\"message_required\":\"Message is required\",\"message_instructions\":\"Message must be at least 10 characters long\",\"message_non_empty\":\"This field cannot be empty or just spaces.\",\"drag_and_drop\":\"Drag \u0026 drop some files here, or click to select files\",\"accepted_files\":\"Accepted file types: .jpg, .png, .gif\",\"sending\":\"Sending...\",\"send\":\"Send Message\",\"success_message\":\"Message sent successfully!\",\"failure_message\":\"Failed to send message. Please try again later.\"},\"footer\":{\"terms_of_service\":\"Terms of Service\",\"privacy_policy\":\"Privacy Policy\"}},\"children\":\"$L16\"}]\n"])</script>
1<script>self.__next_f.push([1,"17:I[354,[\"266\",\"static/chunks/870fdd6f-ae1619c0027118e7.js\",\"230\",\"static/chunks/230-85464a322a95e835.js\",\"619\",\"static/chunks/619-ba102abea3e3d0e4.js\",\"239\",\"static/chunks/239-0efcf3b33fe933aa.js\",\"160\",\"static/chunks/app/%5Blang%5D/layout-2177a32881154cd1.js\"],\"default\"]\n18:I[7193,[\"266\",\"static/chunks/870fdd6f-ae1619c0027118e7.js\",\"230\",\"static/chunks/230-85464a322a95e835.js\",\"273\",\"static/chunks/273-1744ca5b82c756df.js\",\"619\",\"static/chunks/619-ba102abea3e3d0e4.js\",\"226\",\"static/chunks/app/%5Blang%5D/not-found-5c853adc5e10448f.js\"],\"default\"]\n19:I[8743,[\"266\",\"static/chunks/870fdd6f-ae1619c0027118e7.js\",\"230\",\"static/chunks/230-85464a322a95e835.js\",\"619\",\"static/chunks/619-ba102abea3e3d0e4.js\",\"239\",\"static/chunks/239-0efcf3b33fe933aa.js\",\"160\",\"static/chunks/app/%5Blang%5D/layout-2177a32881154cd1.js\"],\"default\"]\n"])</script>
1<script>self.__next_f.push([1,"16:[\"$\",\"div\",null,{\"lang\":\"en\",\"className\":\"locale-en flex min-h-screen flex-col text-foreground\",\"children\":[[\"$\",\"$L17\",null,{}],[\"$\",\"div\",null,{\"className\":\"flex-1\",\"children\":[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"main\",null,{\"className\":\"container-page flex min-h-[60vh] flex-col items-center justify-center py-20 text-center\",\"children\":[[\"$\",\"h1\",null,{\"className\":\"inline-flex items-center text-5xl font-bold text-accent gap-2\",\"children\":[\"4\",[\"$\",\"svg\",null,{\"data-prefix\":\"fas\",\"data-icon\":\"skull\",\"className\":\"svg-inline--fa fa-skull text-4xl\",\"role\":\"img\",\"viewBox\":\"0 0 512 512\",\"aria-hidden\":\"true\",\"style\":{},\"ref\":\"$undefined\",\"children\":[\"$\",\"path\",null,{\"fill\":\"currentColor\",\"d\":\"M416 398.9c58.5-41.1 96-104.1 96-174.9C512 100.3 397.4 0 256 0S0 100.3 0 224c0 70.7 37.5 133.8 96 174.9c0 .4 0 .7 0 1.1l0 64c0 26.5 21.5 48 48 48l48 0 0-48c0-8.8 7.2-16 16-16s16 7.2 16 16l0 48 64 0 0-48c0-8.8 7.2-16 16-16s16 7.2 16 16l0 48 48 0c26.5 0 48-21.5 48-48l0-64c0-.4 0-.7 0-1.1zM96 256a64 64 0 1 1 128 0A64 64 0 1 1 96 256zm256-64a64 64 0 1 1 0 128 64 64 0 1 1 0-128z\",\"style\":{}}]}],\"4\"]}],[\"$\",\"p\",null,{\"className\":\"text-lg my-4\",\"children\":\"Oops! The page you're looking for doesn't exist.\"}],[\"$\",\"$L18\",null,{}]]}],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}],[\"$\",\"$L19\",null,{}]]}]\n"])</script>
1<script>self.__next_f.push([1,"f:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\nb:null\n"])</script>
1<script>self.__next_f.push([1,"1a:I[622,[],\"IconMark\"]\nd:{\"metadata\":[[\"$\",\"link\",\"0\",{\"rel\":\"icon\",\"href\":\"/favicon.ico\",\"type\":\"image/x-icon\",\"sizes\":\"48x48\"}],[\"$\",\"$L1a\",\"1\",{}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script>
1<script>self.__next_f.push([1,"12:\"$d:metadata\"\n"])</script>
1</body></html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.