Weapon Authoring Reproducibility - Herbertofury/Advent-of-Ascension GitHub Wiki
Reproducible weapon authoring tests
A clean extraction of seven published authoring studies now runs 21/21 Node test suites successfully. This is a repeatable authoring check, not native Minecraft/TaCZ acceptance or approval of the modelsβ appearance.
Run it yourself
- Clone or download this repository with its
docsfiles. - Download and extract the QA runner.
- Install Python 3.10+ and Node, then run:
python run_authoring_qa.py --docs /path/to/Advent-of-Ascension/docs --report result.json
The runner verifies all ten input files against pinned SHA-256 hashes, extracts into a temporary directory, supplies the exact three viewer HTML inputs and requires all 21 suites to pass. It does not silently change expected hashes or mutate the original archives. Current receipt used Node v24.19.0; other runtimes require their own run.
Complete test output and input hashes
What this checks
- Baronator accepted-shot alternation, duplicate and rejected event handling, recoil recovery, flash positions, finite transforms, sampled bore/feed/hand clearances and attachment assembly/viewer behavior.
- Minigun rotor timing, feed/bore geometry and simulated viewer idle/pause behavior.
- Soul Storm emitter and hand-envelope authoring checks, cosmetic recoil, bounded cosmetic particles and simulated viewer lifecycle.
- Customization data validation, inspection cancellation/timing and 10,000 flame-atlas samples.
The tests remain distinct: an animation test passing does not waive the bore or hand checks. Sampled clearances do not prove continuous collision freedom.
A real packaging defect fixed
The original Baronator mechanism archive contained an alternation test targeting an absent historical baronator-v2 folder and expecting 109 cuboids. The separate older prototype has 103, so substituting it would test the wrong artifact. The revised mechanism study targets its own packaged 132-cuboid model and preserves the animation/event assertions. No geometry was changed to satisfy the test. The original archive remains available for provenance.
The viewer suites also depended on sibling HTML files. The runner now stages those exact published files explicitly rather than relying on an old workspace layout.
Additional upstream-parser check
Isolated TaCZ model parsing now exercises the pinned upstream model POJOs and CubesItem deserializer against eight authoring files (seven distinct hashes). It passes on Java17 and Java21, including a clean extraction/fetch/compile run. Its Direction enum is an explicit harness stand-in; it does not launch the client, renderer or game and does not close native acceptance.
Still required in game
Native export/load, real hand/skin/FOV combinations, attachment-switch transitions, actual translucent rendering and aim readability, shader/Vulkan compatibility, multiplayer, persistence and measured frame times. None of those gates is passed by this source-only receipt.
Current methods review β 2026-10-23 UTC
The Discharge rebuild now follows a concept-led generated base β artist cleanup β separated moving parts β UV/material revision β rigging β native AoA + TaCZ verification route. The earlier authored model is preserved as a backup, not the active refinement target. No complete weapon has passed all visual, animation, customization and native gates yet.
Generator role: a very rough starting scaffold only. Preserve useful proportions, then deliberately rebuild and refine individual surfaces, textures, moving parts and interfaces against the concept. Do not restart the whole weapon unnecessarily, wait for a generator to deliver a finished asset, or confuse a higher-resolution output with production quality.
Newly checked upstream options
These are primary-source checks on this date, not a claim to have surveyed every tool or proved which is best. Newer releases must earn adoption through a controlled comparison against the same reference and acceptance gates.
- Pixal3D: pixel-aligned image conditioning and multi-view inference are relevant to concept fidelity. Multi-view inputs need matching camera transforms and framing; independently invented angles are not calibrated views. The current hosted trial returned a quota error before producing a mesh. Quality on this weapon remains untested.
- Hunyuan3D-Part: P3-SAM segments an existing mesh; X-Part completes parts. The released X-Part is described as a light version. Candidate for separating fused generated geometry, not a demonstrated weapon rig or reliable hidden-surface reconstruction. Not yet tested here.
- PartCrafter: generates multiple parts from one image. Candidate for a controlled multipart comparison; no local result or native acceptance is claimed. Semantic parts still require artist-defined pivots, clearances and animation ownership.
- TRELLIS.2: official implementation documents image-to-3D with PBR attributes and an NVIDIA GPU requirement of at least 24 GB. Published H100 timings are not CPU estimates. The local CPU study uses the separate trellis.cpp implementation, pinned to
8e4ce11a77d35c3e3a4b3f84a29d92bf5491e64e; do not conflate the two execution paths.
Lessons established by the current Discharge study
- Fix readable structure in the conditioning image first. The previous generated base has six front openings instead of the required three. A revised input makes the three broad rectangular openings a single vertical column. This is an input improvement, not evidence that the output is correct.
- Preserve the strong generated silhouette, not its defects. A plain replacement front casing fixed the count but lost the ornate shape language. It remains a rejected development experiment, not the approved design.
- Measure the local cavity, not the overall bounding box. A second repair sized cuts from the whole nose envelope and removed too much of the narrower front housing. That experiment was rejected. Measure cross-sections and exterior wall continuity before another cut.
- Remeshing is not automatic repair. Voxel remeshing, Boolean cuts and decimation still left boundary/non-manifold edges in the trial. Record the weld tolerance, count boundaries separately from branching edges, inspect normals and thin features, and recheck after every destructive operation.
- Texture correction is not finished PBR. A masked color correction improved orange-to-crimson drift while preserving the original packed maps. It does not remove baked lighting, repair UVs, prove texel density or validate material behavior in game. Keep the original images and source mesh untouched.
- Separate parts before claiming animation readiness. Independent emitter owners are only an organizational start. Each moving component needs appropriate internal surfaces, pivots, rest transforms and explicit ownership; then verify the complete motion, hands and sight line.
- Isolate expensive jobs. One fresh CPU generation exited with code -9 without a mesh while a heavy mesh operation overlapped. The cause is unconfirmed. The subsequent run is isolated from heavy voxel/Boolean and native-client work, with parameters, logs and input hash retained. A running process is not a completed result.
Reusable promotion gate
For every candidate, retain the original concept and source mesh, input/output hashes, tool revision, parameters and licenses. Compare side, front, rear and first-person views before spending time polishing the wrong silhouette. Reject wrong part counts, fused moving parts, texture-only cavities, inaccessible grips, blocked sight lines, destructive remesh artifacts and missing identity-defining features.
Only after those checks: retopologize as needed, separate and rebuild moving parts, author clean UVs and material channels, rig and animate, export, then test with the pinned AoA and TaCZ together. Record real hand poses, focus/ADS, reload, inspect, firing, attachment changes, effects, multiplayer behavior and measured performance. Source tests, attractive renders and generator marketing do not waive these gates.
Future method reviews should carry their own checked-on date, official source, tested environment, observed result and adoption decision. A promising paper or tool is research-only until it improves an actual asset under these checks.
Component-refinement checks added on 2026-10-23
The current study replaces rough generated components incrementally instead of rebuilding the whole weapon from nothing. Three upper armor pieces now have controlled closed geometry and fresh UVs; those local checks do not approve the complete weapon. The visible energy cell is a separate assembly rather than a painted cylinder. Authoring glass and emissive materials still require a target-renderer implementation and native tests.
Close-up review exposed old recesses and lighting artifacts projected into transferred textures. Repaint rebuilt surfaces when their geometry changes; baking source color alone does not make a faithful material. Another rejected pass joined too few nonplanar points and produced obvious facets. Fitting continuous camber from the scaffold and using denser controlled surface topology improved that study. Replacing the obsolete source surface also mattered: stacking two conflicting surfaces caused breakthrough, while deleting every face whose center fell inside the replacement footprint left jagged border gaps. Preserve border coverage and inspect every replacement interface, not just the attractive camera angle.
An independent read-only preflight now distinguishes exact-position analytical welding, boundary edges, branching edges, UV degeneracy, hidden reference meshes and visible mesh counts. Controlled closed/open/UV-failure fixtures and unchanged-source hashes are checked. These counters do not establish self-intersection freedom, clean UV distortion, hand fit, visual fidelity or game acceptance.
Articulation and build reliability checks β 2026-10-23
A later armor-inspection pass caught a real middle-plate/receiver intersection during opening, despite the closed pose looking clear. The affected faces were localized before changing the assembly height and matching hinge pivot. Rechecking all 48 integer frames found no evaluated mesh-surface intersections between the moving armor assemblies and other visible mesh objects in that revision. Same-owner component pairs, curves, continuous sweeps, solid containment and player hands are outside that result. New geometry changes must rerun the checks; this is not native animation approval.
Preserve the useful scaffold silhouette when replacing a grip: a hand-drawn loft lost its finger contour, so the next pass traced the original side silhouette, rebuilt a closed volume, and modeled the trigger-region opening instead of keeping a dark painted patch. The rear cuff, exposed inner section and trigger are separate editable components. They remain work in progress, with actual TaCZ arm fitting and final material work still outstanding.
For scripted Blender jobs, use --python-exit-code 1, fail the enclosing command chain on errors, and verify newly written artifacts and receipts. Default process exit behavior alone is not sufficient evidence that a Python operation succeeded. Check each new component for missing UVs and thin one-sided surfaces, while keeping unfinished generated receiver boundaries visible in the report rather than disguising them with a blanket pass.
Transport provenance and atlas coverage β 2026-10-23
The preparation copy groups the evaluated model into eight motion-owned meshes without reducing its 125,660 evaluated triangles. Per-source-vertex provenance IDs make the comparison stronger than checking a rounded bounding box or a vertex count: all 66,185 vertices were matched across 48 integer frames, with maximum world-position error about 2.35e-8 model units against a 2e-6 tolerance. The earlier rounded-multiset check disagreed at a few rounding boundaries; the per-ID distance test investigates the actual discrepancy rather than hiding it by changing the rounding rule. This checks transform transport only, not continuous motion, normals, materials, hand fit or native performance.
A four-component authored coating atlas exposed a separate failure: 29 triangle-centroid samples were black on subpixel uniform-metal bevel islands even though the UVs were finite and noncollapsed. The painted surfaces keep unique UV regions. Deliberately uniform trim now uses a verified unused, padded constant-material swatch with noncollapsed UVs. The repeat check found no black centroid samples and no inter-object overlap in the unique painted regions at the tested raster resolution. Shared trim overlap is explicit and intentional, not silently counted as unique UV coverage. Subpixel overlap, same-object distortion and native mip behavior still need their own checks.
The local Blender job runner now has six controlled execution fixtures: success, Python exception, stale output, missing output, empty output and unexpected source mutation. It checks explicit error exits, fresh artifacts and unchanged declared source hashes; it does not silently retry or award visual/native approval. Keep the execution receipt separate from the mesh, texture, animation and in-game review results.
Download the generated-mesh authoring toolkit and read its clean-extraction receipt. The published download was re-downloaded and matched SHA-256 754f0ec2db27ad86df35a2f491be4258ffb2540881d61e778c4bdcb114cdc6b3. The bundle contains the portable read-only preflight, checked Blender job runner, controlled fixtures and instructions; no third-party game assets are bundled. Requires Python 3.11+ and an installed Blender; checked here with Blender 4.3.2.
Generator comparison, triangle-level QA and transparent transport (2026-10-23)
A second 1024 CPU generation ended with exit -9 without a mesh. A separate 512-resolution, eight-step, seed-42 geometry-only trial completed in 2,857.7 seconds, but its raw GLB contained 1,030,532 triangles despite an 80,000-face request. Inspection of the pinned local implementation explains the mismatch: the remesh/QEM face-target path is inside the PBR-data branch, while geometry-only fallback writes the raw mesh. Successful execution is therefore not compliance with a requested budget. The front-view review also showed two large openings instead of the concept's three and visibly ridged surfaces. This candidate is retained as rough reference only, not substituted for the refined artist model.
Boolean edits to extend the inclined armor lights exposed two independent checks. A polygon can have nonzero area while its tessellation contains zero-area triangles; the local preflight now counts original tessellation triangle areas as well, with a controlled regression fixture. Also, a face containing a collapsed UV triangle is not necessarily a cavity wall. Automatically assigning every such face a dark material produced broad exterior bands and was visually rejected. The correction cleaned the measured coincident-edge slivers, unwrapped the three armor pieces again and recoated their exterior. The current v72 authoring revision has 82,036 visible base triangles with no visible nonmanifold edges, degenerate polygon/triangle areas or missing/collapsed UVs under those checks. Its 48-integer-frame armor surface test has no reported contact pairs, within the exclusions documented above. Full visual fidelity and native acceptance remain open.
For texture transport, keep source image lookups explicitly bound to a source UV layer before packing another layer. Deliberately constant base/metallic/roughness/emission materials can share documented padded swatches; painted or procedural channel variation requires unique atlas space. The new preparation separates these cases rather than spending most of the atlas on tiny uniform bevel islands. Pixel-area statistics alone do not establish valid mip behavior, seam quality or a successful bake. Artist sources and transport copies remain separate.
The energy-cell window also needs a real translucent pass: Blender transmission/IOR is not Minecraft texture alpha. A separate owned adapter now compiles against the installed mapped Forge 1.20.1 and pinned loader classes. It uses the loader's full-root translucent traversal, applies normal correction only when verified for that path, and flushes only its requested layer. Six controlled stub cases cover empty draws, correction on/off, exception cleanup, unexpected multiple layers and out-of-draw calls. These are not GPU or native tests. The active bridge and game resources are unchanged; explicit glass alpha, shell ordering, real lighting, parent motion and actual TaCZ player hands still require in-game verification.
These later local refinements do not silently update the downloadable v1 toolkit or its pinned hash above.
Direct texture transport and first native load (2026-10-23)
The generated scaffold is still only a starting point. The editable artist source remains v72; no weapon has passed final art or gameplay acceptance.
Preserve material data rather than rebaking blindly
The initial full-resolution Blender bake was killed before producing output. A smaller bake completed but was rejected because linear constant colors had been written as encoded color values, visibly darkening the result. The replacement transport explicitly decodes source color into linear light, samples the preserved source UVs, then encodes only the base-color atlas back to sRGB. Metallic and roughness remain data channels. Controlled sampling/color tests passed.
Constant materials share padded atlas tiles; image-varying surfaces retain unique islands. Small UV islands were enlarged as complete islands, rather than painting over isolated failed samples. In the latest independent centroid check, newly black samples fell from one to zero. Fine-pattern sampling differences remain, so this is not a blanket lossless-texture claim.
Emission uses a normalized atlas plus explicit gain of five. The thin-shell glass texture is a native rendering candidate, not an assertion that alpha blending reproduces Blender transmission and IOR.
Preserve corner normals and actual movement ownership
Recalculated normals after mesh grouping failed the selected tolerance. Instead, export carries the source rest normal explicitly per corner. Vertex/corner provenance verifies complete coverage, with motion positions checked across 48 frames and corner normal/UV transport checked at three poses. These bounded checks do not establish continuous collision clearance, hand fit, or GPU correctness.
The pinned loader's Y reflection reverses triangle orientation. A real loader CPU probe showed the glass orientation changing from a negative to a positive winding/normal dot product after compensating index order. All nine exported meshes, 88,036 triangles, were subsequently exercised through the real loader's vertex consumer. This verifies local transport, not the entire game rendering chain.
Native loading is a separate acceptance gate
Repeated startup attempts were killed with exit code -9. The exact killer was not established. Avoidable full-document geometry copies were replaced by sequential copies of only the selected mesh payload; seven controlled tests passed, but a measured memory saving has not been claimed.
Older assistant-created intermediate Blender checkpoints were retained in private file storage before their temporary RAM-backed copies were removed. The current editable source, transport source, original generator output and rollback archives were preserved. After freeing approximately 992 MB of these intermediates, the combined Forge/AoA/TaCZ client reached the existing creative QA world and logged successful loading of the generated visuals.
The first native view did not show the weapon. Source inspection identified the parentless Bedrock root conversion, (24 - pivotY) / 16, which the initial view-fit calculation had omitted. A resource-only correction compensates that global offset without modifying artist geometry or stretching the arms. The first resource reload ended with another -9 exit. After preserving and releasing more intermediate checkpoint copies (1.82 GB total), the corrected view was visibly verified in the combined client. A second framing-only adjustment and live reload also succeeded. Hand contact, glass/depth behavior, detailed animation and final art acceptance remain open.
Future exports must test the complete parent hierarchy and first-person view transform, not only individual mesh arrays. A successful load message is not proof that an asset is visible, well-held, correctly shaded, or ready to ship.
Bounded original-gameplay check
The saved world was labeled creative in the menu, but instrumentation showed the actual player in survival. Five empty-ammo use returns were false and produced no accepted cosmetic shot notification. After supplying a bounded stack of 16 discharge capsules in the QA save, one shot consumed one capsule, increased weapon durability damage by one, generated four projectile-join observations, returned true from the original AoA firing method and delivered one accepted owner-only cosmetic signal. This is one bounded survival-shot check, not full gameplay, damage balance, multiplayer, audio or release acceptance. The world was saved and the client exited normally with code zero.
The current source contains motion on three dorsal plate owners. A new export preserves 48 sampled poses through an explicitly reflected coordinate basis, with 1,008 representative pose-point checks and a maximum discrepancy of approximately 2.11e-8 source units. The shot candidate retimes that motion to 0.45 seconds; a separate inspect-data clip preserves the original 47/24-second interval. The inspect clip is not yet bound to an in-game inspect input. Static emitter and trigger owners are not falsely counted as animated. Parser and native checks for this new motion remain pending.
Refined artist source and native inspection (2026-10-23, 11:08 UTC)
This later checkpoint supersedes the pending-motion status above. The active editable artist candidate is v96, with recessed mirrored front light pockets and revised ivory coating. Earlier artist sources and the original generator scaffold remain preserved. These are incremental artist edits, not a new generator result or final visual approval.
Recheck transport after every art change
The revised transport contains nine owned meshes and 94,148 evaluated triangles. All 47,779 source vertices were matched across 48 sampled poses; maximum position discrepancy was approximately 2.35e-8 source units. All 190,840 corners retained explicit provenance. Three-pose corner checks found zero UV discrepancy and normal error below 1e-7. The actual pinned loader CPU probe exercised all meshes, with zero position/UV error and normal error approximately 2.98e-8. These checks do not establish frame-rate performance or full collision freedom.
A same-camera source/transport render comparison measured mean RGB difference 0.232/255; about 0.020% of pixels differed by more than 20 in any channel. This is a bounded offline comparison, not a native or lossless-texture claim. Small source-pattern sampling differences remain. The new artist revision and its transported materials were then observed in the combined Forge/AoA/TaCZ client.
Capture modifiers at input time
An initial quick Shift+F8 chord sometimes selected the fire preview because the modifier was sampled on the later game tick, after Shift had been released. The corrected implementation captures the modifier with the key-press event in a bounded eight-entry FIFO, then consumes that snapshot on the game tick. Controlled ordering, empty, clearing and overflow cases passed; quick inspect selection was also observed in the real client. Lifecycle resets clear pending snapshots. This is not exhaustive input stress coverage.
The actual animation parser accepted two clips, nine channels and 306 keys. The inspection adds a restrained rigid side turn to expose the energy cell and front detail while preserving the exported dorsal-plate movement. The fire clip remains unchanged from the separately checked owner-motion export. Native observations include opening, side reveal, return to rest, and switching away mid-inspection followed by a correct resting pose on return. Emitters and trigger remain static; they are not claimed as animated merely because they have separate owners.
Fit real hands, not a flattering camera
The side inspection revealed shallow right-hand grip contact. The correction moved only the right-arm pose/contact target, leaving the left support, geometry payloads, materials, view and gameplay unchanged. The pinned player arm geometry spans local Y=-2 through Y=10; the fit targets the center of its terminal four-pixel hand region, Y=8, rather than the fingertip endpoint. The revised contact point lies inside the closed grip under three-axis ray tests and was visually checked on the slim player model. Point containment is not full hand collision clearance. Normal-width skins, other poses and FOVs remain unverified. No arm stretching was used.
Bounded native firing and footage
A further survival shot after starting inspection consumed one capsule (15 to 14), increased durability damage from 6 to 7, produced four projectile-join observations, returned true from the original AoA method and delivered its owner-only cosmetic notification. The post-shot capture showed the resting pose. Input/shot order is logged, but the exact interruption frame was not recorded as a continuous sequence, so it is not an exhaustive animation-transition test.
A separate 3.08-second silent native inspection clip was delivered to the owner, encoded from 55 unaltered desktop screenshots using their recorded capture intervals. It is progress footage, not a frame-rate benchmark or audio test. The QA world was saved and the client exited with code zero at 11:08 UTC.
Acceptance remains open: final concept fidelity, complete hand/pose coverage, ADS, reload, attachments, sound, multiplayer, actual performance and broad compatibility. Zero complete weapon packages are accepted. The public v1 toolkit remains unchanged; these later local studies do not silently replace its pinned download.
Donor-rig reproducibility before original adaptation (2026-10-24)
This separate M1921 study uses Khan / Khan_offline's KhanPowder v0.8.68 release. The project owner reports a credit-required grant for Khan-owned material, as recorded in Sources and Credits. That report does not extend to stock audio or other third-party assets. Original source records, texture and notices remain unchanged; this methods update publishes no donor assets.
Reusable checks
- Establish corner positions, signed UVs and rotated-cuboid behavior from the pinned TaCZ classes before trusting a viewer's axis or Euler defaults. The study exercises TaCZ 1.1.8-hotfix2 classes in isolation; the pinned source reference is not a claim that a source checkout and released binary are identical.
- Retain named owner hierarchy and local pivots, including geometry-free muzzle, shell and attachment locators. A name containing "hand" can identify a shared weapon ancestor; deleting such names indiscriminately loses valid weapon motion.
- Reproduce motion through the actual parser, interpolator and selected model listeners. Record overlay/reset order, unresolved targets and excluded hand, camera and constraint effects. Reopen the saved scene and evaluate its keyed frames; manually assigning matching matrices is not enough to prove saved playback.
- Sample keys, nearby discontinuities, dense intermediates and resets with compact matrix streams. Bind inputs, adaptations, oracle output, exact executed tools/classes, runtime and saved scene by hashes. A reformatted successor needs a rerun or an explicit unexecuted label.
What the bounded checks establish
The editable hierarchy has 54 named owners and 662 nonzero-area meshes from 663 selected cuboid records. The fully degenerate stock cube and omitted zero-area faces remain recoverable from the unchanged source.
All 17 saved snapshot frames passed reopened evaluation, with exact stored UVs and maximum coordinate-component difference about 7.153e-7 native model units. A separate 1,104-request check covered all 54 owners/anchors, shoot, tactical and empty drum reloads, keys plus/minus 1e-5 seconds, 60 Hz intermediates and three equal reset poses. Worst representation discrepancy was about 1.238e-6, below the unchanged donor 2e-6 comparison gate. This is not a physical-clearance tolerance or a Discharge acceptance threshold. Dense corner references use native world matrices applied to unchanged local corners; they are not separately emitted float32 renderer vertices.
The saved action still contains only sparse CONSTANT-held snapshots. Dense poses were transient checks, not a saved continuous animation. Removing 26 hand-scale channels from the separate adaptation and excluding hand listeners from the weapon-only oracle does not demonstrate normal-hand fit. Retarget canonical hand geometry with rigid transforms and solve contacts separately.
Derivative additions require their own saved-artifact check. Updating a parent or attachment owner can leave its dependency-graph world matrix stale while mesh-local coordinates are calculated. A planned JSON preview may then look correct even though the saved mesh is displaced. Update dependencies before coordinate conversion, reopen the saved scene, and compare every newly authored mesh and geometry-free owner against its intended world-space target. Check deliberately modified or beveled geometry separately from unchanged source geometry, and generate review images from the reopened evaluated scene rather than substituting planned corners. Passing the original donor reconstruction does not validate later additions; preserve failed artifacts and qualify earlier derivative placement claims when such a mismatch is found.
Still open: continuous collision clearance, complete controller blending, prop ownership, interruption recovery, real hand/skin/FOV fit, gameplay synchronization and native rendering. Matching sampled transforms does not promote the donor study or an original AoA adaptation to an accepted weapon.