Production Pipeline

Manual House Authoring · TH / EN

ประกอบบ้านเองด้วย ISM ใน L_GeneralHouse / Hand-author interactive houses without PCG. Named authoring groups control member selection, appearance edits and Editor visibility.

Status: review Owner: Project owner

Scope & Roles

คู่มือประกอบบ้านเองใน L_GeneralHouse โดยใช้ชิ้นสำหรับจัดวางใน Editor แล้ว Bake เป็น ISM ไม่ต้องใช้ PCG ผู้สร้างจัดรูปทรงเอง ส่วนระบบเกมดูแล ID, collision, damage, การรื้อ และ save ผู้ใช้เป็นผู้เริ่มและทดสอบ PIE เท่านั้น

บ้านมี Actor หลักหนึ่งตัว ชิ้นที่ mesh/resource/appearance เหมือนกันอยู่ใน ISM batch เดียว ชิ้นสำหรับจัดวางเป็น Editor-only และไม่อยู่ในเกม Garage ใช้ Actor assembly เดิม การลด Actor ไม่ใช่ผล benchmark; ยังต้องวัด performance ในฉากจริง

Assemble a house by hand in L_GeneralHouse, then bake Editor handles into ISM batches. No PCG is required. The author controls the layout; gameplay owns identity, collision, damage, demolition and saves. Only the owner starts and tests PIE.

One house Actor manages ISM batches grouped by mesh/resource/appearance. Authoring handles are Editor-only and stripped from the game. A garage retains its existing Actor assembly. This reduces Actor count; actual performance still requires scene profiling.

Prepared L_GeneralHouse Workspace

Level เตรียมพร้อมสำหรับจัดวางแล้ว: พื้น Grid 60 × 60 เมตร ผิวบนที่ Z = 0, Directional Light, Sky Light, sky backdrop, Exposure คงที่ และ Player Start อยู่ในโฟลเดอร์ Workspace พื้นมี collision สำหรับการทดสอบภายหลัง สิ่งเหล่านี้เป็นอุปกรณ์ของฉากทำงาน ให้ copy เฉพาะบ้านที่ Bake แล้วไปแผนที่เกม

Authoring/House มี ManualHouse และ Start_Slab_100_Concrete ที่ X=400, Y=0, Z=20 cm Slab เริ่มต้น Bake เข้าบ้านแล้ว; ตอนเตรียมฉาก 2026-10-05 มี 1 instance / 1 batch และผู้ใช้ต่อบ้านเองเป็น 21 ชิ้นก่อนแก้ snap รอบนี้ เลือก ManualHouse แล้วเพิ่มชิ้นด้วยจุด snap ตามขั้นตอนด้านล่างได้ทันที

Authoring/Palette มี template Wood 9 ชนิด: Slab, Wall, Gable Roof, Porch Column, Door Frame, Door Leaf, Floor Finish, Exterior Wall Finish และ L Stair ตั้ง Piece Definition / Resource / Appearance แล้ว เลือก template แล้ว Ctrl+W เพื่อ duplicate ย้ายสำเนาเข้า Authoring/House และจัดวางตามบ้านที่ต้องการ เลือก Bake เฉพาะสำเนาที่เป็นบ้าน อย่าเลือก Palette ทั้งชุด Finish และ Door ต้องวางบน support ที่ถูกต้องก่อน Bake Template เป็น Editor-only และไม่มี collision; ต้อง Bake จึงมีชิ้นเกมจริง

เปิด Level แล้วเริ่มจาก Slab หรือเลือก template ใน Outliner กด F เพื่อโฟกัส คง Scale 1,1,1 และใช้ Grid snap ตามขนาดของชิ้น ดูขนาดจาก mesh จริง ชื่อ 100 ไม่ได้แปลว่าทุกชิ้นมีขนาดเท่ากัน การทดสอบ PIE ยังเป็นขั้นตอนของผู้ใช้

The level now has a 60 × 60 m grid ground with its top at Z = 0, a Directional Light, Sky Light, sky backdrop, fixed exposure and a Player Start under Workspace. The ground has collision for later testing. These are authoring-scene utilities; copy only the baked house into game maps.

Authoring/House contains ManualHouse and Start_Slab_100_Concrete at X=400, Y=0, Z=20 cm. The starter slab was baked as 1 instance / 1 batch on 2026-10-05; the owner had expanded the house to 21 pieces before this snap correction. Select ManualHouse and use the snap workflow below to add pieces immediately.

Authoring/Palette contains nine configured Wood templates: Slab, Wall, Gable Roof, Porch Column, Door Frame, Door Leaf, Floor Finish, Exterior Wall Finish and L Stair. Select a template, press Ctrl+W, move its copy into Authoring/House and position it in your layout. Bake only the house copies, not the entire palette. Finishes and doors require valid supports before baking. Templates are Editor-only and have no collision; bake them to create actual gameplay pieces.

Start from the slab or select a template in the Outliner and press F to focus it. Keep Scale 1,1,1 and use grid snapping appropriate to the actual mesh dimensions. A 100 suffix does not imply that all pieces share the same dimensions. PIE testing remains an owner-only step.

Grid stair kit — 2026-10-13

GeneralHouse stair replacement — widened 2026-10-18

[LOCAL ASSEMBLY SAVED; OWNER VISUAL / PIE REVIEW PENDING] The owner confirms both the first-floor plan and upper-floor plan, then requests 2 metre stairs with one side against the garage wall. The saved assembly remains on the existing ManualHouse in /Game/Lambeer/World/Maps/L_GeneralHouse/L_GeneralHouse.

Current assembly: 1fStair contains 80 LightPlanks StairKit members: 24 Flight modules, ten Landing tiles, twelve slope rails, ten level rails and twenty-four column segments. Two adjacent unit-scale 100 cm lanes provide 200 cm nominal stair width; rails sit at the outside edges, with no centre rail. Both turning landings are 200 × 200 cm; the upper arrival is 100 × 200 cm. The route retains 2 + 8 + 2 modules per lane and twenty-four 12.5 cm risers from the flush Z50 floor to the Z350 upper hall arrival. Surrounding second-floor hall flooring remains unauthored.

Garage alignment: the existing wall remains at local X500–515 cm. The main stair spans X515–715 cm and Y1200–1600 cm, putting its outer edge directly against the wall's inside face at X515. The wider turns move the lower approach to Y1600–1800 and the upper return to Y1000–1200. Short legs remain on the kitchen / Mud Room and planned upper hall sides. Structural wall records and openings are unchanged.

Flush entry and preservation: first Flights now accept a structural Slab whose top supports their entire 100 cm lower edge, including the 15 cm wall-aligned offset. Wrong height, incomplete edge, removed support, finish-only support and scaled structure are rejected. This extends native support validation; it does not add new Slab-to-Flight click snap points. The prior entry Landing is restored to its original Concrete Slab with the same GUID, returning to 1fSlab (835 members). All 1,618 original post-cleanup records are restored and retained; 51 existing assembly GUIDs are reused and 29 members added. Final count: 1,698 records / 15 groups. Other groups, visibility, walls, windows, doors and Ceilings are preserved. Four old entrance stairs and the legacy L-stair palette remain removed; kit meshes/materials and other maps are unchanged.

Verification: Editor and Game builds pass; all eight StairKit building/persistence automation tests pass. Native support / both-rail-foot validation is valid. Actual ISM transforms, materials and Editor visibility match the authored records. A real Level switch and disk reload preserve the entire layout and groups; the Level is saved clean. Editor-world simple collision passes 172 samples: 48 tread centres, ten Landing centres, 44 integrated posts, 54 samples beside lane/Landing joins and sixteen samples 0.5 cm from the garage-side edge. Walking probes have unobstructed 180 cm vertical rays. An infinitesimal ray exactly on a shared convex boundary can miss both hulls; diagnostic rays only 0.001 cm to either side hit the correct surface, and join verification uses ±0.01 cm offsets. This is not capsule, camera, AI or PIE traversal acceptance. No persistence schema or save-path change is required: existing support IDs and central building tombstones remain the durable contract.

Current preservation / Save-reload report · 172 simple collision samples · Eight native tests · Actual overhead capture · Earlier cleanup evidence. The 2026-10-17 100 cm / 52-member layout is superseded by this revision; its evidence is retained as history.

Actual GeneralHouse stairs widened to two metres with the main run directly against the garage wall
Actual Editor capture with existing house lighting: two adjacent StairKit lanes, wider turning landings, outside rails and garage-wall contact. Owner visual acceptance and owner-only PIE remain separate.

Saved example: open /Game/Lambeer/World/Maps/L_StairKitReview_20261013 for nine textured BP_ManualHouse examples. New definitions begin DA_Piece_StairKit_; use Single placement. Wood has LightPlanks/DarkPlanks, matching Ceiling; concrete members use CastConcrete. Rails use the two wood choices. The production/source/verification record is REF-MODULAR-STAIR-KIT.

  1. Select the Wood/Concrete Landing100 definition and matching resource/appearance. Select a completed Slab and click a valid top point. The entire 100 cm landing underside needs same-height structural coverage; its top sits 25 cm above Slab top.
  2. Select the matching Flight100x50x25 definition. Select the Landing, then click a departure-edge point. Select the newly placed Flight and use its upper point to repeat at 50 cm run / 25 cm rise.
  3. To make a turn, choose Landing100 and select the last Flight. Its only landing point is ahead of the upper exit. A landing can join another landing at the same top datum; use its appropriate edge to start the next Flight leg.
  4. Choose slope Rail100Rise50 after two successive flights exist. Choose level Rail100 on Landing edges. Both post feet need support; unsupported points are blocked. Removing a support removes the dependent rail and supports Undo; game destruction stores the matching central tombstones.

Existing house layouts and player radial choices are retained. Owner-only PIE walking/collision and actual Viewport input acceptance remain separate from the native tests.

BP_ManualHouse / BP_ManualBuildingPiece

BP_ManualHouse คือ Actor หลักของบ้านหนึ่งหลัง เก็บชิ้นที่ Bake แล้วและสร้าง ISM ตาม mesh/resource/appearance ดูแล ID, collision และข้อมูลที่ระบบเกมใช้กับ damage, การรื้อและ persistence ตัวบ้านว่างไม่ได้สร้างรูปทรงเอง

BP_ManualBuildingPiece คือ handle ของชิ้นเดียวสำหรับจัดวางใน Editor เช่น Slab หรือ Wall ตั้ง Definition/Resource/Appearance แล้ววางหรือแก้ตำแหน่ง ชิ้นนี้เป็น Editor-only ไม่มี collision และไม่ติดไปในเกม ต้อง Bake เข้าบ้านก่อนจึงเป็นชิ้นเกมจริง เครื่องมือ snap ทำขั้นตอนนี้ให้ทุกครั้งที่คลิกจุดสีเขียว

BP_ManualHouse is the Actor for one house. It stores baked pieces and generates ISM batches by mesh/resource/appearance, with stable identity, collision and records used by damage, demolition and persistence. An empty house does not generate a layout.

BP_ManualBuildingPiece is a single Editor placement handle, such as a slab or wall. Configure its definition/resource/appearance and edit its transform. It is Editor-only, has no collision and is stripped from gameplay. Bake it into a house to create a gameplay piece. The snap tool does this automatically for every accepted green-point click.

2026-10-11 approved endpoint repair: Opening 300/600 now adds physical Wall 25/50/100 ends and perpendicular wall faces to the Slab grid. Preview/fresh commit/runtime share the contacts and reject structural overlap or incomplete floor coverage. Implementation and four endpoints in the earlier owner snapshot; Editor/Game, 16 checks and Save/reload pass with all 1,000 owner records/settings unchanged. Owner Viewport/PIE acceptance remains pending.

Garage opening at rim Slabs

แก้ไข 2026-10-11: เลือก Opening Graphite หรือ Ivory ขนาด 300/600 × 300 แล้วคลิก Slab ริมเป็นต้นทาง ระบบเพิ่มจุดที่ชิดปลาย Wall 25/50/100 และผิวด้านในกำแพงที่มุม ตาม geometry จริง ตั้ง Garage Snap Edge เพื่อเลือกแนวที่ต้องการ จุดที่ซ้อนโครงสร้างหรือไม่มี Slab รองรับครบจะถูกบล็อกและซ่อนเมื่อ Show Blocked Snap Points ปิดอยู่ คลิกวางจะตรวจจากข้อมูลปัจจุบันอีกครั้ง

วาง Garage สองชิ้น: Opening และ Door แบบเปิดคู่ค้างไว้ หรือ Door + Track โดย Track ต้องมีใต้ Slab เพดานสูงจากผิว Slab พื้น 300 cm พอดีและรองรับตลอดราง ไม่รวม Finish ชุด 550 และ BP_SectionalGarageDoor ถูกลบแล้ว

Choose a current Graphite/Ivory 300/600 Opening, select the rim Slab, and use GarageSnapEdge to retain the required direction. ContextualSnapPoints adds completed physical wall ends/faces alongside the existing grid. Unsupported or obstructed candidates are hidden with Show Blocked Snap Points disabled; enabling it is an explicit diagnostic view. Fresh clicks rebuild and validate the contact. Place one matching static Swing or Door + Track assembly as the second garage piece. Track requires exact 300 cm structural ceiling coverage throughout both rails, excluding Finish. The retired 550 kit is unavailable.

Editor/Game builds, 16 focused checks and owner scoped Save/reload pass; all 1,000 records/settings in that earlier snapshot remained unchanged. Four physical endpoint cases are clear and supported. Owner Viewport/PIE acceptance remains separate. Canonical implementation and evidence.

Owner feedback after the rim correction — 2026-10-10: the visible Garage points include unwanted orientations and placements extending beyond the supporting floor. The nearest desired point leaves a reported 50 cm wall gap. The previous regression evidence confirms generated endpoint poses and record preservation only; it does not establish complete foundation coverage or owner acceptance. Live mesh bounds confirm the Garage outer envelope is 15 × 550 × 300 cm; the source-size GCD resolver uses 50 cm offsets against Slab 100. This describes the superseded rim-only revision; the new kit adds complete structural coverage and the edge filter. Earlier options were: retain 550 cm plus filler, author a matching 600 cm Garage variant, or adjust the room bay to the existing 550 cm kit. Direction filtering, complete supporting-floor coverage and actual wall-end alignment are required independently of that size choice. The owner subsequently authorized the selected new kit below; the legacy 550 assets were subsequently retired on 2026-10-11; this paragraph records historical feedback only.

Selected and saved garage kit — 2026-10-11: Graphite Steel (02) and Ivory Classic (03), both 300 × 300 / 600 × 300 cm, each with static open double leaves and Door + Track. Place exactly Opening plus the chosen Door assembly. In BP_ManualHouse choose DA_Piece_Opening_Garage_{Graphite|Ivory}_{300|600}x300, compatible Resource and GarageGraphite/GarageIvory. Set Garage Snap Edge to the required West/East/South/North edge in the selected Slab's local basis; All is the diagnostic choice for all orientations. Select a rim Slab and use a valid point; the full footprint must have completed structural floor coverage. Whole-metre modules eliminate the legacy 550/100 cm offset mismatch. With Show Blocked Snap Points disabled, unsupported candidates are hidden.

Current Slab100 example: imported structural bounds are local Z −25 to 0 cm. With the floor Slab pivot at Z=0, place the ceiling Slab pivot at Z=325 so its underside is exactly Z=300. A ceiling Slab pivot at Z=300 gives only 275 cm structural clearance and correctly rejects Track.

Select DA_Piece_GarageDoor_Swing_… or DA_Piece_GarageDoor_Track_… of the matching size, select the completed Opening and place its one fitted assembly point. Both styles allow both mechanisms; the Swing mesh contains both leaves already open inward at 90 degrees. Track includes the closed panels, rollers, 280 cm rails and ceiling hangers. Track requires exactly 300 cm from structural Slab top to structural ceiling Slab underside over the complete length and width of both mounting strips. Finish does not count as structure or alter the measured height. Correctly Slab-attached floor/ceiling finishes permit fitted contact; misplaced or unsupported layers still block. The preview and commit recheck current coverage, so deleting a mid-rail ceiling tile invalidates the previously valid point. Verified asset patterns, sources and actual eight-bay review level · Validation and persistence contract.

200 x 200 cm door authoring

Select DA_Piece_DoorFrame_200x200, choose a supported Resource/Appearance, then click a Slab or Wall as the source and place the frame from a clear snap point. Door frames use Single placement; automatic defaults repair incompatible settings. Assemble neighbouring walls/header independently. Select DA_Piece_DoorLeaf_200x200, then click the matching completed 200 x 200 frame to expose its fitted open-leaf point. The 100 x 200 pair remains available, but cross-size frame/leaf pairs deliberately expose no attachment point.

The frame's outer face is 200 x 200 cm. Its matching leaf asset is now a double-leaf assembly: two fitted half-leaves open 90 degrees from opposite jambs. Place the assembly once at the existing frame snap point. Previously placed 200 cm doors update automatically through the same asset reference. Each frame or complete two-panel assembly costs Wood 4 / Brick 6 / Concrete 8. The three obsolete 200 cm openings and DoorLeaf_Standard no longer appear in Piece Definitions. Current dimensions, source assets, retirement and verification are maintained in the canonical door contract, with double-leaf collision and save/reload evidence.

Automatic next-piece defaults — 2026-10-08

2026-10-11 owner request: Slab and Wall targets now choose Viewport Rectangle automatically on definition selection. Existing placed records, resource policy and area validation are unchanged. The selected GeneralHouse Wall target is also set to Rectangle and saved. Native default/catalog checks, Blueprint compilation and exact map Save/reload validation are recorded in automation evidence and Save/reload evidence; physical viewport acceptance remains owner-verified.

Owner-approved behavior: changing Snap Piece Definition or Snap Resource immediately checks the dependent next-piece settings. Compatible selections are retained. Unsupported values return to an existing default; the tool never adds a placed piece as part of this correction.

  • Resource: retain a supported resource; otherwise use the first allowed resource in the shared catalog order (Wood, Brick, Concrete, Tile, Metal), which currently makes Wood the default. Eligibility comes from the piece's resource policy and configured Appearance Sets.
  • Appearance: retain a supported explicit variant; otherwise choose that resource's DefaultVariantId from the Piece Data Asset. Empty appearance selections also resolve to that named default.
  • Placement Mode (owner revision 2026-10-11): selecting a Slab, Ceiling or Wall Piece Definition defaults to Viewport Rectangle, including switching back from a piece that uses Single. An explicit Single choice remains available and is retained during Resource/Appearance edits and Undo/Redo. Floor Finish and Ceiling Finish retain their compatible current mode. Other pieces and unknown legacy modes use Single. Direct invalid Appearance or Placement Mode edits receive the same correction.
  • Draft and source: changing Piece Definition, Resource, Appearance or Placement Mode cancels an active rectangle, clears its lock and resets derived counts/directions. A current compatible source remains selected; a removed or incompatible source clears to the normal unselected state. Choose a compatible house mesh before placement.
  • Independent preferences: Show All Points, Show Blocked Snap Points, placement/removal enablement and Starting Piece are retained. These settings do not depend on the next piece's resource or appearance.

Example: switching a Wood Wall with WoodVeneerWallPanels and Viewport Rectangle to DoorFrame 100x200 keeps Wood, selects the Door Data Asset's LightWood default and uses Single. A selected Slab remains a compatible source. Switching next to DoorLeaf clears the Slab source because a fitted leaf needs a DoorFrame source.

Status and authoring safety: Snap Placement Status describes the current target/resource/appearance/mode and source instructions. After a settings change, if every candidate is blocked, it reports a concrete reason even when red diagnostics are hidden. A missing definition or an asset without a usable default is reported for repair instead of inventing an asset or material. Existing authored IDs, transforms, resources, appearances, support links and central gameplay persistence remain unchanged. Corrected Details settings save with the Level; Undo/Redo retains compatible restored settings and clears transient drafts/sources.

Earlier 2026-10-08 validation, before the door-kit retirement: Editor/Game Win64 Development builds pass. All 19 ManualHouse and junction-persistence regression tests pass, including automatic defaults across all 55 production Piece Definitions, compatible selections/source retention, inactive-draft defaults and Undo/Redo. One existing GameplayCueNotifyPaths warning remains. Both authoring Blueprints compile with warnings treated as errors. Live MCP changes only the owner DoorFrame's next Appearance to LightWood and Placement Mode to Single; all 946 authored piece records, house/owner identities, root transform, other captured settings and source-plan hashes remain equal. Scoped Level save/reload retains the corrected settings. Editor remains open on L_GeneralHouse with the owner house selected; the transient source is cleared by reload and can be selected again by clicking a compatible Slab. All 47 canonical HTML documents validate without errors/warnings. Physical viewport acceptance and owner PIE remain pending. Validation evidence.

Viewport Snap Placement

Live Editor viewport showing a baked slab with four green placement points and bounds previews
ภาพเดิม 2026-10-05 ก่อนลดกรอบ preview: Slab เริ่มต้นและจุดเพิ่ม Slab 4 ด้าน
Historical 2026-10-05 capture before hover-only previews: the starting slab and four slab placement points.
  1. สำหรับบ้านใหม่ ลาก BP_ManualBuildingPiece ลงใน Level เลือก DA_Piece_Slab_100, Resource และ Appearance ที่รองรับ วาง Slab เริ่มต้นโดย Scale 1,1,1 และ Pitch/Roll 0
  2. บน Slab กด Start Snap House ระบบสร้างบ้านและ Bake Slab แล้วเลือกบ้านให้ หากมีบ้านเป้าหมายอยู่แล้ว ตั้ง Target House บน Slab ก่อนกด หรือเลือกบ้าน ตั้ง Starting Piece เป็น Slab แล้วกด Use Starting Piece
  3. เลือก ManualHouse ไว้ ใน Details หมวด Snap Placement เปิด Snap Placement Enabled แล้วเลือก Snap Piece Definition ของชิ้นที่จะเพิ่ม เช่น Wall หรือ Slab เลือก Snap Resource และ Snap Appearance ที่เข้ากัน เมื่อเปลี่ยนชนิดชิ้นหรือ Resource ต้องเลือก Appearance ที่รองรับอีกครั้ง หรือใช้ None เพื่อเลือก default
  4. คลิก mesh เดิมเพื่อเลือกชิ้นต้นทาง จากนั้น Viewport แสดงจุดเฉพาะต้นทางนั้น: เขียว = วางได้, แดง = ถูกบล็อก (เปิด Show Blocked Snap Points เพื่อดู) นำเมาส์ชี้จุดเพื่อดูกรอบขอบเขตและทิศทางของชิ้นนั้นเพียงจุดเดียว จุดอยู่ที่กึ่งกลางชิ้น preview คลิกจุดสีเขียวเพื่อเพิ่มชิ้นตรงนั้น ระบบ Bake เป็น ISM ทันทีและแสดงจุดสำหรับชิ้นถัดไป ไม่ต้องลาก handle และ Bake เองทุกครั้ง
  5. หากคลิกจุดแดง อ่าน Snap Placement Status จุดจะตรวจซ้ำก่อนวางเพื่อปฏิเสธตำแหน่งซ้อน geometry กีดขวาง วัสดุผิดหรือ support ไม่ครบ Finish ต้องมี Slab/Wall ที่เข้ากันในบ้านนี้ Door ต้องมี Frame ที่เข้ากัน
  6. ใช้ Undo/Redo ของ Editor (Ctrl+Z / Ctrl+Y) ย้อนการเพิ่มหนึ่งชิ้น ID ของชิ้นเดิมคงอยู่ ไม่มีการใช้ instance index เป็น save key
  7. หากไม่เห็นจุด ให้เลือกบ้านหรือ component SnapAuthoring ตรวจ toggle และ Definition ใช้ Viewport ปกติที่แสดง editor visualizers; ปิด Game View ด้วย G ตามจำเป็น แล้วโฟกัส Slab/บ้านด้วย F ชิ้นที่ไม่เข้าคู่กับ snap ของบ้านจะไม่มีจุดให้คลิก
  8. เมื่อเสร็จ ตรวจ Validation Status = Valid และ Instance Count บันทึก Level ปิด toggle เพื่อซ่อนจุดได้ Copy เฉพาะบ้านที่ Bake แล้วไปแผนที่เกม เครื่องมือและ handle ไม่ติดไป runtime

จุด snap ใช้กติกาและ named points ใน catalog เดียวกับระบบผู้เล่น ไม่ได้สร้างจุดอิสระทุกตำแหน่ง ชิ้นที่ไม่มีคู่ snap ให้ใช้ขั้นตอนจัดวางมือด้านล่าง เครื่องมือนี้ไม่ใช้ PCG และไม่เริ่ม PIE

  1. For a new house, place BP_ManualBuildingPiece, select DA_Piece_Slab_100 and a supported resource/appearance, and position the starting slab. Keep scale 1,1,1 and pitch/roll zero.
  2. Click Start Snap House on the slab. It creates a house, bakes the slab and selects the house. To reuse an existing house, set the slab's Target House first. Alternatively, select a house, assign the slab to Starting Piece and click Use Starting Piece.
  3. Keep ManualHouse selected. Under Snap Placement, enable Snap Placement Enabled, choose the next Snap Piece Definition (for example Wall or Slab), and select a compatible Snap Resource and Snap Appearance. Reselect Appearance after changing piece/resource, or use None for the default.
  4. Click an existing house mesh to choose its source; the viewport displays compatible points only for that source: green means valid, red means blocked (enable Show Blocked Snap Points to inspect it). Hover a point to see one proposed piece bounds preview and orientation; each dot is at its preview center. Click a green point to add the piece. It is immediately baked into ISM, and points refresh for the next placement.
  5. After a red-point click, read Snap Placement Status. Each action rechecks duplicates, geometry obstruction, material compatibility and dependencies. Finishes require a matching slab/wall within this house; doors require a matching frame.
  6. Use Editor Undo/Redo (Ctrl+Z / Ctrl+Y) for each added piece. Redo retains the piece identity. Instance indices are never save keys.
  7. If points are missing, select the house or its SnapAuthoring component, check the toggle/definition, and use a normal viewport showing Editor visualizers. Toggle Game View off with G as needed and focus the slab/house with F. Incompatible piece/source pairs have no clickable points.
  8. Require Validation Status = Valid, check Instance Count and save the level. Disable the toggle to hide points when finished. Copy the baked house into gameplay maps; the tool and handles are stripped from runtime.

Snap points use the same catalog rules and named anchors as player construction. They are not arbitrary attachment points for every combination. Use the manual workflow below for pieces without compatible points. This tool uses no PCG and never starts PIE.

Derived corners and saving maps

Manual-house records and catalog appearances are the saved source of truth. Derived wall-corner geometry is transient: opening the map automatically reconstructs the omitted ProceduralMesh sections after Editor component registration, while runtime keeps the existing BeginPlay/saved-change rebuild. Individual material sections contain only their indexed vertices, with all four UV channels and surface attributes preserved.

The 2026-10-10 GeneralHouse correction reduced the saved map from 949 MB to 2.40 MB, with a measured 0.416-second native Save. Disk reload restores 948 pieces, six ISM batches and 14 corner surfaces without a manual rebuild. The current owner's interior material binding and every logical piece record are retained. To refresh an edited shared Appearance Set on an already open house, use Rebuild House and save the map. PIE/cook/visual acceptance remains open; the later paired contact correction closes the reported touching-end seam. Canonical storage correction and validation.

Wall exterior facing — 2026-10-10

The selected source Slab defines the outward normal. A Wall exterior is local +X; use West 180°, East 0°, South −90°, North 90° in Slab space, then compose with the source transform. Compensate the corner pivot on West/North to retain the original bounds. Adjacent and stacked Walls inherit the source Wall direction. This rule also applies to Slab snaps for matching frames, windows, louvers and garage openings; it does not infer room/exterior classification from a house centroid or from unrelated nearby Slabs.

Smooth Brown Partition has identical smooth surfaces on both sides. Existing source selection, stable piece IDs, support semantics, thickness and appearance eligibility remain unchanged. Structural Wall records retain their oriented Transform through the existing central save codec; they do not add a Slab dependency or a new snap-source save field. Historical authoring poses are not automatically reclassified. The owner-reported replacement in GeneralHouse is reversed with a pivot compensation that preserves its current structural footprint and ID; all other records are retained.

Verified and saved: closed-Editor Win64 Development Editor/Game builds passed;64/64 Building/PCG/building-persistence tests pass with0 warnings. New checks assert all Slab/Wall sizes and opening targets at four source rotations, inherited continuation/stack direction and all four outward-facing clapboard corners. Native save/reload retains948 records and all identities/resources/appearances/supports: the reported replacement Wall faces +Y at the same structural footprint, while the other947 records remain unchanged. The right return Wall only touches this replacement at a structural corner, rather than overlapping for the existing automatic45° miter; a small relief seam remained visible at that checkpoint; the later touching-end correction closes it. This correction does not reclassify other approved wall directions or change their footprints. Owner-only PIE and final visual acceptance remain pending. Native readback · 64-test results · Actual UE corner capture · Canonical placement correction.

Wall Facing / Flip Selected Walls — 2026-10-18

Owner-approved authoring extension: in BP_ManualHouse Details → Snap Placement, choose Wall Facing: Outward / Inward before placing a plain Wall from a Slab. Outward remains the default described above; Inward reverses the exterior face while retaining the same structural footprint and base. Single and Viewport Rectangle use the same compensated pose. Changing this setting cancels an active rectangle. Continuation and stacking from an existing Wall inherit that Wall's actual direction, independent of the Slab-facing preference. Door frames, windows, louvers and garage openings retain their existing placement rules.

Existing Walls: enable Select Group Members, click a Wall or Ctrl-select multiple pieces, then press Flip Selected Walls in Snap Placement. To flip a named group's Walls, clear the explicit piece selection, select the group and press the same button. Explicit selected pieces take priority, then the selected group, then the active snap source. Mixed selections change only live plain Walls; other types stay unchanged. Each Wall turns 180° about its own vertical centre with corner-pivot compensation and an exact half-turn quaternion to avoid accumulated float-PI drift. The gold arrow points toward the exterior face on hovered/selected Walls, a hovered snap preview and the active Wall rectangle.

Explicit support descendants move rigidly with the flipped Wall and retain their support IDs. The complete candidate is validated first, including moved attachments against house/world obstructions; a rejected operation changes no authored records. Wall junctions and adjacent Ceiling edges are rebuilt from the resulting poses. Stable piece/house IDs, group IDs/memberships, resource and appearance remain intact. Ctrl+Z / Redo restores the complete operation. The level stores the resulting transforms through the existing ManualHouse records and central BuildingSites persistence contract; Wall Facing is an Editor-only placement preference, with no new gameplay save field or schema. No existing house is automatically reversed.

Verified locally — 2026-10-18: Editor/Game Win64 Development builds pass. All 92 Building/ManualHouse/StairKit/building-persistence regressions pass with zero errors/warnings, including three new Wall Facing tests. Coverage includes all Slab/Wall sizes at four house rotations, Single/Rectangle preview-to-commit agreement, inherited Wall-source direction, stale-draft cancellation, mixed-group filtering, explicit-finish support/obstruction rejection, one Undo/Redo, corner geometry and serialization. One thousand reversals retain the original pose within 1e-9; the actual Details button also returns six review Walls to their original poses with zero measured double-flip error. A single guarded button is present; the automatic duplicate was removed.

Actual disk Save/reload verifies both seven-record assemblies in /Game/Lambeer/World/Maps/L_WallFacingReview_20261018, retaining all 14 records/house IDs and the Inward preference. GeneralHouse's newer owner-authored baseline is 1,777 records and 15 groups; this tool delivery preserves those records, memberships and visibility with exact actual ISM transforms/materials. The existing stair checkpoint above remains historical evidence for its own 1,698-record revision. No production Walls are automatically flipped. Validation record · 92 regression results · Actual Details button and reversed review assembly. Owner-only PIE, packaged cook and final visual acceptance remain separate.

Two-pane Window 200 × 150 — 2026-10-12

Select DA_Piece_Window_200x150, Resource Wood, then CraftedWarmWood, PaleHoney or WhitewashedAsh. The rectangular window has two equal glazing panes, one vertical centre mullion and no horizontal centre rail. It uses a unit-scale 200 × 150 × 15 cm envelope and the same corner pivot/shared snap resolver as the other fixed windows. Prepare the opening first; selecting a base Wall100 may span an adjoining Wall100. Green points must validate the entire 200 cm envelope; occupied windows and blocked jambs remain rejected. The existing 100 × 150 and 75 × 75 windows remain selectable.

Player Building also exposes the new logical ID under Window, using the same Appearance Set and independent glass slot. Editable costs/HP, production source, persistence and acceptance status are owned by the canonical wide-window record. Only the owner starts or performs PIE.

Window quarter-module alignment — 2026-10-11

Implemented: the initial window-to-wall and reciprocal wall-to-window correction adds 25 cm increments within the size-fit interval. The later base-seam correction also exposes partially overlapping top/bottom contacts from Solid Walls to fixed windows. The former greatest-common-divisor step was 50 cm for Wall50/Window100, omitting the midpoint required to put a 100 cm window against either end of a 125 cm bay. Both SM_Window_100x150 and SM_Window_75x75 use the shared resolver; louvers and other piece families retain their previous steps. Facing, mesh bounds, unit scale, overlap rejection and fresh click validation remain in force.

Reported bay: select a Wall50 directly below the opening, then hover its green point aligned with the near 25 cm jamb. The window occupies 100 cm and leaves 25 cm at the opposite end. The owner-source pose at house-local (315,450,100), yaw180, now exposes window (315,475,150), yaw180, and native Editor validation reports it clear. No window was added to the owner's house.

Validation: Editor/Game Development builds and nine distinct focused non-PIE automation checks pass without test warnings. The new fixture verifies both alignments of a 125 cm bay at four house rotations, reciprocal wall alignment, fresh commit, duplicate rejection and blocked jamb overlap. Live read-only inspection validates the missing owner candidate. Save/reload preserves all 1,169 authored records, identities, appearances and stored placement settings; the transient active source resets when Editor reopens. Owner viewport acceptance and PIE remain unverified. Automation evidence · Live candidate.

Window placement across base-wall seams — 2026-10-11

Owner follow-up implemented: the previous quarter-step correction only filled positions inside the source/target containment interval. Equal-width Wall100/Window100 still had one top alignment, so a 25 cm jamb next to an existing window blocked it. Fixed windows now also expose 25 cm shifts across Solid Wall and fixed Window top/bottom seams, retaining at least 25 cm of edge contact with the selected source. Existing point names and aligned positions are retained; extra point names use WindowOffset. Full candidate overlap and fresh click/commit validation still decide whether the window fits. Louvers and other targets retain their earlier behavior.

Reported location: select the Wall100 beneath the empty bay next to the existing window and 25 cm jamb, then hover the green shifted window point. Source house-local (700,585,50), yaw90, now exposes window (725,585,150), yaw90, clearing the jamb at X600–625. This extends the initial Wall50 quarter alignment repair; no window was added to the owner's layout by the agent.

Validation: Editor/Game Development builds and all 10 focused non-PIE automation checks pass without errors/warnings. The new isolated fixture covers the reported Wall100/Window100 seam at four house rotations, the unchanged blocked aligned pose, fresh shifted commit and duplicate rejection. Live owner candidate validation reports the new point clear. Save/reload preserves all 1,241 current authored records and stored placement settings; the previous viewport camera is restored. Active source is transient and must be reselected after Editor restart. Physical viewport acceptance and PIE remain pending. Live validation and preservation · 10-test results.

Snap compatibility · 2026-10-06

Slab 100 → Slab 25 มี 4 จุดต่อด้าน รวม 16 จุดด้านข้าง: ตำแหน่งตามแนวขอบอยู่ที่ 0, 25, 50, 75 cm ขอบ West/South ใช้ระยะของชิ้นใหม่ (−25 cm); East/North ใช้ขอบของชิ้นต้นทาง (100 cm) Slab 50 มี 2 จุดต่อด้าน และขนาดเท่ากันมี 1 จุดต่อด้าน บ้านที่หมุนยังใช้แนวขอบของบ้าน ไม่ใช่ world grid

สูตรตรวจขนาดและ pivot ของทั้งสองชิ้นครอบคลุม Wall, Opening/Frame, Window/Louver, Roof Face และคาน จุดต้นคาน/ช่องเปิดอยู่ภายนอกชิ้นเดิม ไม่วางทับจุด origin ขนาดต่างกันจะมีจุดตามแนวขอบที่เข้ากัน หลังคา Gable และ Shed ต่อใน pitch เดียวกัน; Valley ต่อกับ Gable ตามขอบที่ระดับผิวตรงกัน ไม่ใช้จุด Roof ทั่วไปกับ Infill

  • Window และ Louver: snap ต่อขอบ/เหนือผนัง แล้วประกอบผนังเพื่อเว้นช่องด้วยตัวเอง การวางไม่ตัด Wall Solid อัตโนมัติ
  • Louver เล็ก: โมเดลจริงเปลี่ยนเป็น 25 × 75 cm ลึก 25 cm กรอบ 5 cm และ Scale 1 ใช้ asset/Definition ชื่อเดิม SM_AtticVent_Louver_35x70 เพื่อรักษา reference และ saved IDs; ชื่อเดิมไม่ใช่ขนาดปัจจุบัน Louver ใหญ่ 50 × 100 และ Infill 75 × 50 ตรง Grid 25 อยู่แล้ว
  • Infill: ต่อปลายจั่ว Gable ตาม slope ของชิ้นจริง Rising/Falling ใช้ทิศทางที่เข้ากับปลายจั่ว ต้องมี Roof ที่เข้าคู่ในบ้านนี้
  • Trim: Eave, Ridge และ Gable Edge มีจุดตามขนาด 25/50/100 และพึ่งพา Roof ที่เข้าคู่ ระบบตรวจ support ก่อน Bake; รื้อ/ทำลาย Roof แล้วชิ้นที่ผูกอยู่จะหายด้วย และบันทึกสถานะผ่าน world persistence เดิม
  • บันได: Slab ต่อทางเข้า/ทางออก L และ U ตาม geometry ที่สร้างไว้ พื้นทางออก L อยู่ด้าน +X โดย Y=275…400, Z=320; U กลับออกด้าน −Y ที่ Z=320 จุดอยู่ภายนอกบันได ไม่วางทับขั้นหรือใช้ความสูงราวจับ
  • โรงรถ: เลือก DA_Piece_Opening_Garage_550 ระบบบ้านใช้ BP_SectionalGarageDoor ที่มีแผง/รางครบ ไม่ต้องวางสองชิ้นภายในแยก DoorLeaf_Standard was retired on 2026-10-08; use the matching independent leaf

จุดแดงยังแสดงเมื่อมีชิ้นอื่นชน วัสดุผิด หรือ support ขาด จำนวนคู่ในตารางคือชนิดชิ้นที่เข้าคู่ ไม่ใช่จำนวนจุดเขียวในฉาก Finish, Leaf และ Infill เป็นชิ้นปลายทาง จึงไม่มีจุดโครงสร้างต่อออกจากตัวมันเอง

Slab 100 → Slab 25 exposes four positions per side, 16 side slots: edge offsets are 0, 25, 50 and 75 cm. West/South use the new piece's extent (−25 cm); East/North use the source edge (100 cm). Slab 50 exposes two positions per side; equal sizes expose one. Rotated houses use their local edges, independently of the world grid.

Wall, opening/frame, window/louver, roof-face and beam joints use both meshes' dimensions and corner pivots. Start seams lie outside the source rather than at its occupied origin. Gable and shed faces retain their respective pitch; valley/gable connections match their actual edge profiles. Infill does not inherit generic roof-face corner poses.

  • Windows/louvers: join wall edges or tops; assemble the surrounding opening yourself. Placement does not cut a solid wall.
  • Small louver: the mesh is now 25 × 75 cm, 25 cm deep, with a 5 cm frame and unit scale. The existing SM_AtticVent_Louver_35x70 asset/definition ID is retained for references and saved identities; its old name no longer describes its size. The large 50 × 100 louver and 75 × 50 infills already fit the 25 cm grid.
  • Infills: fitted to the gable end with the matching slope/orientation. A completed matching roof in this house is required.
  • Trim: eave, ridge and gable-edge joints support the 25/50/100 sizes and require a matching completed roof before baking. Destroying/removing the support cascades to its attached parts, using the existing world persistence path.
  • Stairs: floor poses sit outside the source-authored L/U entry and arrival edges. The L arrival extends along +X at Y=275…400, Z=320; U returns along −Y at Z=320. Rail height is not a floor elevation.
  • Garage: select DA_Piece_Opening_Garage_550. The house uses the complete BP_SectionalGarageDoor; its panel/track assets are internal parts. The retired DoorLeaf_Standard was removed on 2026-10-08; use the matching independent leaf.

Blocked geometry, incompatible materials and missing support still produce red points. Pair counts below count compatible piece types, not visible green points. Finishes, leaves and infills are terminal attachments and do not provide outgoing structural markers.

ชิ้น / Pieceคู่ต้นทาง / Incoming typesคู่ต่อออก / Outgoing typesการใช้งาน / Usage
SM_AtticVent_Louver_35x70131625 × 75 cm; stable legacy asset ID
SM_AtticVent_Louver_50x1001316Snap placement
SM_Ceiling_100Wall top; Ceiling edge; Stair upper exitCeiling edgesWalkable 10 cm floor; Wood / Concrete; ManualHouse only
SM_Ceiling_25Wall top; Ceiling edge; Stair upper exitCeiling edgesWalkable 10 cm floor; Wood / Concrete; ManualHouse only
SM_Ceiling_50Wall top; Ceiling edge; Stair upper exitCeiling edgesWalkable 10 cm floor; Wood / Concrete; ManualHouse only
SM_DoorFrame_100x2001317Snap placement
SM_DoorFrame_200x2001317Dimension-aware frame seams; matching 200 x 200 leaf
SM_DoorLeaf_100x20010Fitted attachment; no outgoing structural points
SM_DoorLeaf_200x20010Fitted attachment to 200 x 200 frame only
SM_ExteriorWallFinish_10010Fitted attachment; no outgoing structural points
SM_ExteriorWallFinish_2530Fitted attachment; no outgoing structural points
SM_ExteriorWallFinish_5020Fitted attachment; no outgoing structural points
SM_FloorFinish_10010Fitted attachment; no outgoing structural points
SM_FloorFinish_2530Fitted attachment; no outgoing structural points
SM_FloorFinish_5020Fitted attachment; no outgoing structural points
SM_GableInfill_Falling10Fitted attachment; no outgoing structural points
SM_GableInfill_Rising10Fitted attachment; no outgoing structural points
SM_GarageDoorPanel_500x4800Inside BP_SectionalGarageDoor; no separate placement
SM_GarageTrack_55000Inside BP_SectionalGarageDoor; no separate placement
SM_Opening_Garage_5501316Snap placement
SM_PorchBeam_10043Snap placement
SM_PorchBeam_2543Snap placement
SM_PorchBeam_5043Snap placement
SM_PorchColumn_10044Snap placement
SM_PorchStep_10030Snap placement
SM_RoofEave_10053Gable/shed eave; completed roof support required
SM_RoofEave_2593Gable/shed eave; completed roof support required
SM_RoofEave_5073Gable/shed eave; completed roof support required
SM_RoofFace_Gable_1001617Snap placement
SM_RoofFace_Gable_25169Snap placement
SM_RoofFace_Gable_501612Snap placement
SM_RoofFace_Shed_100136Snap placement
SM_RoofFace_Shed_25134Snap placement
SM_RoofFace_Shed_50135Snap placement
SM_RoofGableEdge_10053Gable/valley edge; completed roof support required
SM_RoofGableEdge_2593Gable/valley edge; completed roof support required
SM_RoofGableEdge_5073Gable/valley edge; completed roof support required
SM_RoofRidge_10043Gable ridge cap; completed roof support required
SM_RoofRidge_2563Gable ridge cap; completed roof support required
SM_RoofRidge_5053Gable ridge cap; completed roof support required
SM_RoofValley_10036Snap placement
SM_RoofValley_2534Snap placement
SM_RoofValley_5035Snap placement
SM_Slab_100523Snap placement
SM_Slab_25519Snap placement
SM_Slab_50521Snap placement
SM_Stair_L_300x400_20R33Snap placement
SM_Stair_U_225x350_20R33Snap placement
SM_Wall_Solid_1001319Snap placement
SM_Wall_Solid_251317Snap placement
SM_Wall_Solid_501318Snap placement
SM_Window_100x1501316Edge/top joints; assemble a wall opening
SM_Window_75x751316Edge/top joints; assemble a wall opening

55-piece native snap matrix · Louver geometry/import evidence

Automation log diagnosis and resource cleanup — 2026-10-11

Implemented and verified locally. This follow-up addresses the two warnings and inventory error reported after the visibility regression run. House authoring, rendering quality and the RHI warning threshold retain their existing settings.

Log entryConfirmed cause and correction
SnapAssetAudit: expected 62 definitions, found 63The test froze an earlier asset count. It now requires a nonempty inventory, checks that every selectable catalog definition is present, resolves every current definition through the catalog and verifies that the emitted audit covers every discovered file. Existing mesh, snap-name and finite-transform checks remain. All 63 current definitions pass.
GameplayCueNotifyPaths warningNo explicit cue search root was configured, so GAS scanned all of /Game. DefaultGame.ini now declares /Game/Lambeer, the existing project gameplay-content root. The live asset registry contains no existing GameplayCueNotify assets to migrate or exclude. A fresh Editor session verifies that the warning no longer occurs.
LogRHICore: 258 GB virtual reservation exceeds the 256 GB warning thresholdIsolated automation worlds retained renderer scenes after DestroyWorld() until UObject garbage collection. Transaction references can extend that lifetime. The shared test-world teardown performs normal component/FX cleanup, releases the completed fixture scene as in UE 5.8 UWorld::FinishDestroy, clears the scene pointer and flushes rendering commands. It never releases the live Editor scene, resets owner transactions or forces global GC. Building/manual/garage fixtures use this cleanup. The fresh-session regression run completes without the virtual-budget warning; its post-suite RHI dump totals 42.5 GB of reserved virtual resources, below the unchanged 256 GB warning threshold. Before the correction, a post-run RHI dump reported approximately 2.8 GB of tracked physical resources; the 258 GB message describes reserved virtual address space rather than that much physical VRAM use.

Validation: Editor and Game Development builds pass. The same 57 Building/manual-persistence tests now finish with 56 successes and no test warnings. SnapAssetAudit and EditorAuthoringVisibility pass. Scoped Blueprint compilation and native map Save/reload preserve all 1,166 owner records/settings, 1,112 ISM instances in 12 batches and 54 derived junctions. The actual mesh/material bindings and instance transforms remain identical. No PIE was started.

Garage audit follow-up resolved: the old live-map expectation was tied to wall anchors replaced in the owner's later layout. Four exact endpoints remain mandatory in a controlled fixture; current-owner candidates are audited against fresh structural validation. All 57 checks now pass without test warnings, with the owner's layout preserved. Canonical cause, coverage and preservation evidence.

Fresh-session test results · House Save/reload preservation · Validation and RHI diagnostics.

House visibility and authoring mode

Owner-approved correction, 2026-10-11: the house stores an Editor-only display state independently from the temporary Outliner eye. HideAuthoringPieces selects Baked mode; ShowAuthoringPieces selects Authoring mode and creates missing handles using the existing lazy workflow.

In Baked mode, hiding and showing the house or its folder leaves its owned, baked HousePiece handles hidden and displays the generated ISM/junction/assembly projection. Outliner propagation and a direct child-eye unhide cannot switch the display mode. In Authoring mode, parent hide/show hides and restores handles while generated visuals stay hidden. Show does not expose handles while the house is temporarily hidden. Unbaked pieces, palette templates, unrelated attachments and gameplay visibility retain their existing behavior.

The state saves with the Level and is restored on component registration, reconstruction and Undo/Redo. Existing packages without this field default to Baked. Imported/duplicated houses reset to Baked because their authoring-handle references are cleared. Visibility changes do not rebuild geometry or add Tick polling; gameplay records, IDs, appearances and the central save schema are unchanged.

Local validation: Editor/Game Development builds and both Blueprint compiles pass. EditorAuthoringVisibility passes for native and production Blueprint houses: parent/child toggles, unbaked isolation, no visibility rebuild, initial lazy-handle Undo/Redo, existing-handle Show/Hide Undo/Redo and both display-state serialization round trips. Native inspection after disk reload confirms all 763 existing owner handles remain hidden in Baked mode. Scoped Save/reload preserves the exact 1,166 owner records/settings, 1,112 ISM instances in 12 batches, 54 derived junctions and actual instance matrices/material bindings. Packages remain clean. All 47 canonical HTML documents validate.

Earlier visibility-run regression limits (resolved by the linked follow-ups): 55/57 Building/manual-persistence checks pass. The untouched SnapAssetAudit expects 62 definitions while the current inventory has 63. GarageKit.WallEndpointCommit requires all four historical owner-rim endpoints to be clear; its isolated copy of the current layout finds two. These failures remain recorded separately from the passing visibility test. Physical Outliner click acceptance remains pending; PIE is not required for this Editor-only correction and was not started.

Owner check: toggle the ManualHouse eye off/on repeatedly, including its folder; baked geometry should return and children should stay hidden. Show Authoring Pieces, repeat the eye toggle, then Hide Authoring Pieces. Check Undo/Redo and reopen the saved Level.

Validation evidence

Manual Placement / Revisions

  1. เปิด /Game/Lambeer/World/Maps/L_GeneralHouse/L_GeneralHouse มี ManualHouse, Slab เริ่มต้น และ Palette พร้อมจัดวางแล้ว หรือวาง BP_ManualHouse อีกตัวสำหรับบ้านอื่น
  2. ลาก BP_ManualBuildingPiece ลงในฉาก ใน Details ตั้ง Piece Definition จากโฟลเดอร์ Data/Pieces เช่น DA_Piece_Slab_100 เลือก Resource และ Appearance ที่ Data Asset นั้นรองรับ เปลี่ยน Resource แล้วเลือก Appearance ที่เข้ากันอีกครั้ง
  3. จัดตำแหน่ง/หมุน yaw เอง หรือ duplicate ชิ้นซ้ำ Scale ของบ้านและทุกชิ้นต้องเป็น 1,1,1; Pitch/Roll ต้องเป็น 0 ห้ามยืดชิ้นเพื่อปิดช่องว่าง
  4. วาง Floor Finish ให้ตรงหน้าของ Slab แบบเต็มชิ้น วาง Exterior Finish ให้ตรงผนัง และ Door ให้ตรง hinge ของ Frame ตามระบบ snap เดิม เลือกชิ้น support ไป Bake ด้วย
  5. เลือกชิ้นสำหรับจัดวางทั้งหมดที่ต้องการ พร้อมเลือก ManualHouse ใน Outliner จาก Details หมวด Manual House กด BakeSelectedPieces หาก Details แบบหลายตัวไม่แสดงปุ่ม ให้เลือกบ้านตัวเดียวและล็อก Details ด้วยรูปแม่กุญแจ จากนั้นเลือกชิ้นสำหรับจัดวางและกดปุ่มบน Details ของบ้านที่ล็อกไว้
  6. ตรวจ Validation Status ต้องขึ้น Valid และ Instance Count ตรงจำนวนชิ้น หากไม่ผ่าน แก้ข้อความที่แจ้งแล้ว Bake ใหม่ ระบบคงข้อมูลบ้านที่ผ่านครั้งก่อน ชิ้นสำหรับจัดวางจะซ่อนหลัง Bake
  7. บันทึก Level หลัง Compile Blueprint ให้เลือกบ้านใหม่และล็อก Details ใหม่ก่อนทำงานต่อ ใช้ ShowAuthoringPieces เพื่อแก้บ้าน เลือกชิ้นที่แก้แล้ว Bake ใหม่ ใช้ HideAuthoringPieces กลับมาดู ISM
  8. เมื่อต้องลบชิ้นที่ Bake แล้ว ใช้ Piece Removal Mode ได้โดยตรง หรือปิดโหมดนี้แล้ว Show และเลือก handle ของชิ้นนั้น กด RemoveSelectedPieces บนบ้าน ระบบลบชิ้นและ finish/door ที่พึ่งพาชิ้นนั้นด้วย การกด Delete เฉพาะ handle ไม่ได้ลบข้อมูลที่ Bake ไปแล้ว
  9. นำบ้านที่ Bake แล้วไปใช้ในแผนที่เกมโดย copy/paste หรือ duplicate BP_ManualHouse ทั้ง Actor ค่า House Instance ID จะใหม่โดยอัตโนมัติ ไม่ต้องคัดลอก handle เพื่อเล่นเกม Save แผนที่ปลายทางด้วย
  1. Open /Game/Lambeer/World/Maps/L_GeneralHouse/L_GeneralHouse. A ManualHouse with one baked starter slab is available. Place another BP_ManualHouse for a separate house.
  2. Drag BP_ManualBuildingPiece into the level. Set Piece Definition to an asset under Data/Pieces, such as DA_Piece_Slab_100. Choose a supported Resource and Appearance. After changing Resource, select a compatible Appearance again.
  3. Position and rotate pieces manually; duplicate repeated pieces. Keep house and piece Scale at 1,1,1 and Pitch/Roll at zero. Do not stretch pieces to fill gaps.
  4. Align Floor Finish to the entire matching slab face, Exterior Finish to its wall, and Door to the frame hinge using the existing snap geometry. Include supports in the bake.
  5. Select the required authoring handles and the target ManualHouse in the Outliner. In Details, Manual House, click BakeSelectedPieces. If multi-selection hides the button, select only the house and lock its Details with the padlock, then select the handles and use the button in the locked house Details.
  6. Require Validation Status to say Valid and check Instance Count. Correct validation errors and bake again. A rejected bake preserves the previous valid baked data. Handles hide after a successful bake.
  7. Save the level. After Blueprint compilation, reselect the house and refresh its locked Details before continuing. Use ShowAuthoringPieces to edit, select edited handles and bake again. HideAuthoringPieces returns to the ISM view.
  8. To remove a baked piece directly, use Piece Removal Mode. Alternatively, disable that mode, show and select its handle, then click RemoveSelectedPieces on the house. Linked finish/door pieces are also removed. Deleting only a handle does not remove previously baked data.
  9. Copy/paste or duplicate the entire baked BP_ManualHouse Actor into a gameplay map. It receives a fresh House Instance ID automatically. Handles are unnecessary for runtime use. Save the destination level.

Wood Door retirement — 2026-10-12: Frame/Leaf in both sizes offer only TwoPanelWarmWood, TwoPanelPaleHoney and TwoPanelWhitewashedAsh. New defaults and recognized retired choices fall back to TwoPanelWarmWood in ManualHouse and player Building. Shared old material assets still used by other families are retained. Canonical choices, migration and verification.

Wood Wall/Window retirement — 2026-10-11: shared appearance entries are removed across Editor and player construction. Defaults and recognized retired Wood values use DarkBrownClapboard for Wall and CraftedWarmWood for Window; approved current selections and all Brick/Concrete settings remain unchanged. See the canonical retirement and save migration contract.

ModularKit material quality and review — 2026-10-10

Owner-confirmed usable visual baseline: only SmoothPlasterPartition and DarkBrownClapboard. Other existing ModularKit appearances are provisional and require rework/review; a registered appearance or saved MI is not proof of quality.

For every material revision, follow the canonical material quality workflow: approved direction and suitable reproducible source, matching PBR maps, correct geometry and all visible surface roles, verified metre scale/projection and MI inputs, complete Appearance Set integration, actual UE target/house review, and scoped Save/disk reload. Preserve the owner's current bindings and unrelated house records. Do not restore historical brown partition bindings over the current plaster appearance.

Review applicable sizes, front/back, ends/caps, openings, rotated and mixed-appearance corners, partial-height joins and occupied corners. Each neighbour retains its own appearance; never extend into a wall already present. Hand off actual UE captures and readback/reload evidence with the owner visual decision. Existing automation, owner PIE/rejoin, packaged cook and performance are separate validation scopes; no new runtime acceptance is implied by the two usable visual baselines.

Stage Entry / Exit Criteria

ก่อน Bake: ทุกชิ้นมี Definition/Resource/Appearance ที่ถูกต้องและ support ครบ หลัง Bake: Validation เป็น Valid จำนวนชิ้นตรง Save สำเร็จ ก่อนส่งบ้านเข้าเกม: ID ของแต่ละบ้านต่างกันและ Owner Squad ID ถูกต้อง ก่อนยอมรับ: ผู้ใช้ผ่าน checklist Dedicated Server + สอง clients ด้านล่าง

อย่าคัดลอก House Instance ID เอง และอย่านำ sublevel/Level Instance เดิมมาวางซ้ำเพื่อสร้างหลายบ้าน ระบบนี้ยังไม่แยก ID ตาม placement ของ Level Instance ให้ duplicate/copy ตัวบ้านแทน

Before baking: valid definitions, resources, appearances and complete dependencies. After baking: Valid status, correct piece count and a saved level. Before gameplay handoff: unique house IDs and correct Owner Squad ID. Acceptance requires the owner-run Dedicated Server + two-client checklist below.

Do not manually copy House Instance IDs. Repeated placements of the same sublevel/Level Instance are not supported by this identity implementation; duplicate/copy the house Actor instead.

Review & Revision

กติกาที่ผู้ใช้ยืนยัน 2026-10-05: บ้านที่ Owner Squad ID เป็น GUID ว่างไม่มีเจ้าของ กด X รื้อคืนวัสดุไม่ได้ แม้ผู้เล่นมี Squad แต่ยังโจมตีเพื่อลด HP และทำลายได้ เมื่อกำหนด Squad เจ้าของที่มีอยู่จริง สมาชิกปัจจุบันเท่านั้นใช้ Hammer + X ภายในระยะเดิม 3 เมตรและต้องมองเห็นชิ้นนั้นเพื่อรื้อ รับวัสดุครึ่งหนึ่งปัดลง การทำลายด้วย damage ไม่คืนวัสดุ

ชิ้นเสร็จแล้วแสดงชื่อจริงเมื่อมอง ไม่มี E เติมวัสดุเหมือนชิ้นผู้เล่นที่สร้างเสร็จ สามารถใช้เป็น support/snap ของการก่อสร้างใหม่ได้ การซ่อม อัปเกรด ระบบ claim บ้าน และเปิด/ล็อกประตูยังไม่ได้เพิ่ม DoorLeaf เป็น static ตามระบบผู้เล่นเดิม; Garage ยังใช้ assembly เดิมและ Timeline ที่ผู้ใช้ต้องทำ

Owner decision, 2026-10-05: an empty Owner Squad ID means unowned. X refund demolition is denied, including players who belong to a Squad. Weapon damage still reduces HP and destroys pieces. For a valid existing owner Squad, only current members may demolish with Hammer + X, within the existing 3 m reach and with visibility to the target. Completed demolition returns half the bill rounded down; damage destruction returns no materials.

Completed pieces show their actual name on focus, with no E contribution, matching completed player-built pieces. They provide construction support and snap points. Repair, upgrade, house claim, door opening and locks are not added. DoorLeaf remains static like the existing player-built leaf; the garage uses the existing assembly and owner-authored Timeline.

File Handoff

ข้อมูลบ้านที่ Bake อยู่ใน Actor ภายใน Level: local transform, Piece ID, resource, appearance และ support ID ไม่ใช่ instance index การลบ/HP ที่เปลี่ยนบันทึกผ่าน ULambeerWorldPersistenceSubsystem และ USaveSubsystem SQLite schema 1 เดิม บ้านต้นฉบับที่ยังไม่เปลี่ยนไม่สร้าง save record ทุกชิ้น เมื่อโหลดใหม่หรือ stream กลับมา ใช้ ID เดิมและไม่ทำให้ชิ้นพังเกิดใหม่

การแก้ชิ้นเดิมรักษา Local Piece ID ไว้ การ duplicate สร้างชิ้นใหม่จึงมี ID ใหม่ อย่าแก้ ID เองหลัง world มี save แล้ว ดู สัญญา persistence

Baked local transforms, Piece IDs, resources, appearances and support IDs live on the level Actor. Instance indices are not saved identities. Changed HP and removal use ULambeerWorldPersistenceSubsystem and USaveSubsystem, in the existing SQLite schema 1. Untouched source pieces need no per-piece save record. Restore and streaming reconcile the original IDs without resurrecting destroyed pieces.

Editing an existing handle retains Local Piece ID; duplication creates a new piece identity. Do not edit IDs after a world has saves. See the persistence contract.

Source Control

บันทึกและส่ง Level บ้าน, Level ปลายทาง, BP สองตัว และ Data Asset ที่แก้พร้อมโค้ดระบบ ใช้ current worktree ตามข้อตกลงโครงการ ไม่บันทึกงานอื่นที่ไม่เกี่ยวข้องผ่าน Save All ล็อกไฟล์ binary/review policy ของทีมยังไม่ได้กำหนดในคู่มือนี้

Save and submit the authoring level, destination level, both Blueprints and changed Data Assets with the implementation. Use the current worktree under the project agreement. Save scoped assets rather than unrelated work through Save All. Team binary locking/review policy is not specified by this guide.

Naming & Paths

Blueprint ที่ใช้: /Game/Lambeer/World/Environment/ModularKit/Blueprints/BP_ManualHouse และ BP_ManualBuildingPiece Data Asset: /Game/Lambeer/World/Environment/ModularKit/Data/Pieces/DA_Piece_* ดู Content Folder Structure

ค่า HP จริงอยู่ใน Piece Definition → Resources → วัสดุ → Max Health ผู้ใช้อนุญาตให้ตั้งค่าเริ่มต้น: max(1, Required Units) × factor ตามตาราง ไม่ใช่ balance สุดท้าย Damage อาวุธลด HP ตรง ๆ ไม่มี resistance multiplier เพิ่ม

Blueprints: /Game/Lambeer/World/Environment/ModularKit/Blueprints/BP_ManualHouse and BP_ManualBuildingPiece. Definitions: /Game/Lambeer/World/Environment/ModularKit/Data/Pieces/DA_Piece_*. See Content Folder Structure.

Runtime HP is canonical in Piece Definition → Resources → material → Max Health. The owner delegated initial values: max(1, Required Units) × factor below. These are editable starting values, not final balance. Weapon damage subtracts HP directly, without an added resistance multiplier.

ResourceInitial HP per required unit
Wood50
Brick75
Concrete100
Tile40
Metal125

ตัวอย่าง Slab 100: Wood 8 units = 400 HP, Brick 12 = 900 HP, Concrete 16 = 1600 HP กำหนดแล้วใน 53 current Piece Definitions รวมวัสดุทุกชนิดที่แต่ละชิ้นอนุญาต ค่าที่ตรวจจาก Data Assets

Example Slab 100: Wood 8 units = 400 HP; Brick 12 = 900 HP; Concrete 16 = 1600 HP. Configured in all 53 current Piece Definitions for their supported resources. Verified Data Asset manifest.

Definition of Done

การยอมรับใน PIE ยังรอผู้ใช้: เริ่ม Dedicated Server + สอง clients ด้วยขั้นตอนโครงการ ตรวจรายการนี้ แล้วแจ้งผลที่พบ

  1. มองชิ้นซ้ำที่มีชื่อเดียวกัน ชื่อตามชิ้นที่มอง ไม่มี E/บิลวัสดุเก่า
  2. บ้านไม่มีเจ้าของ: ถือ Hammer กด X ต้องปฏิเสธและไม่มีวัสดุตก
  3. ใช้อาวุธตี/ยิงชิ้นเดิมหลายครั้งจนพัง เฉพาะชิ้นและ finish/door ที่พึ่งพามันหาย ไม่มี refund ชิ้นใกล้กันยังอยู่ทั้งสอง clients
  4. บ้านคนละ placement ไม่เสีย HP/หายตามกัน ยิงต่อหลังชิ้นก่อนหน้าพังยังตรงชิ้น
  5. วางและ snap ชิ้นใหม่กับบ้าน สร้าง finish บน support เดิม ทดสอบรื้อ support ของบ้านที่มีเจ้าของ
  6. บ้านที่มี Squad เจ้าของ: สมาชิก Hammer + X คืนครึ่งปัดลง คนต่าง Squad ปฏิเสธ
  7. ออก/เข้าเกมใหม่ restart server และ stream unload/reload: ชิ้นพังไม่กลับมา HP ที่เหลืออยู่เท่าเดิม ไม่มีชิ้นซ้อน
  8. ทำ packaged cook และ profile Actor/component count, CPU/GPU, collision และ replication ในบ้านจำนวนจริงก่อนยืนยัน performance

Owner PIE acceptance pending: start Dedicated Server + two clients using the project workflow and report these checks.

  1. Focus identical named pieces: labels follow the actual target with no stale E/material bill.
  2. Unowned house: Hammer + X is denied and drops no materials.
  3. Repeated weapon hits destroy the target and explicit dependent finish/door pieces, without refund. Neighbours remain on both clients.
  4. Separate house placements remain independent; hits still target correctly after earlier pieces disappear.
  5. Place and snap new pieces to the house; build finishes on existing supports; test owner-authorized support demolition.
  6. Owned house: current owner-Squad members using Hammer + X receive half rounded down; other Squads are denied.
  7. Rejoin, server restart and stream unload/reload preserve removal and remaining HP without duplicate visuals.
  8. Complete packaged cook and profile Actor/component counts, CPU/GPU, collision and replication with the actual intended house population before accepting performance.

External / Freelancer Handoff

ส่ง Level ที่ Bake แล้วพร้อมภาพ layout, Instance Count/Batch Count, ข้อผิดพลาดที่คงอยู่ และผล checklist ที่ผู้ใช้ทดสอบ อย่าส่งเฉพาะชิ้น Static Mesh/handle ที่ไม่มี baked record อย่าระบุผ่าน PIE หรือ performance โดยไม่มีผลจริง

Deliver the baked level with layout images, Instance Count/Batch Count, known validation issues and owner-reported checklist results. Loose Static Meshes or handles without baked records are insufficient. Do not claim PIE or performance acceptance without observed results.

Bulk floor placement · Viewport Rectangle · TH / EN

Rectangle input correction — 2026-10-08: choose a source mesh, then click its green point to start an editable draft. Releasing that first click leaves the draft unlocked. Move to the opposite corner, click again to lock, then press Enter to place the entire area. Alternatively, drag from the green point across multiple cells and release to lock. A first click cannot prematurely lock a 1 × 1 area, and repeated dispatch of the starting marker cannot count as the opposite corner. Source selection activates the component visualizer's input path before Editor camera/gizmo capture. Slab rectangles use their horizontal plane; Wall rectangles use their vertical width/height plane. An unlocked draft does not commit on Enter.

2026-10-08 verification: Editor build passes; Game target is up to date because the change is Editor-only. All twelve final live ManualHouse tests pass without errors/warnings, including rotated 3 × 2 Slab and Wall input sequences, first-release/repeated-callback protection, click and drag completion, six actual new instances and one-step Undo. Twelve headless tests also passed before the final viewport-world guard. Both authoring Blueprints compile through Unreal MCP with warnings treated as errors. The native input mode now binds after the Level Editor exists and uses weak references during shutdown; a subsequent normal close exits cleanly. Owner layout remains 779 records (763 slabs, sixteen Walls) in two actual visible ISM batches. Saved level/three-plan hashes, identities, poses, resources/appearances, supports and settings are unchanged; the owner level is clean and the exact project is reopened. Scoped evidence. Physical owner viewport gestures remain to be confirmed; no agent PIE, cook or whole-click latency result is claimed.

Owner correction — 2026-10-07: Array mode has been removed because it does not fit the authoring workflow. Placement Mode now offers only Single and Viewport Rectangle. Columns, rows and axis directions display the rectangle selected in the viewport; they are read-only. Saved Rectangle mode retains its serialized value; removed legacy modes fall back to Single.

เลือก Slab, Floor Finish หรือ structural Ceiling ที่ Snap Piece Definition พร้อม Resource/Appearance เปิด Snap Placement Enabled และปิด Piece Removal Mode

  1. เลือก Bulk Placement → Placement Mode → Viewport Rectangle แล้วคลิกจุด snap สีเขียวเป็นมุมแรก
  2. เลื่อนเมาส์ไปมุมตรงข้าม คลิกอีกครั้งเพื่อล็อก หรือ drag จากจุดเริ่มแล้วปล่อยเพื่อล็อก ใช้ Lock Rectangle ได้เช่นกัน จำนวนและทิศทางคำนวณจากมุมใน Viewport
  3. ตรวจ Area Status และจุดเขียว/แดง จุดแดงแสดงสิ่งกีดขวางหรือ support ที่ขาด
  4. กด Apply Placement Area หรือ Enter หลังล็อก ทุกช่องต้องผ่านการตรวจ หากมีช่องที่วางไม่ได้ ระบบไม่เพิ่มชิ้นใดเลย Escape หรือ Cancel Placement Area ยกเลิก draft
  5. Ctrl+Z / Ctrl+Y Undo/Redo ทั้งพื้นที่ แล้ว Save Level ชิ้นแต่ละชิ้นยังเลือก ลบ และแก้ผ่าน Authoring Groups ได้
  1. Select a compatible slab/floor/ceiling definition, resource and appearance. Enable Snap Placement and disable Piece Removal Mode.
  2. Choose Viewport Rectangle and click a source mesh. Click its green first corner, release, move to the opposite corner and click again to lock. You can also drag from the green point across multiple cells and release. Lock Rectangle is available.
  3. Review the cell points and Area Status. Apply Placement Area or Enter commits after locking; Escape/Cancel Placement Area cancels.
  4. Every cell is freshly validated for obstruction and each finish's support. Failure rejects the whole area. Apply uses one Undo transaction with separate stable GUIDs and appends matching records to existing ISM batches. Matching pieces share ISM batches; Show Authoring Pieces creates handles only when requested.

Actual mesh dimensions and the snapped local basis determine spacing. The existing 1–64 cells per axis guard remains. Draft state is transient; saved authoring records and runtime damage/persistence use the existing contract. Choose a new corner after reload or changing mode/definition. To change a locked area, cancel and select its corners again.

Earlier Array-removal validation: Editor/Game Development builds pass; all 67 regression tests pass (66 clean, one existing GameplayCueNotifyPaths warning). All six final focused ManualHouse tests pass without errors/warnings, including the added positive top-Rectangle case. Both Blueprints compile/save through Unreal MCP. Live dropdown offers only Single and Viewport Rectangle. The latest owner-saved layout has 318 pieces in one batch; all captured IDs/poses/resources/appearances/owner/next-snap fields and Rectangle mode are retained after reopen. The map and three plan-asset hashes remain unchanged after the owner save. Actual viewport mouse/drag acceptance remains owner-pending. Current scoped results. Historical initial bulk-floor results include the now-removed Array mode and do not describe the current menu.

Wall Rectangle: width × height — 2026-10-07

Owner decision: Viewport Rectangle now also fills a vertical Wall plane with independent Wall modules. The two corners determine width and height. Floors retain their horizontal rectangle behavior. The shared Details category is Bulk Placement, with Placement Mode, read-only Area Columns / Area Rows and Area Status.

  1. Select ManualHouse, choose a Wall definition and supported Resource/Appearance under Snap Placement, enable Snap Placement and disable Piece Removal Mode.
  2. Choose Bulk Placement → Placement Mode → Viewport Rectangle. Face the intended Wall plane with the Editor camera and click a valid green snap point on the slab or an existing compatible Wall.
  3. Drag along the Wall face to set width and height, then release to lock. The existing click-to-start/corner and Lock Rectangle actions also apply. Width follows the snapped Wall's local Y axis; height follows local Z. The camera ray intersects this vertical plane, including rotated houses and all four slab sides.
  4. Review the module grid and Area Status. Red cells reject the entire area. After locking, press Enter or Apply Placement Area. Escape or Cancel Placement Area cancels the draft.
  5. Ctrl+Z/Ctrl+Y removes/restores the entire placement in one step. Each Wall keeps its own GUID and can subsequently be removed or edited through the existing tools. Save Level to retain the authored change.

Spacing uses actual mesh width and height, including full/quarter modules. Corners determine both axis signs; the existing 1–64 modules per axis guard remains. Commit resolves the current anchor, appearance, obstruction and support again, independently of cached green cells. Draft anchors are transient. Committed records use the existing level authoring and central world persistence contract; no schema or durable fields were added.

Local verification: Editor/Game Win64 Development builds pass. All 70 automation regressions pass (69 clean plus one existing GameplayCueNotifyPaths warning). EditorWallRectangle covers eight production Blueprint fixtures: full/quarter Walls on all four slab sides, house yaw 37°, positive/negative width, actual registered instance poses/hit IDs, stable one-step Undo/Redo, individual deletion, central world codec and fresh whole-area obstruction rejection. The existing floor/finish, slab-top, lazy-handle and material/Undo regressions pass. Live MCP EditorWallRectangle and EditorLargeHousePlacement also pass without warnings/errors with rendering enabled and no PIE.

The reopened owner house retains all 769 records: 763 slabs and six Walls in two actual visible ISM batches. Both authoring Blueprints compile with warnings treated as errors. Viewport Rectangle is enabled for the selected Wall and saved only in L_GeneralHouse after verifying that layout, house/piece identities, resource/appearance and next-piece settings are preserved. Plan file hashes are unchanged. Slate inspection confirms the new category, mode and action labels.

Rectangle and incremental placement evidence. Owner acceptance pending: try actual mouse dragging on each Wall orientation, confirm width/height and obstruction diagnostics, Apply, Undo/Redo and save/reopen. Validate whole-click responsiveness in the owner scene; no agent PIE or cook pass is claimed.

Automatic Ceiling edges at Walls — 2026-10-12

[OWNER APPROVED OPTION 1 / IMPLEMENTED AND SAVED] The owner reported the overlapping floor/Wall border and selected automatic Ceiling clipping with matching collision. The walking face remains exactly flush with the lower Wall top, with 10 cm thickness downwards; the upper Wall stacks directly on the lower Wall. The floor ends at the Wall face. An exposed Wall-head strip remains visible where no upper Wall covers it.

Automatic geometry: the authored 25/50/100 cm grid, snap origins, IDs, resource/appearance and transforms stay authoritative. The ManualHouse projection subtracts same-level lower-Wall structural footprints, including the existing derived L-corner prisms. Finite Wall footprints handle partial edges, corners and internal partitions without trimming unrelated tile seams. New cut surfaces close each body in the existing CeilingEdge slot; original walking/underside UVs, normals, tangent handedness and material bindings remain intact. Adding, moving or removing a Wall, changing appearance, Undo/Redo, map load, central saved changes and replication rebuild the projection. Both placement orders remain supported.

Collision: each retained closed concrete/plank fragment has a matching convex hull with BlockAll. The removed Wall band has no hidden Ceiling collider. Complex collision uses the clipped render triangles. Uncut modules continue to share ISM batches. Clipped modules use rebuildable ProceduralMesh components, as existing Wall junctions do; they do not inherit source Nanite rendering. Owner PIE/cook/performance acceptance remains pending.

Source correction: the previous wood-source bevel omitted an explicit profile and produced small concave steps. Six wood render meshes now have the intended 0.04 cm / two-segment / profile 0.5 convex bevel; bounds, longitudinal metre UVs, plank widths, three surface slots, material assets and selected Appearance Sets remain unchanged. Editable Blender and six FBX sources are updated; original bytes are retained in the repair evidence. Reimport uses the project-native MCP tool, preserving CPU geometry, full Nanite fallback, surface bindings and source collision settings. Closed/convex source evidence · Actual Unreal mesh reimport.

Owner layout: all 78 Ceiling records in L_GeneralHouse are checked: 24 touching Walls have clipped render/collision bodies and the other 54 remain full modules. All 1,335 records, IDs, current transforms and settings are exact. The current walking datum stays local Z350 / underside Z340. The saved/reloaded projection has 1,232 ISM instances, 13 batches, 79 Wall junction surfaces and 24 clipped Ceiling surfaces.

Persistence: derived triangle buffers and hulls are transient, reconstructed from the existing authored/central records and removal flags. No central save schema or PCG/player catalog change is introduced. Original PCG Ceiling Appearance Sets remain untouched. Central persistence contract.

Validation: Editor/Game Development builds pass; all 68 Building/manual-persistence tests pass with no warnings, including the seven focused Ceiling checks. The latter are a subset. Isolated Editor physics verifies actual capsule blocking, CharacterMovement walkability, underside height, cleared Wall-band collision, partition/corner clipping, placement order and Undo/Redo. Both authoring Blueprints compile with warnings treated as errors. Native MCP compares all 78 actual meshes/materials/poses and the 24 clipped render sections/UVs/collision hulls with the derived result; owner disk reload is exact. The three-bay review reload retains all 42 records, with six clipped panels across the three finishes. No agent PIE/cook/performance result is claimed.

Build, automation, owner/review Save-reload and actual viewport evidence.

Actual Unreal Owner floor / Wall edge
Owner floor / Wall edge — actual Unreal viewport, unretouched; owner acceptance pending.
Actual Unreal Owner 78-panel floor
Owner 78-panel floor — actual Unreal viewport, unretouched; owner acceptance pending.
Actual Unreal Light Wood / clipped top
Light Wood / clipped top — actual Unreal viewport, unretouched; owner acceptance pending.
Actual Unreal Light Wood / underside
Light Wood / underside — actual Unreal viewport, unretouched; owner acceptance pending.
Actual Unreal Dark Wood / clipped top
Dark Wood / clipped top — actual Unreal viewport, unretouched; owner acceptance pending.
Actual Unreal Dark Wood / underside
Dark Wood / underside — actual Unreal viewport, unretouched; owner acceptance pending.
Actual Unreal Concrete / clipped top
Concrete / clipped top — actual Unreal viewport, unretouched; owner acceptance pending.
Actual Unreal Concrete / underside
Concrete / underside — actual Unreal viewport, unretouched; owner acceptance pending.

Owner-only PIE check: open L_GeneralHouse and start PIE manually. Walk and jump across the repaired floor, tile joins and Wall edges; check that the capsule stays supported and that the underside blocks upward movement at 10 cm below the walking face. Report any snag or fall-through with its location. Agent automation is Editor physics only.

Walkable structural Ceiling — ManualHouse revision

Owner confirmed, 2026-10-11: ManualHouse uses Ceiling for inter-storey floors. Its walking surface is flush with the lower Wall top and its full 10 cm thickness extends down into the room. Upper Walls stack directly on lower Walls, without a Ceiling inserted between them. Both orders are supported: place the Ceiling before stacking an upper Wall, or select the lower Wall in an existing stack. PCG and the player construction catalog retain the previous Ceiling Finish/Slab contracts.

วิธีใช้: เลือกบ้าน → Snap Piece Definition เป็น DA_Piece_Ceiling_25/50/100 → Resource Wood แล้วเลือก LightPlanks (แบบ 1) / DarkPlanks (แบบ 2) หรือ Resource Concrete + CastConcrete (แบบ 4) เปิด Snap Placement และเลือก Wall ชิ้นล่าง คลิกจุดหัว Wall ฝั่งห้อง ใช้ Single หรือ Viewport Rectangle แล้วล็อกมุม / Enter เพื่อวางทั้งพื้นที่ Ceiling ต่อด้านข้างกับ Ceiling ได้ เลือก Wall เดิมเพื่อต่อ Wall ชั้นบนด้วยจุด Stack Above

Authoring: select DA_Piece_Ceiling_25/50/100, then Wood + LightPlanks / DarkPlanks or Concrete + CastConcrete. Enable Snap Placement and select the lower Wall, including in an existing stack. Choose the room-facing Wall-top point. Use Single or Viewport Rectangle; lock the second corner and press Enter. Ceiling-to-Ceiling edges extend the floor. Select the original Wall and Stack Above to continue the Wall directly.

Geometry and collision: fixed 25/50/100 cm modules use the existing quarter-metre grid, bounds (0,0,-10)–(size,size,0) and unit scale. Wall-top poses come from actual mesh faces; only the logical authored grid admits coincident lower-Wall top-band contact. The visible Ceiling and its collision are automatically clipped away from that Wall volume; see the approved edge revision below. Other heights, obstructions and duplicate cells retain fresh validation. Closed render bodies supply visible top, underside and edge surfaces. Uncut modules retain their source solid collision box; clipped modules use closed source-body fragments and matching convex hulls. Complex queries retain the actual render triangles. Slab no longer receives Wall-top or ManualHouse stair Upper Exit snaps. The old Slab foundation and top-stacking tools remain.

Materials: selected concepts 01 Light Wood, 02 Dark Wood and 04 Concrete have editable Blender and Painter sources. Wood has actual plank geometry and fine bevels, longitudinal metre UV0 and end grain edges; Concrete is a closed solid. Each resource shares DA_Appearances_StructuralCeiling_*, with three independent Top / Underside / Edge MI bindings and per-size wood render meshes. Nine direct M_BlendMaster_Nanite instances use separate 2K BaseColor / DirectX Normal / Roughness / AO / Metallic maps, metre tiling and zero displacement/tessellation. Existing PCG Appearance Sets remain separate. Owner concept selection is confirmed; final actual-mesh visual acceptance is still pending.

Retirement and durability: ManualHouse legacy SM_CeilingFinish_* selections, map-authored pieces and central-save manual records migrate to structural Ceiling, retaining stable identity, upper face datum, health/removal flags and contributed units. The former cosmetic support dependency is cleared; this structural panel is independent like the previous Slab. Wood maps to LightPlanks / DarkPlanks; previous Brick/Concrete maps to CastConcrete. PCG/player records without bManualHousePiece retain their old piece definitions. Capture/restore stays on the existing central manual-house save contract, with no schema change. Garage Track support recognizes the new ManualHouse structural panel's actual underside and keeps its existing 300 cm mounting datum.

Owner level migration: the owner authorized replacing all 78 upper SM_Slab_100 / Wood / LightWood tiles in L_GeneralHouse with SM_Ceiling_100 / Wood / LightPlanks. At the original migration snapshot their walking face was local Z=375 cm and underside Z=365 cm; IDs, XY positions, rotations and scales remained exact. The current owner layout is Z=350 / 340 cm at the 2026-10-12 edge-repair snapshot, and this repair preserves that current layout exactly. The other 1,257 authored records and settings are preserved except the authorized next Ceiling selection. The migration and disk reload evidence are linked below.

Build, automation, migration, actual UE review and Save/reload evidence · Closed mesh / UV source checks · Reusable Painter maps and hashes · Concept prompts.

Local verification completed: Editor/Game Development builds, all 64 Building/manual-persistence checks and the nine focused checks pass (the focused checks are a subset). One unrelated connectivity timeout warning is retained in the regression evidence. Isolated Editor physics verifies capsule blocking and CharacterMovement walkable faces on all nine render variants; no PIE was started. Both ManualHouse Blueprints compile. The owner map preserves all 1,335 records, 1,256 ISM instances, 13 batches and 79 derived junction surfaces through disk reload. All 43 new assets and the three-bay review map save clean; its 42 actual instances, separate surface MIs and BlockAll profiles survive reload.

Actual target review: the saved review map is L_StructuralCeilingReview_20261011. These unretouched Unreal captures show the three selected finishes on the 25/50/100 cm meshes, top and underside, 10 cm exposed edges, module joins and a directly stacked Wall. Editor light icons may remain visible. Owner actual-mesh visual acceptance remains pending.

L_GeneralHouse — 78 converted LightPlanks tiles
L_GeneralHouse — 78 converted LightPlanks tiles — actual Unreal Editor capture, 2026-10-11.
Light Wood — top, edge and direct Wall stack
Light Wood — top, edge and direct Wall stack — actual Unreal Editor capture, 2026-10-11.
Light Wood — underside
Light Wood — underside — actual Unreal Editor capture, 2026-10-11.
Dark Wood — top, edge and direct Wall stack
Dark Wood — top, edge and direct Wall stack — actual Unreal Editor capture, 2026-10-11.
Dark Wood — underside
Dark Wood — underside — actual Unreal Editor capture, 2026-10-11.
Concrete — top, edge and direct Wall stack
Concrete — top, edge and direct Wall stack — actual Unreal Editor capture, 2026-10-11.
Concrete — underside
Concrete — underside — actual Unreal Editor capture, 2026-10-11.

Owner-only acceptance: inspect the actual Light/Dark/Concrete top, underside, edges and joins; verify viewport selection/Rectangle and stacked-Wall placement. Start PIE and walk/jump across module seams, inspect the ceiling from downstairs and test collision/damage/restart or rejoin. No agent PIE, cook or performance pass is claimed.

Upper-floor Slab authoring — superseded design, historical implementation

Superseded by the owner: see the 10 cm structural Ceiling replacement. The following records the previous implementation and validation; it is not the current requested inter-storey design.

Owner-authorized implementation: select the existing ManualHouse, enable Snap Placement, disable Piece Removal Mode and choose DA_Piece_Slab_25, DA_Piece_Slab_50 or DA_Piece_Slab_100 with a compatible Resource/Appearance. Click the highest Wall module at the intended floor datum as the active source. Its green upper-floor points fit the Slab underside directly onto that Wall's top; no starter handle or manual Z offset is required.

Hover to select the required side: Snap_WallTop_Slab_Interior_* extends toward local −X and Snap_WallTop_Slab_Exterior_* toward local +X. Both cover the source Wall's full thickness, with the opposite Slab edge aligned to its face. Interior points suit an exterior wall; both sides remain useful on partitions. Wall 25/50/100 and Slab 25/50/100 expose dimension-aware positions along the Wall's local Y axis, including reciprocal alignment when a Slab is wider than the selected Wall. Actual imported mesh bounds determine the height, seam and width; source/house yaw rotates the full pose.

  1. In Single, click the desired green point to add the first upper-floor Slab directly.
  2. In Viewport Rectangle (the default when selecting a Slab), click the desired green point, move to the opposite corner, click to lock, then press Enter or Apply Placement Area. The floor area remains horizontal at the selected Wall-top datum.
  3. Continue from the new Slab's side points, or start another Wall-top area. Place separate areas around the intended stair opening. Undo/Redo operates on each committed piece/area; Save Level preserves the house.

Source selection, hover previews, fresh click resolution and area anchors share the same computed contacts. Existing collision and duplicate checks remain active; an obstruction appearing after preview is rechecked at commit, and a removed Wall invalidates an active rectangle. Slab Top on an existing floor still adds only one directly touching layer; it does not jump to Wall height.

Persistence boundary: this addition is opt-in ManualHouse Editor authoring. Player snap rules remain unchanged. Added floor pieces retain the existing independent GUIDs, ISM batching, source Level serialization and central world BuildingSites codec; no new support dependency, collapse rule, save field or schema version is introduced.

Local verification: Editor and Game Win64 Development builds pass; all 61 Building/manual-persistence checks pass without test errors or warnings. New geometry checks cover all nine Wall/Slab size pairs, either side, cardinal/arbitrary yaw, face height and nonpenetrating contact; the production Blueprint fixture verifies active-source preview/fresh Single commit, rotated reverse-X Rectangle, actual instance counts, atomic Undo/Redo and stable GUIDs, central codec round trips, late world obstruction and deleted-source rejection. Both authoring Blueprints compile with warnings treated as errors. Scoped Save/reload preserves all 1,257 owner records/settings, 1,178 actual ISM instances in 12 batches, 79 derived junctions and component mesh/material bindings/transforms. Packages are saved clean. Regression evidence · Owner Save/reload. Physical owner Viewport/PIE/cook acceptance remains pending; no PIE was started.

Stack slabs on the upper face · TH / EN

เลือก BP_ManualHouse เปิด Snap Placement แล้วเลือก slab ที่ต้องการวาง ใช้ Single คลิกจุดเขียวบนผิวด้านบนของ slab เดิม ชิ้นใหม่แตะผิวบนโดยตรงและวางซ้อนต่อได้จากชิ้นที่เพิ่ม จุดที่ถูกบล็อกซ่อนตามค่าเดิม เปิด Show Blocked Snap Points เพื่อดูสาเหตุ

Slab 100 → Slab 100 มีจุดบนหนึ่งจุด Slab 100 → Slab 25 มีจุดบน 4 × 4 รวม 16 จุด เพิ่มจากจุดขอบ 16 จุด ตำแหน่งใช้ bounds ของ mesh จริงและหมุนตามบ้าน จุดที่ถูกใช้แล้วหรือมี geometry ขวางจะวางไม่ได้ โหมด Viewport Rectangle ใช้จุดด้านบนเป็นมุมเริ่มได้เช่นกัน Save Level เพื่อเก็บบ้านที่แก้

Select a slab on ManualHouse with Snap Placement enabled. In Single, click a green point on an existing slab's top face. The selected slab's bottom touches the source's upper face; click the new slab's top to add another layer. Full-to-full provides one top slot; 100-to-25 provides sixteen tiled top slots plus the existing sixteen edge slots. Different sizes use reciprocal grid alignment and the house rotation. Collision/occupancy validation still applies. Viewport Rectangle can also anchor on a top slot.

This is an Editor authoring extension. Player placement keeps its current snap rules. Stacked slabs use existing independent piece GUIDs, ISM batching, damage records and central persistence fields; this does not introduce a structural-collapse rule or new schema. Save the authored level after placement. Actual owner viewport/PIE/cook acceptance remains pending.

2026-10-08 slab asset revision — integrated locally: source/catalog/FBX, imported bounds and authored collision are verified and saved; all twelve ManualHouse Editor tests pass. New top placements read the actual imported bounds, including mixed-size slabs. The canonical ModularKit dimensions and revision status own this contract. Mesh reimport retains authored piece transforms. The owner-approved L_GeneralHouse releveling is completed and saved: both slab layers and their Wall bases follow the new dimensions, with all 846 piece identities and XY layout preserved. Future top placements continue to use the imported bounds. Physical owner viewport acceptance remains pending. Current validation.

Local validation: EditorSlabTop and all six final ManualHouse tests pass. Regression coverage includes rotated full/quarter stacking, occupied slots, fresh obstruction checks, Undo/Redo, central world-codec identities/poses, retained player snap rules read-only derived controls, top-anchored Rectangle rejection and successful rotated 2 × 2 top-area placement.

Undo / Redo mesh consistency · 2026-10-07

Owner-reported failure: Ctrl+Z removed the new piece's snap points but left its mesh visible. Live MCP inspection confirmed 318 authored records and one reported batch, but three visible ISMs containing 479, 319 and 318 instances. Earlier tests checked reported counts and GUIDs; they did not count every registered mesh component and therefore missed the stale geometry.

Correction: generated component references remain available for level saving/cooking, but are excluded from Undo snapshots. Generated ISM/assembly components do not record their own transactions. Rebuild sweeps actual owned/instance components carrying the ManualHouse generation tag, including legacy generated names, before projecting restored piece records into fresh visuals and hit mappings. Root, snap-authoring and unrelated authored components are retained. Current source records, ownership, durability fields and persistence schema are unchanged.

หลังวางชิ้นใหม่ กด Ctrl+Z: mesh ของชิ้นนั้นต้องหายพร้อมข้อมูลและจุด snap ของมัน จุดสำหรับวางแทนตำแหน่งเดิมต้องกลับมา กด Ctrl+Y: ชิ้นเดิมต้องกลับมาเพียงชุดเดียว รวมทั้งจุด snap และ ID เดิม ทดสอบซ้ำทั้ง Single, Viewport Rectangle และการลบชิ้น แล้ว Save Level/reopen

Owner acceptance: place one top slab, Undo to remove its actual mesh and reopen its slot, then Redo to restore exactly one instance with the same GUID. Repeat several cycles; also test Rectangle placement and individual deletion. Save/reopen the authored level. Actual owner keyboard/viewport acceptance remains pending; no agent PIE pass is claimed.

Local validation: Editor/Game Development builds pass. All 68 regression tests pass (67 clean, one existing GameplayCueNotifyPaths warning); the final expanded EditorUndoVisuals passes without warnings/errors after adding resource/material Undo/Redo and legacy-orphan recovery. The reopened owner house has exactly one visible ISM with 318 instances, matching its 318 records; all captured identities/poses/configuration fields and saved map/plan hashes are preserved. Both Blueprints compile/scoped-save through MCP and the level remains clean. New EditorUndoVisuals fails against the prior implementation and checks actual registered batch/instance totals, visibility, every instance's hit identity and world pose, stable Redo GUIDs, native/production Blueprint houses, unrelated-component preservation and repeated Single/Rectangle/removal Undo/Redo.

Current Undo fix evidence

Select and delete pieces · TH / EN

Ctrl selection and Enter removal — 2026-10-07

Owner-requested controls: enable Piece Removal Mode, then click a visible mesh to select one piece. Hold Ctrl and click additional meshes to add them; Ctrl+click an already selected mesh deselects it. An ordinary click replaces the selection. Every selected piece has an orange outline, and Selected Pieces plus Snap Placement Status report the current count.

With the house selected and Viewport focused, press Enter to remove the entire selected set in one operation. Escape clears the set without deleting. Ctrl+Z / Ctrl+Y undo/redo the whole removal. Delete and the existing Remove Selected Pieces button remain available. Enter outside active Piece Removal Mode retains its area-placement behavior. Empty/stale removal input is consumed safely, without deleting the house Actor.

Selected roots plus their existing explicit attachment dependencies are removed together, with a deduplicated removal count shown before commit. Unlinked neighbours keep their GUIDs, transforms, resources and appearances. Selection is transient, does not add Undo steps and clears after removal, Undo/Redo or reloading/switching the tool/removal mode. The committed authored layout still saves through Save Level; gameplay persistence fields/schema remain unchanged.

Local verification: Editor/Game Win64 Development builds pass without new compiler warnings. All 71 regressions pass (70 clean, one existing GameplayCueNotifyPaths warning); all ten final live ManualHouse tests pass without warnings/errors after the last reload-status change. Both authoring Blueprints compile with warnings treated as errors. The owner-saved map/plan hashes, all 776 layout records (763 slabs and thirteen Walls), identities, poses, resource/appearance and configuration are preserved. Exactly two actual visible ISM batches contain those 776 instances. Removal Mode and Rectangle configuration remain enabled; transient selection is cleared after reopen. Slate confirms Selected Pieces = 0; temporary UI filtering was restored. Build, regression and live preservation evidence. The input regression invokes the production Blueprint visualizer's click and key handlers in an isolated Editor world: Ctrl addition/toggle, plain-click replacement, Enter press versus release/repeat, stale/empty keys, explicit finish cascade, one-step Undo/Redo, actual registered mesh poses/hit IDs, Escape, retained Delete shortcut and no Enter hijack outside removal mode. Agents do not start PIE or delete the owner's map geometry.

Ctrl + drag removal selection — 2026-10-12

Owner-authorized extension: in Piece Removal Mode, hold Ctrl, press the left mouse button on a visible house piece, and drag over the pieces to select. The stroke adds to the current selection; crossing the same piece again never deselects it. The first visible collision surface is selected, so foreground objects still block pieces behind them. Fast moves trace the screen segment between input events. Orange boundaries and Selected Pieces show the accumulated set. Release the mouse to finish selecting, then press Enter to remove the selected set and its explicit dependencies in one Undo transaction.

A Ctrl+click without a drag retains the existing toggle behavior; an ordinary click still replaces the selection. Releasing Ctrl stops the stroke. Escape clears the selection and prevents the current stroke from adding again. Focus loss, switching the house/tool/mode and ending component editing cancel the gesture. Placement Rectangle, Delete and Remove Selected Pieces retain their existing behavior. Selection remains transient; the committed removal persists through Save Level, with no gameplay persistence schema changes.

Ctrl Drag Same ISM Only — owner-requested checkbox: Snap Placement exposes this default-on option while Piece Removal Mode is active. Each Ctrl + left-drag stroke anchors to the actual ISM component hit at mouse-down and adds only pieces in that component. Crossing a different piece/resource/appearance batch cannot select it. The brush still checks the first visible surface, so it does not select a matching batch through an intervening mesh. A new stroke chooses its own starting batch. Uncheck the option to add pieces across ISM batches. The filter applies to the current stroke; earlier selections and ordinary Ctrl-click toggles are retained.

Individually generated wall-junction surfaces and visible authoring handles are separate components rather than shared ISMs; a protected stroke stays on that starting component. Enter retains the existing explicit attachment cascade. Changing the checkbox during a stroke stops further additions. The checkbox saves with the level as an Editor-only authoring setting; it introduces no gameplay persistence fields/schema. Toggling it preserves generated component identities and performs no house rebuild.

Validation: Editor/Game Win64 Development builds and all 65 Building/Manual persistence tests pass without test errors/warnings. The mixed-batch input regression verifies checked/unchecked strokes, both starting batches, mid-stroke protection changes and Enter/Undo with unrelated batch GUIDs retained. The tool-property regression verifies checkbox changes preserve registered components without rebuilding. Both authoring Blueprints compile warnings-as-errors. Scoped Save/reload verifies the checkbox remains enabled and preserves all 1,257 owner records/settings, actual mesh/material/instance poses, 12 ISM batches and 79 derived junctions; packages are clean. Evidence. Owner physical mouse acceptance remains pending. With the checkbox checked, drag from one Slab size/material across a second batch, confirm only the starting ISM highlights, then repeat with it unchecked.

Validation: Editor/Game Win64 Development builds pass. All 65 Building/Manual persistence regressions pass without test warnings/errors, including the registered removal mode mouse-down/move/release handlers, fast segment sweep across rotated slab instances, repeated crossings, Ctrl click, Ctrl release, Escape/focus cancellation and Enter with one-step Undo. Both authoring Blueprints compile with warnings treated as errors. Scoped Save/reload preserves all 1,335 owner records/settings and actual component meshes/materials/instance poses (13 ISM batches plus 79 derived junction components). Build, test and preservation evidence. Physical mouse/keyboard acceptance remains owner-pending. Check a fast stroke across several visible slabs, reverse over them, release the mouse, Ctrl+click one selected piece to toggle it, then Enter and Ctrl+Z. Agents do not start PIE.

Mesh selection and source point visibility — 2026-10-07

Owner approved the combined proposal; implemented locally. Show All Points defaults off. In Piece Removal Mode, hover a visible mesh to see its cyan boundary and click the mesh to select it. Selected pieces have orange boxes. Ctrl+click adds/toggles selections; Ctrl+drag adds every visible piece crossed by the cursor, and Enter removes the selected set, Escape clears and Ctrl+Z restores the operation. No removal markers are drawn by default. Picking uses the first visible collision surface and current house hit mappings; a foreground object prevents selecting house pieces behind it. Hidden Editor actors/components are ignored. Transform widgets, camera modifiers and other actors retain their normal input.

Placement: disable Piece Removal Mode, choose the next Definition/Resource/Appearance, and click an existing house mesh as the active snap source. Active Snap Source reports its piece type and an orange box identifies the exact source. Only that source's compatible points appear: green can be placed, red diagnostics require Show Blocked Snap Points. Hover a point for the single preview, then click green for Single or start the existing Slab/Wall Rectangle workflow. The source stays selected after placement so another mesh click explicitly changes it. Escape clears the source when no area is active; in an active Rectangle, Escape cancels the area first. Undo/Redo, reload and tool/removal-mode changes clear transient source selection.

Diagnostics: enable Snap Placement → Show All Points to restore every cyan removal marker or placement candidates from all sources. Mesh selection and Ctrl/Enter remain available. Disable it to return to the clear default display. This diagnostic setting is Editor-only and can be saved with the level; hover and active-source/selection state are transient. Authored IDs, poses, appearance, dependency cascades and central gameplay persistence fields/schema retain their existing contract.

2026-10-07 verification: Editor/Game builds pass; 72 regressions pass (71 clean, one existing GameplayCueNotifyPaths warning). All eleven final live ManualHouse tests pass without errors/warnings after the final status-text adjustment, and both authoring Blueprints compile with warnings treated as errors. The new regression exercises front-surface/foreign occlusion and hidden-Editor filtering, actual point/box draw counts, source cache switching, registered Editor mode mesh clicks with real viewport modifier state, Ctrl selection, Enter removal, one Undo, Escape and retained Wall Rectangle anchors. A 765-piece fixture displays four candidates from the active source instead of 3,060 from the whole house; candidate generation measures 0.006036 versus 0.019751 seconds in that isolated run, without claiming whole-click or scene FPS performance. Owner layout remains 776 records (763 slabs and thirteen Walls) in two actual visible ISM batches; saved level/plan hashes, identities, poses, materials/supports and configuration are unchanged. The level is clean and the Editor is reopened with Show All Points off and transient selection/source cleared. Slate verifies the unchecked option. Evidence bundle · Current Editor view. Physical mouse/keyboard usability remains owner-pending; agents do not start PIE. The original proposal anchor is retained for existing links.

Retained single-piece and handle workflow: the earlier Delete/button instructions below remain alternatives; use the current Ctrl/Enter controls and selection counts above for multiple pieces.

ลบชิ้นที่ Bake แล้วใน Editor: เลือก BP_ManualHouse เปิด Snap Placement Enabled และ Piece Removal Mode ในหมวด Snap Placement ชี้ mesh เพื่อดูขอบเขต แล้วคลิกเพื่อเลือกชิ้นที่ต้องการ กรอบสีส้มแสดงชิ้นที่เลือก ใช้ Ctrl+คลิก เพื่อเพิ่มหรือยกเลิกแต่ละชิ้น แล้วกด Enter ใน Viewport เพื่อลบทั้งหมด Escape ล้างการเลือก และ Ctrl+Z ย้อนการลบได้ เปิด Show All Points เมื่อต้องการดูจุดสีฟ้าทั้งหมด ปุ่ม Remove Selected Pieces และ Delete ยังใช้ได้

ใช้ Ctrl+Z / Ctrl+Y เพื่อ Undo/Redo การลบ ปิด Piece Removal Mode เพื่อกลับมาวางชิ้น จุด snap จะตรวจช่องว่างใหม่ทันที เลือก Definition/Resource/Appearance แล้ววางแทนช่องเดิมได้ ID และ local transform ของชิ้นที่เหลือคงเดิม แม้ลำดับ instance ภายใน ISM จะเปลี่ยน ชิ้นใหม่มี ID ใหม่ กรณี Slab 25 บนขอบ Slab 100 ช่องที่ลบกลับมาวางได้ที่ตำแหน่งเดิม รวมบ้านที่หมุน

ลบเฉพาะชิ้นที่เลือกและชิ้นที่มี SupportLocalPieceId พึ่งพามันตามกติกาเดิม เช่น finish/กรอบ/ประตู/trim ที่ผูกไว้ ชิ้นข้างเคียงที่ไม่ได้ผูกไม่ย้ายหรือลบตาม การลบนี้เป็นการแก้ต้นฉบับบ้านใน Editor และบันทึกด้วย Save Level; สิทธิ์รื้อบ้านไม่มีเจ้าของและการทำลายด้วยอาวุธในเกมใช้กติกาเดิม ถ้าลบทุกชิ้น จะไม่มีต้นทาง snap ให้ใช้ slab เริ่มต้นและ Use Starting Piece อีกครั้ง

บ้านที่คัดลอกมาโดยไม่มี handles ก็เลือกและลบผ่าน mesh ได้ วิธี Show Authoring Pieces → เลือก handles → Remove Selected Pieces ยังใช้ได้เมื่อปิด Piece Removal Mode อย่าลบเฉพาะ handle จาก Outliner เพราะ baked record จะยังอยู่

ตรวจโดยผู้ใช้: เลือกและลบ Slab 25 กลางแถว ดูว่าชิ้นข้างเคียงอยู่ตำแหน่งเดิม ปิดโหมดลบแล้ววางช่องเดิม Undo/Redo และ Save Level/reopen ตรวจชื่อและ ID ของชิ้น ทดสอบลบ support ที่มี finish และอ่านจำนวนชิ้นใน Status ก่อนลบ การคลิกและ Delete จริงใน Viewport ยังรอผู้ใช้ยืนยัน

Delete a baked piece in the Editor: select BP_ManualHouse, enable Snap Placement Enabled and Piece Removal Mode under Snap Placement. Hover a visible mesh for its boundary; click it, then Ctrl+click other meshes to add/toggle further pieces, or hold Ctrl and left-drag from a house piece to add every visible piece crossed by the cursor. Show All Points restores cyan diagnostic markers. Orange boxes identify the selected set and Snap Placement Status reports selected/removal counts including explicit dependencies. Press Enter in the viewport to remove the set; Escape clears selection. Delete and Remove Selected Pieces under Manual House in Details are retained alternatives. Keep the house selected and the viewport focused for shortcuts.

Use Ctrl+Z / Ctrl+Y to undo/redo deletion. Disable Piece Removal Mode to resume placement. Snap validation refreshes the gap immediately; choose Definition/Resource/Appearance and place a replacement at the original pose. Surviving GUIDs and local transforms remain unchanged despite ISM index compaction; replacement pieces receive new GUIDs. Deleted Slab 25 slots reopen at their original Slab 100 edge poses, including rotated houses.

Only the selected piece and its explicit SupportLocalPieceId dependency group are deleted, using the existing finish/frame/door/trim rules. Unlinked neighbours keep their identities and poses. This edits the authored source in the Editor and persists through Save Level. Runtime ownership, unowned demolition denial and weapon destruction retain their existing rules. Removing every piece leaves no snap source; adopt a new starting slab with Use Starting Piece.

Copied houses without handles also support direct mesh selection. The existing Show Authoring Pieces → select handles → Remove Selected Pieces workflow remains available with Piece Removal Mode disabled. Deleting only a handle from the Outliner leaves its baked record intact.

Owner acceptance: delete a middle quarter slab, confirm neighbours retain their poses, disable removal mode and refill its exact slot, undo/redo, and save/reopen the level to verify IDs. Test a support with a dependent finish and review the removal count before deleting. Actual multi-selection and Enter/Undo/Redo mouse-and-key acceptance remain owner-pending.

Validation evidence: Local build, automation and preservation results. Editor-only selection/cached bounds are stripped from gameplay. Durable gameplay fields and the central persistence schema are unchanged.

Named authoring groups · Resource, Appearance and visibility

Owner revision — 2026-10-15: create named groups and assign the intended pieces explicitly. This replaces the former physical-ISM-batch editing workflow. Group membership uses stable local piece IDs and is independent of mesh size, resource, appearance and the generated ISM component. Matching render batches can merge without merging authoring groups. New houses start without inferred floor, room or material groups. The owner-approved current GeneralHouse mapping below is an explicit assignment for that house.

  1. Select BP_ManualHouse and open Authoring Groups in Details. Keep the default-enabled Hide Whole House Outline checked to suppress the house-wide yellow selection outline while keeping the house selected. Group and piece highlights remain available.
  2. Enter a unique Group Name, then click Create Group. Select a group row to make it the edit target and outline every visible member. The list shows the group's name, member count and visibility. Rename Group changes only its label; Delete Group keeps its pieces, removes their membership and makes them visible.
  3. Enable Select Group Members. Click a visible piece to select it, Ctrl+click to toggle another, or Ctrl+drag across visible pieces to add them. This mode works with Snap Placement Enabled off. The group-selection brush crosses visible ISM batches; Ctrl Drag Same ISM Only still applies only to Removal Mode. Escape clears the working piece selection. Enter, Delete and Backspace do not remove pieces in group-selection mode.
  4. Check the Selected pieces count, then use Add Selected Pieces to assign them to the selected group. Each piece belongs to at most one group: adding an already grouped piece moves it from its previous group. Remove Selected Pieces removes only membership; Clear Piece Selection clears the working selection. Neither action deletes the building pieces. Disable Select Group Members when returning to snap placement or Removal Mode.
  5. Select the target group before editing its Resource and Appearance, then click Apply Group Changes. Options are the intersection supported by every member, including groups containing different piece types and sizes. Draft dropdown changes do not edit existing pieces. Apply validates all members atomically; any unsupported choice rejects the entire edit. Review Group Edit Status and Validation Status. Next-snap definition, resource and appearance remain unchanged.
  6. Uncheck a group's Visible checkbox to hide that group in the Editor. Several groups can be hidden together. Check it again to restore that group, or click Show All Groups. Save the Level after authoring changes; use Ctrl+Z / Ctrl+Y for Undo/Redo.

First-floor interior example: create and populate 2fCeiling, 2fWall and 1fCeiling using their actual pieces. Uncheck Visible on all three groups. Select the group containing the first-floor interior walls to inspect exactly which members an appearance edit will affect. When finished, restore the hidden groups with their checkboxes or Show All Groups. No storey or room classification is inferred from geometry or height.

Place new pieces into the selected group — 2026-10-16

Owner-approved option 1: the currently selected named group is the destination for new Single and Viewport Rectangle placements. Auto-add to Selected Group is enabled by default. This follows the selected group directly; selecting a different group to inspect its members also changes the next placement destination. Every newly placed piece joins that group, regardless of its type.

  1. In Authoring Groups, select the intended group, for example 1fCeiling. Disable Select Group Members to return to placement; this preserves the selected named group.
  2. In Snap Placement, keep Auto-add to Selected Group checked and verify the Placement Group label: New pieces -> 1fCeiling. The destination is also shown in Authoring Groups and the viewport placement overlay.
  3. Choose the piece, Resource and Appearance using the normal placement controls. Place a Single piece, or preview and commit a Rectangle. All accepted new records join the group selected when the placement commits, including a group selected during the Rectangle draft. Geometry and membership share one placement transaction. One Undo removes that placement and its membership together; Redo restores both.
  4. Uncheck Auto-add to Selected Group to place ungrouped pieces while retaining the selected group for inspection. The label reads New pieces -> Ungrouped (Auto-add off). With no valid selected group, it reads New pieces -> Ungrouped (select a group).

Visibility and settings: a hidden destination remains hidden and its new members follow that visibility; the label appends (Hidden). Restore the group's Visible checkbox when you want to see those pieces. Group membership does not copy or change Resource/Appearance. Placement continues to use the current snap controls and normal collision/support validation. Existing pieces are not reassigned by toggling auto-add.

Save and reload: the auto-add checkbox is Editor-only authoring state saved with the house's Level. The selected group remains transient, so after reloading the Level select a destination again before placing. Group membership saves with the existing authoring groups. This adds no gameplay upgrade state or central world-save schema.

Implemented and verified locally — 2026-10-16: Editor and Game Win64 Development builds pass. All 47 ManualHouse automation tests pass without test errors or warnings, including three new checks covering Single placement, Rectangle placement through the production Blueprint, and the saved Editor-only preference. Coverage verifies exact new membership, current placement Resource/Appearance, immediate group summaries, current-group routing at commit, atomic rejection, one-step Undo/Redo with stable IDs and poses, hidden target rendering, and ungrouped off/no-target/stale-target fallbacks. 47 regression results.

Live Details and disk verification: actual group-row clicks switch the destination between 1fCeiling and 1fExteriorWall; actual checkbox clicks update the bound label. Neither action rebuilds house geometry. Both disabled and enabled checkbox states survive scoped Save and a Level disk reload; selected-group focus resets as transient state. The current owner baseline of 1,622 source records, existing settings and all 14 group IDs, member arrays and visibility flags remain exact, together with actual instance transforms, materials and Editor visibility. The final checkbox is enabled, the original exterior-wall group and camera are restored, and the Level is saved clean. Live UI, preservation and Save/reload evidence · Group-target label readback. Owner physical viewport usability and visual acceptance remain pending; no PIE was started.

Viewport label evidence: a forced native MCP viewport capture with Editor UI visibly shows New pieces -> 1fExteriorWall, matching the live selected target. Actual viewport destination label. This verifies the displayed label; it does not establish owner physical placement or visual acceptance.

Owner-approved GeneralHouse grouping — 2026-10-15

Source of truth for saved membership is the placed BP_ManualHouse in /Game/Lambeer/World/Maps/L_GeneralHouse/L_GeneralHouse. The following table records the owner-approved 2026-10-15 assignment snapshot, preserving the existing exterior-wall members. That snapshot had one authored storey and empty second-floor groups prepared for later pieces; its counts are historical and do not include subsequent owner placements.

RoleFirst-floor groupMembersSecond-floor groupMembers
Slab / plinth1fSlab8352fSlab0
Exterior Wall1fExteriorWall4702fExteriorWall0
Interior Wall1fInteriorWall1102fInteriorWall0
Window1fWindow162fWindow0
Exterior Door1fExteriorDoor62fExteriorDoor0
Interior Door1fInteriorDoor42fInteriorDoor0
Ceiling1fCeiling782fCeiling0

Explicit owner decisions: in the approved snapshot, 1fSlab contains the 763 Slab records plus all 72 concrete SM_Wall_Solid_25 plinth records. This latest decision supersedes the earlier exterior-wall and geometric split proposals; it changes membership only, not the plinth's source type, pose or material. Clapboard and smooth partition records form the exterior/interior Wall groups. Each Door group includes matching frames/openings and leaves; the garage opening and swing door are Exterior Door members. The four entrance stair records remain ungrouped. The snapshot's Slabs are at Z25/50 and Ceilings at Z350, so none are assigned to a second-floor group.

To expose the current interior, hide 1fCeiling and select 1fInteriorWall. Later, hide the populated 2fCeiling, 2fExteriorWall and 2fInteriorWall groups as needed. The empty second-floor groups currently hide no pieces.

Implemented and verified locally: all 14 groups are saved with the approved 1,519 unique members and four ungrouped stairs. The original exterior group ID and its 12 members are retained. An actual Level switch and disk reload preserve every group ID, membership and visibility flag; all 1,523 source records and original settings remain exact. Actual ISM transforms, materials and Editor visibility match those records, and the Level is saved clean. The Editor Development build and real Details Create/Rename/Delete/Undo/Redo checks pass. Follow-up validation results. Owner physical Viewport and visual acceptance remain separate.

Approved mapping and per-piece rationale · CSV audit · GUID integrity · Source classification plan.

Details refresh correction — 2026-10-15: Create Group, Delete Group and Undo/Redo request a deferred full Details rebuild so the group rows, counts and empty-state message reflect the current data. The previous tree-only refresh could leave No groups yet. Create a group... visible after a group had been created. The rebuilt Editor passes actual Slate Create without actor reselection, Rename with the same group ID, Delete, Undo and Redo. The temporary production-Blueprint fixture was removed after verification.

Group selection responsiveness — 2026-10-15

Implemented and locally verified: selecting a group previously refreshed its presentation twice, dirtied all 19 ISM batches and 145 derived surfaces, and reconstructed membership through linear array searches for every component outline query. A full Details rebuild also repeated catalog option queries for every member. Selection now uses hashed membership and a cached component-outline lookup, compares instance selection masks before sending changed contiguous ranges, and pushes derived-surface selection to the existing render proxy. It does not rebuild house geometry. Resource/Appearance intersections query each distinct Piece ID once.

Group selection refreshes bound Details values and updates Group Name directly; dropdown choices regenerate when opened. Create, Rename, Delete and Undo/Redo retain the deferred full Details rebuild required for structural group-list changes and the empty-state message.

Owner groupVerified outline membersSynchronous native selection
1fSlab8352.2009–2.3497 ms across four samples
1fInteriorWall1100.9820 ms, one sample
1fExteriorWall4701.5995 ms, one sample

Measurement boundary: these timings cover the synchronous native selection method only; they exclude GPU work and the whole Details/Slate interaction. No end-to-end speedup or RPC timing baseline is claimed. Actual Slate clicks on the owner house select the intended group IDs and exact outline members, retain group-button references, perform precisely one presentation refresh per click and trigger zero geometry rebuilds. Selecting the same Slab group again resends no instance selection masks.

Validation: Editor Win64 Development build passes; all 44 ManualHouse regressions pass without test errors or warnings, including the new 1,523-piece / 835-member projection regression. Real Details Create/Rename/Delete/Undo/Redo pass with the temporary Blueprint fixture removed; Resource display and choices update without rebuilding the panel. The owner house retains all 1,523 source records, all 14 group IDs/memberships/visibility flags and original settings exactly after disk reload and the final live check before Save. Its scoped Save is clean, the original camera is restored and 1fInteriorWall is selected. Consolidated validation and final state · Actual owner selection measurements · Focused regression results. Owner physical responsiveness and visual acceptance remain pending; no PIE result is claimed.

Identity and rendering: group operations retain House Instance ID, each local piece ID, local pose and support link. Resource/Appearance changes operate on the selected group's explicit members and synchronize existing authoring handles. A material edit does not expand membership when rendering batches merge. ISM batching remains an internal render projection; component material overrides are still replaced by rebuilding. Group membership, names, Editor visibility and the whole-house outline preference are Editor authoring state saved with the Level, not new gameplay upgrade or central world-save fields. The existing runtime persistence contract remains authoritative.

Editor isolation: hidden groups are omitted from the baked ISM, derived Wall/Ceiling and authoring-handle display. Hidden members are excluded from direct selection, Removal Mode candidates and snap-source points. Their records, support relationships and collision remain present, so hiding a piece does not create free building space or remove a support. Visibility restores from the saved Level and does not hide the group in gameplay. Selecting a hidden group keeps it hidden; restore Visible to inspect its member outlines.

Implemented and verified locally — 2026-10-15: Editor/Game Development builds and all 81 Building/manual-persistence regressions pass, including six focused group/input/drag checks, with no test errors or warnings. The production Blueprint fixture verifies explicit membership, a selected subset of a shared ISM with actual mesh outlines, derived Wall outlines, hidden same-batch/derived members, real Details row selection and Show All Groups, and atomic Resource/Appearance Apply with next-snap settings retained. An actual map switch and disk reload preserve all three fixture group IDs, memberships and hidden flags plus its five pieces; selected-group focus correctly resets as transient state. Both authoring Blueprints compile with warnings treated as errors. After fixture removal and scoped saves, the three packages are clean and the owner house retains all 1,523 records/settings, 1,378 ISM instances, 117 derived Wall surfaces and 28 derived Ceiling surfaces. The owner house is selected in L_GeneralHouse with its whole-house outline hidden. No PIE was started.

Owner acceptance remains pending: physically select/brush pieces, inspect group highlight appearance and use the first-floor isolation example above, then Undo/Redo and reopen the saved Level. Native input tests and fixture captures do not establish owner usability or visual acceptance. Existing owner-only PIE, packaged cook and performance checks remain separate.

81 regression results · Six focused checks · Save/reload and preservation evidence.

Actual Editor captures: One selected slab inside a shared ISM · Selected derived Wall · Hidden groups · Authoring Groups controls · Selected owner house without its global outline. Fixture images show an isolated test house; the fixture was removed after verification.

Historical physical-ISM editing evidence — superseded workflow

The 2026-10-07 implementation edited an entire physical batch identified by Piece ID + Resource + Appearance and updated next-snap defaults. Its merging behavior, 65-test run and ten-piece fixture Save/reload describe that earlier implementation, not the current named-group acceptance result. The old panel screenshot is retained for provenance only.

Historical build, regression and live preservation evidence.

Historical superseded ManualHouse physical ISM group editing panel
Historical physical-ISM group panel, superseded by explicit named authoring groups on 2026-10-15.

Editor action responsiveness — 2026-10-11

Owner-authorized implementation, locally validated. Native tool controls (Removal Mode, snap/display settings, placement mode and group selection controls) retain transaction/property notifications without unregistering components or reconstructing the house. Editing authored Pieces still follows actor reconstruction. Applying group Resource/Appearance changes remains an explicit geometry operation.

Switching the active source reuses a validation context keyed by scene revision, house transform and selected definition/resource/appearance. Geometry, relevant asset edits and transactions invalidate scene data. Each source still computes its own candidate results; fresh single-piece and rectangle commit validation remains mandatory. Editor hit identities and highlight candidates use indexed lookups; ordinary drawing visits selected/hovered pieces, while Show All Points retains the complete diagnostic view. These caches are derived Editor memory only; stable IDs, transforms, appearance bindings and the central gameplay persistence schema are unchanged.

MeasurementBeforeAfter
Selected production house: Removal Mode on2.95–3.10 s0.82–0.96 ms
Selected production house: Removal Mode off2.92–2.94 s0.328–0.332 s
765-slab fixture: source candidates after all-source pass9.671 ms0.130 ms

The production sample contains 988 records, 8 ISM batches (964 instances) and 24 derived junction surfaces. Toggle samples are four native MCP property edits timed inside the live Editor, with original settings restored and all captured owner fields compared. They include tool/notification work, exclude HTTP transport, and do not measure physical mouse-to-present latency. The source comparison is one run of the same Editor automation fixture, not a production Garage latency or FPS claim. An additional 100-source switch regression reuses one validation context without rebuilding geometry.

Validation: Editor and Game Development builds; both production Blueprints compile; 38 focused regressions pass, with one existing GameplayCueNotifyPaths warning. New tests cover PreEdit/PostEdit component identity/registration, real nested pose edits, tool-setting Undo/Redo, cross-house cache invalidation and exact hit identity. Existing tests cover stale-click rejection, rectangle commit, removal, geometry, Garage support and persistence. Scoped Save and native disk reload preserve all owner records/settings and actual component material bindings, poses and ISM matrices, restoring all 24 transient junctions automatically.

Remaining limits: real geometry changes and group application can still rebuild the house. Undo/Redo was subsequently improved in the placement follow-up. The measured mode-off path still takes about 0.33 s. Owner physical viewport acceptance, PIE, packaged cook and scene CPU/GPU profiling remain separate. Suggested owner check: toggle Removal Mode, select/Ctrl-select pieces, switch snap sources, place/remove, and Undo/Redo.

Validation and timing samples · Save/reload evidence

Placement and Undo responsiveness — 2026-10-11

Owner follow-up, implemented and saved. The owner reported residual hitches when placing pieces and pressing Ctrl+Z after the tool-control improvements. Undo/Redo now reconcile existing ISM batches and wall-junction surfaces against restored records, preserving unchanged components. Changed instances retain exact hit-to-piece mappings; corners can return to straight walls and be reconstructed on Redo. This includes component Undo callbacks that run before the actor callback. Unreal actor Undo handling is retained; inconsistent or legacy projections fall back to a full rebuild.

Wall-junction discovery transforms each bounds box once and uses an X-axis sweep to find nearby pairs, preserving the original pair/cut ordering. Fresh validation shares its calculated junction shapes with the same commit. Each record-reading pass resolves required units once per piece/resource combination instead of repeatedly loading the same Data Asset for every instance. There is no cross-edit asset cache: the next pass reads current asset data. Stable IDs, authored records, material bindings, collision/support rules and central persistence schema are unchanged.

OperationBefore, medianAfter, median
Place one wall45.0 ms23.4 ms
Undo placement126.2 ms49.5 ms
Redo placement91.7 ms35.7 ms

Measurement scope: three synchronous native samples per operation on the same production Blueprint fixture in a transient Editor world: 765 slabs and 224 walls, 989 logical pieces including 24 derived corner surfaces. These are native function/transaction timings, not physical click latency, production-scene FPS or owner acceptance. The previous selected-house Removal Mode measurements remain separate.

Validation: Editor and Game Development builds pass; 54 Building/manual-persistence tests pass. New regressions repeat add/Undo/Redo, assert unchanged component identities, verify every restored ISM hit and pose, and exercise corner-to-straight-to-corner restoration. Existing coverage includes bulk placement, deletion, group appearance changes, rotated/contact/occupied junctions, Garage support and persistence. The suite reports one RHI reserved virtual-resource budget warning and the existing GameplayCueNotifyPaths warning, with no test errors. Both production Blueprints compile; scoped Save and native disk reload preserve all 988 owner records/settings, 8 ISM batches and 24 junctions, including actual instance matrices and material bindings.

Remaining limits: transaction serialization, component registration and rendering can still take time. Ordinary geometry edits and incompatible projections may rebuild. Physical viewport responsiveness, owner PIE, packaged cook and full-scene CPU/GPU profiling remain unverified. Owner check: place several pieces, repeatedly Ctrl+Z/Redo, then inspect their corner shapes, materials and clickable identities.

Timing and validation evidence · Owner Save/reload evidence

Snap tool performance · TH / EN

การปรับเครื่องมือ 2026-10-06: จุด snap แสดงเป็นจุดเล็ก นำเมาส์ชี้จุดเพื่อดูกรอบชิ้นที่จะวางเพียงจุดเดียว แล้วคลิกจุดเขียวตามเดิม จุดที่ถูกบล็อกซ่อนเป็นค่าเริ่มต้น เปิด Show Blocked Snap Points ใน Details หมวด Snap Placement เพื่อดูจุดแดงและคลิกอ่านเหตุผลใน Snap Placement Status ตำแหน่งที่รองรับยังครบ รวม Slab 25 ทั้ง 4 ตำแหน่งต่อขอบ Slab 100

เครื่องมือเก็บผล snap ไว้ใช้ซ้ำขณะหมุนกล้อง ผลจะคำนวณใหม่เมื่อแก้บ้าน เลือก Definition/Resource/Appearance ใหม่ แก้ชิ้นหรือสิ่งกีดขวาง แก้ asset ที่เกี่ยวข้อง หรือ Undo/Redo การตรวจแต่ละครั้งใช้ข้อมูลบ้านและขอบเขต mesh ร่วมกัน ตอนคลิกยังคำนวณตำแหน่งจากชิ้นต้นทางปัจจุบันและตรวจ collision/support ใหม่ เพื่อปฏิเสธ preview ที่ล้าสมัย ID, damage, demolition และ save ใช้กติกาเดิม

ตรวจโดยผู้ใช้: หมุนกล้องและชี้จุด ตรวจว่ามีกรอบครั้งละหนึ่งชิ้น ทดลองเปิดจุดแดง วาง Slab/Wall แล้ว Undo/Redo และย้ายสิ่งกีดขวางเข้า/ออกจุด snap การลดงานคำนวณซ้ำยังไม่ใช่ผลวัด FPS/CPU/GPU ของฉากจริง; ยืนยันความลื่นด้วย Editor ของผู้ใช้ต่อไป

Tool revision, 2026-10-06: snaps use small points. Hover a point to see one piece bounds preview, then click a green point as before. Blocked points are hidden by default; enable Show Blocked Snap Points in Snap Placement to inspect red points and click them for a reason in Snap Placement Status. Every supported placement remains available, including all four Slab 25 positions on each Slab 100 edge.

Candidate results are cached during camera movement. House edits, definition/resource/appearance changes, geometry or relevant asset edits and Undo/Redo invalidate the cache. Each validation pass shares house records and mesh bounds. A click resolves the seam from current source data and performs fresh collision/support validation, independently of preview results. Existing identity, damage, demolition and save rules remain in effect.

Owner check: move the camera and hover points; confirm at most one bounds preview. Toggle blocked diagnostics, place slabs/walls and Undo/Redo, then move an obstruction into and out of a seam. Reduced repeated work is not a measured scene FPS/CPU/GPU result; Editor responsiveness acceptance remains with the owner.

Current L_GeneralHouse with small snap points and no repeated wire boxes
ภาพ Editor หลังเปิด build ใหม่: บ้าน 23 ชิ้น / 3 ISM batches แสดงจุดเล็กและซ่อนจุดบล็อก ภาพนี้ไม่ได้ทดสอบการชี้เมาส์หรือคลิก
Editor capture after reopening the rebuilt project: 23 pieces / 3 ISM batches, small points and blocked diagnostics hidden. This capture does not test mouse hover or clicking.

ผลตรวจในเครื่อง: Editor/Game Development build ผ่าน; automation 63 รายการผ่าน (มี warning เดิมหนึ่งรายการเรื่อง GameplayCueNotifyPaths) การอ่านจุด 120 ครั้งโดยไม่แก้ฉากไม่เพิ่มจำนวนการคำนวณ ตรวจการเปลี่ยนชิ้น/วัสดุ/appearance, ย้ายบ้าน/สิ่งกีดขวาง, แก้ asset, เปิด/ปิดเครื่องมือ และปฏิเสธคลิกที่ถูกบล็อกใหม่ผ่าน รวม regression เดิมเรื่อง Undo/Redo และ persistence Blueprint สองตัว compile ผ่านโดยถือ warnings เป็น errors และบ้าน 23 ชิ้นหลังเปิด Editor ใหม่มี ID, transform และ setting เดิมครบ Save เฉพาะ assets ที่เกี่ยวข้องแล้ว ยังรอผู้ใช้ยืนยัน hover/คลิกและความลื่นใน Editor

Local validation: Editor/Game Development builds pass; all 63 automation tests pass with one existing GameplayCueNotifyPaths warning. Reading unchanged candidates 120 times produces no additional rebuild. Coverage includes piece/resource/appearance changes, house/obstruction movement, asset edits, tool toggles and fresh rejection of a newly blocked click, plus existing Undo/Redo and persistence regressions. Both manual Blueprints compile with warnings treated as errors. Reopening the rebuilt Editor preserves all 23 authored IDs, transforms and settings; only scoped assets were saved. Owner hover/click and responsiveness acceptance remain pending.

Snap optimization validation evidence

Initial large-house Wall placement correction — 2026-10-07

Owner report: adding a Wall caused a long Editor stall after switching from Viewport Rectangle to Single. The live house contained 765 pieces, including the successfully added Walls. That revision required Single for Wall. The later Wall Rectangle revision adds width/height placement on the vertical Wall plane.

Cause and correction: baking one handle recomputed explicit attachment supports for every piece. It searched every pair through a linear record lookup, rebuilding stable GUIDs repeatedly even for structural Slabs and Walls, which do not require explicit attachment support. Baking now snapshots current support records once, skips pieces without that requirement, and retains the same full-face/hinge support resolver for finishes, leaves, infills and trim. GUIDs, poses, attachment fields, Undo/Redo, ISM hit mapping and the central persistence contract remain unchanged.

Isolated Editor fixtureBeforeAfter
Add one Wall to 765 concrete slabs196.720 s0.071 s
Build Wall snap candidates0.049 s0.026 s
Rebuild 765-piece ISM geometry0.041 s0.041 s

These are single-run headless Editor automation measurements on this machine with NullRHI, a production Blueprint fixture rotated 37 degrees, and 765 slab records. They measure the authoring operations, not scene FPS/GPU cost or a performance budget. The large-house regression validates successful Wall placement, unchanged existing identities/poses, actual registered ISM counts/hit identities, and one-step Undo/Redo. The existing finish/roof dependency and persistence regressions also run.

Initial correction verification: Editor/Game Development builds pass; 69 automation regressions pass (68 clean plus one existing GameplayCueNotifyPaths warning). All 47 HTML documents validate without errors/warnings. The reopened owner map retains every captured field and all 765 records: 763 visible slab instances and two Wall instances in exactly two actual ISM batches. The map and three plan file hashes are unchanged; the level remains clean. Both authoring Blueprints compile with warnings treated as errors.

Initial performance and regression evidence. The owner confirmed a large improvement but reported actual manual clicks still exceeding 1–2 seconds. The following revision addresses additional work per placement; this feedback supersedes the earlier responsiveness-pending note.

Append instances during placement — 2026-10-07

Single clicks and floor/Wall area commits now create records directly without spawning and destroying a temporary authoring Actor. Matching additions append grouped transforms to existing ISM render/physics batches and extend the stable hit-ID mapping. Full rebuilds remain for deletion, edits and inconsistent/legacy generated visuals; Undo/Redo now reconciles valid existing components. Rebuilds populate each batch before registration, and shared definition/resource/appearance combinations validate once per pass. Collision, explicit supports and independent persistent GUIDs retain their existing rules.

Live Editor isolated 765-slab fixtureBefore this revisionAfter this revision
Add one Wall0.069800 s0.022037 s
Rebuild 765-piece geometry0.041965 s0.020888 s
Build snap candidates0.025472 s0.031704 s

These single-run measurements use the production Blueprint in an isolated Editor world with rendering enabled and no PIE. The headless regression measures the new Wall append at 0.020720 seconds. Neither captures complete mouse-event/redraw latency in the owner's map or establishes a performance budget. The remaining reported 1–2 second whole-click delay was not independently timed or attributed to a single cause. Large-house regression also verifies that the original 765-instance slab component stays registered and no temporary authoring Actors are created.

Current measurements and verification. Owner check: compare repeated Single Wall clicks and Wall Rectangle commits after this rebuilt Editor, then Undo/Redo to verify that actual meshes and snap points match. Usage and current 70-test validation.

Snap audit validation · 2026-10-06

ผลตรวจ mixed-size ก่อนรอบปรับประสิทธิภาพ: Editor/Game Win64 Development build ผ่าน และ automation ผ่าน 62 รายการหลังรันทดสอบที่ได้รับผลกระทบจาก MCP HTTP socket error ซ้ำแบบแยก process (ปิด MCP เฉพาะ process ทดสอบ ไม่เปลี่ยน config โครงการ) ตรวจทั้ง 55 Definitions และคู่ชิ้น 55 × 55 รวมการวาง Slab 25 ครบ 4 ชิ้นต่อขอบ, บ้านหมุน, Undo/Redo, ปฏิเสธชิ้นซ้อน, support หลังคาและบันทึกการทำลายต่อเนื่อง Blueprint บ้านและ handle compile โดยถือ warnings เป็น errors ผ่าน

ตามที่ผู้ใช้อนุมัติ ย้าย Slab 25 เดิมจาก (−100, −200, 20) เป็น (−25, −200, 20) cm ให้ต่อชิด Slab 100 โดยรักษา House ID, ทั้ง 21 Piece IDs และอีก 20 records เดิม บ้านยังเป็น 21 instances / 2 ISM batches ตรวจหลัง Save/Reload แล้ว Louver เล็กใน Unreal เป็น 25 × 75 × 25 cm พร้อม material slots และ collision เดิม บ้าน PCG ตัวอย่างสองหลังอัปเดต cutout แล้ว โดย configuration และ identity คงเดิมหลัง Save/Reload

ขั้นตอนตรวจใน Editor โดยผู้ใช้: เลือก ManualHouse ใน L_GeneralHouse แล้วเลือก Slab 25 ใน Snap Placement คลิกจุดเขียว 4 ตำแหน่งตามขอบ Slab 100 ที่ว่าง จากนั้น Undo/Redo ตรวจว่าชิ้นต่อชิดและไม่ซ้อนกัน ลอง Slab 50 และ Window/Louver ต่อขอบ/เหนือผนังด้วย เปิด Show Blocked Snap Points เพื่อดูจุดแดงที่ถูกชิ้นเดิมบัง ยังรอผลการคลิกจริง, PIE Dedicated Server + สอง clients, packaged cook และ performance ของฉากจริง

Earlier mixed-size audit, before the performance revision: Editor/Game Win64 Development builds pass. All 62 distinct automation checks pass after an isolated retry of the test affected by an MCP HTTP socket-send error; MCP was disabled only for that test process, without changing project configuration. Coverage includes all 55 definitions and their 55 × 55 piece combinations, four quarter slabs on one full-slab edge, rotated houses, Undo/Redo, overlap rejection, fitted roof dependencies and persisted cascade removal. Both manual authoring Blueprints compile with warnings treated as errors.

The owner-approved existing quarter slab moved from (−100, −200, 20) to (−25, −200, 20) cm. The house ID, all 21 local piece IDs and the other 20 records are preserved. Scoped save/reload confirms 21 instances / 2 ISM batches. The imported small louver is 25 × 75 × 25 cm with its original named slots and collision policy. Both PCG preview houses have refreshed cutouts; their configuration and identity survive save/reload unchanged.

Owner Editor acceptance: select ManualHouse in L_GeneralHouse, choose Slab 25 under Snap Placement, and click the four green positions along a free Slab 100 edge. Undo/Redo and confirm touching, non-overlapping pieces. Also try Slab 50 and Window/Louver edge/top joins. Enable Show Blocked Snap Points to inspect points blocked by existing geometry. Actual mouse-click acceptance, Dedicated Server + two-client PIE, packaged cook and scene profiling remain pending.

Corrected quarter-slab placement and selected-size snap points in L_GeneralHouse
Live Editor capture after the approved slab repair. Green perimeter points are available; interior red points overlap the existing foundation.

Current 200 cm door/retirement validation · Current 53-piece snap audit

Historical mixed-size validation · Historical 55-piece snap definitions

Automatic L wall miters — 2026-10-08

2026-10-10 extension: solid walls touching at perpendicular end corners also derive a filled joint over their shared height, only where no other active wall occupies the added thickness square. A third wall blocks its occupied height intervals; removing/restoring it refreshes the derived joint automatically. Same-profile faces use the shared 45-degree seam; differing profiles use a boundary fitted to both actual render meshes. Materials and appearances remain independent per wall. Rebuild House refreshes an edited Appearance Set; removing a partner restores the survivor. No new trim asset or pose adjustment is required. See existing-wall occupancy priority and canonical geometry scope, current house readback and validation.

Owner decision: placing perpendicular walls at existing snap points creates an L joint with both ends cut at 45 degrees. Removing either member restores the surviving wall's original square end. This revision does not introduce mid-wall T placement; interior T/X crossings and arbitrary overlaps retain their existing rejection.

Workflow: choose a slab source and Wall Solid 100, 50 or 25. Place the first edge, then the adjoining perpendicular edge using Single or Wall Rectangle. The second edge remains selectable when its only obstruction is a supported L end joint in this house. The original catalog ID, pivot, pose, resource, appearance and local GUID of each wall remain unchanged. No separate corner asset selection, manual Blender edit or rebake is required.

Derived geometry: full-thickness end intersections split their shared corner on a 45-degree bisector. Cuts apply only across the common vertical interval; mixed-size or stacked walls retain square geometry above/below that interval. Multiple end cuts must leave a nonempty solid at every height. The surfaces are closed and retain imported UV channels and materials; simple convex collision follows each clipped height band, while complex rays resolve the individual logical piece. Exact duplicate placements, parallel overlaps, other houses and world obstructions remain blocked.

Restoration and persistence: Editor deletion, Undo/Redo, rebuild and Level load derive the corner from the current pieces. Runtime destruction, replicated removal and central world tombstone restore also derive it from the surviving records. A cut is not saved as permanent damage or as a new piece identity. Existing USaveSubsystem / ULambeerWorldPersistenceSubsystem records and schema are unchanged. Removing one wall does not cascade to its structural partner; explicit finish attachments retain their existing dependency behavior.

Rendering and dependencies: ordinary pieces retain shared Nanite ISMs. Only joined walls use individual ProceduralMesh surfaces, which do not use Nanite or mesh distance fields. Native static collision and hardware ray tracing support are distinct from software distance-field Lumen coverage; final corner lighting/material/displacement acceptance requires an owner scene check. The three original Wall Solid meshes retain CPU geometry for reconstruction in cooked builds; their source geometry, Nanite settings, material slots and collision assets are unchanged. Blender/catalog/FBX sources remain uncut.

Local validation: Editor and Game Win64 Development builds pass. All 17 distinct ManualHouse and junction-persistence automation checks pass with zero errors/warnings, including 36 rotated mixed-size/end geometry combinations, convex/complex collision, stable hit identity, Rectangle placement, deletion, Undo/Redo and central codec tombstone restoration. The two native viewport input tests initially failed while Selection mode was inactive after reopening; activating the Level tab and Selection through MCP resolves them without code changes. Both manual authoring Blueprints compile with warnings treated as errors. Live MCP comparison preserves all 846 owner records and authored configuration, with 763 slabs, 72 small concrete walls and 11 wood walls in three ISM batches. The existing walls are parallel and require zero miter surfaces. The Level, Blueprints and three CPU-readable wall meshes are saved clean. All 47 canonical HTML documents validate without errors/warnings. Actual corner appearance, physical viewport acceptance, owner PIE and packaged multiplayer/cook verification remain pending. Live preservation and validation evidence · 17-test results.

Short stair for a 25 cm level change

Current dimensions: 100 cm wide × 50 cm deep × 25 cm high; two 25 cm treads and two 12.5 cm rises. The asset name retains its original 100x100x25 suffix for existing references. Reposition an already placed stair against the upper Slab if its old origin leaves a gap after the depth revision.

Revised wood construction: the existing DarkBrownStairWood now displays rounded nosings, separate thick tread boards, recessed risers and side stringers. Existing placements inherit the saved render-mesh revision without moving their records. Use the same definition and snap workflow; review the current target-mesh images. Owner visual and walking acceptance remains pending.

Revised concrete construction: the existing LightCastConcrete now has rounded cast nosings, inset risers, continuous shadow lines and shallow moulded tread grooves. The saved logical mesh updates existing concrete placements while retaining their transforms. The definition and Slab snap workflow remain the same. Current concrete and wood review; owner visual/PIE acceptance remains pending.

Select DA_Piece_Stair_100x100x25 as Snap Piece Definition in BP_ManualHouse. Use Single placement; choose Resource Concrete / Appearance LightCastConcrete for proposal 01, or Wood / DarkBrownStairWood for proposal 03. Select the upper structural Slab, then use a clear outward-facing rim point. Its upper tread meets the selected slab top, with the lower arrival 25 cm below. Structural Slab 25/50/100 and all four rim directions are supported. With the short stair selected as the source, Slab targets offer fitted lower-front and upper-rear contacts.

The saved review map is /Game/Lambeer/World/Maps/L_ShortStairReview_20261011. Both 24-piece bays are independent of the working GeneralHouse; its 1,093 records and captured settings remain unchanged. Eligibility and snap contract · Actual UE images, source files and Save/reload evidence.

Owner acceptance: inspect both finishes and side cuts; place/remove the piece and Undo/Redo in the intended house. Only the owner starts PIE to walk up/down, inspect collision at each tread/arrival and verify Dedicated Server/two-client presentation plus restart/rejoin. These physical-input and gameplay checks are pending. The new piece is authored-only until a player bill/balance decision is supplied.

Relationships & revision

2026-10-15 follow-up: owner approves explicit GeneralHouse group population, all concrete plinth members in Slab, garage in Exterior Door and entrance stairs ungrouped. Second-floor groups are prepared empty; Details receives a full deferred refresh after group creation/deletion and Undo/Redo. Live/save verification is tracked above.

2026-10-15: owner replaces physical-ISM editing with explicitly named groups and stable member IDs. Adds per-group visibility, selected-group highlighting and a whole-house selection-outline toggle. Group names are authored; no existing house is automatically partitioned. Current workflow and validation status.

2026-10-12: owner-authorized Ctrl + drag selection in Removal Mode; transient additive strokes, retained Ctrl-click toggles and atomic Enter removal. See controls and validation.

2026-10-10: replaced settings-only material delivery with the owner-confirmed quality workflow; only SmoothPlasterPartition and DarkBrownClapboard are currently usable visual baselines. All other existing appearances require rework/review. Source, target surfaces, geometry, actual UE review and Save/reload evidence are required; runtime acceptance remains separately recorded.

2026-10-08: added independent 200 x 200 frame/leaf definitions with existing temporary bills, exact matching-size leaf support and metre UV0; retired the three obsolete 200 cm openings and standard leaf. Current compatibility table covers 53 pieces.

2026-10-08: owner approved automatic compatibility checks and defaults for next-piece Resource, Appearance and Placement Mode, cancellation of stale rectangle drafts, compatible-source retention and explicit blocked/default status.

2026-10-08: repaired Rectangle first-click/drag input, activated early component input before camera capture, and corrected native mode startup/shutdown lifetime; twelve focused live tests and owner layout preservation pass. 2026-10-07: added owner-requested Ctrl+click multiple piece selection and Enter removal, Escape clearing, selection counts/highlights and isolated visualizer input checks. The owner approved direct mesh hover/click selection, source-specific placement points and default-off Show All Points diagnostics. 2026-10-07: added owner-selected width/height Wall Rectangle on the snapped vertical plane, renamed the shared area controls, and enabled/saved Rectangle for the selected owner Wall. Single/area additions append directly to ISM batches without temporary handles; local/live operation timings and current 70-test coverage are recorded above. 2026-10-07: corrected stale ISM geometry after Undo using nontransactional derived visuals, scoped component cleanup and actual registered-instance regression checks. 2026-10-07: owner removed Array mode and its manual count/direction controls; retained two-corner Viewport Rectangle. Added ManualHouse slab-top slots for stacking, per-cell validation, one Undo and lazy handles. Added current-ISM-group Resource/Appearance editing for existing members and next-snap defaults, synchronized handles, batch merging and Undo/Redo; live Blueprint fixture Apply/save/reload passed. 2026-10-06: corrected mixed-size snaps, audited all 55 definitions and added owner-approved window/louver/infill/trim/stair connections; small louver resized to the 25 cm grid. 2026-10-05: added owner-selected clickable Viewport snap placement with immediate ISM baking and Undo/Redo; prepared the authoring workspace with lighting, grid ground and configured templates; authorized manual ISM authoring, unowned demolition denied/damage allowed, owner-delegated initial HP. FEAT-BUILDING · TECH-NETWORK-ARCH · WORLD-C09

ผลตรวจในเครื่อง 2026-10-05: Editor/Game Development build ผ่าน; automation 60/60 ผ่าน (รวม Editor snap + Interaction regression); HTML 47 เอกสารผ่าน ไม่มี errors/warnings ตรวจ Bake สองชิ้นเป็นหนึ่ง ISM batch, ปฏิเสธวัสดุผิดโดยคงข้อมูลเดิม, แก้และ Bake ใหม่โดย ID เดิม, ลบชิ้นและ save/reload Level แล้ว ปรับ Level ให้มีแสง พื้น Grid, Palette 9 ชนิด และ Slab เริ่มต้นที่ Bake แล้ว 1 instance / 1 batch พร้อมจุด snap สีเขียว 4 ด้าน ตรวจ scoped save/reload แล้ว ยังรอผู้ใช้ตรวจการคลิกจุดและ Undo/Redo ใน Viewport มี warning เดิมหนึ่งรายการเรื่อง GameplayCueNotifyPaths ใน automation; ยังรอผู้ใช้ทดสอบ PIE, packaged cook และ performance ของฉากจริง

Local validation, 2026-10-05: Editor/Game Development builds and 60/60 automation tests pass, including the Editor snap fixture and interaction regression; all 47 HTML documents validate without errors/warnings. Editor checks cover two pieces in one ISM batch, atomic rejection of invalid resource selection, successful rebake retaining local IDs, removal and scoped level save/reload. The level now includes a lit grid workspace, nine configured palette handles and a baked starter slab (1 instance / 1 batch) with four visible green snap points. Scoped save/reload preserves the settings and stable identity. Owner Viewport mouse-click/Undo/Redo acceptance remains pending. One existing GameplayCueNotifyPaths warning occurs in automation. Owner PIE, packaged cook and actual scene performance remain pending.

Original gameplay validation evidence · Viewport snap validation evidence

Implementation and local validation do not constitute owner PIE, packaged cook or performance acceptance.