{"id":"ed5ce5fe-ec4c-4ec7-aedc-0ed7da3adbe2","shortId":"wVCXtC","kind":"skill","title":"ue5-pcg-building","tagline":"UE5.6/UE5.7 PCG building generation workflow for modular buildings, blockouts, facade rules, and runtime generation. Use when requests involve Procedural Content Generation (PCG), Shape Grammar, lot-based building spawn, deterministic random seeds, density/filter pipelines, or co","description":"# Quick Start\n- Define generation target: blockout towers, modular facades, or lot-based building sets.\n- Define deterministic inputs: lot splines/points, district tags, style preset, and seed.\n- Define runtime mode: static bake, on-demand, or runtime scheduled generation.\n- Define output mode: Static Mesh instances first, Spawn Actor only for interactive/stateful parts.\n\n# UE5.7 API Anchors\n- Runtime trigger and radii live on `UPCGComponent`:\n  - `EPCGComponentGenerationTrigger::GenerateAtRuntime`\n  - `bOverrideGenerationRadii`, `GenerationRadii`, `SchedulingPolicyClass`, `SchedulingPolicy`\n  - `GenerateLocal(...)`, `Cleanup(...)`\n- Runtime scheduler refresh lives on `UPCGSubsystem`:\n  - `RefreshRuntimeGenComponent(...)`\n  - `RefreshAllRuntimeGenComponents(...)`\n  - `CleanupLocalComponentsImmediate(...)`\n- Output selection anchor classes:\n  - `UPCGStaticMeshSpawnerSettings` for high-count rendering\n  - `UPCGSpawnActorSettings` for interactive/stateful outputs\n- Shape Grammar anchor classes:\n  - `UPCGSubdivisionBaseSettings::GrammarSelection`\n  - Do not rely on deprecated grammar fields (`bGrammarAsAttribute_DEPRECATED`, `Grammar_DEPRECATED`)\n\n# Graph Stage Contract\n- Every stage must explicitly declare:\n  - Input data type (`EPCGDataType` or asset source)\n  - Core node/classes (minimum two)\n  - Required parameters (seed, tags, ranges, radii, or style keys)\n  - Output data type\n  - Debug method (node-level checks, debug node, or log/assert path)\n- If a stage cannot satisfy these five items, treat the graph design as incomplete.\n\n# Workflow\n## 1) Input\n- Input data type: actor/spline/point sources.\n- Core node/classes: `UPCGDataFromActorSettings`, `UPCGGetActorPropertySettings`, `UPCGCreatePointsSettings`.\n- Required parameters: lot tag filters, district/style tags, seed source, source bounds.\n- Output: normalized lot point or spline data with stable ordering.\n- Debug method: run `UPCGDebugSettings` after input stage and verify point count and bounds.\n\n## 2) Filter\n- Input data type: point/spline data from Input stage.\n- Core node/classes: `UPCGAttributeFilteringSettings`, `UPCGDensityFilterSettings`, `UPCGFilterByTagSettings`.\n- Required parameters: slope range, exclusion tags, min lot area/width, occupancy constraints.\n- Output: only buildable lots/candidates.\n- Debug method: compare candidate count before/after filter and inspect rejected tag distribution.\n\n## 3) Transform\n- Input data type: filtered buildable candidates.\n- Core node/classes: `UPCGCopyPointsSettings`, `UPCGCreateSplineSettings`, `UPCGApplyScaleToBoundsSettings`.\n- Required parameters: floor height, pivot convention, facade orientation basis, local axes.\n- Output: footprint transforms and per-floor transforms.\n- Debug method: inspect transform axes and floor index attributes on output points.\n\n## 4) Grammar\n- Input data type: segment/spline/point data from Transform stage.\n- Core node/classes: `UPCGSubdivideSplineSettings`, `UPCGSubdivideSegmentSettings`, `UPCGSelectGrammarSettings`.\n- Required parameters: `GrammarSelection`, module size limits, style-based grammar key mapping.\n- Output: grammar-resolved module placements/attributes.\n- Debug method: use `UPCGPrintGrammarSettings` for grammar parse and token validation.\n- Rule: use `GrammarSelection` only; avoid deprecated grammar fields.\n\n## 5) Output\n- Input data type: grammar-resolved placements.\n- Core node/classes: `UPCGStaticMeshSpawnerSettings`, `UPCGSpawnActorSettings`, `UPCGCreateTargetActor`.\n- Required parameters:\n  - Static path: mesh selector, instance packer, ISM/HISM policy.\n  - Actor path: actor class, spawn attributes, state/interaction requirements.\n- Output: rendered buildings and optional interactive building elements.\n- Debug method: split output by layer/tag and validate per-layer counts.\n- Default policy: prefer Static Mesh Spawner; use Spawn Actor only when stateful behavior is required.\n\n## 6) Validate\n- Input data type: final spawned result and runtime generation state.\n- Core node/classes: `UPCGDebugSettings`, `UPCGComponent`, `UPCGSubsystem`.\n- Required parameters: expected cell bounds, max per-update spawn budget, nav/collision expectations.\n- Output: pass/fail signals and fix actions.\n- Debug method: run staged checks for overlap, navigation impact, per-cell generation time, and deterministic replay.\n\n# Constraints\n- Keep the main pipeline compatible with both UE5.6 and UE5.7 unless a version-specific note is required.\n- Runtime generation must explicitly set:\n  - `GenerationTrigger = GenerateAtRuntime`\n  - explicit `GenerationRadii` (do not rely on implicit defaults)\n  - explicit `SchedulingPolicyClass` for predictable scheduler behavior\n- Prefer ISM/HISM style output for large counts; avoid spawning heavyweight actors for each small part.\n- Keep runtime generation bounds explicit to avoid uncontrolled world-wide regeneration.\n- Avoid hidden dependency on editor-only data when runtime generation is expected.\n- Treat World Partition boundaries as hard constraints for runtime scopes.\n\n# Failure Handling\n- Symptom: no buildings spawn.\n  - Locate: Input stage output count, source bounds, lot tags.\n  - Fix: verify source actor/spline ingestion and lot filter tags; confirm non-empty candidate set.\n- Symptom: output exists in editor preview but not runtime.\n  - Locate: `GenerationTrigger` and runtime radii/scheduling settings.\n  - Fix: set `GenerateAtRuntime`, radii override, and valid scheduling policy.\n- Symptom: runtime update regenerates too wide an area.\n  - Locate: runtime radii and generation source movement.\n  - Fix: reduce generation/cleanup radii and tighten source bounds.\n- Symptom: stale generated pieces remain after rules shrink.\n  - Locate: cleanup path and local component lifecycle.\n  - Fix: trigger cleanup with remove-components behavior and force local cleanup when needed.\n- Symptom: heavy hitching during runtime generation.\n  - Locate: points-per-cell, actor spawn count, per-update workload.\n  - Fix: reduce per-cell complexity, cap actor spawns, move non-interactive parts to static mesh instances.\n- Symptom: deterministic replay mismatch with same seed.\n  - Locate: unstable upstream point ordering or non-seeded random branch.\n  - Fix: normalize ordering before random selection and bind every stochastic path to explicit seed inputs.\n- Symptom: facade grammar fails or produces empty modules.\n  - Locate: grammar parse logs and module token mapping.\n  - Fix: validate grammar string, module dictionary, and segment size constraints.\n- Symptom: overlap and collision issues.\n  - Locate: filter thresholds and final placement constraints.\n  - Fix: add clearance/slope filters and occupancy rejection before output stage.\n- Symptom: navmesh degradation around generated buildings.\n  - Locate: collision profile and nav-affecting flags on spawned outputs.\n  - Fix: split nav-affecting vs non-nav-affecting outputs and rebuild nav only where required.\n- Symptom: runtime changes do not apply after parameter edits.\n  - Locate: scheduler refresh flow.\n  - Fix: request runtime scheduler refresh for the modified component or all runtime components.\n\n# Runtime Scheduler Ops\n- Use component refresh when one runtime component changed style/radii/scheduling inputs.\n- Use global refresh when style/global rules changed for many runtime components.\n- Use immediate local cleanup when bounds shrink or partition ownership changed.\n- After cleanup, trigger local regeneration only for affected runtime scope.\n\n# UE5.6 / UE5.7 Compatibility Notes\n- Core runtime trigger and grammar APIs above are stable in UE5.6 and UE5.7.\n- Header path difference for subsystem:\n  - UE5.6 commonly uses `Public/PCGSubsystem.h`\n  - UE5.7 commonly uses `Public/Subsystems/PCGSubsystem.h`\n\n# Escalation\n- Escalate when architecture requires custom C++ PCG elements or engine plugin extension.\n- Escalate when city-scale generation must be integrated with World Partition streaming policy.\n- Escalate when generated layout must be synchronized with save/load or multiplayer authority rules.","tags":["ue5","pcg","building","unrealengine5","skills","teixasalone","aec","agent-skills","animations","blender","camera","collisions"],"capabilities":["skill","source-teixasalone","skill-ue5-pcg-building","topic-aec","topic-agent-skills","topic-animations","topic-blender","topic-camera","topic-collisions","topic-computer-vision","topic-dotnet","topic-embodied-ai","topic-game-framework","topic-gaussian-splatting","topic-graphics"],"categories":["UnrealEngine5-Skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/teixasalone/UnrealEngine5-Skills/ue5-pcg-building","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add teixasalone/UnrealEngine5-Skills","source_repo":"https://github.com/teixasalone/UnrealEngine5-Skills","install_from":"skills.sh"}},"qualityScore":"0.456","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 12 github stars · SKILL.md body (8,034 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:07:25.938Z","embedding":null,"createdAt":"2026-05-10T01:06:37.372Z","updatedAt":"2026-05-18T19:07:25.938Z","lastSeenAt":"2026-05-18T19:07:25.938Z","tsv":"'1':207 '2':253 '3':295 '4':339 '5':390 '6':457 'action':492 'actor':87,414,416,450,560,717,731 'actor/spline':618 'actor/spline/point':212 'add':814 'affect':835,844,849,925 'anchor':94,121,135 'api':93,937 'appli':862 'architectur':961 'area':661 'area/width':276 'around':826 'asset':163 'attribut':335,419 'author':996 'avoid':386,557,571,577 'axe':318,331 'bake':71 'base':31,53,362 'basi':316 'before/after':288 'behavior':454,549,699 'bgrammarasattribut':146 'bind':767 'blockout':13,46 'bound':229,252,478,568,612,676,912 'boundari':593 'boverridegenerationradii':104 'branch':759 'budget':484 'build':4,7,12,32,54,424,428,604,828 'buildabl':281,301 'c':964 'candid':286,302,628 'cannot':195 'cap':730 'cell':477,504,716,728 'chang':859,893,902,917 'check':186,497 'citi':974 'city-scal':973 'class':122,136,417 'cleanup':109,686,694,703,910,919 'cleanuplocalcomponentsimmedi':118 'clearance/slope':815 'co':40 'collis':804,830 'common':951,955 'compar':285 'compat':515,930 'complex':729 'compon':690,698,878,882,887,892,906 'confirm':624 'constraint':278,510,596,800,812 'content':24 'contract':152 'convent':313 'core':165,214,263,303,349,399,469,932 'count':127,250,287,441,556,610,719 'custom':963 'data':159,179,210,236,256,259,298,342,345,393,460,584 'debug':181,187,240,283,327,372,430,493 'declar':157 'default':442,543 'defin':43,56,67,79 'degrad':825 'demand':74 'density/filter':37 'depend':579 'deprec':143,147,149,387 'design':203 'determinist':34,57,508,743 'dictionari':796 'differ':947 'distribut':294 'district':61 'district/style':224 'edit':865 'editor':582,634 'editor-on':581 'element':429,966 'empti':627,781 'engin':968 'epcgcomponentgenerationtrigg':102 'epcgdatatyp':161 'escal':958,959,971,985 'everi':153,768 'exclus':272 'exist':632 'expect':476,486,589 'explicit':156,532,536,544,569,772 'extens':970 'facad':14,49,314,776 'fail':778 'failur':600 'field':145,389 'filter':223,254,289,300,622,807,816 'final':462,810 'first':85 'five':198 'fix':491,615,645,669,692,724,760,791,813,840,870 'flag':836 'floor':310,325,333 'flow':869 'footprint':320 'forc':701 'generat':8,18,25,44,78,467,505,530,567,587,666,679,711,827,976,987 'generateatruntim':103,535,647 'generateloc':108 'generation/cleanup':671 'generationradii':105,537 'generationtrigg':534,640 'global':897 'grammar':28,134,144,148,340,363,368,377,388,396,777,784,793,936 'grammar-resolv':367,395 'grammarselect':138,356,384 'graph':150,202 'handl':601 'hard':595 'header':945 'heavi':707 'heavyweight':559 'height':311 'hidden':578 'high':126 'high-count':125 'hitch':708 'immedi':908 'impact':501 'implicit':542 'incomplet':205 'index':334 'ingest':619 'input':58,158,208,209,245,255,261,297,341,392,459,607,774,895 'inspect':291,329 'instanc':84,410,741 'integr':979 'interact':427,736 'interactive/stateful':90,131 'involv':22 'ism/hism':412,551 'issu':805 'item':199 'keep':511,565 'key':177,364 'larg':555 'layer':440 'layer/tag':435 'layout':988 'level':185 'lifecycl':691 'limit':359 'live':99,113 'local':317,689,702,909,921 'locat':606,639,662,685,712,749,783,806,829,866 'log':786 'log/assert':190 'lot':30,52,59,221,232,275,613,621 'lot-bas':29,51 'lots/candidates':282 'main':513 'mani':904 'map':365,790 'max':479 'mesh':83,408,446,740 'method':182,241,284,328,373,431,494 'min':274 'minimum':167 'mismatch':745 'mode':69,81 'modifi':877 'modul':357,370,782,788,795 'modular':11,48 'move':733 'movement':668 'multiplay':995 'must':155,531,977,989 'nav':834,843,848,853 'nav-affect':833,842 'nav/collision':485 'navig':500 'navmesh':824 'need':705 'node':184,188 'node-level':183 'node/classes':166,215,264,304,350,400,470 'non':626,735,756,847 'non-empti':625 'non-interact':734 'non-nav-affect':846 'non-seed':755 'normal':231,761 'note':526,931 'occup':277,818 'on-demand':72 'one':890 'op':885 'option':426 'order':239,753,762 'orient':315 'output':80,119,132,178,230,279,319,337,366,391,422,433,487,553,609,631,821,839,850 'overlap':499,802 'overrid':649 'ownership':916 'packer':411 'paramet':170,220,269,309,355,405,475,864 'pars':378,785 'part':91,564,737 'partit':592,915,982 'pass/fail':488 'path':191,407,415,687,770,946 'pcg':3,6,26,965 'per':324,439,481,503,715,721,727 'per-cel':502,726 'per-floor':323 'per-lay':438 'per-upd':480,720 'piec':680 'pipelin':38,514 'pivot':312 'placement':398,811 'placements/attributes':371 'plugin':969 'point':233,249,338,714,752 'point/spline':258 'points-per-cel':713 'polici':413,443,653,984 'predict':547 'prefer':444,550 'preset':64 'preview':635 'procedur':23 'produc':780 'profil':831 'public/pcgsubsystem.h':953 'public/subsystems/pcgsubsystem.h':957 'quick':41 'radii':98,174,648,664,672 'radii/scheduling':643 'random':35,758,764 'rang':173,271 'rebuild':852 'reduc':670,725 'refresh':112,868,874,888,898 'refreshallruntimegencompon':117 'refreshruntimegencompon':116 'regener':576,657,922 'reject':292,819 'reli':141,540 'remain':681 'remov':697 'remove-compon':696 'render':128,423 'replay':509,744 'request':21,871 'requir':169,219,268,308,354,404,421,456,474,528,856,962 'resolv':369,397 'result':464 'rule':15,382,683,901,997 'run':242,495 'runtim':17,68,76,95,110,466,529,566,586,598,638,642,655,663,710,858,872,881,883,891,905,926,933 'satisfi':196 'save/load':993 'scale':975 'schedul':77,111,548,652,867,873,884 'schedulingpolici':107 'schedulingpolicyclass':106,545 'scope':599,927 'seed':36,66,171,226,748,757,773 'segment':798 'segment/spline/point':344 'select':120,765 'selector':409 'set':55,533,629,644,646 'shape':27,133 'shrink':684,913 'signal':489 'size':358,799 'skill' 'skill-ue5-pcg-building' 'slope':270 'small':563 'sourc':164,213,227,228,611,617,667,675 'source-teixasalone' 'spawn':33,86,418,449,463,483,558,605,718,732,838 'spawner':447 'specif':525 'spline':235 'splines/points':60 'split':432,841 'stabl':238,940 'stage':151,154,194,246,262,348,496,608,822 'stale':678 'start':42 'state':453,468 'state/interaction':420 'static':70,82,406,445,739 'stochast':769 'stream':983 'string':794 'style':63,176,361,552 'style-bas':360 'style/global':900 'style/radii/scheduling':894 'subsystem':949 'symptom':602,630,654,677,706,742,775,801,823,857 'synchron':991 'tag':62,172,222,225,273,293,614,623 'target':45 'threshold':808 'tighten':674 'time':506 'token':380,789 'topic-aec' 'topic-agent-skills' 'topic-animations' 'topic-blender' 'topic-camera' 'topic-collisions' 'topic-computer-vision' 'topic-dotnet' 'topic-embodied-ai' 'topic-game-framework' 'topic-gaussian-splatting' 'topic-graphics' 'tower':47 'transform':296,321,326,330,347 'treat':200,590 'trigger':96,693,920,934 'two':168 'type':160,180,211,257,299,343,394,461 'ue5':2 'ue5-pcg-building':1 'ue5.6':518,928,942,950 'ue5.6/ue5.7':5 'ue5.7':92,520,929,944,954 'uncontrol':572 'unless':521 'unstabl':750 'upcgapplyscaletoboundsset':307 'upcgattributefilteringset':265 'upcgcompon':101,472 'upcgcopypointsset':305 'upcgcreatepointsset':218 'upcgcreatesplineset':306 'upcgcreatetargetactor':403 'upcgdatafromactorset':216 'upcgdebugset':243,471 'upcgdensityfilterset':266 'upcgfilterbytagset':267 'upcggetactorpropertyset':217 'upcgprintgrammarset':375 'upcgselectgrammarset':353 'upcgspawnactorset':129,402 'upcgstaticmeshspawnerset':123,401 'upcgsubdividesegmentset':352 'upcgsubdividesplineset':351 'upcgsubdivisionbaseset':137 'upcgsubsystem':115,473 'updat':482,656,722 'upstream':751 'use':19,374,383,448,886,896,907,952,956 'valid':381,437,458,651,792 'verifi':248,616 'version':524 'version-specif':523 'vs':845 'wide':575,659 'workflow':9,206 'workload':723 'world':574,591,981 'world-wid':573","prices":[{"id":"bbeae314-5394-4edf-a6c5-5e9dfc69bf1c","listingId":"ed5ce5fe-ec4c-4ec7-aedc-0ed7da3adbe2","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"teixasalone","category":"UnrealEngine5-Skills","install_from":"skills.sh"},"createdAt":"2026-05-10T01:06:37.372Z"}],"sources":[{"listingId":"ed5ce5fe-ec4c-4ec7-aedc-0ed7da3adbe2","source":"github","sourceId":"teixasalone/UnrealEngine5-Skills/ue5-pcg-building","sourceUrl":"https://github.com/teixasalone/UnrealEngine5-Skills/tree/main/skills/ue5-pcg-building","isPrimary":false,"firstSeenAt":"2026-05-10T01:06:37.372Z","lastSeenAt":"2026-05-18T19:07:25.938Z"}],"details":{"listingId":"ed5ce5fe-ec4c-4ec7-aedc-0ed7da3adbe2","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"teixasalone","slug":"ue5-pcg-building","github":{"repo":"teixasalone/UnrealEngine5-Skills","stars":12,"topics":["2d","aec","agent-skills","animations","blender","camera","collisions","computer-vision","dotnet","embodied-ai","game-framework","gaussian-splatting","graphics","machine-learning","ue4-program","unreal-engine","virtual-worlds","webgl","webgl2","webxr"],"license":"mit","html_url":"https://github.com/teixasalone/UnrealEngine5-Skills","pushed_at":"2026-05-18T15:42:31Z","description":"Provide reusable workflows for Unreal Engine 5.6/5.7 to simplify Blueprint, C++, UI, PCG, replication, debugging, and performance tasks.","skill_md_sha":"ab74a6acee668d32038ff817c37d7a0d36580c89","skill_md_path":"skills/ue5-pcg-building/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/teixasalone/UnrealEngine5-Skills/tree/main/skills/ue5-pcg-building"},"layout":"multi","source":"github","category":"UnrealEngine5-Skills","frontmatter":{"name":"ue5-pcg-building","description":"UE5.6/UE5.7 PCG building generation workflow for modular buildings, blockouts, facade rules, and runtime generation. Use when requests involve Procedural Content Generation (PCG), Shape Grammar, lot-based building spawn, deterministic random seeds, density/filter pipelines, or converting designer constraints into reusable PCG graphs."},"skills_sh_url":"https://skills.sh/teixasalone/UnrealEngine5-Skills/ue5-pcg-building"},"updatedAt":"2026-05-18T19:07:25.938Z"}}