From 4cc821b359067bdcc5536a1d37477825ce28305a Mon Sep 17 00:00:00 2001 From: Vladislav Prusakov Date: Wed, 4 Nov 2026 12:42:40 +0300 Subject: [PATCH 1/4] Add opt-in technical examples with procedural skeleton rigging study --- .gitignore | 1 + Examples/README.md | 6 + .../ProceduralSkeleton/.ada/project.json | 18 + .../Technical/ProceduralSkeleton/.gitignore | 8 + .../Assets/Models/Skeleton-AdaScript.glb | Bin 0 -> 514060 bytes .../Assets/Models/Skeleton-Walk.glb | Bin 0 -> 514068 bytes .../Assets/Models/Skeleton.glb | Bin 0 -> 418684 bytes .../Assets/Models/WalkStage.glb | Bin 0 -> 12992 bytes .../Assets/Scenes/Showcase.ascn | 248 ++++ .../Assets/Scenes/Walk.ascn | 271 ++++ .../Technical/ProceduralSkeleton/DESIGN.md | 16 + .../Generators/Skeleton-Rig.ada | 1103 +++++++++++++++++ .../Generators/Skeleton.ada | 910 ++++++++++++++ .../Generators/SkeletonRigRecipe.ada | 158 +++ .../Generators/WalkStage.ada | 7 + .../ProceduralSkeleton/NativeRig/Main.swift | 45 + .../NativeRig/MeshSkinning.swift | 115 ++ .../NativeRig/SkeletonRig.swift | 91 ++ .../NativeRig/WalkClip.swift | 83 ++ .../Technical/ProceduralSkeleton/Preview.png | Bin 0 -> 530124 bytes .../Technical/ProceduralSkeleton/README.md | 87 ++ .../ProceduralSkeleton/Sources/Game.ada | 1 + .../Validation/ScriptRigMain.swift | 30 + .../Validation/SkeletonWalkTests.swift | 101 ++ .../Validation/StandaloneAssetScope.swift | 9 + .../ProceduralSkeleton/author_recipe.py | 283 +++++ .../ProceduralSkeleton/check_geometry.py | 102 ++ .../Technical/ProceduralSkeleton/check_rig.py | 168 +++ .../ProceduralSkeleton/experiment.py | 147 +++ .../ProceduralSkeleton/native_rig.py | 89 ++ .../ProceduralSkeleton/rig_capture.py | 126 ++ .../ProceduralSkeleton/script_rig.py | 109 ++ Examples/Technical/README.md | 17 + README.md | 5 + scripts/test_technical_examples.py | 31 + scripts/validate_catalog.py | 4 +- 36 files changed, 4388 insertions(+), 1 deletion(-) create mode 100644 Examples/Technical/ProceduralSkeleton/.ada/project.json create mode 100644 Examples/Technical/ProceduralSkeleton/.gitignore create mode 100644 Examples/Technical/ProceduralSkeleton/Assets/Models/Skeleton-AdaScript.glb create mode 100644 Examples/Technical/ProceduralSkeleton/Assets/Models/Skeleton-Walk.glb create mode 100644 Examples/Technical/ProceduralSkeleton/Assets/Models/Skeleton.glb create mode 100644 Examples/Technical/ProceduralSkeleton/Assets/Models/WalkStage.glb create mode 100644 Examples/Technical/ProceduralSkeleton/Assets/Scenes/Showcase.ascn create mode 100644 Examples/Technical/ProceduralSkeleton/Assets/Scenes/Walk.ascn create mode 100644 Examples/Technical/ProceduralSkeleton/DESIGN.md create mode 100644 Examples/Technical/ProceduralSkeleton/Generators/Skeleton-Rig.ada create mode 100644 Examples/Technical/ProceduralSkeleton/Generators/Skeleton.ada create mode 100644 Examples/Technical/ProceduralSkeleton/Generators/SkeletonRigRecipe.ada create mode 100644 Examples/Technical/ProceduralSkeleton/Generators/WalkStage.ada create mode 100644 Examples/Technical/ProceduralSkeleton/NativeRig/Main.swift create mode 100644 Examples/Technical/ProceduralSkeleton/NativeRig/MeshSkinning.swift create mode 100644 Examples/Technical/ProceduralSkeleton/NativeRig/SkeletonRig.swift create mode 100644 Examples/Technical/ProceduralSkeleton/NativeRig/WalkClip.swift create mode 100644 Examples/Technical/ProceduralSkeleton/Preview.png create mode 100644 Examples/Technical/ProceduralSkeleton/README.md create mode 100644 Examples/Technical/ProceduralSkeleton/Sources/Game.ada create mode 100644 Examples/Technical/ProceduralSkeleton/Validation/ScriptRigMain.swift create mode 100644 Examples/Technical/ProceduralSkeleton/Validation/SkeletonWalkTests.swift create mode 100644 Examples/Technical/ProceduralSkeleton/Validation/StandaloneAssetScope.swift create mode 100644 Examples/Technical/ProceduralSkeleton/author_recipe.py create mode 100644 Examples/Technical/ProceduralSkeleton/check_geometry.py create mode 100644 Examples/Technical/ProceduralSkeleton/check_rig.py create mode 100644 Examples/Technical/ProceduralSkeleton/experiment.py create mode 100644 Examples/Technical/ProceduralSkeleton/native_rig.py create mode 100644 Examples/Technical/ProceduralSkeleton/rig_capture.py create mode 100644 Examples/Technical/ProceduralSkeleton/script_rig.py create mode 100644 Examples/Technical/README.md create mode 100644 scripts/test_technical_examples.py diff --git a/.gitignore b/.gitignore index 4185367..b844878 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ .swiftpm/ dist/ **/.ada/workspace/ +__pycache__/ diff --git a/Examples/README.md b/Examples/README.md index 00413d7..59a5589 100644 --- a/Examples/README.md +++ b/Examples/README.md @@ -4,3 +4,9 @@ Examples are small, focused AdaEngine projects that demonstrate one feature or A Each example must be independently downloadable and openable in AdaEditor. Complete games and larger reference projects belong in `Samples`. + +## Technical examples + +[Technical examples](Technical/README.md) are developer studies and validation +projects, available by cloning this repository. They are deliberately absent from +`catalog.json`, Studio recommendations, website cards and catalog release archives. diff --git a/Examples/Technical/ProceduralSkeleton/.ada/project.json b/Examples/Technical/ProceduralSkeleton/.ada/project.json new file mode 100644 index 0000000..3ac8032 --- /dev/null +++ b/Examples/Technical/ProceduralSkeleton/.ada/project.json @@ -0,0 +1,18 @@ +{ + "schemaVersion": 3, + "project": { + "name": "ProceduralSkeleton", + "displayName": "Skeleton — AdaScript rig and walk", + "id": "4b888882-6278-4d72-a10c-fcae68cb5e97", + "bundleIdentifier": "org.adaengine.proceduralskeleton" + }, + "paths": { "sources": "Sources", "assets": "Assets", "resourceRoots": ["Assets"] }, + "build": { "system": "adascript" }, + "runtime": { + "moduleName": "ProceduralSkeleton", + "entry": { "scene": "Assets/Scenes/Walk.ascn" }, + "plugins": { "preset": "game3d", "presetVersion": 1 } + }, + "editor": { "startupScene": "Assets/Scenes/Walk.ascn" }, + "inputActions": [] +} diff --git a/Examples/Technical/ProceduralSkeleton/.gitignore b/Examples/Technical/ProceduralSkeleton/.gitignore new file mode 100644 index 0000000..cee5c04 --- /dev/null +++ b/Examples/Technical/ProceduralSkeleton/.gitignore @@ -0,0 +1,8 @@ +.ada/* +!.ada/project.json +.builds/ +Evidence/ +References/ +__pycache__/ +Assets/Models/Skeleton-v*.glb +Assets/Models/Skeleton-Walk-samples.glb diff --git a/Examples/Technical/ProceduralSkeleton/Assets/Models/Skeleton-AdaScript.glb b/Examples/Technical/ProceduralSkeleton/Assets/Models/Skeleton-AdaScript.glb new file mode 100644 index 0000000000000000000000000000000000000000..df9f50edcce18efc2878d5911e62edb1ede19714 GIT binary patch literal 514060 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 literal 0 HcmV?d00001 diff --git a/Examples/Technical/ProceduralSkeleton/Assets/Models/Skeleton.glb b/Examples/Technical/ProceduralSkeleton/Assets/Models/Skeleton.glb new file mode 100644 index 0000000000000000000000000000000000000000..091217429d129ba7f7d1925654c4eb23dcc17baa GIT binary patch literal 418684 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 literal 0 HcmV?d00001 diff --git a/Examples/Technical/ProceduralSkeleton/Assets/Models/WalkStage.glb b/Examples/Technical/ProceduralSkeleton/Assets/Models/WalkStage.glb new file mode 100644 index 0000000000000000000000000000000000000000..d2b7f28e075a36542dfb510b30e996e72ba91cb1 GIT binary patch literal 12992 zcmeHNd303O9e&6rxQl>n8b@(S1I(IDGYN#yfgM=z1_vK#!M_6zsM0RD+|@sR7YwY*;5udN^57%3`Hh|L-QTk z&NN3^b>-aZs!&z5WWn5!BirY4r_-#hiaN60S>7~9W$;Ga=NjtD$l}MF;qzu>ag=kY z)9v;-`N_=kI@7b#Gt#~~Y$|35S7C-BU%i$#WCxT zF?>d_plVjQDwHxeQe76BQ5y+Xq*PYV2vs=J95;j_HQ{P(ro%ndi4^Lk`nn(*8XKyb z6`k$KcDXWKZm!YVYvoS5!p z?{{PPmlw})`nY2!xxU-u#4)vp$7#gl*zfmnGb)48P$V3zNNhz_uoCCpF)}nWSX&Xr z?#?ZZj0;7B6&2yK;_BL2v#ao>VS7r0HKF|Kit5OyV3}#s6r5U5;@~@7-YlofmG0uV z!JBEm3{I~r!|ieVjF;{;-oW4va9zT-I&^jv9 z%$4=UWQ)yHg=%JpzVt{XwUMf5u(Seas3Kg2^MGfIge$|*@C_Omj7B5j(%LBHBFFf` z;&H>r;?$%$iV7!=E*V`o-ZZ(S;M)Ac!s3zFJMmM1(-y9p5ymeGPDJZoV&LMbj8TO% znn+QJK<0k!@Co8XBf+YgieS_n<|)n-{|-3KyftO`c9`i5(}QX;4q2R%lCpJ(WsMj; z9>08+_3ng?R~gbic+8fkJ@FW}Cz+?c@MQ0pr>(i=@!Xf2?A?yT_Zog#V?Y0pVRsw8 zbjAbz&7a+F__5->{>+w}4R?EbK5}7R!)b? z@ed*wp3`s-a$$cAzYMtsDi3pAp`1f;JxlpLxbH(f7jrFXecpJ6_JO&!FFmVK`xEc2 zePb^6i9U1f*FH1X725wC%%7^haNR!YS3l%QRUd~USGxL}j$E76_s$ddHl^u2+>Ko9 z6W1z2uH^Ya-@HlAbKP;4HeS_nmJ+`e|Ib;<>A9R|Y%|YNBwla$BO3Y*Zmkr&igjwe#0@} z2+T{)bsocdp_Gjn;g|1Frmr~1Nmi`1_YhEymI-miIIpN;$8$Nl7-FBS8W zbDc-A9y!+^l(uFqIdjz)+_WX>rwlr7ILE)cKeLJc9hhg@@_B}rV}7h_IM-dfv%&C< z$OCOSbIr`!VfY;6LJq_ET$tDJOOXpX3}1^}$YJ=PG}pSMe;0Cnrt!Uyt4{MALM}X~ z8DEB6*dN2OKTXJym=jp2oGvXEvl|%k4 z)(`jwt|Moz!*h0RA!n}FmtNPD9KWaA!-jL7yiU!AZ^rysH_kC!x6^}t4DW_K(1tVD zQ}Z(ozZ$u4zv26k3potmg+vGRP-y{E!{1*8Zvm#GdgR2{Q8nmpl<@c7~Uw(@G!SYk(JLUW2XUor%Um$;s z{37`Q`IF^OmmiW}E`P54TKNm*$Ap&k#4TM+9}<|FLu4Q18)P36zU3#f4~grk2HA&% zACO-zKPFwL>-F+i$#0O~D1WQ`ZStGt?~#8J|z6!^83qAkv~{|s(hz>pZsk3dGZV7kC9&_AODZW?B8Vh)8&Wc zm&>0kzgGT2`7xnoCFbeqL!xhO*9ZPfMdCe8R^mNv#v7e@ zPty+=y}F@XeoVT~U?5O0f0g_O`Hk|o%HJlxS^ggRhvc`&x9~3Dx_nPF58u=L@I7sE z%IABUpA`9gPn-Pm`JU!@zNhK)JjY^F7TE-_z!KI{6=Y)SXd2=`O%@>8`*G>2APG>F&TR=~IE( z(mjAzO7{fvkEWTJ{q6!kf%eCcz6Bc*!* z3#88jj*{*T{HAmt;J2jv0!K@q4;&-i4|uh7f8bc@0l;z61A+XjFzP|5Lg@>DMbZ}n zCrGCNi={6DPLy^4OQbIb2Ba?mPLduByhi#`;I-110lzJMIdHP{6~HOdsle-`zX6;o zod%pHjX!a-u9qGPoGv{K7?dsr-jBKuMP4RNthezQ(!?Lycu1PK+{R~06CbegS<=KG z+4yW};tCrNOA~)=j~(!{kk{#|L}IvZaiO{5OjDC)6jxKLbBS5nn)kCVUb2If}R)#g``WB~ozW4%8{&#J`|A zgA-pybpa>tM0EuxHlw?+LG=MA?nCtj zC+IY6di0ThcJcJqmPW%UIAUN?|)F5!;KT#Ke6aR&}5S;iPDg~T)7= 0) { + if (model.partName(partId) == name) { return true; } + partId = model.partParent(partId); + } + return false; +} + +func rigRigidJoint(model, partId, joints) { + var name = model.partName(partId); + if (rigHasParent(model, partId, "Broken sword")) { return joints[18]; } + if (rigHasParent(model, partId, "Round shield")) { return joints[22]; } + if (rigHasParent(model, partId, "Lower jaw")) { return joints[6]; } + if (rigHasParent(model, partId, "Head")) { return joints[5]; } + for (var side in 0..<2) { + var leg = "Left leg"; + var arm = "Left arm"; + var hip = 7; + var shoulder = 15; + if (side == 1) { + leg = "Right leg"; + arm = "Right arm"; + hip = 11; + shoulder = 19; + } + if (rigHasParent(model, partId, leg)) { + if (name == "Shorts leg" || name == "Leather cuff") { return joints[hip]; } + if (name == "Shin" || name == "Knee") { return joints[hip + 1]; } + return joints[hip + 2]; + } + if (rigHasParent(model, partId, arm)) { + if (name == "Shoulder" || name == "Humerus") { return joints[shoulder]; } + if (name == "Hand") { return joints[shoulder + 3]; } + return joints[shoulder + 1]; + } + } + if (rigHasParent(model, partId, "Terracotta neckerchief") || name == "Spine" || name == "Sternum") { return joints[2]; } + if (rigHasParent(model, partId, "Rib cage row 1")) { return joints[2]; } + if (rigHasParent(model, partId, "Torso")) { return joints[3]; } + if (rigHasParent(model, partId, "Pelvis and belt")) { return joints[1]; } + assert(false, "No weight rule for " + name); + return joints[0]; +} + +func rigSkinParts(model, joints) { + for (var partId in 0..= 1) { rightPhase = rightPhase - 1; } + var left = rigLegAngles(phase, 0.34 + bob); + var right = rigLegAngles(rightPhase, 0.34 + bob); + model.translationKey(walk, joints[1], time, 0, 0.39 + bob, 0); + model.rotationKey(walk, joints[7], time, left[0], 0, 0); + model.rotationKey(walk, joints[8], time, left[1], 0, 0); + model.rotationKey(walk, joints[9], time, left[2], 0, 0); + model.rotationKey(walk, joints[11], time, right[0], 0, 0); + model.rotationKey(walk, joints[12], time, right[1], 0, 0); + model.rotationKey(walk, joints[13], time, right[2], 0, 0); + model.rotationKey(walk, joints[2], time, 1.2 * Math.sin(2 * cycle), 2.5 * Math.sin(cycle), 0); + model.rotationKey(walk, joints[3], time, 0, -4 * Math.sin(cycle), 1.8 * Math.sin(cycle)); + model.rotationKey(walk, joints[5], time, 0, 1.5 * Math.sin(cycle), -1.8 * Math.sin(cycle)); + model.rotationKey(walk, joints[6], time, 2 + Math.sin(2 * cycle), 0, 0); + model.rotationKey(walk, joints[15], time, -12 * Math.cos(cycle), 0, 43); + model.rotationKey(walk, joints[19], time, 12 * Math.cos(cycle), 0, -43); + model.rotationKey(walk, joints[16], time, -7 - 4 * Math.sin(cycle), 0, 0); + model.rotationKey(walk, joints[20], time, -7 + 4 * Math.sin(cycle), 0, 0); + model.rotationKey(walk, joints[17], time, 0, 0, -43); + model.rotationKey(walk, joints[21], time, 0, 0, 43); + } +} + +func build(model) { + buildStaticSkeleton(model); + var joints = []; + joints.push(model.joint("Rig.root", -1, 0, 0, 0)); + joints.push(model.joint("Rig.hips", joints[0], 0, 0.39, 0)); + joints.push(model.joint("Rig.spine", joints[1], 0, 0.29, 0)); + joints.push(model.joint("Rig.chest", joints[2], 0, 0.22, 0)); + joints.push(model.joint("Rig.neck", joints[3], 0, 0.105, 0)); + joints.push(model.joint("Rig.head", joints[4], 0, 0.135, 0)); + joints.push(model.joint("Rig.jaw", joints[5], 0, -0.15, -0.1)); + joints.push(model.joint("Rig.leftHip", joints[1], -0.14, -0.05, 0)); + joints.push(model.joint("Rig.leftKnee", joints[7], 0, -0.08, 0)); + joints.push(model.joint("Rig.leftAnkle", joints[8], 0, -0.14, -0.015)); + joints.push(model.joint("Rig.leftToe", joints[9], 0, -0.07, -0.145)); + joints.push(model.joint("Rig.rightHip", joints[1], 0.14, -0.05, 0)); + joints.push(model.joint("Rig.rightKnee", joints[11], 0, -0.08, 0)); + joints.push(model.joint("Rig.rightAnkle", joints[12], 0, -0.14, -0.015)); + joints.push(model.joint("Rig.rightToe", joints[13], 0, -0.07, -0.145)); + joints.push(model.joint("Rig.leftShoulder", joints[3], -0.31, 0.01, 0)); + joints.push(model.joint("Rig.leftElbow", joints[15], -0.18, -0.05, -0.012)); + joints.push(model.joint("Rig.leftWrist", joints[16], -0.17, 0, -0.033)); + joints.push(model.joint("Rig.leftHand", joints[17], -0.04, 0, 0)); + joints.push(model.joint("Rig.rightShoulder", joints[3], 0.31, 0.01, 0)); + joints.push(model.joint("Rig.rightElbow", joints[19], 0.18, -0.05, -0.012)); + joints.push(model.joint("Rig.rightWrist", joints[20], 0.17, 0, -0.033)); + joints.push(model.joint("Rig.rightHand", joints[21], 0.04, 0, 0)); + rigSkinParts(model, joints); + rigWalkClips(model, joints); +} diff --git a/Examples/Technical/ProceduralSkeleton/Generators/Skeleton.ada b/Examples/Technical/ProceduralSkeleton/Generators/Skeleton.ada new file mode 100644 index 0000000..25f96bf --- /dev/null +++ b/Examples/Technical/ProceduralSkeleton/Generators/Skeleton.ada @@ -0,0 +1,910 @@ +// Generated by author_recipe.py; run directly through editor.model.generate. +// Units: meters. Front: -Z. Static multipart study, not a skinned mesh. +func part(m, p, parent, mat, name, x, y, z) { + m.parent(p, parent); m.paint(p, mat); m.name(p, name); m.place(p, x, y, z); return p; +} +func build(m) { + m.material(0, 0.73, 0.63, 0.43); m.surface(0, 0, 0.85); + m.material(1, 0.94, 0.83, 0.59); m.surface(1, 0, 0.76); + m.material(2, 0.12, 0.065, 0.025); m.surface(2, 0, 0.95); + m.material(3, 0.56, 0.25, 0.022); m.surface(3, 0, 0.82); + m.material(4, 1, 0.65, 0.015); m.surface(4, 0, 0.35); + m.material(5, 0.46, 0.16, 0.085); m.surface(5, 0, 0.95); + m.material(6, 0.24, 0.075, 0.038); m.surface(6, 0, 0.95); + m.material(7, 0.078, 0.067, 0.058); m.surface(7, 0, 0.95); + m.material(8, 0.24, 0.32, 0.35); m.surface(8, 0.6, 0.55); + m.material(9, 0.39, 0.17, 0.08); m.surface(9, 0, 0.9); + m.material(10, 0.55, 0.64, 0.64); m.surface(10, 0.5, 0.48); + m.emissive(4, 1, 0.65, 0.008); + var g1 = m.group(); m.name(g1, "Skeleton minion"); + var g2 = m.group(); m.name(g2, "Head"); + m.parent(g2, g1); + m.vertex(-0.22, 1.7, -0.265); + m.vertex(0.22, 1.7, -0.265); + m.vertex(0.46, 1.55, -0.265); + m.vertex(0.47, 1.25, -0.265); + m.vertex(0.37, 1.115, -0.265); + m.vertex(0.19, 1.06, -0.265); + m.vertex(-0.19, 1.06, -0.265); + m.vertex(-0.37, 1.115, -0.265); + m.vertex(-0.47, 1.25, -0.265); + m.vertex(-0.46, 1.55, -0.265); + m.vertex(-0.2024, 1.684, 0.19); + m.vertex(0.2024, 1.684, 0.19); + m.vertex(0.4232, 1.5415, 0.19); + m.vertex(0.4324, 1.2565, 0.19); + m.vertex(0.3404, 1.12825, 0.19); + m.vertex(0.1748, 1.076, 0.19); + m.vertex(-0.1748, 1.076, 0.19); + m.vertex(-0.3404, 1.12825, 0.19); + m.vertex(-0.4324, 1.2565, 0.19); + m.vertex(-0.4232, 1.5415, 0.19); + m.vertex(-0.1254, 1.5912, 0.29); + m.vertex(0.1254, 1.5912, 0.29); + m.vertex(0.2622, 1.4922, 0.29); + m.vertex(0.2679, 1.2942, 0.29); + m.vertex(0.2109, 1.2051, 0.29); + m.vertex(0.1083, 1.1688, 0.29); + m.vertex(-0.1083, 1.1688, 0.29); + m.vertex(-0.2109, 1.2051, 0.29); + m.vertex(-0.2679, 1.2942, 0.29); + m.vertex(-0.2622, 1.4922, 0.29); + m.vertex(0, 1.38, 0.31); + m.triangle(0, 10, 1); + m.triangle(1, 10, 11); + m.triangle(1, 11, 2); + m.triangle(2, 11, 12); + m.triangle(2, 12, 3); + m.triangle(3, 12, 13); + m.triangle(3, 13, 4); + m.triangle(4, 13, 14); + m.triangle(4, 14, 5); + m.triangle(5, 14, 15); + m.triangle(5, 15, 6); + m.triangle(6, 15, 16); + m.triangle(6, 16, 7); + m.triangle(7, 16, 17); + m.triangle(7, 17, 8); + m.triangle(8, 17, 18); + m.triangle(8, 18, 9); + m.triangle(9, 18, 19); + m.triangle(9, 19, 0); + m.triangle(0, 19, 10); + m.triangle(10, 20, 11); + m.triangle(11, 20, 21); + m.triangle(11, 21, 12); + m.triangle(12, 21, 22); + m.triangle(12, 22, 13); + m.triangle(13, 22, 23); + m.triangle(13, 23, 14); + m.triangle(14, 23, 24); + m.triangle(14, 24, 15); + m.triangle(15, 24, 25); + m.triangle(15, 25, 16); + m.triangle(16, 25, 26); + m.triangle(16, 26, 17); + m.triangle(17, 26, 27); + m.triangle(17, 27, 18); + m.triangle(18, 27, 28); + m.triangle(18, 28, 19); + m.triangle(19, 28, 29); + m.triangle(19, 29, 10); + m.triangle(10, 29, 20); + m.triangle(20, 30, 21); + m.triangle(21, 30, 22); + m.triangle(22, 30, 23); + m.triangle(23, 30, 24); + m.triangle(24, 30, 25); + m.triangle(25, 30, 26); + m.triangle(26, 30, 27); + m.triangle(27, 30, 28); + m.triangle(28, 30, 29); + m.triangle(29, 30, 20); + var p3 = part(m, m.mesh(), g2, 1, "Faceted cranium shell", 0, 0, 0); + m.vertex(-0.22, 1.7, -0.265); + m.vertex(0, 1.7, -0.265); + m.vertex(0, 1.38, -0.265); + m.vertex(0, 1.1, -0.265); + m.vertex(-0.19, 1.06, -0.265); + m.vertex(-0.37, 1.115, -0.265); + m.vertex(-0.47, 1.25, -0.265); + m.vertex(-0.46, 1.55, -0.265); + m.vertex(-0.235, 1.525, -0.295); + m.vertex(-0.1254, 1.47814, -0.295); + m.vertex(-0.08, 1.365, -0.295); + m.vertex(-0.1254, 1.25186, -0.295); + m.vertex(-0.235, 1.205, -0.295); + m.vertex(-0.3446, 1.25186, -0.295); + m.vertex(-0.39, 1.365, -0.295); + m.vertex(-0.3446, 1.47814, -0.295); + m.triangle(0, 1, 8); + m.triangle(1, 9, 8); + m.triangle(1, 2, 9); + m.triangle(2, 10, 9); + m.triangle(2, 3, 10); + m.triangle(3, 11, 10); + m.triangle(3, 4, 11); + m.triangle(4, 12, 11); + m.triangle(4, 5, 12); + m.triangle(5, 13, 12); + m.triangle(5, 6, 13); + m.triangle(6, 14, 13); + m.triangle(6, 7, 14); + m.triangle(7, 15, 14); + m.triangle(7, 0, 15); + m.triangle(0, 8, 15); + var p4 = part(m, m.mesh(), g2, 1, "Left orbital ivory rim", 0, 0, 0); + m.vertex(-0.235, 1.525, -0.295); + m.vertex(-0.1254, 1.47814, -0.295); + m.vertex(-0.08, 1.365, -0.295); + m.vertex(-0.1254, 1.25186, -0.295); + m.vertex(-0.235, 1.205, -0.295); + m.vertex(-0.3446, 1.25186, -0.295); + m.vertex(-0.39, 1.365, -0.295); + m.vertex(-0.3446, 1.47814, -0.295); + m.vertex(-0.235, 1.4802, -0.17); + m.vertex(-0.15609, 1.44646, -0.17); + m.vertex(-0.1234, 1.365, -0.17); + m.vertex(-0.15609, 1.28354, -0.17); + m.vertex(-0.235, 1.2498, -0.17); + m.vertex(-0.31391, 1.28354, -0.17); + m.vertex(-0.3466, 1.365, -0.17); + m.vertex(-0.31391, 1.44646, -0.17); + m.triangle(0, 1, 8); + m.triangle(1, 9, 8); + m.triangle(1, 2, 9); + m.triangle(2, 10, 9); + m.triangle(2, 3, 10); + m.triangle(3, 11, 10); + m.triangle(3, 4, 11); + m.triangle(4, 12, 11); + m.triangle(4, 5, 12); + m.triangle(5, 13, 12); + m.triangle(5, 6, 13); + m.triangle(6, 14, 13); + m.triangle(6, 7, 14); + m.triangle(7, 15, 14); + m.triangle(7, 0, 15); + m.triangle(0, 8, 15); + var p5 = part(m, m.mesh(), g2, 3, "Left recessed socket walls", 0, 0, 0); + m.vertex(-0.235, 1.4802, -0.17); + m.vertex(-0.15609, 1.44646, -0.17); + m.vertex(-0.1234, 1.365, -0.17); + m.vertex(-0.15609, 1.28354, -0.17); + m.vertex(-0.235, 1.2498, -0.17); + m.vertex(-0.31391, 1.28354, -0.17); + m.vertex(-0.3466, 1.365, -0.17); + m.vertex(-0.31391, 1.44646, -0.17); + m.triangle(0, 1, 2); + m.triangle(0, 2, 3); + m.triangle(0, 3, 4); + m.triangle(0, 4, 5); + m.triangle(0, 5, 6); + m.triangle(0, 6, 7); + var p6 = part(m, m.mesh(), g2, 2, "Left socket shadow", 0, 0, 0); + var p7 = part(m, m.sphere(1, 10), g2, 4, "Left ember eye", -0.235, 1.36, -0.205); + m.scale(p7, 0.061, 0.084, 0.043); + m.vertex(0.22, 1.7, -0.265); + m.vertex(0, 1.7, -0.265); + m.vertex(0, 1.38, -0.265); + m.vertex(0, 1.1, -0.265); + m.vertex(0.19, 1.06, -0.265); + m.vertex(0.37, 1.115, -0.265); + m.vertex(0.47, 1.25, -0.265); + m.vertex(0.46, 1.55, -0.265); + m.vertex(0.235, 1.525, -0.295); + m.vertex(0.1254, 1.47814, -0.295); + m.vertex(0.08, 1.365, -0.295); + m.vertex(0.1254, 1.25186, -0.295); + m.vertex(0.235, 1.205, -0.295); + m.vertex(0.3446, 1.25186, -0.295); + m.vertex(0.39, 1.365, -0.295); + m.vertex(0.3446, 1.47814, -0.295); + m.triangle(0, 8, 1); + m.triangle(1, 8, 9); + m.triangle(1, 9, 2); + m.triangle(2, 9, 10); + m.triangle(2, 10, 3); + m.triangle(3, 10, 11); + m.triangle(3, 11, 4); + m.triangle(4, 11, 12); + m.triangle(4, 12, 5); + m.triangle(5, 12, 13); + m.triangle(5, 13, 6); + m.triangle(6, 13, 14); + m.triangle(6, 14, 7); + m.triangle(7, 14, 15); + m.triangle(7, 15, 0); + m.triangle(0, 15, 8); + var p8 = part(m, m.mesh(), g2, 1, "Right orbital ivory rim", 0, 0, 0); + m.vertex(0.235, 1.525, -0.295); + m.vertex(0.1254, 1.47814, -0.295); + m.vertex(0.08, 1.365, -0.295); + m.vertex(0.1254, 1.25186, -0.295); + m.vertex(0.235, 1.205, -0.295); + m.vertex(0.3446, 1.25186, -0.295); + m.vertex(0.39, 1.365, -0.295); + m.vertex(0.3446, 1.47814, -0.295); + m.vertex(0.235, 1.4802, -0.17); + m.vertex(0.15609, 1.44646, -0.17); + m.vertex(0.1234, 1.365, -0.17); + m.vertex(0.15609, 1.28354, -0.17); + m.vertex(0.235, 1.2498, -0.17); + m.vertex(0.31391, 1.28354, -0.17); + m.vertex(0.3466, 1.365, -0.17); + m.vertex(0.31391, 1.44646, -0.17); + m.triangle(0, 8, 1); + m.triangle(1, 8, 9); + m.triangle(1, 9, 2); + m.triangle(2, 9, 10); + m.triangle(2, 10, 3); + m.triangle(3, 10, 11); + m.triangle(3, 11, 4); + m.triangle(4, 11, 12); + m.triangle(4, 12, 5); + m.triangle(5, 12, 13); + m.triangle(5, 13, 6); + m.triangle(6, 13, 14); + m.triangle(6, 14, 7); + m.triangle(7, 14, 15); + m.triangle(7, 15, 0); + m.triangle(0, 15, 8); + var p9 = part(m, m.mesh(), g2, 3, "Right recessed socket walls", 0, 0, 0); + m.vertex(0.235, 1.4802, -0.17); + m.vertex(0.15609, 1.44646, -0.17); + m.vertex(0.1234, 1.365, -0.17); + m.vertex(0.15609, 1.28354, -0.17); + m.vertex(0.235, 1.2498, -0.17); + m.vertex(0.31391, 1.28354, -0.17); + m.vertex(0.3466, 1.365, -0.17); + m.vertex(0.31391, 1.44646, -0.17); + m.triangle(0, 2, 1); + m.triangle(0, 3, 2); + m.triangle(0, 4, 3); + m.triangle(0, 5, 4); + m.triangle(0, 6, 5); + m.triangle(0, 7, 6); + var p10 = part(m, m.mesh(), g2, 2, "Right socket shadow", 0, 0, 0); + var p11 = part(m, m.sphere(1, 10), g2, 4, "Right ember eye", 0.235, 1.36, -0.205); + m.scale(p11, 0.061, 0.084, 0.043); + m.vertex(-0.065, 1.145, -0.288); + m.vertex(0.065, 1.145, -0.288); + m.vertex(0, 1.285, -0.288); + m.vertex(-0.065, 1.145, -0.22); + m.vertex(0.065, 1.145, -0.22); + m.vertex(0, 1.285, -0.22); + m.triangle(0, 2, 1); + m.triangle(3, 4, 5); + m.triangle(0, 1, 3); + m.triangle(1, 4, 3); + m.triangle(1, 2, 4); + m.triangle(2, 5, 4); + m.triangle(2, 0, 5); + m.triangle(0, 3, 5); + var p12 = part(m, m.mesh(), g2, 2, "Nasal cavity", 0, 0, 0); + m.vertex(-0.075, 1.135, -0.29); + m.vertex(-0.065, 1.145, -0.29); + m.vertex(0, 1.17, -0.295); + m.vertex(0.065, 1.145, -0.29); + m.vertex(0.075, 1.135, -0.29); + m.triangle(0, 1, 2); + m.triangle(2, 3, 4); + var p13 = part(m, m.mesh(), g2, 0, "Nasal bevel", 0, 0, 0); + m.vertex(-0.322, 1.045, -0.27); + m.vertex(-0.258, 1.01, -0.27); + m.vertex(-0.221, 1.045, -0.27); + m.vertex(-0.209, 1.14, -0.27); + m.vertex(-0.331, 1.14, -0.27); + m.vertex(-0.322, 1.045, -0.12); + m.vertex(-0.258, 1.01, -0.12); + m.vertex(-0.221, 1.045, -0.12); + m.vertex(-0.209, 1.14, -0.12); + m.vertex(-0.331, 1.14, -0.12); + m.triangle(0, 2, 1); + m.triangle(5, 6, 7); + m.triangle(0, 3, 2); + m.triangle(5, 7, 8); + m.triangle(0, 4, 3); + m.triangle(5, 8, 9); + m.triangle(0, 1, 5); + m.triangle(1, 6, 5); + m.triangle(1, 2, 6); + m.triangle(2, 7, 6); + m.triangle(2, 3, 7); + m.triangle(3, 8, 7); + m.triangle(3, 4, 8); + m.triangle(4, 9, 8); + m.triangle(4, 0, 9); + m.triangle(0, 5, 9); + var p14 = part(m, m.mesh(), g2, 1, "Upper tooth 1", 0, 0, 0); + m.vertex(-0.187, 1.045, -0.27); + m.vertex(-0.123, 1.01, -0.27); + m.vertex(-0.086, 1.045, -0.27); + m.vertex(-0.074, 1.14, -0.27); + m.vertex(-0.196, 1.14, -0.27); + m.vertex(-0.187, 1.045, -0.12); + m.vertex(-0.123, 1.01, -0.12); + m.vertex(-0.086, 1.045, -0.12); + m.vertex(-0.074, 1.14, -0.12); + m.vertex(-0.196, 1.14, -0.12); + m.triangle(0, 2, 1); + m.triangle(5, 6, 7); + m.triangle(0, 3, 2); + m.triangle(5, 7, 8); + m.triangle(0, 4, 3); + m.triangle(5, 8, 9); + m.triangle(0, 1, 5); + m.triangle(1, 6, 5); + m.triangle(1, 2, 6); + m.triangle(2, 7, 6); + m.triangle(2, 3, 7); + m.triangle(3, 8, 7); + m.triangle(3, 4, 8); + m.triangle(4, 9, 8); + m.triangle(4, 0, 9); + m.triangle(0, 5, 9); + var p15 = part(m, m.mesh(), g2, 1, "Upper tooth 2", 0, 0, 0); + m.vertex(-0.052, 1.045, -0.27); + m.vertex(0.012, 1.01, -0.27); + m.vertex(0.049, 1.045, -0.27); + m.vertex(0.061, 1.14, -0.27); + m.vertex(-0.061, 1.14, -0.27); + m.vertex(-0.052, 1.045, -0.12); + m.vertex(0.012, 1.01, -0.12); + m.vertex(0.049, 1.045, -0.12); + m.vertex(0.061, 1.14, -0.12); + m.vertex(-0.061, 1.14, -0.12); + m.triangle(0, 2, 1); + m.triangle(5, 6, 7); + m.triangle(0, 3, 2); + m.triangle(5, 7, 8); + m.triangle(0, 4, 3); + m.triangle(5, 8, 9); + m.triangle(0, 1, 5); + m.triangle(1, 6, 5); + m.triangle(1, 2, 6); + m.triangle(2, 7, 6); + m.triangle(2, 3, 7); + m.triangle(3, 8, 7); + m.triangle(3, 4, 8); + m.triangle(4, 9, 8); + m.triangle(4, 0, 9); + m.triangle(0, 5, 9); + var p16 = part(m, m.mesh(), g2, 1, "Upper tooth 3", 0, 0, 0); + m.vertex(0.083, 1.045, -0.27); + m.vertex(0.147, 1.01, -0.27); + m.vertex(0.184, 1.045, -0.27); + m.vertex(0.196, 1.14, -0.27); + m.vertex(0.074, 1.14, -0.27); + m.vertex(0.083, 1.045, -0.12); + m.vertex(0.147, 1.01, -0.12); + m.vertex(0.184, 1.045, -0.12); + m.vertex(0.196, 1.14, -0.12); + m.vertex(0.074, 1.14, -0.12); + m.triangle(0, 2, 1); + m.triangle(5, 6, 7); + m.triangle(0, 3, 2); + m.triangle(5, 7, 8); + m.triangle(0, 4, 3); + m.triangle(5, 8, 9); + m.triangle(0, 1, 5); + m.triangle(1, 6, 5); + m.triangle(1, 2, 6); + m.triangle(2, 7, 6); + m.triangle(2, 3, 7); + m.triangle(3, 8, 7); + m.triangle(3, 4, 8); + m.triangle(4, 9, 8); + m.triangle(4, 0, 9); + m.triangle(0, 5, 9); + var p17 = part(m, m.mesh(), g2, 1, "Upper tooth 4", 0, 0, 0); + m.vertex(0.218, 1.045, -0.27); + m.vertex(0.282, 1.01, -0.27); + m.vertex(0.319, 1.045, -0.27); + m.vertex(0.331, 1.14, -0.27); + m.vertex(0.209, 1.14, -0.27); + m.vertex(0.218, 1.045, -0.12); + m.vertex(0.282, 1.01, -0.12); + m.vertex(0.319, 1.045, -0.12); + m.vertex(0.331, 1.14, -0.12); + m.vertex(0.209, 1.14, -0.12); + m.triangle(0, 2, 1); + m.triangle(5, 6, 7); + m.triangle(0, 3, 2); + m.triangle(5, 7, 8); + m.triangle(0, 4, 3); + m.triangle(5, 8, 9); + m.triangle(0, 1, 5); + m.triangle(1, 6, 5); + m.triangle(1, 2, 6); + m.triangle(2, 7, 6); + m.triangle(2, 3, 7); + m.triangle(3, 8, 7); + m.triangle(3, 4, 8); + m.triangle(4, 9, 8); + m.triangle(4, 0, 9); + m.triangle(0, 5, 9); + var p18 = part(m, m.mesh(), g2, 1, "Upper tooth 5", 0, 0, 0); + var g19 = m.group(); m.name(g19, "Lower jaw"); + m.parent(g19, g2); + m.vertex(-0.07, 0.925, -0.2); + m.vertex(0.045, 0.91, -0.2); + m.vertex(0.1, 0.945, -0.2); + m.vertex(0.12, 1.016, -0.2); + m.vertex(-0.12, 1.016, -0.2); + m.vertex(-0.07, 0.925, -0.07); + m.vertex(0.045, 0.91, -0.07); + m.vertex(0.1, 0.945, -0.07); + m.vertex(0.12, 1.016, -0.07); + m.vertex(-0.12, 1.016, -0.07); + m.triangle(0, 2, 1); + m.triangle(5, 6, 7); + m.triangle(0, 3, 2); + m.triangle(5, 7, 8); + m.triangle(0, 4, 3); + m.triangle(5, 8, 9); + m.triangle(0, 1, 5); + m.triangle(1, 6, 5); + m.triangle(1, 2, 6); + m.triangle(2, 7, 6); + m.triangle(2, 3, 7); + m.triangle(3, 8, 7); + m.triangle(3, 4, 8); + m.triangle(4, 9, 8); + m.triangle(4, 0, 9); + m.triangle(0, 5, 9); + var p20 = part(m, m.mesh(), g19, 0, "Chin", 0, 0, 0); + var p21 = part(m, m.cylinder(0.0272, 0.032, 0.1995, 7), g19, 1, "Jaw hinge", -0.185, 1.03, -0.065); + m.rotate(p21, 32.73523, 0, 33.46175); + var p22 = part(m, m.cylinder(0.0272, 0.032, 0.1995, 7), g19, 1, "Jaw hinge", 0.185, 1.03, -0.065); + m.rotate(p22, 32.73523, 0, -33.46175); + m.vertex(-0.06, 0.94, -0.205); + m.vertex(0.065, 0.925, -0.205); + m.vertex(0.04, 0.98, -0.205); + m.vertex(-0.1, 1.005, -0.205); + m.vertex(-0.06, 0.94, -0.2); + m.vertex(0.065, 0.925, -0.2); + m.vertex(0.04, 0.98, -0.2); + m.vertex(-0.1, 1.005, -0.2); + m.triangle(0, 2, 1); + m.triangle(4, 5, 6); + m.triangle(0, 3, 2); + m.triangle(4, 6, 7); + m.triangle(0, 1, 4); + m.triangle(1, 5, 4); + m.triangle(1, 2, 5); + m.triangle(2, 6, 5); + m.triangle(2, 3, 6); + m.triangle(3, 7, 6); + m.triangle(3, 0, 7); + m.triangle(0, 4, 7); + var p23 = part(m, m.mesh(), g19, 1, "Chin light facet", 0, 0, 0); + var g24 = m.group(); m.name(g24, "Torso"); + m.parent(g24, g1); + var p25 = part(m, m.cylinder(0.02975, 0.035, 0.61, 7), g24, 0, "Spine", 0, 0.705, 0.055); + m.rotate(p25, 0, 0, 0); + var p26 = part(m, m.sphere(1, 8), g24, 0, "Neck joint", 0, 1.01, 0); + m.scale(p26, 0.07, 0.06, 0.065); + var g27 = m.group(); m.name(g27, "Rib cage row 1"); + m.parent(g27, g24); + var p28 = part(m, m.cylinder(0.01955, 0.023, 0.10374, 7), g27, 1, "Rib 1 segment -1 0", 0.05905, 0.55285, -0.12201); + m.rotate(p28, -74.93151, 0, 80.90257); + var p29 = part(m, m.cylinder(0.01955, 0.023, 0.10483, 7), g27, 1, "Rib 1 segment -1 1", -0.04422, 0.55338, -0.12399); + m.rotate(p29, 105.06849, 0, 83.27063); + var p30 = part(m, m.cylinder(0.01955, 0.023, 0.09196, 7), g27, 1, "Rib 1 segment -1 2", -0.13806, 0.5468, -0.09955); + m.rotate(p30, 105.06849, 0, 65.35156); + var p31 = part(m, m.cylinder(0.01955, 0.023, 0.07218, 7), g27, 1, "Rib 1 segment -1 3", -0.20247, 0.53451, -0.05388); + m.rotate(p31, 105.06849, 0, 38.80903); + var p32 = part(m, m.cylinder(0.01955, 0.023, 0.0622, 7), g27, 1, "Rib 1 segment -1 4", -0.22371, 0.51912, 0.00328); + m.rotate(p32, 105.06849, 0, -2.53819); + var p33 = part(m, m.cylinder(0.01955, 0.023, 0.07428, 7), g27, 1, "Rib 1 segment -1 5", -0.19726, 0.50392, 0.05974); + m.rotate(p33, 105.06849, 0, -42.47025); + var p34 = part(m, m.cylinder(0.01955, 0.023, 0.09394, 7), g27, 1, "Rib 1 segment -1 6", -0.12874, 0.49215, 0.10346); + m.rotate(p34, 105.06849, 0, -67.62294); + var p35 = part(m, m.cylinder(0.01955, 0.023, 0.10374, 7), g27, 1, "Rib 1 segment 1 0", -0.05905, 0.55285, -0.12201); + m.rotate(p35, -74.93151, 0, -80.90257); + var p36 = part(m, m.cylinder(0.01955, 0.023, 0.10483, 7), g27, 1, "Rib 1 segment 1 1", 0.04422, 0.55338, -0.12399); + m.rotate(p36, 105.06849, 0, -83.27063); + var p37 = part(m, m.cylinder(0.01955, 0.023, 0.09196, 7), g27, 1, "Rib 1 segment 1 2", 0.13806, 0.5468, -0.09955); + m.rotate(p37, 105.06849, 0, -65.35156); + var p38 = part(m, m.cylinder(0.01955, 0.023, 0.07218, 7), g27, 1, "Rib 1 segment 1 3", 0.20247, 0.53451, -0.05388); + m.rotate(p38, 105.06849, 0, -38.80903); + var p39 = part(m, m.cylinder(0.01955, 0.023, 0.0622, 7), g27, 1, "Rib 1 segment 1 4", 0.22371, 0.51912, 0.00328); + m.rotate(p39, 105.06849, 0, 2.53819); + var p40 = part(m, m.cylinder(0.01955, 0.023, 0.07428, 7), g27, 1, "Rib 1 segment 1 5", 0.19726, 0.50392, 0.05974); + m.rotate(p40, 105.06849, 0, 42.47025); + var p41 = part(m, m.cylinder(0.01955, 0.023, 0.09394, 7), g27, 1, "Rib 1 segment 1 6", 0.12874, 0.49215, 0.10346); + m.rotate(p41, 105.06849, 0, 67.62294); + var g42 = m.group(); m.name(g42, "Rib cage row 2"); + m.parent(g42, g24); + var p43 = part(m, m.cylinder(0.01955, 0.023, 0.11511, 7), g42, 1, "Rib 2 segment -1 0", 0.06547, 0.66285, -0.14078); + m.rotate(p43, -76.86598, 0, 80.61714); + var p44 = part(m, m.cylinder(0.01955, 0.023, 0.11627, 7), g42, 1, "Rib 2 segment -1 1", -0.04903, 0.66338, -0.14307); + m.rotate(p44, 103.13402, 0, 83.0578); + var p45 = part(m, m.cylinder(0.01955, 0.023, 0.10253, 7), g42, 1, "Rib 2 segment -1 2", -0.15307, 0.6568, -0.11486); + m.rotate(p45, 103.13402, 0, 64.66189); + var p46 = part(m, m.cylinder(0.01955, 0.023, 0.08158, 7), g42, 1, "Rib 2 segment -1 3", -0.22448, 0.64451, -0.06216); + m.rotate(p46, 103.13402, 0, 37.93254); + var p47 = part(m, m.cylinder(0.01955, 0.023, 0.07116, 7), g42, 1, "Rib 2 segment -1 4", -0.24803, 0.62912, 0.00379); + m.rotate(p47, 103.13402, 0, -2.45975); + var p48 = part(m, m.cylinder(0.01955, 0.023, 0.0838, 7), g42, 1, "Rib 2 segment -1 5", -0.2187, 0.61392, 0.06893); + m.rotate(p48, 103.13402, 0, -41.57462); + var p49 = part(m, m.cylinder(0.01955, 0.023, 0.10464, 7), g42, 1, "Rib 2 segment -1 6", -0.14274, 0.60215, 0.11938); + m.rotate(p49, 103.13402, 0, -66.98184); + var p50 = part(m, m.cylinder(0.01955, 0.023, 0.11511, 7), g42, 1, "Rib 2 segment 1 0", -0.06547, 0.66285, -0.14078); + m.rotate(p50, -76.86598, 0, -80.61714); + var p51 = part(m, m.cylinder(0.01955, 0.023, 0.11627, 7), g42, 1, "Rib 2 segment 1 1", 0.04903, 0.66338, -0.14307); + m.rotate(p51, 103.13402, 0, -83.0578); + var p52 = part(m, m.cylinder(0.01955, 0.023, 0.10253, 7), g42, 1, "Rib 2 segment 1 2", 0.15307, 0.6568, -0.11486); + m.rotate(p52, 103.13402, 0, -64.66189); + var p53 = part(m, m.cylinder(0.01955, 0.023, 0.08158, 7), g42, 1, "Rib 2 segment 1 3", 0.22448, 0.64451, -0.06216); + m.rotate(p53, 103.13402, 0, -37.93254); + var p54 = part(m, m.cylinder(0.01955, 0.023, 0.07116, 7), g42, 1, "Rib 2 segment 1 4", 0.24803, 0.62912, 0.00379); + m.rotate(p54, 103.13402, 0, 2.45975); + var p55 = part(m, m.cylinder(0.01955, 0.023, 0.0838, 7), g42, 1, "Rib 2 segment 1 5", 0.2187, 0.61392, 0.06893); + m.rotate(p55, 103.13402, 0, 41.57462); + var p56 = part(m, m.cylinder(0.01955, 0.023, 0.10464, 7), g42, 1, "Rib 2 segment 1 6", 0.14274, 0.60215, 0.11938); + m.rotate(p56, 103.13402, 0, 66.98184); + var g57 = m.group(); m.name(g57, "Rib cage row 3"); + m.parent(g57, g24); + var p58 = part(m, m.cylinder(0.01955, 0.023, 0.1218, 7), g57, 1, "Rib 3 segment -1 0", 0.06932, 0.77285, -0.14547); + m.rotate(p58, -77.27564, 0, 80.85392); + var p59 = part(m, m.cylinder(0.01955, 0.023, 0.12307, 7), g57, 1, "Rib 3 segment -1 1", -0.05191, 0.77338, -0.14784); + m.rotate(p59, 102.72436, 0, 83.23437); + var p60 = part(m, m.cylinder(0.01955, 0.023, 0.10805, 7), g57, 1, "Rib 3 segment -1 2", -0.16207, 0.7668, -0.11869); + m.rotate(p60, 102.72436, 0, 65.23355); + var p61 = part(m, m.cylinder(0.01955, 0.023, 0.08501, 7), g57, 1, "Rib 3 segment -1 3", -0.23768, 0.75451, -0.06424); + m.rotate(p61, 102.72436, 0, 38.65734); + var p62 = part(m, m.cylinder(0.01955, 0.023, 0.07342, 7), g57, 1, "Rib 3 segment -1 4", -0.26262, 0.73912, 0.00391); + m.rotate(p62, 102.72436, 0, -2.52448); + var p63 = part(m, m.cylinder(0.01955, 0.023, 0.08746, 7), g57, 1, "Rib 3 segment -1 5", -0.23156, 0.72392, 0.07123); + m.rotate(p63, 102.72436, 0, -42.3155); + var p64 = part(m, m.cylinder(0.01955, 0.023, 0.11036, 7), g57, 1, "Rib 3 segment -1 6", -0.15113, 0.71215, 0.12336); + m.rotate(p64, 102.72436, 0, -67.51333); + var p65 = part(m, m.cylinder(0.01955, 0.023, 0.1218, 7), g57, 1, "Rib 3 segment 1 0", -0.06932, 0.77285, -0.14547); + m.rotate(p65, -77.27564, 0, -80.85392); + var p66 = part(m, m.cylinder(0.01955, 0.023, 0.12307, 7), g57, 1, "Rib 3 segment 1 1", 0.05191, 0.77338, -0.14784); + m.rotate(p66, 102.72436, 0, -83.23437); + var p67 = part(m, m.cylinder(0.01955, 0.023, 0.10805, 7), g57, 1, "Rib 3 segment 1 2", 0.16207, 0.7668, -0.11869); + m.rotate(p67, 102.72436, 0, -65.23355); + var p68 = part(m, m.cylinder(0.01955, 0.023, 0.08501, 7), g57, 1, "Rib 3 segment 1 3", 0.23768, 0.75451, -0.06424); + m.rotate(p68, 102.72436, 0, -38.65734); + var p69 = part(m, m.cylinder(0.01955, 0.023, 0.07342, 7), g57, 1, "Rib 3 segment 1 4", 0.26262, 0.73912, 0.00391); + m.rotate(p69, 102.72436, 0, 2.52448); + var p70 = part(m, m.cylinder(0.01955, 0.023, 0.08746, 7), g57, 1, "Rib 3 segment 1 5", 0.23156, 0.72392, 0.07123); + m.rotate(p70, 102.72436, 0, 42.3155); + var p71 = part(m, m.cylinder(0.01955, 0.023, 0.11036, 7), g57, 1, "Rib 3 segment 1 6", 0.15113, 0.71215, 0.12336); + m.rotate(p71, 102.72436, 0, 67.51333); + var g72 = m.group(); m.name(g72, "Rib cage row 4"); + m.parent(g72, g24); + var p73 = part(m, m.cylinder(0.01955, 0.023, 0.11712, 7), g72, 1, "Rib 4 segment -1 0", 0.06675, 0.88285, -0.13139); + m.rotate(p73, -75.96376, 0, 81.36637); + var p74 = part(m, m.cylinder(0.01955, 0.023, 0.11842, 7), g72, 1, "Rib 4 segment -1 1", -0.04999, 0.88338, -0.13353); + m.rotate(p74, 104.03624, 0, 83.61614); + var p75 = part(m, m.cylinder(0.01955, 0.023, 0.10304, 7), g72, 1, "Rib 4 segment -1 2", -0.15607, 0.8768, -0.1072); + m.rotate(p75, 104.03624, 0, 66.48624); + var p76 = part(m, m.cylinder(0.01955, 0.023, 0.07905, 7), g72, 1, "Rib 4 segment -1 3", -0.22888, 0.86451, -0.05802); + m.rotate(p76, 104.03624, 0, 40.30468); + var p77 = part(m, m.cylinder(0.01955, 0.023, 0.06668, 7), g72, 1, "Rib 4 segment -1 4", -0.25289, 0.84912, 0.00353); + m.rotate(p77, 104.03624, 0, -2.67661); + var p78 = part(m, m.cylinder(0.01955, 0.023, 0.08164, 7), g72, 1, "Rib 4 segment -1 5", -0.22298, 0.83392, 0.06433); + m.rotate(p78, 104.03624, 0, -43.99041); + var p79 = part(m, m.cylinder(0.01955, 0.023, 0.10541, 7), g72, 1, "Rib 4 segment -1 6", -0.14554, 0.82215, 0.11142); + m.rotate(p79, 104.03624, 0, -68.67518); + var p80 = part(m, m.cylinder(0.01955, 0.023, 0.11712, 7), g72, 1, "Rib 4 segment 1 0", -0.06675, 0.88285, -0.13139); + m.rotate(p80, -75.96376, 0, -81.36637); + var p81 = part(m, m.cylinder(0.01955, 0.023, 0.11842, 7), g72, 1, "Rib 4 segment 1 1", 0.04999, 0.88338, -0.13353); + m.rotate(p81, 104.03624, 0, -83.61614); + var p82 = part(m, m.cylinder(0.01955, 0.023, 0.10304, 7), g72, 1, "Rib 4 segment 1 2", 0.15607, 0.8768, -0.1072); + m.rotate(p82, 104.03624, 0, -66.48624); + var p83 = part(m, m.cylinder(0.01955, 0.023, 0.07905, 7), g72, 1, "Rib 4 segment 1 3", 0.22888, 0.86451, -0.05802); + m.rotate(p83, 104.03624, 0, -40.30468); + var p84 = part(m, m.cylinder(0.01955, 0.023, 0.06668, 7), g72, 1, "Rib 4 segment 1 4", 0.25289, 0.84912, 0.00353); + m.rotate(p84, 104.03624, 0, 2.67661); + var p85 = part(m, m.cylinder(0.01955, 0.023, 0.08164, 7), g72, 1, "Rib 4 segment 1 5", 0.22298, 0.83392, 0.06433); + m.rotate(p85, 104.03624, 0, 43.99041); + var p86 = part(m, m.cylinder(0.01955, 0.023, 0.10541, 7), g72, 1, "Rib 4 segment 1 6", 0.14554, 0.82215, 0.11142); + m.rotate(p86, 104.03624, 0, 68.67518); + var p87 = part(m, m.cylinder(0.02295, 0.027, 0.33015, 7), g24, 0, "Sternum", 0, 0.695, -0.135); + m.rotate(p87, -1.7357, 0, 0); + var p88 = part(m, m.cylinder(0.02805, 0.033, 0.31016, 7), g24, 1, "Clavicle", -0.155, 0.905, 0); + m.rotate(p88, 0, 0, 88.15239); + var p89 = part(m, m.cylinder(0.02805, 0.033, 0.31016, 7), g24, 1, "Clavicle", 0.155, 0.905, 0); + m.rotate(p89, 0, 0, -88.15239); + var g90 = m.group(); m.name(g90, "Terracotta neckerchief"); + m.parent(g90, g24); + m.vertex(-0.23, 0.76, -0.205); + m.vertex(-0.05, 0.65, -0.205); + m.vertex(0.09, 0.665, -0.205); + m.vertex(0.24, 0.76, -0.205); + m.vertex(0.33, 0.93, -0.205); + m.vertex(0.23, 1.005, -0.205); + m.vertex(0, 0.96, -0.205); + m.vertex(-0.22, 1.01, -0.205); + m.vertex(-0.32, 0.94, -0.205); + m.vertex(-0.23, 0.76, -0.16); + m.vertex(-0.05, 0.65, -0.16); + m.vertex(0.09, 0.665, -0.16); + m.vertex(0.24, 0.76, -0.16); + m.vertex(0.33, 0.93, -0.16); + m.vertex(0.23, 1.005, -0.16); + m.vertex(0, 0.96, -0.16); + m.vertex(-0.22, 1.01, -0.16); + m.vertex(-0.32, 0.94, -0.16); + m.triangle(0, 2, 1); + m.triangle(9, 10, 11); + m.triangle(0, 3, 2); + m.triangle(9, 11, 12); + m.triangle(0, 4, 3); + m.triangle(9, 12, 13); + m.triangle(0, 5, 4); + m.triangle(9, 13, 14); + m.triangle(0, 6, 5); + m.triangle(9, 14, 15); + m.triangle(0, 7, 6); + m.triangle(9, 15, 16); + m.triangle(0, 8, 7); + m.triangle(9, 16, 17); + m.triangle(0, 1, 9); + m.triangle(1, 10, 9); + m.triangle(1, 2, 10); + m.triangle(2, 11, 10); + m.triangle(2, 3, 11); + m.triangle(3, 12, 11); + m.triangle(3, 4, 12); + m.triangle(4, 13, 12); + m.triangle(4, 5, 13); + m.triangle(5, 14, 13); + m.triangle(5, 6, 14); + m.triangle(6, 15, 14); + m.triangle(6, 7, 15); + m.triangle(7, 16, 15); + m.triangle(7, 8, 16); + m.triangle(8, 17, 16); + m.triangle(8, 0, 17); + m.triangle(0, 9, 17); + var p91 = part(m, m.mesh(), g90, 5, "Scarf bib", 0, 0, 0); + m.vertex(-0.05, 0.65, -0.215); + m.vertex(0.09, 0.665, -0.215); + m.vertex(0.22, 0.82, -0.215); + m.vertex(-0.04, 0.91, -0.215); + m.vertex(-0.22, 1.01, -0.215); + m.vertex(-0.32, 0.94, -0.215); + m.vertex(-0.05, 0.65, -0.21); + m.vertex(0.09, 0.665, -0.21); + m.vertex(0.22, 0.82, -0.21); + m.vertex(-0.04, 0.91, -0.21); + m.vertex(-0.22, 1.01, -0.21); + m.vertex(-0.32, 0.94, -0.21); + m.triangle(0, 2, 1); + m.triangle(6, 7, 8); + m.triangle(0, 3, 2); + m.triangle(6, 8, 9); + m.triangle(0, 4, 3); + m.triangle(6, 9, 10); + m.triangle(0, 5, 4); + m.triangle(6, 10, 11); + m.triangle(0, 1, 6); + m.triangle(1, 7, 6); + m.triangle(1, 2, 7); + m.triangle(2, 8, 7); + m.triangle(2, 3, 8); + m.triangle(3, 9, 8); + m.triangle(3, 4, 9); + m.triangle(4, 10, 9); + m.triangle(4, 5, 10); + m.triangle(5, 11, 10); + m.triangle(5, 0, 11); + m.triangle(0, 6, 11); + var p92 = part(m, m.mesh(), g90, 5, "Scarf left folded facet", 0, 0, 0); + var p93 = part(m, m.cylinder(0.0051, 0.006, 0.15267, 7), g90, 6, "Scarf seam", -0.185, 0.885, -0.2235); + m.rotate(p93, -177.85241, 0, -58.37453); + var p94 = part(m, m.cylinder(0.0051, 0.006, 0.13946, 7), g90, 6, "Scarf seam", -0.0525, 0.8275, -0.225); + m.rotate(p94, -180, 0, -75.46554); + var p95 = part(m, m.cylinder(0.0051, 0.006, 0.13733, 7), g90, 6, "Scarf seam", 0.0825, 0.8225, -0.2235); + m.rotate(p95, 6.84277, 0, -79.43494); + var p96 = part(m, m.cylinder(0.0051, 0.006, 0.13796, 7), g90, 6, "Scarf seam", 0.2, 0.8825, -0.2205); + m.rotate(p96, 1.80874, 0, -46.45454); + m.vertex(0.02, 0.74, 0.115); + m.vertex(0.075, 0.78, 0.115); + m.vertex(0.18, 0.73, 0.115); + m.vertex(0.12, 0.93, 0.115); + m.vertex(-0.04, 0.96, 0.115); + m.vertex(0.02, 0.74, 0.16); + m.vertex(0.075, 0.78, 0.16); + m.vertex(0.18, 0.73, 0.16); + m.vertex(0.12, 0.93, 0.16); + m.vertex(-0.04, 0.96, 0.16); + m.triangle(0, 2, 1); + m.triangle(5, 6, 7); + m.triangle(0, 3, 2); + m.triangle(5, 7, 8); + m.triangle(0, 4, 3); + m.triangle(5, 8, 9); + m.triangle(0, 1, 5); + m.triangle(1, 6, 5); + m.triangle(1, 2, 6); + m.triangle(2, 7, 6); + m.triangle(2, 3, 7); + m.triangle(3, 8, 7); + m.triangle(3, 4, 8); + m.triangle(4, 9, 8); + m.triangle(4, 0, 9); + m.triangle(0, 5, 9); + var p97 = part(m, m.mesh(), g90, 5, "Back scarf tail", 0, 0, 0); + m.profile(1, 0.0375); + m.profile(1, -0.0375); + m.profile(0.8, -0.0375); + m.profile(0.8, 0.0375); + m.profile(1, 0.0375); + var p98 = part(m, m.lathe(16), g90, 5, "Scarf collar", 0, 0.96, 0); + m.scale(p98, 0.14, 1, 0.12); + var g99 = m.group(); m.name(g99, "Pelvis and belt"); + m.parent(g99, g1); + var p100 = part(m, m.sphere(1, 8), g99, 7, "Dark shorts", 0, 0.395, 0); + m.scale(p100, 0.245, 0.14, 0.13); + m.profile(1, 0.0375); + m.profile(1, -0.0375); + m.profile(0.86111, -0.0375); + m.profile(0.86111, 0.0375); + m.profile(1, 0.0375); + var p101 = part(m, m.lathe(16), g99, 6, "Leather belt", 0, 0.475, 0); + m.scale(p101, 0.252, 1, 0.155); + var p102 = part(m, m.box(0.1, 0.016, 0.025), g99, 8, "Buckle upper", 0, 0.511, -0.175); + var p103 = part(m, m.box(0.1, 0.016, 0.025), g99, 8, "Buckle lower", 0, 0.44, -0.175); + var p104 = part(m, m.box(0.016, 0.075, 0.025), g99, 8, "Buckle left", -0.047, 0.475, -0.175); + var p105 = part(m, m.box(0.016, 0.075, 0.025), g99, 8, "Buckle right", 0.047, 0.475, -0.175); + var p106 = part(m, m.box(0.065, 0.012, 0.012), g99, 8, "Buckle tongue", 0.007, 0.475, -0.19); + var g107 = m.group(); m.name(g107, "Left leg"); + m.parent(g107, g1); + var p108 = part(m, m.cylinder(0.095, 0.087, 0.11, 8), g107, 7, "Shorts leg", -0.14, 0.35, 0); + var p109 = part(m, m.cylinder(0.098, 0.098, 0.04, 8), g107, 6, "Leather cuff", -0.14, 0.303, 0); + var p110 = part(m, m.cylinder(0.0289, 0.034, 0.1607, 7), g107, 1, "Shin", -0.14, 0.2, -0.0075); + m.rotate(p110, -174.64417, 0, 0); + var p111 = part(m, m.sphere(1, 8), g107, 1, "Knee", -0.14, 0.26, 0); + m.scale(p111, 0.046, 0.05, 0.047); + var p112 = part(m, m.sphere(1, 8), g107, 0, "Ankle", -0.14, 0.12, -0.02); + m.scale(p112, 0.045, 0.045, 0.045); + var p113 = part(m, m.sphere(1, 8), g107, 1, "Chunky foot", -0.14, 0.055, -0.063); + m.scale(p113, 0.112, 0.055, 0.145); + var p114 = part(m, m.cylinder(0.0034, 0.004, 0.03302, 7), g107, 0, "Toe separation", -0.168, 0.0715, -0.1675); + m.rotate(p114, 35.13419, 0, 0); + var p115 = part(m, m.cylinder(0.0034, 0.004, 0.03302, 7), g107, 0, "Toe separation", -0.112, 0.0715, -0.1675); + m.rotate(p115, 35.13419, 0, 0); + var g116 = m.group(); m.name(g116, "Left arm"); + m.parent(g116, g1); + var p117 = part(m, m.sphere(1, 8), g116, 0, "Shoulder", -0.31, 0.91, 0); + m.scale(p117, 0.05, 0.055, 0.052); + var p118 = part(m, m.cylinder(0.02465, 0.029, 0.1872, 7), g116, 1, "Humerus", -0.4, 0.885, -0.006); + m.rotate(p118, -166.50427, 0, 74.05717); + var p119 = part(m, m.sphere(1, 8), g116, 1, "Elbow", -0.49, 0.86, -0.012); + m.scale(p119, 0.039, 0.042, 0.04); + var p120 = part(m, m.cylinder(0.01615, 0.019, 0.16226, 7), g116, 1, "Radius", -0.575, 0.88, -0.0415); + m.rotate(p120, -90, 0, 80.42158); + var p121 = part(m, m.cylinder(0.0136, 0.016, 0.16194, 7), g116, 1, "Ulna", -0.575, 0.84, -0.0125); + m.rotate(p121, -90, 0, 81.11934); + var p122 = part(m, m.sphere(1, 8), g116, 1, "Hand", -0.7, 0.86, -0.045); + m.scale(p122, 0.063, 0.063, 0.058); + var g123 = m.group(); m.name(g123, "Right leg"); + m.parent(g123, g1); + var p124 = part(m, m.cylinder(0.095, 0.087, 0.11, 8), g123, 7, "Shorts leg", 0.14, 0.35, 0); + var p125 = part(m, m.cylinder(0.098, 0.098, 0.04, 8), g123, 6, "Leather cuff", 0.14, 0.303, 0); + var p126 = part(m, m.cylinder(0.0289, 0.034, 0.1607, 7), g123, 1, "Shin", 0.14, 0.2, -0.0075); + m.rotate(p126, -174.64417, 0, 0); + var p127 = part(m, m.sphere(1, 8), g123, 1, "Knee", 0.14, 0.26, 0); + m.scale(p127, 0.046, 0.05, 0.047); + var p128 = part(m, m.sphere(1, 8), g123, 0, "Ankle", 0.14, 0.12, -0.02); + m.scale(p128, 0.045, 0.045, 0.045); + var p129 = part(m, m.sphere(1, 8), g123, 1, "Chunky foot", 0.14, 0.055, -0.063); + m.scale(p129, 0.112, 0.055, 0.145); + var p130 = part(m, m.cylinder(0.0034, 0.004, 0.03302, 7), g123, 0, "Toe separation", 0.112, 0.0715, -0.1675); + m.rotate(p130, 35.13419, 0, 0); + var p131 = part(m, m.cylinder(0.0034, 0.004, 0.03302, 7), g123, 0, "Toe separation", 0.168, 0.0715, -0.1675); + m.rotate(p131, 35.13419, 0, 0); + var g132 = m.group(); m.name(g132, "Right arm"); + m.parent(g132, g1); + var p133 = part(m, m.sphere(1, 8), g132, 0, "Shoulder", 0.31, 0.91, 0); + m.scale(p133, 0.05, 0.055, 0.052); + var p134 = part(m, m.cylinder(0.02465, 0.029, 0.1872, 7), g132, 1, "Humerus", 0.4, 0.885, -0.006); + m.rotate(p134, -166.50427, 0, -74.05717); + var p135 = part(m, m.sphere(1, 8), g132, 1, "Elbow", 0.49, 0.86, -0.012); + m.scale(p135, 0.039, 0.042, 0.04); + var p136 = part(m, m.cylinder(0.01615, 0.019, 0.16226, 7), g132, 1, "Radius", 0.575, 0.88, -0.0415); + m.rotate(p136, -90, 0, -80.42158); + var p137 = part(m, m.cylinder(0.0136, 0.016, 0.16194, 7), g132, 1, "Ulna", 0.575, 0.84, -0.0125); + m.rotate(p137, -90, 0, -81.11934); + var p138 = part(m, m.sphere(1, 8), g132, 1, "Hand", 0.7, 0.86, -0.045); + m.scale(p138, 0.063, 0.063, 0.058); + var g139 = m.group(); m.name(g139, "Equipment"); + m.parent(g139, g1); + var g140 = m.group(); m.name(g140, "Broken sword"); + m.parent(g140, g139); + m.vertex(-0.75, 0.9, -0.12); + m.vertex(-0.88, 1.12, -0.12); + m.vertex(-0.98, 1.28, -0.12); + m.vertex(-0.96, 1.4, -0.12); + m.vertex(-1.055, 1.34, -0.12); + m.vertex(-1.075, 1.25, -0.12); + m.vertex(-1.04, 1.2, -0.12); + m.vertex(-1.08, 1.17, -0.12); + m.vertex(-1.02, 1.04, -0.12); + m.vertex(-0.87, 0.84, -0.12); + m.vertex(-0.75, 0.9, -0.075); + m.vertex(-0.88, 1.12, -0.075); + m.vertex(-0.98, 1.28, -0.075); + m.vertex(-0.96, 1.4, -0.075); + m.vertex(-1.055, 1.34, -0.075); + m.vertex(-1.075, 1.25, -0.075); + m.vertex(-1.04, 1.2, -0.075); + m.vertex(-1.08, 1.17, -0.075); + m.vertex(-1.02, 1.04, -0.075); + m.vertex(-0.87, 0.84, -0.075); + m.triangle(0, 2, 1); + m.triangle(10, 11, 12); + m.triangle(0, 3, 2); + m.triangle(10, 12, 13); + m.triangle(0, 4, 3); + m.triangle(10, 13, 14); + m.triangle(0, 5, 4); + m.triangle(10, 14, 15); + m.triangle(0, 6, 5); + m.triangle(10, 15, 16); + m.triangle(0, 7, 6); + m.triangle(10, 16, 17); + m.triangle(0, 8, 7); + m.triangle(10, 17, 18); + m.triangle(0, 9, 8); + m.triangle(10, 18, 19); + m.triangle(0, 1, 10); + m.triangle(1, 11, 10); + m.triangle(1, 2, 11); + m.triangle(2, 12, 11); + m.triangle(2, 3, 12); + m.triangle(3, 13, 12); + m.triangle(3, 4, 13); + m.triangle(4, 14, 13); + m.triangle(4, 5, 14); + m.triangle(5, 15, 14); + m.triangle(5, 6, 15); + m.triangle(6, 16, 15); + m.triangle(6, 7, 16); + m.triangle(7, 17, 16); + m.triangle(7, 8, 17); + m.triangle(8, 18, 17); + m.triangle(8, 9, 18); + m.triangle(9, 19, 18); + m.triangle(9, 0, 19); + m.triangle(0, 10, 19); + var p141 = part(m, m.mesh(), g140, 10, "Notched blade", 0, 0, 0); + var p142 = part(m, m.cylinder(0.00765, 0.009, 0.4406, 7), g140, 8, "Blade fuller", -0.9125, 1.105, -0.124); + m.rotate(p142, 0, 0, 27.72826); + var p143 = part(m, m.cylinder(0.0272, 0.032, 0.23324, 7), g140, 8, "Cross guard", -0.78, 0.88, -0.1); + m.rotate(p143, 0, 0, -59.03624); + var p144 = part(m, m.cylinder(0.0306, 0.036, 0.21095, 7), g140, 6, "Leather grip", -0.715, 0.76, -0.1); + m.rotate(p144, -180, 0, -31.42957); + var p145 = part(m, m.cylinder(0.00765, 0.009, 0.05831, 7), g140, 9, "Grip wrap", -0.75, 0.85, -0.135); + m.rotate(p145, 0, 0, -59.03624); + var p146 = part(m, m.cylinder(0.00765, 0.009, 0.05831, 7), g140, 9, "Grip wrap", -0.72, 0.8, -0.135); + m.rotate(p146, 0, 0, -59.03624); + var p147 = part(m, m.cylinder(0.00765, 0.009, 0.05831, 7), g140, 9, "Grip wrap", -0.69, 0.75, -0.135); + m.rotate(p147, 0, 0, -59.03624); + var p148 = part(m, m.cylinder(0.02125, 0.025, 0.07632, 7), g140, 8, "Pommel", -0.6575, 0.69, -0.1); + m.rotate(p148, 0, 0, -58.3925); + var g149 = m.group(); m.name(g149, "Round shield"); + m.parent(g149, g139); + m.profile(0.3, 0.027); + m.profile(0.3, -0.027); + m.profile(0.255, -0.027); + m.profile(0.255, 0.027); + m.profile(0.3, 0.027); + var p150 = part(m, m.lathe(12), g149, 10, "Steel shield rim", 0.8, 0.67, -0.145); + m.rotate(p150, 90, 0, 0); + var p151 = part(m, m.cylinder(0.257, 0.257, 0.045, 12), g149, 9, "Wood shield face", 0.8, 0.67, -0.145); + m.rotate(p151, 90, 0, 0); + var p152 = part(m, m.sphere(1, 10), g149, 8, "Steel shield boss", 0.8, 0.67, -0.195); + m.scale(p152, 0.095, 0.095, 0.048); + var p153 = part(m, m.cylinder(0.00425, 0.005, 0.36, 7), g149, 6, "Wood plank groove", 0.665, 0.67, -0.172); + m.rotate(p153, 0, 0, 0); + var p154 = part(m, m.cylinder(0.00425, 0.005, 0.36, 7), g149, 6, "Wood plank groove", 0.935, 0.67, -0.172); + m.rotate(p154, 0, 0, 0); + } diff --git a/Examples/Technical/ProceduralSkeleton/Generators/SkeletonRigRecipe.ada b/Examples/Technical/ProceduralSkeleton/Generators/SkeletonRigRecipe.ada new file mode 100644 index 0000000..54dce34 --- /dev/null +++ b/Examples/Technical/ProceduralSkeleton/Generators/SkeletonRigRecipe.ada @@ -0,0 +1,158 @@ +// Recipe executed by the embedded AdaScript VM. No process, file access, JIT or Swift compilation. +func rigHasParent(model, partId, name) { + while (partId >= 0) { + if (model.partName(partId) == name) { return true; } + partId = model.partParent(partId); + } + return false; +} + +func rigRigidJoint(model, partId, joints) { + var name = model.partName(partId); + if (rigHasParent(model, partId, "Broken sword")) { return joints[18]; } + if (rigHasParent(model, partId, "Round shield")) { return joints[22]; } + if (rigHasParent(model, partId, "Lower jaw")) { return joints[6]; } + if (rigHasParent(model, partId, "Head")) { return joints[5]; } + for (var side in 0..<2) { + var leg = "Left leg"; + var arm = "Left arm"; + var hip = 7; + var shoulder = 15; + if (side == 1) { + leg = "Right leg"; + arm = "Right arm"; + hip = 11; + shoulder = 19; + } + if (rigHasParent(model, partId, leg)) { + if (name == "Shorts leg" || name == "Leather cuff") { return joints[hip]; } + if (name == "Shin" || name == "Knee") { return joints[hip + 1]; } + return joints[hip + 2]; + } + if (rigHasParent(model, partId, arm)) { + if (name == "Shoulder" || name == "Humerus") { return joints[shoulder]; } + if (name == "Hand") { return joints[shoulder + 3]; } + return joints[shoulder + 1]; + } + } + if (rigHasParent(model, partId, "Terracotta neckerchief") || name == "Spine" || name == "Sternum") { return joints[2]; } + if (rigHasParent(model, partId, "Rib cage row 1")) { return joints[2]; } + if (rigHasParent(model, partId, "Torso")) { return joints[3]; } + if (rigHasParent(model, partId, "Pelvis and belt")) { return joints[1]; } + assert(false, "No weight rule for " + name); + return joints[0]; +} + +func rigSkinParts(model, joints) { + for (var partId in 0..= 1) { rightPhase = rightPhase - 1; } + var left = rigLegAngles(phase, 0.34 + bob); + var right = rigLegAngles(rightPhase, 0.34 + bob); + model.translationKey(walk, joints[1], time, 0, 0.39 + bob, 0); + model.rotationKey(walk, joints[7], time, left[0], 0, 0); + model.rotationKey(walk, joints[8], time, left[1], 0, 0); + model.rotationKey(walk, joints[9], time, left[2], 0, 0); + model.rotationKey(walk, joints[11], time, right[0], 0, 0); + model.rotationKey(walk, joints[12], time, right[1], 0, 0); + model.rotationKey(walk, joints[13], time, right[2], 0, 0); + model.rotationKey(walk, joints[2], time, 1.2 * Math.sin(2 * cycle), 2.5 * Math.sin(cycle), 0); + model.rotationKey(walk, joints[3], time, 0, -4 * Math.sin(cycle), 1.8 * Math.sin(cycle)); + model.rotationKey(walk, joints[5], time, 0, 1.5 * Math.sin(cycle), -1.8 * Math.sin(cycle)); + model.rotationKey(walk, joints[6], time, 2 + Math.sin(2 * cycle), 0, 0); + model.rotationKey(walk, joints[15], time, -12 * Math.cos(cycle), 0, 43); + model.rotationKey(walk, joints[19], time, 12 * Math.cos(cycle), 0, -43); + model.rotationKey(walk, joints[16], time, -7 - 4 * Math.sin(cycle), 0, 0); + model.rotationKey(walk, joints[20], time, -7 + 4 * Math.sin(cycle), 0, 0); + model.rotationKey(walk, joints[17], time, 0, 0, -43); + model.rotationKey(walk, joints[21], time, 0, 0, 43); + } +} + +func build(model) { + buildStaticSkeleton(model); + var joints = []; + joints.push(model.joint("Rig.root", -1, 0, 0, 0)); + joints.push(model.joint("Rig.hips", joints[0], 0, 0.39, 0)); + joints.push(model.joint("Rig.spine", joints[1], 0, 0.29, 0)); + joints.push(model.joint("Rig.chest", joints[2], 0, 0.22, 0)); + joints.push(model.joint("Rig.neck", joints[3], 0, 0.105, 0)); + joints.push(model.joint("Rig.head", joints[4], 0, 0.135, 0)); + joints.push(model.joint("Rig.jaw", joints[5], 0, -0.15, -0.1)); + joints.push(model.joint("Rig.leftHip", joints[1], -0.14, -0.05, 0)); + joints.push(model.joint("Rig.leftKnee", joints[7], 0, -0.08, 0)); + joints.push(model.joint("Rig.leftAnkle", joints[8], 0, -0.14, -0.015)); + joints.push(model.joint("Rig.leftToe", joints[9], 0, -0.07, -0.145)); + joints.push(model.joint("Rig.rightHip", joints[1], 0.14, -0.05, 0)); + joints.push(model.joint("Rig.rightKnee", joints[11], 0, -0.08, 0)); + joints.push(model.joint("Rig.rightAnkle", joints[12], 0, -0.14, -0.015)); + joints.push(model.joint("Rig.rightToe", joints[13], 0, -0.07, -0.145)); + joints.push(model.joint("Rig.leftShoulder", joints[3], -0.31, 0.01, 0)); + joints.push(model.joint("Rig.leftElbow", joints[15], -0.18, -0.05, -0.012)); + joints.push(model.joint("Rig.leftWrist", joints[16], -0.17, 0, -0.033)); + joints.push(model.joint("Rig.leftHand", joints[17], -0.04, 0, 0)); + joints.push(model.joint("Rig.rightShoulder", joints[3], 0.31, 0.01, 0)); + joints.push(model.joint("Rig.rightElbow", joints[19], 0.18, -0.05, -0.012)); + joints.push(model.joint("Rig.rightWrist", joints[20], 0.17, 0, -0.033)); + joints.push(model.joint("Rig.rightHand", joints[21], 0.04, 0, 0)); + rigSkinParts(model, joints); + rigWalkClips(model, joints); +} diff --git a/Examples/Technical/ProceduralSkeleton/Generators/WalkStage.ada b/Examples/Technical/ProceduralSkeleton/Generators/WalkStage.ada new file mode 100644 index 0000000..e0f81a7 --- /dev/null +++ b/Examples/Technical/ProceduralSkeleton/Generators/WalkStage.ada @@ -0,0 +1,7 @@ +func build(model) { + model.material(0, 0.035, 0.048, 0.065); + model.surface(0, 0.05, 0.9); + var stage = model.cylinder(1.15, 1.18, 0.045, 48); + model.name(stage, "Turntable plinth"); + model.place(stage, 0, -0.0225, 0); +} diff --git a/Examples/Technical/ProceduralSkeleton/NativeRig/Main.swift b/Examples/Technical/ProceduralSkeleton/NativeRig/Main.swift new file mode 100644 index 0000000..70e9fd0 --- /dev/null +++ b/Examples/Technical/ProceduralSkeleton/NativeRig/Main.swift @@ -0,0 +1,45 @@ +import AdaAssets +import Foundation + +@main +struct AuthorSkeleton { + static func main() throws { + let arguments = CommandLine.arguments + guard (3...4).contains(arguments.count) else { throw RigAuthorError.invalidSource("Usage: SkeletonRig input.glb output.glb [capture-poses.glb]") } + let input = URL(fileURLWithPath: arguments[1]) + let output = URL(fileURLWithPath: arguments[2]) + let source = try NativeGLTFLoader().load(data: Data(contentsOf: input)) + guard source.skins.isEmpty, source.animations.isEmpty, source.textures.isEmpty else { + throw RigAuthorError.invalidSource("This author is specialized for the static procedural skeleton") + } + let meshes = try MeshSkinning.make(source) + let materials = source.materials.enumerated().map { index, material in + let color = material.baseColorFactor + let glow = material.emissiveFactor + return ProceduralMaterial(name: material.name ?? "Material \(index)", baseColor: [color.x, color.y, color.z, color.w], + metallic: material.metallicFactor, roughness: material.roughnessFactor, emissive: [glow.x, glow.y, glow.z]) + } + let model = ProceduralModel(materials: materials, nodes: SkeletonRig.nodes + meshes, + skins: [SkeletonRig.skin], animations: [WalkClip.bindPose(), WalkClip.make()]) + let data = try GLBWriter().encode(model) + // Round-trip through the same native importer used by the real engine. + let imported = try NativeGLTFLoader().load(data: data) + guard imported.skins.count == 1, imported.skins[0].joints.count == Joint.allCases.count, + imported.animations.contains(where: { $0.name == "Walk" && abs($0.duration - WalkClip.duration) < 0.0001 }), + imported.meshes.allSatisfy({ $0.primitives.allSatisfy { $0.skinning != nil } }) + else { throw RigAuthorError.invalidSource("Rig round-trip failed") } + try data.write(to: output, options: .atomic) + if arguments.count == 4 { + var poses = model + poses.animations = WalkClip.capturePoses() + try GLBWriter().encode(poses).write(to: URL(fileURLWithPath: arguments[3]), options: .atomic) + } + let report: [String: Any] = ["source": input.path, "output": output.path, "bytes": data.count, + "joints": Joint.allCases.map { ["name": $0.name, "node": $0.node, "paletteIndex": $0.rawValue] }, + "meshes": meshes.count, "clips": imported.animations.map { ["name": $0.name ?? "", "duration": $0.duration] }, + "skinning": "JOINTS_0 uint16 + WEIGHTS_0 float32, four slots; rigid bones and blended clothing", + "author": "Native Swift using AdaAssets NativeGLTFLoader and GLBWriter"] + let json = try JSONSerialization.data(withJSONObject: report, options: [.prettyPrinted, .sortedKeys]) + print(String(decoding: json, as: UTF8.self)) + } +} diff --git a/Examples/Technical/ProceduralSkeleton/NativeRig/MeshSkinning.swift b/Examples/Technical/ProceduralSkeleton/NativeRig/MeshSkinning.swift new file mode 100644 index 0000000..90b1966 --- /dev/null +++ b/Examples/Technical/ProceduralSkeleton/NativeRig/MeshSkinning.swift @@ -0,0 +1,115 @@ +import AdaAssets +import Math + +enum RigAuthorError: Error { case invalidSource(String) } + +/// Bakes original part transforms into model-space vertices and merges by material. +/// Bone-like surfaces stay rigid; clothing and spine use two-joint transition weights. +enum MeshSkinning { + struct Bucket { + var mesh = ProceduralMeshData() + var joints: [SIMD4] = [] + var weights: [SIMD4] = [] + } + + static func make(_ source: GLTFImportResult) throws -> [ProceduralNode] { + var parents = [Int?](repeating: nil, count: source.nodes.count) + for (index, node) in source.nodes.enumerated() { + for child in node.children { parents[child] = index } + } + var globals = [Transform3D](repeating: .identity, count: source.nodes.count) + var buckets = [Int: Bucket]() + for (index, node) in source.nodes.enumerated() { + if let parent = parents[index] { + guard parent < index else { throw RigAuthorError.invalidSource("Expected the procedural model's parent-first hierarchy") } + globals[index] = globals[parent] * node.transform + } else { + globals[index] = node.transform + } + guard let mesh = node.meshIndex else { continue } + var ancestry = [node.name ?? ""] + var parent = parents[index] + while let current = parent { ancestry.append(source.nodes[current].name ?? ""); parent = parents[current] } + for primitive in source.meshes[mesh].primitives { + guard primitive.mode == .triangles, let material = primitive.materialIndex, + let positions = primitive.attributes[.position]?.vector3Values(), + let normals = primitive.attributes[.normal]?.vector3Values(), + let uvs = primitive.attributes[.texCoord(0)]?.vector2Values(), let indices = primitive.indices + else { throw RigAuthorError.invalidSource("Expected indexed, textured-coordinate triangle geometry") } + var bucket = buckets[material] ?? Bucket() + let offset = UInt32(bucket.mesh.positions.count) + let inverse = globals[index].inverse + // Explicit inverse transpose: the inverse's columns become the normal matrix's rows. + let normalTransform = Transform3D(rows: [inverse.x, inverse.y, inverse.z, inverse.w]) + for vertex in positions.indices { + let p = positions[vertex] + let world = globals[index] * Vector4(p.x, p.y, p.z, 1) + let n = normals[vertex] + let transformed = normalTransform * Vector4(n.x, n.y, n.z, 0) + let normal = Vector3(transformed.x, transformed.y, transformed.z).normalized + let position = SIMD3(world.x, world.y, world.z) + let binding = try influences(path: ancestry, position: position) + bucket.mesh.positions.append(position) + bucket.mesh.normals.append(normal.simd) + bucket.mesh.uvs.append(SIMD2(uvs[vertex].x, uvs[vertex].y)) + bucket.joints.append(binding.0) + bucket.weights.append(binding.1) + } + bucket.mesh.indices.append(contentsOf: indices.map { $0 + offset }) + buckets[material] = bucket + } + } + return buckets.keys.sorted().compactMap { material in + guard let bucket = buckets[material] else { return nil } + var node = ProceduralNode(name: "Skinned material \(material)", mesh: bucket.mesh) + node.parent = 0 + node.material = material + node.skinning = .init(skin: 0, joints: bucket.joints, weights: bucket.weights) + return node + } + } + + private static func influences(path: [String], position p: SIMD3) throws -> (SIMD4, SIMD4) { + let name = path.first ?? "" + if path.contains("Broken sword") { return bind(.leftHand) } + if path.contains("Round shield") { return bind(.rightHand) } + if path.contains("Lower jaw") { return bind(.jaw) } + if path.contains("Head") { return bind(.head) } + for left in [true, false] { + if path.contains(left ? "Left leg" : "Right leg") { + if ["Shorts leg", "Leather cuff"].contains(name) { return bind(left ? .leftHip : .rightHip) } + if ["Shin", "Knee"].contains(name) { return bind(left ? .leftKnee : .rightKnee) } + return bind(left ? .leftAnkle : .rightAnkle) + } + if path.contains(left ? "Left arm" : "Right arm") { + if ["Shoulder", "Humerus"].contains(name) { return bind(left ? .leftShoulder : .rightShoulder) } + if name == "Hand" { return bind(left ? .leftHand : .rightHand) } + return bind(left ? .leftElbow : .rightElbow) + } + } + if path.contains("Terracotta neckerchief") || name == "Spine" || name == "Sternum" { + return blend(.spine, .chest, (p.y - 0.63) / 0.28) + } + if path.contains("Torso") { + if p.y < 0.58 { return bind(.spine) } + return bind(.chest) + } + if path.contains("Pelvis and belt") { + if name == "Dark shorts" { + let amount = min(1, max(0, (0.43 - p.y) / 0.14)) * min(1, abs(p.x) / 0.11) + return blend(.hips, p.x < 0 ? .leftHip : .rightHip, amount) + } + return bind(.hips) + } + throw RigAuthorError.invalidSource("No semantic weight rule for \(path.joined(separator: "/"))") + } + + private static func bind(_ joint: Joint) -> (SIMD4, SIMD4) { + (SIMD4(UInt16(joint.rawValue), 0, 0, 0), SIMD4(1, 0, 0, 0)) + } + + private static func blend(_ first: Joint, _ second: Joint, _ amount: Float) -> (SIMD4, SIMD4) { + let value = min(1, max(0, amount)) + return (SIMD4(UInt16(first.rawValue), UInt16(second.rawValue), 0, 0), SIMD4(1 - value, value, 0, 0)) + } +} diff --git a/Examples/Technical/ProceduralSkeleton/NativeRig/SkeletonRig.swift b/Examples/Technical/ProceduralSkeleton/NativeRig/SkeletonRig.swift new file mode 100644 index 0000000..bd47923 --- /dev/null +++ b/Examples/Technical/ProceduralSkeleton/NativeRig/SkeletonRig.swift @@ -0,0 +1,91 @@ +import AdaAssets +import Math + +/// A deliberately authored rig for this character's proportions, in its original bind pose. +enum Joint: Int, CaseIterable { + case root, hips, spine, chest, neck, head, jaw + case leftHip, leftKnee, leftAnkle, leftToe + case rightHip, rightKnee, rightAnkle, rightToe + case leftShoulder, leftElbow, leftWrist, leftHand + case rightShoulder, rightElbow, rightWrist, rightHand + + var node: Int { rawValue + 1 } + var name: String { "Rig." + String(describing: self) } + + var parent: Joint? { + switch self { + case .root: nil + case .hips: .root + case .spine, .leftHip, .rightHip: .hips + case .chest: .spine + case .neck, .leftShoulder, .rightShoulder: .chest + case .head: .neck + case .jaw: .head + case .leftKnee: .leftHip + case .leftAnkle: .leftKnee + case .leftToe: .leftAnkle + case .rightKnee: .rightHip + case .rightAnkle: .rightKnee + case .rightToe: .rightAnkle + case .leftElbow: .leftShoulder + case .leftWrist: .leftElbow + case .leftHand: .leftWrist + case .rightElbow: .rightShoulder + case .rightWrist: .rightElbow + case .rightHand: .rightWrist + } + } + + var position: Vector3 { + switch self { + case .root: [0, 0, 0] + case .hips: [0, 0.39, 0] + case .spine: [0, 0.68, 0] + case .chest: [0, 0.9, 0] + case .neck: [0, 1.005, 0] + case .head: [0, 1.14, 0] + case .jaw: [0, 0.99, -0.1] + case .leftHip: [-0.14, 0.34, 0] + case .leftKnee: [-0.14, 0.26, 0] + case .leftAnkle: [-0.14, 0.12, -0.015] + case .leftToe: [-0.14, 0.05, -0.16] + case .rightHip: [0.14, 0.34, 0] + case .rightKnee: [0.14, 0.26, 0] + case .rightAnkle: [0.14, 0.12, -0.015] + case .rightToe: [0.14, 0.05, -0.16] + case .leftShoulder: [-0.31, 0.91, 0] + case .leftElbow: [-0.49, 0.86, -0.012] + case .leftWrist: [-0.66, 0.86, -0.045] + case .leftHand: [-0.7, 0.86, -0.045] + case .rightShoulder: [0.31, 0.91, 0] + case .rightElbow: [0.49, 0.86, -0.012] + case .rightWrist: [0.66, 0.86, -0.045] + case .rightHand: [0.7, 0.86, -0.045] + } + } + + var local: Vector3 { position - (parent?.position ?? .zero) } +} + +struct SkeletonRig { + static var nodes: [ProceduralNode] { + [ProceduralNode(name: "Skeleton skinned")] + Joint.allCases.map { joint in + var node = ProceduralNode(name: joint.name) + node.parent = joint.parent?.node ?? 0 + node.translation = joint.local.simd + return node + } + } + + static var skin: ProceduralSkin { + ProceduralSkin(name: "Skeleton humanoid", skeletonRoot: Joint.root.node, + joints: Joint.allCases.map(\.node), inverseBindMatrices: Joint.allCases.map { joint in + let p = joint.position + return SIMD16(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -p.x, -p.y, -p.z, 1) + }) + } +} + +extension Vector3 { + var simd: SIMD3 { SIMD3(x, y, z) } +} diff --git a/Examples/Technical/ProceduralSkeleton/NativeRig/WalkClip.swift b/Examples/Technical/ProceduralSkeleton/NativeRig/WalkClip.swift new file mode 100644 index 0000000..a18ca4f --- /dev/null +++ b/Examples/Technical/ProceduralSkeleton/NativeRig/WalkClip.swift @@ -0,0 +1,83 @@ +import AdaAssets +import Math + +/// Authored in-place walk. Two-bone leg IK maintains a flat planted foot during stance. +enum WalkClip { + static let duration: Float = 1.2 + static let keyCount = 49 + + static func make() -> ProceduralAnimation { + let times = (0..]]() + var hips: [SIMD4] = [] + for time in times { + // Force the final key to match the first, including floating-point rounding. + let phase: Float = time == duration ? 0 : time / duration + let cycle = phase * 2 * .pi + let bob: Float = -0.025 + 0.004 * Math.cos(2 * cycle) + hips.append(SIMD4(0, Joint.hips.local.y + bob, 0, 0)) + var pose = [Joint: SIMD3]() + for (hip, knee, ankle, offset) in [(Joint.leftHip, Joint.leftKnee, Joint.leftAnkle, Float(0)), (.rightHip, .rightKnee, .rightAnkle, 0.5)] { + let leg = legAngles(phase: (phase + offset).truncatingRemainder(dividingBy: 1), hipHeight: hip.position.y + bob) + pose[hip] = [leg.x, 0, 0] + pose[knee] = [leg.y, 0, 0] + pose[ankle] = [leg.z, 0, 0] + } + pose[.spine] = [1.2 * Math.sin(2 * cycle), 2.5 * Math.sin(cycle), 0] + pose[.chest] = [0, -4 * Math.sin(cycle), 1.8 * Math.sin(cycle)] + pose[.head] = [0, 1.5 * Math.sin(cycle), -1.8 * Math.sin(cycle)] + pose[.jaw] = [2 + Math.sin(2 * cycle), 0, 0] + pose[.leftShoulder] = [-12 * Math.cos(cycle), 0, 43] + pose[.rightShoulder] = [12 * Math.cos(cycle), 0, -43] + pose[.leftElbow] = [-7 - 4 * Math.sin(cycle), 0, 0] + pose[.rightElbow] = [-7 + 4 * Math.sin(cycle), 0, 0] + // Keep the held props upright while the shoulders lower the arms from the authored bind pose. + pose[.leftWrist] = [0, 0, -43] + pose[.rightWrist] = [0, 0, 43] + for (joint, angles) in pose { rotations[joint, default: []].append(ProceduralMath.quaternion(eulerDegrees: angles)) } + } + var tracks = [ProceduralAnimation.Track(node: Joint.hips.node, path: .translation, times: times, values: hips)] + for joint in Joint.allCases { + if let values = rotations[joint] { tracks.append(.init(node: joint.node, path: .rotation, times: times, values: values)) } + } + return ProceduralAnimation(name: "Walk", tracks: tracks) + } + + static func bindPose() -> ProceduralAnimation { + var tracks = Joint.allCases.map { joint in + ProceduralAnimation.Track(node: joint.node, path: .rotation, times: [0, duration], values: [[0, 0, 0, 1], [0, 0, 0, 1]]) + } + let p = Joint.hips.local + tracks.append(.init(node: Joint.hips.node, path: .translation, times: [0, duration], values: [[p.x, p.y, p.z, 0], [p.x, p.y, p.z, 0]])) + return ProceduralAnimation(name: "BindPose", tracks: tracks) + } + + /// Frozen native-player poses for deterministic GPU frame capture, independent of screenshot/readback stalls. + static func capturePoses() -> [ProceduralAnimation] { + let walk = make() + return (0..<24).map { frame in + let tracks = walk.tracks.map { track in + let value = track.values[frame * 2] + return ProceduralAnimation.Track(node: track.node, path: track.path, times: [0, duration], values: [value, value]) + } + return ProceduralAnimation(name: "CapturePose\(frame)", tracks: tracks) + } + } + + private static func legAngles(phase: Float, hipHeight: Float) -> SIMD3 { + let stance = phase < 0.5 + let progress = stance ? phase * 2 : (phase - 0.5) * 2 + let z: Float = stance ? -0.075 + 0.15 * progress : 0.075 - 0.15 * progress + let lift: Float = stance ? 0 : 0.035 * Math.sin(.pi * progress) + let dy = hipHeight - (Joint.leftAnkle.position.y + lift) + let dz = z - 0.015 + let upper: Float = 0.08 + let lower = Math.sqrt(Float(0.14 * 0.14 + 0.015 * 0.015)) + let distance = min(Math.sqrt(dy * dy + dz * dz), upper + lower - 0.00001) + let clamp: (Float) -> Float = { min(1, max(-1, $0)) } + let knee = -Math.acos(clamp((distance * distance - upper * upper - lower * lower) / (2 * upper * lower))) + let hip = Math.atan2(-dz, dy) - Math.atan2(lower * Math.sin(knee), upper + lower * Math.cos(knee)) + let restInclination = Math.atan2(Float(0.015), Float(0.14)) + return SIMD3(hip, knee - restInclination, restInclination - hip - knee) * (180 / .pi) + } +} diff --git a/Examples/Technical/ProceduralSkeleton/Preview.png b/Examples/Technical/ProceduralSkeleton/Preview.png new file mode 100644 index 0000000000000000000000000000000000000000..09710494c54d9ca0b307d6693da4c0a51083b00c GIT binary patch literal 530124 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

XXr$U)(%&_Z`$(-)D2|O?xhcmuRH*{dFvBM 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�- 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 A%%`Dt2H|sw<@J@##6?% z!HXn1w{3FUNrUiZ)(Jo2(Vy#f%1%&`Jg#)$vPqgJT$Uxd?J19@>j3E%JMYONr%49V zgE-4l6%hfRKzJox(+?CN2FpP^o=OQlms_BmW{ z$xvkGgw&kT=(FuCmyp-xa>aQ*Lz5mCxS^-V-13~OYiakPyQ^RGJojy?jz9g!zKDxC zaKYf8o%2IghRelqJ%H=g$9ut#z{^MA#S6nn-U9y3Kl?rK^V={p{K=mlaR2Im{!RSW zw}9XNw&VQ|4F2Rej%OSPaBHi&PX^$5BpqRQk??XToGj1#d}TspxxQY&lN9Gk{0td1 zBje#5+q>nKLBqff5FMIN!SRQ22)kte?=^uc1AMgjLw(fHL3Me!8x43hz^#Re#MEdj zIVD?hEvtla(FeBlzRbGTqdKVZgZ)yaS;&~PizVYOCRO{SXJ3GEb7tpygs5n|q${DV zPB(QXkMwVe4-{`X1~ZVNmm?($pQ^`w$bznAH>QjcIKECy$VDlWN=Ka*g=C?Es)}Ba z-{~vbGA>=lB^uA`AbT=lobo~JN^L+GmnfLN>cu=unYLHgQ01cy<3>g;GHALW3mf`u zJ89AfCRp2*9!$QQ5#D640#9SmR$pXHU-fjGv@LLz2aPw(w_tk@$7E%SwhKlA-&w^0R-!w$NK_=<8tp>sav z7){iP^_3y6lL^}N*_`y6@mG~O5pJu%5p-b~Tc2wWg!%XlU&jfvW72sabuZPAY3F1{SVN8kDge)G4!Jrk~Sx*X1eH)a^S zt*7wJY3jskpeFV+@8#W8H+=b>xAAjd|3(^1uF6c=uPgJlZPtX3@ZR2g|NsB3^^RW5ImURNG3WZW)n)(tTkC!2VH}?^#+-A#%klCnx43(9#*;gu zAn{Id^Ae#eL~gVroG@B3HLaOqAAb*+W6Xc{b#KP+{r*2p`PNP_BUkfx(*<>g0LEuh zLN-cWc5rvau)>h?O*b9atj3EXn6m~VAm_FP*j(oBw0m#g8DDZJK54)l>~?thb43X5 zn|X&5y&2tjOg?2}IV8tto+sG}+3xbGjHM)(Bzf@Nzth+kw-z13WiHM`ij%SpGqfGb z>Z1$UvZQ{*CW>@0LG^p>W~{y1y`4eY(K%W~^%Fctw^5**-2a zQb+EVB1QneF-gHa`vT1nXnOHMBa#{qJxT0?NWll;BeW^<=!RefILqos@w#N!TwF3Z ziNh0#OmfVZPC$KHLC^B<;JgMjAb(7o>B`}E&bM*$z5~kbHhtE@F+iXDwfWgrnk=O- z#>Fm$Y;(!??o-slUGUq+bp!Vy(@-fA#=!CLAww-OF6f$+p-QSW! z-ysg#$5Wqa2e=i#5&xF&O1o!5hFMH2{$Uid=7W>%VbRlBe8b3gg z;?&K}EiRYy(CguH_mmI1S`&XxsWbf%T;f?+65}&3ctp{Aa{_K}4YxOr=bky?`R5Jq z`suHR;s1pD{|&Qv>a@Xd!dTcS>@hgL`@?Sp;P~y2{t-U=Cx*|x^Z*w)9^#yYc~Ig* z4^c4qVJ#P=BCCZlE(}@F6+@@Crf$OT7XO~{>A0MA@cJ{~Pyd>H)sjlY1f%N-`M8e+Sc z?E+`P>?O8RA(1|Y5<0oFTgyMVfS83rTnAz-PrMa5aQ?+Sfpkd9_nvd7hzUD5_X$05 z@zH4MH1${JO$fP>ekAuLefK<(`4D67SPYTvn2^VJ>L2rk>^FVMmo%G5W^`_O1%J_> z@&=h=+K%L{JgupOWlZLy%dK6Hae6!9wa4#}9Y|M7VA-{fRCd&Sf$WGeAZ3#|oI%PFB}_tJ9-6}c(pmHVb%Nn_j%hZK$z8e_y7PP07*naR2xRjf@DU)gadXE zlVcc-6@bvj$}Rzfv+qp)%xq=aONkk;GruSK-T7toTS| z3D9#c2CSWuqu*9(R`b$ai4AG{^M1(Ip|pvtJY|_dEKn3qq;qdB<{P=1R)m4qHU1J-?A%h_2{#Y+f+kflDeFJyND z(srF?$aD1XyQPhY5E&j#Y2(7Esiuwx4q8Ln)L^k;hT)F4*7%F=D%ao{YEvlN>BX<1$eh0Gyd<@!BeyW_4opRy8PC=t(avrvoyQyUF6ploy0hP{j zPn}n+;A5li^Cx)1??~2##qp>32wk0SZV)@t@v7epu6e3IQ_MKp->z*9z=z)ct>cLE zjp6pz@Ze@V2KlGzG+U_RNZG4MU3G1wqbAi$s?4dG@ zwHKRW@BF3@VjF8odoFnfFCO*kcAc$q;KURO4*W^9rZ4x(C zWMn5h#iOvXRNrHK-E-;yQ$Vc0v(Cpk4=s|)+*Yx0Fr-SCJe=NVZlF0y=8qBQm`I*4 zX`p$H#*?w>8XI(%{r0uyP2T(VLNa}|8GOh?a+0{m<5>OU9C-4Sb{xEgkXjt43pG}z z4MdBxZe7Q4)w|^Pj?CG@b}VTs56LkWyQLzV?E=IzHy0VJY!fF_ULMreJgvX@cpK9; z?H9ez*9pwHI9CkX3?wF?_scnO8j}^iu7vs`pq#N4G)4Gs*MyQWBSD64GD!e3shCPt z0I2cAA@i~tw8AOMNEt+;4S~AM#m*i#MC{}Mg1#vI(5gtMSH7nuAleOanlR{59|nk&O=GVFhishk_hKXF-zFJGUCS9oo?d-w zHxlT_nz9h;cuVAAhGhA!lyO4^G66f(oEfZ1mP5Q(0!hjdGB*QHCJk&GY^H|#kO0la z1t;J{sLDuEHMWK^C7Qbc{T>JaIFpBcn(Oh2Qb{xE$ zPi|ke&>KrU^pd@V4E?5*<(jGzDcmT&w9buon18DZ4aQ}7ZqpH6Teh41+8aT1l`FRsxV zK0^ap_-dci!{Ml(vwAT9RS|4>>cI(5KXt-$&)rU4eGb5R+W%=H#`ryF;1;llfIXZ= z@C|^Q(Z)_Voo?{XpZXGf(d)<4q8~oAe4y5YTj2I~JY?(UX8z=s)zinrH;1m~=PuaP zW$26eB|UlQGW$~8pnPL>F_osrc!21q=%~3R)|UdJ0Ta5+8aB^iOj0_Ui|1HR9!xut z8Z zOP;4OK{3XYzV&{NBeB29f&pXl?9!6(faJNLk?-#$Pu3P!WX!fvA-1~e;}-7uJr*_2 zm?7@%kvIFKgAHNucVnWB6w0KV07?PJmYjOK9;Q)=spY&%zF~P_5{TaHuZCV@kWtTO zp+w)&-FfK6LGrP7P}g88_$nzBASyzW*7`a87?tUbxp;M_$%Pj_QpVLx_yFX= zO$*-%)Xk}PbIICGCQgSu-5_8e()~E?u5hRaMfZ$z-*ClvI`kdf$9I6o6Qe1y61()&U+heq)dRO|evdknRMf)25uXDL zNKbmCmXEh%RW|i`-P3C})zgYWwAe*+xm9^0FqZz*p!|^TaPJyDV9-++qw9 z`7L^k7@m20T?2o<28f~r=0juiGAHv?N>RIP^^j+qnAe5YqKB@}n67-NZLmy4=3)z? zv{eptJ&>SsM$$|8KHJAGo^yS(sf)yqd+pMA3c2>9_uj@#HkUDCiAvbeHbjg1Wt)%M z-=@HNF&9i{62A&b=v<6z!(858i`|8p9AN`ztYpp?7-WU!Re8IjD+{TqtnAJ78PUQ8 zCC`^Jr377uEVs!hX50a$(RLWHcEkw-CPan()&Mnn&0bedxihIXr--O?6HX zSOgda@aJcwOmkdo?TJqrzsro~WjPd`mZFg3?+k1cywky>1ApIOTm0r=N{`qO)MobN z(fDfts&+jFkR+FJHTc1pH&~UQJmT;Awn93^m&1qdtL*?!w0vhk^MS`K0BzhYMl{cofFvtLBVbllIf}?b&7=(e{$7 zQSsZgH*th*WGNk8?a0jV17H7!(Qp1NQTWK4-u62+G~*9XX#iXoV0gFE09-D2Esl-v z3Wp6&vc!IB_g_d4Hq*C1@_lca$K2~@j^f{V;p6Bi_ zo(AyTeE)JzW{AZe2keBm{_q#!mw)uLIG+uE29A^C_SSH|IBwi%|uzvGz`WHd=2`Q5}=v7exu6OfF_tRKD?F&^!;xh8WFN9ne$xNG$2Mw_+q z)en0LlD>u+9l5AA6S>r~WLrpxT*6a=;uBe4wEQ_$b1i4?iv^PZmh7~))OI<3%XgN# zf`sG5_qLv7UGzGOWOB=jWzi(5EZq5C)YS`C!C0$)R20>Nh#*XhB9asev64vDT=JAQ zbf;zBEN!n0xGYsv90^>beR<6`6grBwpo`{9peCjz0Wy+<7!L6i<1$@DU#;$_I)vsf zr=+FY7`Msm8(GQC1}t0I8RUuAXwG@9a3rkrXwQxoa$-Jt{=gmy3XS$YM#!-PEw^O* z&o+$en_(r;C=ka=F&C~C6#FjzhV>?|b?3QhFR^G%pb38w0UE$kz$V=+0~$Bms;Mt_ z#BkDA;RCdd?*)K^cMBBBD)Hf2$yU=wf)VniNmF7M>4RUpon7U!?yK7x{q-`XNe|cZ z-rqR!&1Bn@)6`e6cA~%=_k}vP5w?j&KWnXaOFNhIO4y7Q_JLa4^v8mrDujd1xN~>D zU_1|L>cV|mT-X)a0u1$&NCw9R@w8{pA3{D5#qZcLoEKr=B|DZ+-tA{QM6A{6EQSeVyP2 zEXD)1~lY-OG0$fr51|R=J-9@Cj-ksaj6%n zJBdoM-9RtL%J9Ot@A}Xz5&!tW$$a71#L+T7q#*`AvmdMU!Lz0sy1?+F-JBo;!Os2&^R0)S@&M;DOaw)u7&%; zj>Zkd*rI!SQT$^}mXo@~x09@VxmN84e>H-r;7TnqZV@dzUuF73<}@YG6=SHK*NA)k z+RwG$)xYwdu+f0b=Wn?;nuO3wuQb?;^GVGY*zrWtb1iRgqsFC zdy&xB9YdzS(YP}V?lURx3a_F@$ExDLfs@s^zJQI1Oc$P|fU-qC;;R%oI(Vzxoot=? z_NId?yWl(z(aOLg`z9?A^zMAY(~+5Wl&lj#LIx!p0k)Vcm8aKg#i;I=JqOR#PZEoH zPgVw<#?P^4JCq+vKuL0@q`I6Zof?=_{8_{hIF;M7jdFllU%7LNb*|_yE9Z2aEG>SA z_0(4iA@VD0^RgxdH)upTK1Tsx0*^PDMH8~GDkN?DHySBxEST^oqwyf)4|+=~b-b6c z6v^){)@qVUJ_Xyj3nkSdpMW@WVb*CR+{~UIM_yCW7MAe>2)lLcwvLBeMdt&@0ho<4 z>gLAMHx3^~49n8pVUf585h*37BKT4PD}N%%0UQ`dpXYaf4XEz{?}Te9&rt-A-?NQ} zc%|>=2!WZ`77c;-fBox8C`MDSeJnl6D2z-QlU*9go)@+FeJsA@+{u54QD+}Vt@YZ? z?L&zT;kh{<=J$W?gwtshptbu8JbYky>Y?GO=l?#AyAR`ZdOZEZrccEY=%+A>-+vyC ze*tDs1AdFKqko3`dA6IFcsk)NAN*qc=1+VUFTXO5KHuDohj5*595)AW+1uC<8bv?gxscv$xm3$ejNDbul-v5-aqy6e7)U@>b&NqjVipS zXVK3aa(Ig?>n>>EPw>qPKiIr)`C;ZFNPFPL8bRS+NHC@d5KmlTr>Ysp|MNG>q_mLu z&{K(sN-JVFxfoQZL_q30NSETQNYp}y*pqx9x>D?#n5RD>L%5n?tvUoiK0n)#EpW~i zL~SKTr;rL**Z7)zOBKVHZP`7ArO zOkdCKiN0=Yby2Nz<%{%bDbUhM>YaF5;x7A$FYSb&USn~atA(YjZ3RIx{#F7C9)u0! z*2D{zjpU^=P|d?K+0ZV1d!0A`($653qH{HoI(Zv_<=l`ETx~OPBAO;-0Y+xF4ZwRj zJEjK<^x1*@UPn`UB(^G`@t=HD`BlTKoFQtd}_49B;_mJpKl}@_T}yd26Sv zf_I5gc_MpRUX|Xb<5>V6bWX1xLwxO&K?jtniuzd-Po8?AA@sTY5!sdM;#9|a?27}) zb{E%c+%B=AelenZu2(3oqB-oa?r;yLwT}@pw{9;(U?G5sc|-;2B4yWQYq5h?0b!*F zBC911VH5WN{9FIVUyz%Omt^YD!m{k$Xxv%^2qPNUHh$+7^Wi^eafgyXM&~fe0VeIbmVSU%8(1}Lm?t<=!E(q z-ecasOly_23Bw--rHCDFhr#?7u%`ih34p%{JN*S19$@U;kB6B7kC8k1 zo^Xe=_GU&Z94XIp(YEq@h6ggYSlr#=f^d5Ej}?Vj7uStp6D8l zGdTipxF|-`-}V}qhRuCWp)1Z5=Ex{y)vDi;mB!ZoK4)!tSsynSBZyq4D@-PMlLC!( znR!A^ytIK+F2Go8A#db07ou_ry5wV|v-}DaLsj2}W!{ROaID%HEWpdzv)Ca!Z27k2 zu4r?2IV|@|UP}?`CEMCOVftwdz8>;yg__EPcoABNww)ZqmpPXWSqf+e4LaUZ@FmIn z*wD#UUSkZ#607N`Yq3_wBVUh*cdUn9-n+4@9E4SOt>C4m3p@1wR=&5u6E|XH0#+C| z>l09Rw;ZKw$htG66e6_?L)afj9-=jr(Sat$qGWniQ1LW&p=o!W6so|% z@*sXXxb+|_F^i%~zWQ<5E~MS+%Cv(_1{Vea?zM5U(nkuG=I$UxZ;U$c3jNeM(aHMD zaSCi|=d*&T6fNwSLUYkxtNq+2dlelihsIlqN>@7hXuCss>u$W1eI(-o5w(lmZmq~d z?itC`XeKoP-r4Otyh$1@Hf2%5cAL`GqidaOqyP4zoOKgA$X?R~lCv2!daxeiW4l1U zFEeOC26fH2dGoEMxF_@AVZ>}Gu*s3X)=^gLWk8+M!d3|zcy}<{c{SB37<5%Sw1 zJ=#}HL&maQ@Z+PX@i`U@xDD?tg*}Advh7qT^0bj2cX_Ale14KmVrTs3G=B4U{0ve2 z{_iM&Zy)}L!10gAHY`p^;b86n+bw`+VD?7f^cQhD{mXEF0^qZN{~_Ezi}9V{^AyzR z=kEBH_rHKo{`jBb(W~Pr)Hib{_;f-2?)1rE$1H|V2D{J#K#7O2#Z+$;17aZ{Y$kSW z1LH?%-3Hd`Pl%mF92L)ULyxgKi$Py#7J#*mvt!JmW7>VTYh==b@x}rr+0BB3FoH?p zT$2q^Fjy}m#+`bGr!Z}`~UR?mt;#h&em-{RaRGWMFKUpx{Uj2%K zs_7j9x-C)JHw-@j2ts%{U=u>N3k8LtlC?8(Q^IT9-(%NcQe@S>47~)Oz0+x99GWkT zx)nj)cGH}$+!sDMd5Om2oF*VG@**Scj$iXn2?UstL8e^8VD6y}n?yZVXNk@dLOAx6 zv-5j)IIQzC{~0)`T>?yft{oVbPXr&-yxfj`(9vVmr${z6a5tYcAP z2|)tkaGCF5pvFz}nH}6^L>V^YK=@PWnbys_e{5e9>oVC{vATw_Y?~Bu(&*kKhvvV% zOJJn#ATFj5Q}cWBAJvA}J*F%0zZbuRsk$>_qPp+>$zRE$>~uPfF^+NU*}Zm2kJ@(2 zxy6qe=P-&|cpPz#H+>t+&Ll1eM0Dp*a1o{ntJqy@Fj0a*p z#CSj!gFv|Lkmn1}pYY7nuku00hsij{)D%d>+!CQ5j&J(f zugh?=dj05`^-Vbi?}^o(SQCv5n;^oV z-t=ySB^BeTkRtoj#cGOqP42rapy&Lhc`kxNM@DTbFJh^bAY5a5n>J4v^!`gx6*q&1 z1hC?n=&1OQYUlJmEsXf`qQ3BN%1=&}rs+#5Igin)S~+O7CP2est8{D=n&FqXm> z)jsTqq&UX#;K+(MFRaRj+9l@$Ao-O&sr$l&_(`i201r9kSJj|Ah4VK*( z?;E%bzmFlwN7x@y#T4vvb-YP7VOpGQjfdMpcL{7$4t*?17WftR?x~$<73Ll?k;Nh& z&iaT3KaOm+$0f4$OeQ*Q8paIBA~NS{Sa~EQI{9niq<01q_Z_3iy=3t_{vI&;-CzD^ zi7PeTfFwg4gRa7G(0Q6ZHooI(`5VUoRK6q|fiSk8O$;t#x_5B5cI3>f*zWCE&N3&P zF5yRgCd>qNp*RrZzV~N8HJ<=I^m}_V7B`|0KHYpVfEOnOr6(c%m_+8d0DcGeM}WT! z;PJR7FO@Cqgm3-83wZwdXXf{h4Q4(HVZ(f1JJsW;=1{n#9me(%Gt~l5%9#F!oR1@( z+C0Xs2Vi;0p9>@lJ(k=Pj~Lfo!<{C06x;K5_yf~EF*W+YDE!Cb08rK(@EZNE%zoV|lzgU-KjUaDGHV`V zGAGj>i?&AN44syJ2@N5G1QoUc{x9ggm2X?!m*SXmr^LLTn>J|>sHM*5fEs*w1h0jF zT(EZ4Y59>QkBs^`htqo|veyYB45B0PqX$67%JT7?Bj&WGag7m-tm+o-BM4=Vk>psgK{6}yYq|4UFXc3pC z-eWIgL|atIzf!OP=sKtIhAqW(+NdotNaO$jAOJ~3K~yh>)wSVYH#aBToKCshI-US+ zxV<$vUJ*`ME_K5(cI+R){YAiEg!|_Je+h;=U|GbdKVhj)KVx|6;dlad6uVsbj?X4| zYlg+vdDM)D>@&nd{yXY>!2P7pnn$^$J}Qr4`xQTGw|9xzl6wR{6+3c7iO(fJcfyF& zJGQU#%3WcImQNB(Ne}N@2PRVynlfgqU-_-L=o2EUsO-DG9Ak>6eS7Yg`M}mysz2jx zVHxQzd1y5Bg2d_*3vXGp%DfdR(>V#{2s5rP{5h#!W2v-36%L$J=kO^f)=xW;!uDp| zYVt5;pqMyik-k&eLS0j5(Va$Yc;*Qpxlk<#*L(!#tN$8t!3zZ>nBu?m5;w9CCVn#) zS?VCrd?nZI(QW$6^9x!t?H$Im#=`cs!^F|8>1Rh5zlPG&A8gZ3@;4rf^Eu)(?8sUl z!AW=24=FZ!lrdYc&&fqTDO}g~OTp}-TwdAau|x!1oMrni%o;O=xG{hd_{wna*NrA= z06_)OA5^WurocXV7ss`n+YxeYAQgpTb1v3_BqK~`@WGBmvdUryWjJX(TqtnjEKasD zc1{?XSk@(hvKTUhOacqNk9jj175Ix)4OiR3!;>S#@l(N{|hipzBQ-CjU}0;^O$sbnAWb;Ym-O>L~eh z^2*6q*f6_gg+J0?$ho<0k)rrsUffwWDjcal_2fI>^LKukir|owF$5=e(2;0fR_RPEd2N*!2cNVKZX0N7~lP+CwF_$UHqVN?J)|j3c&Ir; z_nGJ?{Z~SG&fh>|^U_5t^?jQKdrIgYyJeq}e2?Z1?8}&tBHb^}SG=hrkmC>AtS%N~ z`OAn`i)R|ws$foM&Rn8mGzEs>kMOg^)E5K`-&wv@e1tOl;xCFX&Vh~MbQrtG_?>?B z*ZgE56~+wJ%OW$DM^D5#Fyt8NY)VDS!D-jSuB~07 z9E9cwISxM}URbZ`cun5j_!DqgG~5R@j+LA;AaGv>f!!P-7u0a!L;;U|1+Frf1~M|L z@+4eG!YaVC z0jUB%{B!jOgEY~XRpTBAlu-_Dfm0-fo*23INt=t9n%!wE@tI=Y$L|wKKnXoX2Lsu1 z&=IzotSWDUS%EzVOJM5L$8Wg)#z&qL`i^5f;L4*IMii}4Jk8zTENC6EE1X{8TtLOs zp^xM(^nDxvoNaM(Y-1<*=49fgPJN3V{Yr!wMyiVK5R%lB=1D(Q)CIj96Og!?~* z<4*xZ0UUa)znSDuUY~vTS=`(JX5+ib!(L-yFz60e%NGlqOIbO-HJpuJTo4_O%P<_V z^WHXdsws2#k}G2v$2+zO#o~(Lgkq=@JnO=g=D5n!aGj1f9fh@h7-aBKgjOn$qp(f! zJ!d>5SzVjAI0O$(E$lNuvgkV2{aB?sXA!IKM(V`5hnw}g3Jyr`JvOFIFu zr8Z#M1W6$bpC-2AHNRg@aiH{(?Q<@T<{aUdLN#fpg*3*OrEqK(6Z38p3=&cHZ3`8h zXUX4vdC#YacI{aLiD5=x`>DxR`oNksy~lYOcH>3dEm|BJLu1s_GW`{RVNe;PyDM`0_3?Lo1%G^Ox>j;c#;TQTl+DdS(k>ap*$&B6 z#csmJ+4m>`G0dcau&iWEft<$YAp@!;o+3jaeZoS+x~mrxaR3dO&HGXa)5pXHtgqQH zi(d+CT>LlWnBp$`E6do~%qE1TIxUlL_pt+fxs2aK&0QM$r`X`igGUik3oEhHTYYEY zd>q*~is;MvjPp6{#1KcaBLV*FU-l>;;Dsq)3wdksOZ#Cp*KR&32UVQqq8MD^fP@ys zGS4F|TC8FyH=0)SyOL!>XPTPY6!RF#FMx3b`ZVT`BG~;hWv@I}5+4Ps1GoeH^ML;` zfPV`39|8CrssOGBomJl?28Ov4P2ua5#Yo6PF}7dh1YG!RuLVZ{cs${p#@4nRUs9wo zvDC|>pG(^|tnhC!QDEU>JKaX=uNld}mZtJib2`Gp5pdQ**r~zRXK9WYqmz!pT8=ZT z-gsy(6zkem=cEvC7>8nOl=1knT+erzdVt3t_I3N6D^D>fyEz1LKT#^C% z`qb4>Ws8lZRE-4lO5`aKcR^z^eTZgd6U)N%bexJ^I)?S}nq*|bE%W_O2hYp21#X1h z@-3A|&-Zp4Cu{9wGIlT8q%Zk|_wk}VCmh_jSxL9wB`Kk?QqwCi2`}xg%pi+*eZEcm z?e&Q5)PFgt!nr*8pd){1g4*vurbR_=pTuvBLHcpV*9c)E)7Q8^HUfww4(zTFXHc-v zd1Cw=Hv$S>Uz7GNC2C|QQYjhjGnSM?faS8VP{a}qN^fbUwb|(;oSKb>gOa)vq&P*p zFXOY}6aNYDlq6HY<6Ze2Gy0KcM}b2}!%GnDFI^X%gxEM(a6h7(12xeUkVeAF09R4p zQjVe*N(gr=q!kcXb{1C25~Fxb`?DR_nNG@vo43tYjDkAG;F$zypB5`9zTcViG6AtT`otC^*{aU^SGSHF0dc`P_99*5q@4S zadM-}X8JrqMvx=$D>^Hgf8{$qgBE$SQ||gw;kzu9v;-yRHoj~L#~B`4yP7uQdK29y z?4InDMf~YBeycYJq6H0}aA4B~z#SYf1Nalb{|JtM2Kb8r9sxMR{j%h*wWu*hJB`P2 zOJ0=NDgHwA3pP^m!-Fg^LA$JBT~qFt^IZ-edXn8El+9>p<+uoGTjNJWn7(J_$`Qw% z4No-$#*M^NulHdCXx;OE%i-47Fd!D443)9k>xNN7Crr0^-)AUakeGndhSC4{zQGpx z>S70zrn$h1b~+z_R+?RSTw@*06NM-1IEP^zD@%xb=~EQvoaU%}us$z2QIB;qCaBCR zM#;4-THBH6ouOpiQ2mA0IrlbKo-Lf_O8M*xES{NTef%41p4l(adn_Xp`3 z7*B!b8(WbsDzq+ z;3LivG|+pecFR#PAPp=Wo56sS-m>xDHwi%Qs4Y4vz)L` zL7V%_C%oG%CN&Ig{{T`;f?IA0uhXUCH#ld6fosT)o} zJiZ@Xa!A?D`>Fqwbrih^$<1-OyTjv0z}?*}fZb428UD(j{X8vZOq=M?Cx1)0X?i5P zo&@r-{z_BTace{nT@9E{zjeRB?z5a#-3P z79Mu3@|NSm(?<9HqL(;9kh~N2B=&n?xWZ^7 zEH4{W|4aQsG>S@QV_$e@5Q7Lk<59%qF2c!Aj}<+BtVQIM9~I6zrp-`V3&!>V!IW~zkbPi#<~g7^8gh%dr%}jaIOkW1 zJHWHXfx(azfRj)7FQ@=h`udXE}^oGG*I8=wNu{NI{6c> zC09v0`R|-Q$ADuak!5b-A@t!z*N*P>>kzc4<2_fc{_BDq+q%m zn|zBbE#q(U%=7?qUA_Y>gxwcCK~BS;`xr~oxuKebd!J(a>VQD@t`OfCs2G{dWe(t{0Jmwc=OgW~&_eMaiSJ>nw|*QeS!6 z8S)0)G8tu>7|@xY6hG^En3arIVJIWG# zNiZwPND?E!s_WZfi_s_eU4uNbkgS5z@}3mO3*DYUXZ2wU*g%_=`5{6k?=m*u)BiN7 zAp>ZJWdhTrB05QxeH8Bgbw?m0-29XL+<+`*jR-4AAb1-JbHBCe0Chi{5|5iBRzKV2E}zmKA7vg za2i0eNm+t0kNQe5C!IM&DS^Mc#6<9flL#{8>=wx|k-Ie!GFrXg{J=fG2V61s5FPa+ zv_l{BShL>&{uqvz;r`P6`zjoF0M2m4cfOlI8_Z^`3g7R-fuJZ*(sfWeSIa z*0@N1C?i+f!dvP$><;Xc1b4`OZr;KitAM{gVJ%%!`G(^pt$wK)NxD8L;>mI5z z`rIOumb-->!VY}bhsSfM+=B0h9jQmY*b3~VQ)<4w4rQ4B-kQ9#D6V$5jgD;7XJW$H z?ahW(?8R<;)7p+z-p)U;=qQu?%Yp<)v$u{)#??p({`{s&-qdW-C z29S<0+q8R&oaVh;$q62;K;H$NuhCWkINVcoz6<8e2f+&$d1F{#^rJ^8T=;Zr1k>n? zS7pIK@EP*33M{;cA(%&0^nfuOi&vp(r8a%cQfDIndC!e^&2{xFXLgzs?Yf9~&chDx zMJI9&m$5Q|vzb7Ut%$Fa-FfPlbd<#KYNPU1W6Il@%8K`Y?_p9pbxT<*?z<<$d^A3KiYgv&9DV4n}g znoOKx-bgaj8C1#Tca%=$B~u)WYd()Zx1_IQW`7B;dwFX=&9ECGZLnZ(-yy=&GBZ(N zHjhB7t!=+<;K%4^KCvNA06dGGRW`x#Y90cuo0BJ8nZc6z8m)0yJgZ z93|yK3vdw^Npf(z4@~$C7)d{WgTGeQ1t8S0Ag> z$*(MchfwwdZV4xScsH6&zxWVIdfwv#jWuc3GPUi4*5WXkIaOEX*UE_hlw-UYS2>W47vT&XXWW_ZO#Gq(Y#{)rQmO4k9^L8>i`^<{$Ts znwGG9p)udfTrmc%kisw$D%AV7LbwJNPn+!qCJKrFb7e_pN36g(-m~JAg*1Fk~T|!6q&X24Sq#zT}Y7vSR` zdJ6CUsmH=|EuJ88Gz3*9RsuMpfH?R&smNmZzx(*}xO)PeFNX8^7!Tq)eEcMn8@}St zzKHk^u)D)fhWO>A-79@6=%QFAD=x{C<8-=dN@biZMfW0J%*-mj2=+BIE_k5ivj?si zymh{>82?*8@Cp3x$KHnHaNIr!!zCjf%A3Q+F4+NhgV}r%v>RZj*={}|+C~A)55OwC zC>f4xhUcDr9Ugz~^Mk)8CqgWQbxyJ%4d-2V;0M3)^$>*x4z_&bO>h4l_;G`+?7wYKq)Ua-KF?#plE0wzZAR)`YiCI zp?2;puh(Kqva`gD9qC;jYymYbpNeX+i|6TsQ;gab94P}U!qYBd_9QK0wd`hNz0Nu>Fi9LIJk4b_i zGzDHW@EuQBmAWh1V%*#f+870T-|kSdrN9(4E1QcP4C5ekCc_ahH{-REe%Y@^}nX8LTr%AVGP}7HR6311r#T49mDq zMQ{X;9zU%*)F3;qRI$^A)pw+mU)Q<& zEYW9;HmGYp+fXKE-bP|GH4sn@5aZp@ag50-!Q{YjCAcltA1c~ZykV1_FzcP$aPkWG zBzg9Jyc-epuCi59gxEYRU&e#2jsrNK zkNlhuyCPW&kK)WBLeGyWt6Z?@b}{7mrgwb06_<(~G1_vnCG@~WaV!v|Jrf-p$P1dI zz~BXpU_=%P+e@O(#JTf%9#anjJQj$2Je?Vi@txii9LJcz&U3!gBzP3P0R5y@6cSM+ zOaddeCR%yL%RGM)woN+X6ykkf|N7!LuZO;w`M_q9FAJ69efoR&s23i4Md(okFTo~B zGaY`uT+Pojv zJErtST8%sFvEJgRA|fMZ##WM<%QY4BE}nA^u}8m(o)xA`!;Is4il*r*Cn?(0R9l3n zf;kn&wh?2a;@%q78n%Q@B^^^%EC&go%FiG}a|F$wTdsOf{w(xv^6{MFzCt+rcf#q# zaj`g&NWZN~X#D$%%Rbk_50R*HZ|pSM3}~k;?F*Z`jV1G65z&^;tM6AF=xqff=6`mz zZ0F;)55l-}FVVK2e8I6sfReuwL@{e$M7MT3rV3B(HE8$(_{2u3*_nXginDQ{CeFu+ zN_PS)MRa3eK&)bp=IV0V1u9u>^~E6pT00L~V#O+Gi6kn=oF8_;LVY`b6(m9?J#aFZ zH;1EwkXO0HCbo+WUP)YAh+&;AJMJx9db`dmmKtcPq;%=YZRZ`USwyFKzX#7XAeAa+ z3of+h7!|r}&wcJS=={tEUDsD|RUxVTjl)!3>pRI>ykV-ejxF&Ks@g$DCFRkdQMZ6V zxJXtA`Ll3oI+yNq&{~kOKFop@gEoqnE^k_)GVYb!rx%9ql>>R{F*$A3cmIR_C@kFp zJC)U>@4Wh)_aJ`AuVqH@!&wZu;~)Iu3%Gk?IG-KvhGQOoo{%`-5Bi@xIq>k|sh;iB z0;ErW4;u)U%8yeZsmDA%i`prSB)1pDqAw9;L$Ov6=a@M+ea_KM`h(hv6NIzSpn)$i z$NA#0;{w<*eOiY~dL=$OV8@if9n5ZM9)}da9tb$!(@7u0FbcC%-j2dsL}bACea#D~ zqMY47^b$6(`ewJS5ndQUXRGkZz`7ZSWLMV=hsReD#{6mLJqB};+V1mbeXoASI9qhk zX{qj}bZH+OnO$n#3*4oHN;7K$`Ta`r&7CFG1p^2nXc9qSxBSKYerm20~f&#{vWGp(6x8=w=#P;tOD2IU?aTj1-?zkpXssISJd?5-8T z1o6|3!v-Lq&Dz``-YA(*zAB^2?`aFCL^pyyR1%Q#jUE}~YM~@Y6o6-WH61qEwSdXAEC!5&2~C&jBmw&P?$w(wSb$S^E+v4Qxj$Qqj{@zsuQn=@|^ zT6eplHEhiw6r1WQHMUF`q*vS1YqG}9X8C( z)!GqejNWzT;^M78{OkCwpZZQbd@zd9z7Ug(Dp9-wFh59CCn?5;Z|MWDSUkGxJqR@b z&%f?@Jo@ZQINb3!zv_9MFn%K#h~lsC(Q}>_*Hhp&ckoO8>W_vuz4J49|F~Rmx;d2@ zP{Av7S75Hi4>a76PWsV^pYgeT@!E?Q7j-Ne2jwyytJt^M4wDv|DQMIMHW5Nz-yW?e z15bQ+#rn_%FPK&_T~U~6su)!p0r6>-QPbNdCTam4=&fEFBj+NSim75Ikof`2vh%W= zpXo5Z-f&)Wa>9C1gChU{AOJ~3K~!^HkRso<7Ml|^Xxvnf(vUHv6=c!Y9W>r}&-Pbx zZ+J&JYmQ2|p?=)tL$vsm3D3L3*B#z=da`Ygt4oaB_lIMtmljXm6z9vU71z#XSZOF@($Y}<9i*kNyXw0jLAo8E7n8{9*z_%5qYR|@6DX`(>e%(2oDg4yhl zcomGx7#+NL2{Y#JD`>v454O}SvP(;>uLLGUK%%ZeZ?qIy@%YN$Xzkgzg5~a|g?sjm zekzbnZ=*4)A8|Lyx=(YoQky)5tSI>KW$)>IE>H=mbeAPQXvx+%Izq#0A(zWm9jztC@ ztHr$-Bz2^Ht5NW?kN$bpJ@Ml1d>J;JiC~c)JNqN{rA5HZ5l5aacYcq$pR+ocle9)R z*i3o;>YqR38~&Zw;hW#|JWd&EHW`Z*-6A{wu;`%TmEcRp740HB^3!MexOufG~?wa%-jM~uE>E|%EL$p5LI=|l7qoTmmb}aUmaQoe&7Et=-T#{o| z@7w2+pF!f_wghO_88);doY{EngB%kw{NoThbd*XNctukq@9@)%v= zO3zwg$yicMSvpV;FqmU)X{Exm?(gKjz7yIuE69s}xJYNZ`%3x{EOBdpi+-Jr`CH!37G)7qz>{oi$2;WO=_4EM(PQ>YJLE+W>tnUu)%G@G zQQ2Z$zlNKUyagQ&NFo=7K9Ae|)fXT49JeqP61a5;WhV2FkZ)`m~YY z7wg}!YPFxbH{?)>ZWY1RI|||B0PfE7^Wierari81s}Roj?ug&}J&ps%<$`10zue95 z{+=P<_dO0DPk(mca)cdtEkMvyp;_#L*c~3xjz5QVUbB#0cMe6yn}WJEtX$eRagy|q zRCU0wW~lEY^8nPG7BVtnNgOVn*mSNuApi&bfcr)MjR$1K&m=i~J_Kuj1l;oIIuO4{ z4BVUyH>dGXwb13v%%v|-eM=wA-9`^AG}`e=9to{$L1BYmIXC-s?Z`R}#XhAmhR0-@ zHOkd@nwjJkOH{%n!HAZ9;B@+zg)|kk>(b4nfqXhlt1yVU57I1s!Fk-wPhP_h zUh73z$8r@Kn}nCK`@&4OTbg4N+NE#B(>;Fj;)MXCd!m8h$Z~x{`#S&HxA?j~j?lWj-@d9qjbmX;eWKw%+NmIVF9k49*jId&m;xPU zYR5o#_2|1(#7@9FXFvy=O~(w@eVko4qd&gVz2Ngb1>lY!?-zugRn9)=SYpC%Or~kO z;ue^$&anfNdueYg!aPsV8||*@mWoX7+vf_W)r1Nn_Yqw8dk#z^miq*3wB!}zExn>} zZ*wn{&tx+Kec1)=Ci9qiuejzFU#55WiXapLkCP5r%A-KI?7o4)hwm0|eP37ibBlxe zueWwJQv_Omb#N2H@_v0@#-Mg_JwY)=;M$&(D;|%HG67bp4Q%mw?>--@s<{2_GRQ(D zR^b;iGLbA@d-hG*UFDqx4)cx;(bqDRo;-NF-r2bpWuQl|0ZQJf(8;)x)67UDN{F2t zV1zG&`w5qe;iupG06+J^hcFlpN+A4j9G7~kG~(KE%zGF3<-l<{a9kXh^96tJqp!!^ zo#Aq^`MbYk7x;W}Jh?mI2k>wI`SB#-6Y(~N_jIAG-x~ObZX@Z|Bu25XpepQ@FhdHp z7WkL;EJck=L%sSxPBOM8Lhx6vR&gNaPTuE`-}z&oLOw46g}w0cMDFo4ZlCg_A~^pY z@^9RyFJ^=Kc@cTJj9q+S6ujs2_^!CcGqs%KMkV|}FK&Y7CWMr%O8P6`@o9wP{gqy?%^DA#zuE~wJn>sy(W7l57K^?1l5T#p^AfXXVF7#hb}WBhd`8jV*R zCaAD&)b#p3RUI@~ zJaN-~!Qoy%(4tc~OyGadff)t2ua@cr7Hn>BKMPCuwCnd)zi9o^f7VtVL9fj-+IYJd zr;56dtaI$>TMFQQJY?_LJbT=7$o3HXv;D1w0Wo>l3jep~EZ;jAwpa8b_ymx)o?XvjT=cWBV9qe78TRnHz03*>6oxKrG6 zpw?Uc$^rSr?IdvJIJIjH8KVNQFY_3bAIVs9-qH(`uj|LT>$@>JD@L)~?MX#QWVU)Q z5oGdcT?SJ&PM0GNHLM}h#2=P~fb56AhgS5j-pDpJNObbAD@DmYuVI2wY|@g2*8`;l zE7VDWzfqtX&S%4uCx(x{?*V@P z0}qFcf-iUY<;bJa$8iCU@jc(m`GWKLg5z@Fw|?q%_|!*U$lc$|0r+9#JHMCl-CsX| zCug5Iq%P6!p+EIa<*hn-8 zcriVeWKw_FMXZX!W{&tvIH?*J7j5*oA#1@A%6xu=m^JIFCT%hHs;E)aQ5YTDj3y zFO3%>Cvu}55?T9uZ7hEAxamvecikQDqZOzaaE+GTXSRA3k=nbyzZQSid2Z!lKVn!L zgOrsMTiPwFY>k^x``TyEFyHqpbMj11eOBi8eX_j=jnsBy6$YEX*=DHUmA(E7qYR%9 zTsOM5(8bqjcdygUBu2mfC3$r+`-1x1$IFgi1_5^TdLY!g(kMXQRvedk;#ynDTG}P} zmdmm|MFO_viGV7tjpz>f1rX+XYxqPfa7G{Hd#qlLeo0Xn!%h~NEOBB(pSwOO_;gU_ zaJ=|O0Q791@3UBEoyF?1`eFb~twWO$d)-eUq9RW1N1eh!yNAsQ`1r6Gx`n9PgLv>VY7eA&$x2F=-sX;p;YbelN%P zjo^>I?*VRafe-%NT}T=6i#h;C5j<`1SAYCjoX<9oNDsaq+?<9Fdpzwq3TnffzU=cP ztn&Hbu@(V??iIT#At)QoW8bqyh$P0WuadAf`m13a+uCL!qaN^75C6&er|lGemCh`l z{05ZHHnJEa*ZhXDVDZV1Jd3ygoyUM*QZfmVlssDCB2~OMyIf#rj9;F_W-&L=m%kji%wCfZA3&*Y4uJJ-a^Hc-%6*|52=QJ+smNBt@ z0;xIvG&p%+R$^-y1Bl3+P1xhUDL*n7!M29$3%Fjp=6X5&$Y@gbuUtRscp3i3Q+a)z zBXphmk(j9QF&}tHc-dpa{zVuo8#uyUjX`-*H?OOoDXs}EyPT`pbu}ekuiRVia}LNx z-f@Dig$^nw+r($RdezO+TpQnB;I`+9@(VFdnlw$94P>*}_}cnM+UTOM9Y5{5(83Md zJ$@-o*FUL;SKN9nemc*EPi)!x8Pfjxec#X{`5;-%wQ+&A1H5yC?6g@;^d_*ndSwhK zVBGhL6o3i7Pvm`tqSLf{tH$2u*mUVD7}{>-sqZXHH!@JCe}Ljb#H3EsH4<2EN;@RF z)={-iR5)&CItsM+SiR4_d^CCY;4eO!COZ=xOxx;Pg#jkFL3YsHg7Oed1(B6-&maJ5 z#m5ROaJ#gDRWcS}$~)j?!!ue74VLp-j1}}W-wNuloo>)o@3z~DAxnjf*oEvPY-A@_ z`_7}$HHMZi2=c|&MY7plcSdUOl7^Qt+MK(Hv2#cOSy-@K!gLgUWucpQ+u2ukM^IzO zFaUe`4ht!l>+lTJw^ojuwm-E94uaGCfAi}1MI z;kcY}KHuSTzQg5w#^o~qo$qiQ<30a9`0wS6%VqREpYQPQpZOJ>PABLta8MMUaYF3~ zkE6?XcZSE0$IK?J1!UC)yHQ% zdVIm7#}_=gJ8*cxQu?E4KWu~ThZDE5myCs(7?OR=zgNEl%=ojKOXB<9soup<0rSeVJAR0?=EVz^Du*I_Rt8 zU3UY%Eb-J)ZqLV{1+8d)%YF+bt$1PcVVDdtb`r(joW#9*r5P2z$pqaUjN)uyC^qrZ zY6wJolUtBD7kJuiBmZmFkP&l{$9%U5Ct&MQsb7hv(+^l%9FI6}qpRIiuA<1!#G+lQ z;>sdO|JzUV$+2EpDCPWTPtWePMxjl(r<`Gn&8;6#+-0z($Ly-C`nXq-+cvBh*;nLC zN7NaCOm&@eHovH8S{(1R#TZs?ujwRW<8BNYtIfL`Z+DvGS{u#Rdrnq$Cy#ZzTN%Dq zY_db{DsY}o`?W7IUlEOO+AmCAnK#EbHIRiGjZy0y(aBaicsH7|pk=fQD=VMQjjp_| z(cAlU-uQEOvVq+u?=v7pqQk-0s$K3_#r3v&$8wgjJ1;qQ+gWY&6#)w3tcgLiWiS@r zZSQ;rr4>LWbM)GcQ+lf%%w;#5Y47|vRQ@T$whKJ_EqwDTD#@UmQCuyEiYLsHKHT*O z&$I0wXxJ~;du(wk;o9|8>XN2;Np&(l6&_iLBxzW%!S#NcN9<5tMRPPGjk%gVc->`x zVHs?b7p*+!pTH@SN=`r+=Fp!r4m+pfS!jgMpQ&lgssdmJy!_HjGLISXmhX5MKJ(kZ zoI!ZE7^*9{b_L5F-j0++0E$n8-Dp?(=HjXI_x(Tf%P=$i;s@V8f3x@?pPD;|u~Ol{ zF~>WOfzy`@@H6jw3O6^F$-n2xS;zRz;h?aJrEz~g^y+-za*T&zRe`Z$M_-i4U3%~8 zFu<)ASlZ6Po8Iwhy!Pv!Kr)F>yrCW%tsU=u+j{^2zxeBa7fhuSJ<(}7c|ktM^GcFS z@ic7fasht*C!fXJe*6{0f?Nn`ymjCJ>@-eY+5A1C%0t3Q))NJ0qmYI>9=!^j@5Zk4 zSNyqGaa<^u@vzN#G+XdzzaU<&b%x zefIS#;5YV5ewbLJ?3Ydh;i+(0;*sE`W&Y4iYL$;*R`C%yS3Ht`fnpQ^GOYz9O*IXl zVyT!KW*uq)5^5?3iq=kJwFn*m<(OR7!jW$uTV;2dsg(R{jkWzNaniTVGwg@_mD=$x ztVVZGPPpbtJFW~EKbb`Lxo~v4c5PgymwDXDNam;2WSO7F>@S|X&r$NJn?idVzrS|# zC#3L1*83HP%4Ps6#_nVHJ&azVsW&g(>JIRl2i#ZVu~$@o_J(Wot@K*@Klfn~Mmx?y zc&rmQ;A0&+Q4QFIzI$C;ZPvXnHr~Gbc7@q5=w)Cqyr$5rquu8TAOYLeCWzR=GQDs9 zwkLRR8>7i~KC*zxYrPf++k=OIfvr4UGv2yzrAWAkoU7jh=2lcxUL9|7#p=)LSu5h!#+|n;Au(MZO3G8lYti=`N2Cq zf9@DkM;Ud#*pXWjOVm8>j?cgNV%_ojD@PrpUouUjk#Nd#l>2&h?2 z1AqBT4t(;%@5$K3I#}LY*<$+dG!@3QIvNNnRAvt0C!8+^vm0IbAd@p7pUllZQ{P*! z#_>7&#GFs&PgxzcVN4pp=#j&a6F41%l^!ffQxy~4Wgm2LQzT{+tJ72L7DO_EQ+u)R z#sIFlnilRu);(3@69|2Cr2A@Guf*5shtQ@Gr=s}v=+*-b@nEc%z-I==oYWvfRdBAM z1=~ne^IhtC4b@e+6K%Y^%(0*s2P}{B`W}3cw#%<>S{!?I&JdqVzutbg5az*T%7IkT z3e^5rLPi@`#;3o6Ev?Ot_pR5poYYRs_1_~p`O7i{|cDj1nRoxUq7dhU#T7v2K+?@#M?v`OH?>S!+4v^eznMxBxz zyiLlv;v#to$o0Mh*AAq1uN~mETy@`u1M-8CL>beD1n*x1-rXt1W+T)kcUr{!;v zEi;Hk)=Zm4TWsW&g|E_@*9cW5xm&4OX5R%QU*7d6cIpCv`V{w6U*BOg2k3AD1F|>+ znyosGLCOo??mn_%ndH4CW>rjAnoc6QstmV_{=tj8Ot@2vsp+F4S(5J{OiL`x5;?%SIXcM8R~C>2D!tJxg#C=gX*QW@S5yu7xh{U?)o}> z9tlrgU39QBg{xm{v0%Myvc9uy6cb0o@BFdfz>_DAU;5B(N+P<(&sQDCF(gKOsa+gd z49A>@$8SC#_;3HqXYu&Sf%DmM9Ke&iW5oJRK+j!!w-op;rgqU*GQK905))}REpGa8 zX^UWEynp<^{@$`Cl16Yf{!av=#kO1=6MCbcH(tE8)4sJ!=s8Hnx-9HN5{7M7#d%Q= z{6YTYK`_55BG&;nVOqu~JS|o%<4j3SzlxAyA)v2K*5i}TTwcxkug~kJ=#}k54sCp+ zu^DzMl=WTHuKT#p^lMP$Sk_JO3;A2r?q3o2#)sD~mR31$u5Ai+xqan^Z{F{6D3%Ee zW;Ykt9eu2#T_wNU-}%Bf{iNG6SKVK$pKsOodf46&vYKy%Wx-`lJ5#5UCe!CqYNsyy|1OVTQSo#rD*J!C6QA>M)_JzEF`i3y zyA(sR0B{uOJ5AOIjiN*6pBPE~c*iy#%9k`Ye|qJm7s>Y85keNp;rRCNco%->w?Cmt zGw%*FXD^rclWIPkChn_rP+9qzcfF)_%0@(2G% z+GY3GWQXj53q>=V$Da#<>v*@9J#1uF^66ihAeECok7Km>@;B-c^ehHb8Z-dw0yg#8 z{Ie8Ve=}YbZrxolj1M1W%Us znC>~R*Vhs17_`XmioHs!S$KZsyFMceTFa>+GMRFSNk3v-9st8A+gt&LeY2u3f{4!< zpijRX7g_I{?P28`MK6z1*v^|7HNN1Rt2z_Uy5UAJU^`;0XSj7; zMQ2_k+52OhbRY>|jJv{`^bh&hSf2NIP|X&1_R066x5#e^ zzW2TCik$Sdh^f8b^VR*XHkZ)ccT$H<|B8%6XbmMx43c^V&$)<<@JNKJu>C z*^RO5f4v?Hn)vH3oA$0_?dr(gcmOC)-A7OBM?zw{ssL_M?8R#}vk3xPi$T{mfX<0i&hefTkJctl zDq?iS@)~1lObl3!pG~akakkq5v0Hr(%SdaH%&reO`QYLuZxJ%^DtTKfwncc#*UK-B zBhUFA;=n#D3>?Fb`v)bq`CYx8p@O_pXEt!kw<R%`gSzwxD1m=66I2k!ay=46CfgU-MF z*S@^ybzTe@o&L!m{9kFq`QRZ7-Yl=_QTgKC;#yG5M&1jT{+c|!>wCU0i+ZQ=KKWzs z#@jyfOC=63TNm5d_~MX0#WY#%NCMLKo;*2lcX!6meei@2eykq#?K8L>$B_@MTCkbs z4qfE$KOc_&`WK$VtB(#mc`|;!>R)~1OYp<+VCl!P-L|5Qd z$gRiKq(3pGjhX>*Hz(y2yPSv?NS59Wj`$URXlCR4)@X4kc6rU<=?CoRVT&AtD*s4( zwbGrlu#9Hw!c3Yq7#O$R@U#S1g5djHgx4mePNDHKY^0uxL~ULuoBuV&osRc)e~C$R z;x%-!f9U2_k;62oSmI7!7nQ$l!{Mr^ZN1jpFB@SSn&hJ0bH9&A*G4B#A6tvmb?%kc z``fDl#w^-iO>I(Z+(Y~Fr)x#3-qU%xO`8?G7&Yw7TD#6C-QxxP)_$c^V}2h?XxiXa zuc4&)-eQ|g|5l!RpH9ndbiP*5E{s_XwyWH)S?O-~w+kT{h*ij*Y)?-0(f+&fab1Z; z_s)s07sfnJ-QO#%+Ndmng2FGPDCIb~ck(&MPE1K1zbp9LIr(eF4}Li{+5yD&B^g4S zx8X=HtSi9d>I&no?M^mmmo=2{Wx@Bje{Z+D&tqx|v(mn!ZKWfQAX5R60jfsgdCKnA zaU~(cUYEOIp1jTvIZwtO;6mdOzH1&tT)7nA7rK|a?TTkvEh z;r=iZ8S)EqiU#NwwCho{;!7=$!(M0Q<(FP85_pGkGFb~xwZrHReA`>!iQoO5Uug>> zhDuWBoLSg(n}KYDVAU6~o4 zdT^8R=Rbe*zl4WR-QK;3hA@#TD-Y&jAnpFCmg&?-Mhg}{vCoN$mKIf=*t zy!U5+8$a{@Z^hlkb%&A&Jr2j|w7S!FA#WDVaNyNf9q04>jp&O4jUkS?&w%2kulTv4 z*rB^8j4XI>Nmn{D;R)e%{KtU<2h2`{Q@e=NIqlJ+#q=eqT$9Z1-@6S8nawobNRTFp zEQrM0nFQc{0Z~}wV7ahLb0|0#KF}COW5`rZoYutL%uxJ%7c=v{uw6Egaf#u+06N=r zb@v#^qFE8bQj1?$`}=W15nJEy?(M9#kH61juh1j$*EYS^xa*)eoj$0U%Y8iG#|yu& z`y9{Im*TG00NPW1Z#O&B)Hl_3^tM`VQ{M&lT;qCIZ|n-s8clg$aIxW$j87O8W9@c? zJ3lg(uN##6%|#vW#DlO9c#z#hK?t*H?eA`405V3-(<=0O!kfwc_}<&DsNM0>cUPFl zt29QExEl|x__+3JiLnCVO1o{OwjF^#Hns27%mLUl`nszHwe#%Nxz=DA{@G|-gRNO1ipPq*z(61S{wW8xtP zukg#A9nFYLA6Em79a8QeBrdk)6-=#-^ZA!Pm%DowV@1N*R&Z-LPm;gw+uvDvE9qYs zHL@oFr{uGv&x#|t>q)J29f0mTDBre?+|>Ji^y9xd3JRM)on$8%#^-8R|DN0(_?vJ3 zQheLr_%b|vcq4MmWQy79V}y_Vx_T>ZV%*S`L zfBO9=b$iG7-u1N0;EliM96yER^j%;-9KZ9k&*8}v!`)px0Bic?96XMG$0>xc>(Gl) z+mzMH1X(HB0f4W3=VwITbKvS8ZLLYF2f!{t&MOjoLLb^A__!8GY6rI33qFM1@y<`T zt*Hx*Iz@Bt@N8H}J0kzcAvi&3V#v!BhyyPJ!du8#19tLE_S*!=P$P?GZ773^g~jy$ z(e}2@)@Da}Soc29Ga6(-BRPfe2bV-uK&c>{L^jL}4uv3<4=JZA6+==rSRfScpRvxn<+RbMV|5;9 z{TpBW3sW`jZTqN;7RoVQwkF2nbx#vMj* zpV-v~hI8bFWBo`z^U?U7>8xi|AczpniM}Tcl<_u)p02v%f=+(fB=hrZ&UtM*=HKu# z@2ueS-I`35<>C2$&x-}G2lC$H-CtpL-z{T#CZ2cKJRiWipzWv!Ro00K|MBxhBW3L; zt9Riwh(TtId9eXB$zn9NCX>kJkc5$%0iBEi-j}4J-KON9I8pU1@Y&yZeI2~${5i#s zDv5|W9Zak&BYaj=uYZtZr+>)0)acY=Qs5ggi;fp?A{gJxI&>PL$uty~-0>;tOBVi7 zQC4?7mGy06$1l1vPH^b2PCwA5WGGEFks{(}9d)hbV@g$1x7RZE3Z6$Wf^L;@I+HcO zPM5Fh`u@dF{HBPR{Nty8MqYLQibgn@xBut=wwzAK--W%p0v!Q%xsy_HVDqXbhi?&% z8_MX!b$x|Y<+YE#k4diU=K2-6y7y4}5a0yVcAz6opApG<(}s(RJpIn657B&+#Qk;I z|Fa+X`|_?2esXhqaEv)EWnrTj9I0bR%0Hr_im0B%Oyv6d-2BQ!#LgxvXE~`#ZrKAi z;^z4J_w}!fyz+|4g9j!Lu1)^Ezx?u|bJ*efS`M2pVQ5497VwUZn97OII~9ioyP;1+ zV<{r1(7!I-x%a`?`t!en-kiAzb;7?~i_=YpV*koB{k$@U^di!*Epig`n0Z41AK(G- zYW@TB;`mk)#9}_;0YM&UhTrp!S_#bM(J;0B$OlZv97wV$k1ZdYjI5Is>(X4g<$mRl z#FWl=Y?Kw6O+}maGZ(U|P_BA^N7Ly^p|>%^_A=sYu2Yd8&qe85DB7-O3%S3}cIMmQUw&Di`(7HgLx zk9J3f-4v(O?=e3(6QAFpZwYixJ^N#n^e|U_Qv0{6>Bt0))X924oD?e_` z=|GOww4#4a{z8WJA;PW+bUaWP(}uvBDzL6eR0shnnlziU4azq!xZrs^)kM!UB(WH; z#{}-}zTr|DViCaEGS}dq^YQXmzaoAD*P8jNOP5_8FQuIT{p8>Nd!f2q8&=Gt6EJp` z7bL&%w}<+!b@>`oF|41e#70WZ&#I(T*Wo{Y@werDpZE=VaAWe|#^fD;^SkAzf9$*E z9Y6lva{s={Ll0faz56PstJCqbrWo7Knff;v!thewuxi)Zi42F+;;Hv>+WWp?no4b2 zPzeUMNBr^Tpf*00!)z9hpO^jK@96hMEdG8n{S;6RW2i~|6gcI|Q~Mn6et|NHWP!IYH{5S)6}~+;?CKOibeXJu>8dV@uU!tNIgPn()!j+z zt%p;?Jzeu^{f_yHnmp-I;504?G3x>cCPvx7LtQuWC483he%os~&A^1DUu|B$a@^L) zqG%Lw)GLK<$uFwq+0wn&MfgAL7d7YLAuP+IFW=dJi?(#Q&w&i5|&P{H*Z`YwHC@0>hwCqmv7+cXDmNV=ONXPG*7l zUf76_dJl2MjEhFykyIzZva@1D%;YV9<-4j{iW2(u=U@E_+hnMYsE`G|>v%uu^~U@Q zpL-#(9rfq>4&K%?;&T^Cu)g6aD{HO0m1MOSifV~_Rd0X#KYUD7P4vW>Aq!%3i{hi! z-i*1eGkjc+{J{HKqrunm6kz#ub-#_ZV!QG%)@|dUNq+JjPs;gh^5*ZH$9e+ddsim+?wP#*<2TD^^Jmmm^|0L{biO&h zu6;hAkZMdeT3$nO^4FjKZ&N=d zw()*#zVIvMW+spR(2vW_%{hKn88^4gG6&;cSKi1oXTh= zZUuE1A8HjTc*_%NaE31v>^NVNx@n#orpQT{Uv~Mu?Ay@&sumpQG?<6!+lOV0%({%R z8yYn?w_FXM@BrmbYYxxvQi~#*_P%1KJJGqVxxH#`q=F!<#*N5)Ju^(5tEr`@6vN|CE9-`+8^JmJAU~KE?5DVb`enU zT~$I&GbqJ@kaw&Z5LJ|vS$7-qzJzKfg~fWoXW?s5?Bwv{PSX%kw>ef}W#DoCyrXOM zKIMyox6H$@DbxVx^>|$^zlAErs0z?1ERlDggRqF}PKlIlIA1tt8Z#w^U9v#XzPR~P zW>y|5xVxOQt~2twe!5H*$fra?Ft8CLlDp{oZNYF8w#2o}uT93p2b9!+Dj*{k55~oV z!1D=xVr~>c8bs(^y(w-H^vWr|YBvTk@TT$Je^Y8CF3qBRx^maE276))6`8nmc?o*W zZZh+c@8{-c04D7Pbis9WHmF7{J<{+b>1wI;xAa5ap7_C zR2Lg8d^PL-xM)80Gf#<#%J;sW=_h}-?w#1zk0;_;Bk%FXMs2Waj>R}YeW@LP!}r0> zaccWde)dZ4-xGQN$8Rz|AP0LB_}kBYyPVIu{)yOGkDvR!F}b-B`D<@{c`XMqYWa0< zfg^xD(uWdR_3#^$@r2(;nxd>)JskgY{5hx~ymSM8YLanDysS6~r_y?mfH@y=)1QJ2 zK$mhy3M?Lc8NZ&*FdOEYV`J-a<=K#v1;m|Wb*`IDE7WBqSNSS4#HRoFOZd63wFY95 zoXz#hib|1E?ztoGU9K8t0loT`a@?iD2kNNbJ;GqOaUR;=^ z!}L?i^^P(vD#1cAF(;BNXXpHCOFnXid9w3|&f~Eo3JM1l^|fk);evZptw0m$+_sa^ zb~LB%Lh)_#g$V(jV0SsM#9#1U>6f|90h#xZ4?fq+;@|A7gSf}I0`gcwIo(Ot-7|cS z@^&r2_@OJAfUdS@w_7FWjLrFGUFLzmid6Ly!M@_9$tGDh82p>o#PrrVlPD$y!2+7! zW1*!ZMO&`eEh6s{ekCjT9_JQ;%;#wtBlz448jHCxM>Q7-2PmFku$UzH1FXzfd4@K@ zsNY$qsv8TSC=RXj`SMr4vYKC9HAzQP-puGlV-|p(2QonO!x#G|-@(Cb$VF%7#IG_bY!iFH5x(sH6_vj3mcN3S3KZ%eJB%YQ7jc9f? z7>#<+@sDsYd9L{%DBcELr?QN;?Xsp-ka1;kt4h0QCjhsxTmS#uYGL#ev9 z6dPHovAnJ~t~Zi(w-4LTSLl^T5xL#XtT&D~XqfnRjbpE`UCL~{+E1pIXj1G+a4W+z z`SDHXkQFx7s2o|5inO!7z!(?Nd-q>$p7(rG-3@AAS)k8-44)dTvO=M-kqR)(*z}d= zPyz&HZBA(yjO4g{;a9I~!#L@K=6)0Fu2DKq|Of-csLgaa?2pTVg;Em)Q27JaH6eK{R!7`-|+ocyaqxpAPU>ND3a`hhjuT zlmD-~mA^6qy$DRwsb-q*8;)K?$G<)h)VDi7VeC)YP;xxO)ZaDA2^c;idQ zY96YncDx5QqSkSvqk}F)MNcY^KlOXF4WPmC&!mrtzx*vLs#JkD_K>N~-Y<{F5Zgy8~oT~#2+CI>{05eqWS z#xb3PfHv=o&eFaXv06X3{0sCc2MY2j6w5S!Fv0Ehhz#;zPI9i3=Uokh`D;GelSY5f zSFfi!oy)RK^!`m;b01Ki4Z65AZzmmY3XBJ8GGXW?{qs6I8AQC+RPgumZKW8~`Dl8$ zppRJ(duzwWbj0mc6)~@4U8MLd^VX>Y8Y*ULFb|N^vN-ON$1Zd*Vx_J?29e=>j;Ymm z3Z|1bAB#ukS@fn*^HjE;G(b2|U?N}S*8~o{rb^d$O)Og8 zx8kDsqTlnvuiqb^bgK_Lp83d6*K$WYi^rs2WxZ`pE%z|qFjgy{mJ|9qmg2Pge$P@~ z=fouMVO+J7JY;y$q2|{xc5&JeXP&r*+wCM0l!coS(Hk4bj~6m-m!tVzdLitto@$ZI z8jnzT<2QdiB)h4&I4ONRDUxmmC-KjyHw& zIhwYX8bsNyxVe*r3)#W%3*F)dDWlH|*fbE*?`a{Bm{#iqKXt`e%x~!(i;S@Y_Tl|Z zC6~)6g}SU_KEr!&JePhI#!N1aC&+?&64}ULWNTlW+;NS;`ZZ?wJ*cNLx|POK9klqw zlh2x$k>{x{^82m}tV_L-t+i6U7(sz^o#!=V0r^Ab_-tdX!|M;V)*YT@Mzv8Vu8Uo> zH#eNqy^M>g<`-e?$91^Y>ivq)r}V9^gEbCg(+dKHaVuA4PjfuMdA?rdzpQk89?L24 zSIHcXBP4L6#3QW1`nJGU#~i))(5tPU<~mazv(%i?=bTeJ^BBnCaRD^lgpf)Ra~kcfsN_E)@~Um%zB)oV<@~`?ZyQqqAvebIa!~ zJDLY~`_q9f-N7z%DR#G0+j))Szu3@14sN{fc&M~EcV}|OXVW(%D(%Wo(n`>o{e7>C zmOP*dt9<3XMHLG&GsVXmj^(!FjLP5j2s%H|!aUU`1+}9AODNo=Nrx0C7a*Eb4w~wZsbq(B zhTta*bwiU+vThJW@N}1Q4X#|sip;s0RItf^xYo38qlNV^)KBBdGSG6~>bz+zpVSFk zBJ6#+UYKN?WVlq5H>|s*MxN;T{q*~iqc{BHc+}85mpQEmXE`eKKi<1*EzM)6UZ?XR z!uhPOKds?7Tji}&7!Q<8=V6&RR6d69DOmSnsw5($tVSnhI3iMHzM#@t57)7jL^or20**ao{j-1eu_bpV|3|+6 z+2U56sMkc)Bi`kTCXO3Xf}X>w4EuKPmt2cNiCcQ!0h|S68R}8noH* z%bFsNNOCF+V^dtRkinuxOyKmlo>V4Fzw*pGW$n$ZM)=6_elPt_{6$)k zRK_}VchyajOLg#VvVT*DHn*%hjoH$P8m05yYRtBd#($^rb(;A-q*F4K%%ddD0N`i4rpM9dG{FqWgX@gJ^vuG)Ze8d&EzKU-Q@A8}lwU(q%np!(95=#+vdT zzg3uXhxZ`Y*RRM`{j*4*bM#kQXW8hhm%7B>CI66WgBs=x@o#-uqvLyD(~rJn=VPd+?>Qe)+bt{zOEtPLw0jO`Y#` zw(S3xf9F5=%O$6$MO8%p*Z=8X1|RCq=z@;ekuef742_(fZ$wY0ZH}v1IcafDruD_L z*<3;>Q9~Lzx8|NH38-;Rf`eQAuzWl)C6guTAQysr@!R@`d{CNE@tlR&5PrO#WAoXo zWG=YzHP}X<$JC%P9_bX~@mri3wK=NVG?&%aFZs>f&dATAo^cLw0P9bi{Zy|E4M#g& zgZvkHu{1chol>?F$j$TJAqO?7L!-AlNQ#ZQ;{*31o>L*mPdo&jcAwXw@ev4UH;nHh zV^ztD!FlcEALA4~ZEl|X=U7Zquc@PF@ilLq3WdWh$`wm&;= z6yU=#B>TWS7CqEpro@x{5u{cidhD2ho2kmjDrvn}DLP0HBH5?HZ%WD`6yOyDA(EaS4kc}ku^|sB}H+(!DG@2>I@sbWLZRx(>EXg#m~JUn1GP4Ub8f#O7W0( zZ(wOdyNoN#Omo^j^OZR#n3(2yeB7K)T#*znz$fMwYJLrI|J?NhG(Pe3?^=9`{H?$7 z+QUEBztc%+$;8H3dc;`{|5|f2XrP#NW?u8yhmOWak6&8W1Jpl4P!TKfX*lWt03ZNK zL_t)nOBI#x|Dhj~^VyECK(AWiXgXHWM=}5gTQWzni99#Wf-V$>0d^4oB3&LJIBfw$>e93oYb`@~yB9+H;_HmkMY)scp2z zx}xVatW_l}2z8bAb#^rl^3=vaJ$#pgk-MHG*V>VFlePX-?^L~^@~1{qs@~B5J%-jD zKCI$*Q~sXh!m&|j4E8|&v3Cky;+eyGuU`zt;)ce!7TT?>HI2=uVEc=5*C@iwih3(N z54F%eCg2Hdk#_>?Z!NJA^U4CGH^&x#GqxJM09TCVq#j@nf1j8F#G4A@OPe7L*YWqB z@QPxSHuH+7RJ9P6vOY`7YhiI+xE9}!ISz9mA^O_30T{mrNu2wDG&<|0o?ogQ{t6{4>i1A+ZJwqbi|d;Q>G#g3`)A3WD5sgp&wco_ z@-P3p_sK)Aa@lP)ofxdHvk)xxFcntBqLLqBT-L_sk;k8Bzgs-sTt8@QUERBXNCtS! z3*f7WtX~H0*zOn<{_6-I#+2ZtB|w2O7p{QNqMTf#*wcKCq&?;1D1sNp#s*1XK{6jc zn~uL;)3+V#M!YW{Y9q>EBb>ufMHPU6PUJhkN3W%xf#;3@^$Jud`3`gMt^rKggwNLV z{P7;^<$f@5m>}zv^f7L}v$}wKw&uRtXb*KAtJmn6*UWxu+3G^nMbtK$GPGtV{j}DU zR4*3;0ER$$za{_d&%AcYE$c~c7buk(DL?lqv`GzeV@)<5uE1JCGBZA)pDXeT_=xMV zIxx3*9|pR|+5+@F;Sn{}U@wdv-W08kagiRAyz^v6V^UK&-^}EM463FBS@8zGcNmTf zI!t2I4%;zzDgt|swD$hc??D3%>Bgu^W(6p`(=Zm=wl zgCE6l3ga~7a#(Vi8(0*6DG!x`Kj=q5@Z8p1hHh9_GVqb1o(T<4P%1wJszs+2T;f$b z0FJx(6Btu&R2u8FD~*uHOq#ez$0Y2I`sdxt;%}0HjyrbFOD1ZT6a6G3AVu`zjJR|^ zf?}&i<62~RWm{084DZExc0Ite=ASExPKlli6i@+TP>maq-8=);v2h>nwaRvJ011+K zDX^fxG)G$cAKII21z15oY}x3D<}bUdh?JWy+7f}|xML6PlzLpQ_ukAzn0V5Ge?haj zM_}RE@_rh&3}&B1c_|rI8wjX>$?2Pan9#{@45nkH!BxldP4FAb`^V>V`gP=%ievqn ze7g_oK8l5zlD%?DZoG0na=z$vqr|GydG|Y>ilU}oQJ|uY8!VW7=KX)4V@n{nsegh= zfQgeQ6jEhG9VOyF8~c}j^m+NW{=?^wp9emjj^=mS5&1oe$P%Yh?trssx0=%@#xh^vrgaHe&3KDIMLyEa7G`3ChoV zR>o0|fX3N#bND-Afo2q7Z5V5L(-E=g_-ZU$;SVu4n=w2n0&yjq4Iu#`=4&>7g6-x|jVW=cX+>kI@`sZ75u`ia?|4i^d`~VdXOg z`ZU+w7#hIfmExz@7~I(VdM43N7%Z`JcBF6xn}us*-H0*E7@v)+>%;F22!pi~;I-Q> z`XK{GArJbbh&*FGhNYkhPp&y5oPxn9j8c)|)C!-W!8HoHrOYs1O31|wDlQ8-FKTIb z1uL2oM_iC`nCAiv6uIk|vvLe1Rn3FvXyI^`t`ICOkPymGGX|>6&yD=5`5`qdDU)`7 zf(NHtKt1kz97L1vS7HE;i}lDY055>97Z)o~K=Kfz-4gL=)21&l6ycVq8lIcrUF}vD z6A_W$|DXS;KPwmdZR$FSWb$7eS@$aaW|7+NndKi7ZTPd!CRmAu3x_3DX#*i^{P zD&PfbLNROFf_iwZ?HHDg3XWawz;j?76Opr>#ee?Pi%!pbB8)#1n#U8cOC~{-aYd6Y zenIAp*^~og%cJZ1`T@lNowAUh<#jfbH-9JNo(50AZ^W%HZlq6vIVm>!_2MCNHkTad zn`%xCqEB<9=$;D& zsCxwDBHSFVwkF;&P-6h#2Q>};IBi9Zr3l#r>9uAT>BUmn&{7qEv4cD;{>b)#!I8@m zFAO&lSR2*hGJYAuy^gAfE!9p~H`UzTbPBp0Yp}=-SvTQ2x7BS}Ga=JdI~84q?h5bu z-hyw3jW}VHLEn(mvN~X;w_0_@Jmv@-N8aQvU^yzS+_Ax5u%`3TsN=K^^kp&F%9u=( zh{*2ak>6LOVjkt{g7Ml6s4O6=Hei`?QzU&R^Q=UvkhN3V2r=2D`{XeOQW?b*jTDjf zMVnwz{U7WICEp-$3L3x$3sd3lbVNc~d3urbvZw*YA^3+H)4}GQk5Y69?_jh*C6LwT zFd(kDQS&qcL7$WJp}HEFD&W%*lx}D&REZ;Rbd~2i|2U)WaO6FpSQ2|rvISrSzcQ10 zz*DH&up*BP3K?X?<4|~G(|`b2oA4@UZVYha8elqrGw$3I4-Uk&$*A@Q`Q4^g^aw#%t=$cc4e1S zDn%N{`$ryoUS9iy&&OPEcvXA8qm8bXyFjKv_M7VmaYB4^a~)>zc;LFkYY&f+rDoDs zZjNLlTy*FfhP71v1`a4@@w@@Ggf2X6*_mWdvdzc*j$`i&Utm}G&ryg%eC*ln9of1LD)q)tr0M-^$9l_17WG+{1D4@0&=!YJPGKz*XWtkePbOFqzwX^vwlp64&D>luHHbmm;3otzf- zB)Nevxn{i2uSjQ%yADxDV3Vu+uQqoQp$SlzVDMtDaMc9(;$`G8c#lu3oVj#<6bN}r z0gdICK7knO=>U z0w?ZzLi^(9UtqeDdaPKgKsbG=$1`e+*wr*;FIQwGUFWas%=w|hq1h;tiJ8gO`WawW z*U&5@N2Oq=n8fiaBxh=`($CM%$JM=u#C1Gz;jhQv{x$jD?0+t#u*VmsgY`PwQ>l1Q)bB^LWHr<^ckb)YMcTC^suQKKm7#2qg@8>W*WL3_+WKCd{@n5$!)W43{Bv92b}u|lt2^%>6Le2%ph zW6+%Ybg9cmAH)2)eXaT2EutJRySlK}!zeS=QNVYs1He<)nrhk3L+0CRnXdC*k2&wv zFRSa3&w$@k-fFcU>Z4;0%L-6hVmovXeB^u|slaRITfq^Lg9m?e9%u~U_ux-mmXb#r zt!g6;+O4mn(LF<9pBMcas}<^ix<=|u)qmAO__8P2Pl;Jk(rIR{+*#>BMm((l#g0%(XIN4g&Q>8uL(0i3&I|e(B4UhNdfG*wT*@ zFA^IJ`ND#l1wY0{^RSrJw3oq{_$S9HFkx}{kOn47s2wng6%u|(QY%SHu0&=kpQVg9 z%lGH=Idx-+ce&BQv35S+47T76oe%;RPFb>%Z9D>hiIItMDT9U1eAMyFmbAsPK;96u z`1&*Ax-U%y7_wwlvLoM~&sgArR6~4v67}ZSr?@S+akIrYXaRDb&k094~&d;75v5M z)pdlj;Km)T35}S?XX3Wws_P8&CpkFq%k{9HIR;jZrRIA)a3$h0lVSOa9L;&b^=@_E zRJ2cEq3MS**k{VQGT798xaN4CmU%r{!bWq=3*h5dr0qUO>wuq3HAKt{!oKdZtEH_% zH=gHeJpc=GJc+d~`BmsV>mn2qG6U(7bD|dBlOD!PW=exz21o)>Vt)0y z8}$eXMS3|#v#jaDSraHE&WKIIE$0#Pe7J7X2`y8XC?S99+c(&1eOC{%By|0|(~c_|&vFd{ zZ%|GaO_-+h_}x$gfENHGOG#B58nV`)5_KLUho_cNg#$Kyu?{2_)wIco_29(LeduK=pzoSNn+!?M9WHrwPy;XJ`+ z1~%ZOo6b;oKqs49lwBh59nZ;c#Um%gbcBlFQ=m=72?2(+d%D(+roReQfeAp7*I#kz zL=}8BR>Bza_1Pxz+0_Mj5Wod^kh;8ZnUL+r0xh4C2i-z8sklFdp-QaT5nFG2`%{5G z7QBS8)PP135V)yICUsE|yFFY>ZOd~k$BoIA@>vzU7KIsid#zT=_{j|Pf1Iez(7V#!&?-p|eVTR9Di9(I~Wv+}vDqA!1(eu^n;)>6n)741O8SS0%4;5dP9AyeImux1T%Y=6FIRcZW5>_;hW|ufUG&2bE$Cp5U8qNL`V~30 zHYvb8-hb?^Pe`OYXjq7TGuZ`V%$cD}s!EL)+<|%_{7fX}UV5Ww zvaDCCf9>K8AJV31Y0O4?YrV`oki(aax0}1>{Nv$;#GLq_H>0?=&UH;TJDf8pze+g) z41itFJbxFy4dsLXq24&}gTF?MI8VSoVu|5e+T?VfYK>{p`_wc8g`5by&xZ?Let+Pb z03P2?KjEwECYp2LquVjD2kY(BbOmo_^35P^iOF&CA-vI>%utQ7*TlFz_@8M zF)@%Ob$Z6CrRP~vqfeV8#|pJTw`r!q)F1Pac$m+8gC$iM@d7s-i&EhDW&49+qxgUu zK+ajgUGvbjBLfJ^HM$Go&(iRj8zc3`m~5bxjL9yS3gdzhLBhge5s)c~_*%$!0J&sQ zfes{m+8Mh}4npP$VWI^=9mY%UsJK&28pdEp#vzNbTVg|59WnAe09$N0$V@lyr(Lj7 zjH1GyQUjibPw>qhyV{fn@JkjHc_L*oj<_uA`y9d|LkZJ{m#%8_SgS^g^4L~nJ4mbR zi+Ars7X`FJj%0`vsidB20Y(W65-QTAbObhojwXJ6#{!2>8n;T7(E-|KUu&gI2|IK~%jaQ>6y!;4@1 z#it|9t5+e=M4)($Kd`WN&$ zt!J37fsvoF#sVU|(d(1e1XbpflMCs>bH<_Hg7YSX+Z12^zJN&$VT`XtbpRM0npw9g zVmDxVYnZ@bxWU|b8F3b{N~QaXrS1uwFsVP_woAYNL0s83-d0PM^< z!G_PGmKCYBfI*|<_K=jJ)ZQZStvUFY^=0B|N@_%-)^f*u*H6+wEJN(_+=n?*Qwidh z3AqaYzFyt<3wsW^$a^B+Xv6&C9A__-I`_0#vDM}A{wMvc=pk&AYlemkPh4h!=i(-X9*ybG^_oN>yBNl=u9??z-I)HvZY7kCUr&qrWXw2?cnv9PXG zY|1b}Mq(soEXOibBEI5Sjr@jsjb{+pxcio;iR&w6=v3f{KoRCx@*Oz?dK(Tts#)&$1|XAZCe;7uTM*%H*Txe6cKG)YM-h3r5D@QF>F(_8Cv zqdK4Vq>d7J>h7ttf~JVEt)eZve8p_Oc5H~0`yL}x!8A3)b@#VkHBtJ!DFL|8MZvcG zLwp>dc-_G@Sg&qWubPWm z?D=6}3RUWy*cmnq&(?7e{1EM8XNx98B=aBgOw#tn<$UuXc_WOF$RVs=Yf{lhuyRA4 zbglRr`^F=WJ(tdC$ItgZ^4N2k|4@gT1*k?Gy0f`(&bSIWsw9SJlNIWL&1Git*jt~F zv(4kuRq8j&T=t$1>xL%I$8k;{()kE^iT^Oq0ovD*%o#8($C{HL@>8j@Ne^uFz_5? zbvuHM-(x;_Egt8Mq1F4#v8G0a@39{xjl?aF_0(_rU~X9CI3$hrm-`>LX8g*$qQ|Vf zPj%Sw%=-(pV3Z1R2T%9~UO6fc+1FjoILl3uNSn)NNo&yS;At@M75c?B70ZvXANi3L zd0b|dBELs|*Fo~+ykuNNPYM3PH2~jh<+db#6MO_u(1c&ze>KH_sUaKYq#|?Ihs1Eh zz-OdeX(CY8CX0CCrP>wi!ukQ$ivk-BcfqDB0q~MMEK?>)1iF-El6BqRmQav%g=N8p z0~3scI@@BFr}G5OjwH}PE`fCs0Q%Q_vato)o^ZD702H`?6u_oNdeE24%RJ5c%P|Ui zN*nT8ll}p=$Pc8=V_3w~ZfUwhoe=vlev)sr1L%)H+t;`1A2n?XCHk<1<^Eo^4{i>{ zW=F`AXjbK*@h);1>rPeIp^LzPX+}}+dRI(?UEPo>1dQC)u67Q*ux@Xz>J3;B=!nbzCq`-1KZL6mW=oAKLqy=TJMTq ze#J>THUdEX%@^^lvUGYn$?2r>aF z<@fnf#5>L9@Hl?75ph=6&)h1N&-Jk7w}JO;@Kqjv>l1QgCg-z-o{j<(Y_@15?&dg@ zJ@iqH;Mfa!>LRjKP%J9qn!#77KCjax1V_o!D^m0T1Qq9TDeKQGt@1u|O4bZMCP+j6 z2q|J*ibwMcZ~JvP_r};#H%x~vQ@!Q$*B#l_1a;n6r-sWRIJPVPe$Om?;K0Bo@cB!7n_9Y40GWpu-r^tgfCT&8&om%gQhP3jb z!+RMn=8HnuWfSH#EK={4`6&-)gjz?{1C|=jWB5}HcAe5!pfMq6>NqAR)0+1L&jcXZ zz&vr~tmlkZxvP8>QlT~yQgje5o+qQBjCig>&RC5LIg4rLu3zH?-g{EVA~1IgB@0Gb zu4y%Bk0(aFES`h!x}%cxLVleR5Av)04A88eLZqXy!Vg(3-n)*DIhDT*JWn19juoek zF(1ou*oF7X$=L%%al_&N@)XYX?|M>jf@&L|m#t7q8tVGyB;_)hOu$r{U-eat5JRM-uMlK;x?o#cH8E4eRuXdExp%!rVgg_iRj}zG3+O4HxymUCSlG#Rm6$>%D4!41 zYp{SwNV4Q-alFH#0YJ__bADdyEub>zU(o6b9?1G|A0Zq?*CoGAasKd2e==$SckpxP zoBa^ANWO*iJPFxszs!i~lkPX@lV<*P&4ZZhCF>;1H54Djm2*s?+s69e^tB!{ zwIT6!qnUK~0NE&Z27Wo#nHg*U%_N-o2w0_Xz7qO6X45uJf%)s}S12!wnVfIV^5)kU zX0&`pxd6Tu{ue|cai7nw8|P2MrZ?9QGR|SG@XIyH;GfG|3pURK_%AU-8Vy=9a`0l^ zu{89_an|^p@_1=YBh{3dnqh478kXHZ)9 zDDaqTi`$WTi?jkfWRIAegU$!S143)&*D_vIPD=&ZC@iJ|{)wro-c+1782LVxZZTmA z*#i1_R&!XzKUXOMy7*iV-iCcRHG@sMbJaEJ5h)LrhB^40iV-*1qEk<+(4hWGxGPBm zr#k<9s^NCyH9{6k&_}z8a1c08nWK1*$&0-jU>a+uJp>YM6a@;Og#$n(ZB9E`AbB=S z-cXkC2at3Otp!OYDS$fn^w<0eE{ib=u1j>zr#f2Dy}@mMoOX^7m1RJs=ny5 zcl-B3(`oQVfZz7U&d63EQhv6ifsL#eIt)gAe59F2)Zx zy?yzqVSntcPxSb6V>@feYOs?=%%PYm3&uimQ*lgz7WzQ7Wyvh`k{i7^r8L^Hgf^UQ z>Y56&W^{=}h)v3zvcXN=Mk(8Q>VFXjDy^P{BkW&WywhK+M?2P3t%na_Dpy1jpoFA zlp*R)=nFyu^BDyJBEW z4_H!)j}O{f^qwgM6D#qj$v+i2lDi`gei?osKm>yoJ3{bk>NoYzU>b8XPC1#9Oq*n} z#@0Pi2R7VgLha`+ChpHA5J!>+kP3iQ0lI5t0|2z-851cta_-*_(kV295H^ExE7nQS zD~&P&_dvtthz%@E#z2=hInrms=0gnijhdA-O3VfpU}6)tae{po2FRalttM}R!pI`& zR2uh7kq7Hj;Z!q&-}m_)z4O`@BM=)kso-?@ABrW$?<094V8;@OBZu5mLG8YsLy<2o z$vmcy=NV+~CA6_n*NWtY#nkbqk(_PDOeGT{4_#kEyf__DH|W{cpEm-Xh04lT>Piyg zh5_UQ8?sMUF40&QF2_;lTfyg*3l7A(z*tQ9k*~60zJZ^)H8Xkh>o-^%$xa;NiASeT zaf~st?tS_fpN^0`?#0AlF#L@01>M;PA-E^MnKu$=i#tO8&$&2XWc@67=*vjAz>P@Q zKa(-?K&qBogi3e zW*t&DC){U}@#H0I55J?J7LPBkiwM~@{oToXZOZP?QY}aM9=^F2L(;j^ z4^nOuriZW5*g~8#P9|S?NRk*+H-|lTdOYIhSsb8%214#-k91XNps}V(RR-U9*GXXn zxqH^lCxtnV%~-GF;N(XsblfLIxOqqUogPUJV-uTT;}z_J>rGnlyyrYnDWTI0h5|99 zp&=8;QO*-wW8g3T3=%TZz&D%%0eun@oD+hKFik*+5L&zNWlj8?i}83gOs8u!E^2A% z^gNNfbEd2iuu_2w9XMeK3!9KbXWcoiZVPT`W5vX7f)`Bu2{iD}16Z=D!{Et6!a!dD zhFY4iR9zHg0fyn|5CA|2Y2Y5L^S#0tfF;MY2CdM=!T<|J1I5v9rAHD;#B2K8C`JhU zjU7baKryW%9N19swv$HqtFa-w`7#b9+cRE{x3z z=@4EKvYaPS!1=ts?p)?hO2Q_;7OKZw-bC`T5*0|*S90B#GhwNu=fo1f6f%;_hFiCF zl*uOq9KY~NC2$~Tq<;jQ3h1;5QX48PRPpP&W+LbFHSpvHmx#@j&qxpG3pHLN4?te2 zg_j673)rN$FsGn$=bA7N4ODZ%^jdO(`er3xwdoV_KYL^(qswl!SZc6}1woa;^A!YW zR0>MdYMRkv10U$#-h9=G6^QZGa?`J1cXC{6Dj%zT9sA#?~4|Pmq5T`!jY(KZbOmK1O_Voh*a8A95_^DQoIU zgYJQ?Fji78s-FL{-t-ear;7(V;j58DKh*%7Jn6; z8HDK4l*)^T1g+drO+|?0Ze{{KujdKO7X5@B561Axb)Pird|)yo>IuO9K8fL1s?iRT z$xYDTGhR|&_mgS;OwPO;x#YlNSP?W8Mmrt9;Q`ExVM3ly34?UlCFWzYw@wcedyE5~ zBauMz<&6d*`($n{K}5+k?qMsMvcYNLbe7=qZrbTW{ zOJ4k_JB+fPbtRa(@x~`|Y^%8$0bMTPnmx~FVFez7XHMc=TIahVrgd{8X!c#d9{-V_ zkhA$|P)0Sz4bmrjLQY5jj5$>fAjJ7Iw!mbrQdR(|aunm)j<#VrF zIMLU)NrS8Cf;Ey23Ou6|(z*uZKg?~%OM>`RH-QENrIGhnwQ0$Y5UBwxlh^kG=@qCQiL>3d#BVe0XQ(`zEHV|gP1^^z<) z*5qlZhQHzoZ=g!SD1VRqqFQ`YKxu5Q-TE5Pf%6j^0_+~3XP2@2P~d39Vy{PPy{?Y` zAh_Ee$|iW9Xpa4aKTAA^`nv=t>a~_#T`vezd6;hHG)7Bxct=uy}l*D5iPnC7y$@WWSLtGEVJ#5ai+ zu_O~iFDN1J!Cw&k2fhI!AE>EI1`aW++19^8PBoCO%?{tHqh3t;>s{1jwx z_XeH;C$bliasj><{z3Fs=Q{?vpe}>U<37I2Kiz-(L1FjGzIhT)9Am*3!YrO6;Iluk zDDsO*tDmjl zv-EWs_HR=1`ijy*+uZ0Euga zUC@gq?QXdvx(&efERvS&#tk}{1}&N%8@p;YXhl&b^uDTeisC5`hK|um1u`|nmtTMI zM_-oj`L5Ri4)k9{;&ZS-O54MR4wWhSx z@$Ey;=QHWT>3IxLfd^_Nok%vp_0+806O64JQN1cLIawT(Q0c%BM+bCw16kAdOaI|N zDy9ZSPs;b?JAZbaDDE-d^VX9e{D^$|1J4$0Pn!^Ku{fYJ%nGQA6e9WXQ$#l|ZYn_m z=86!G;a-%(iH~6(v^Kt8d9q<5b{0MrbeG&00F!RU zwGpkX?FItb{60-8!uUM!^&>tkNrG&GaXyf_cy%D*i*mcpV?sEORsX7O>JF#XMlj=3 zgKre3Hpy9sz_Os@`l@>5HwNllp!$ax^WDI}Bzagk>9qi^S!))r(@+onWKqD6lSaRs zNA^Y6w9lfra6Tf&jr@8^lKEIze#BnK9>H1+vlrE4%xC4zWctQ{1di6akwbK0S&VTT zDA{Q0lQ@Q54!SkQ`qTr3o-FU>L2{Y5wMG* zJ3()L8-R7+WIZh)+9f8WRb@+gr=8m}cKvhX*TNbN%zXD9bPJw&ozyc1Z0>kfXRcq< zNqH6{o=+Vdh}V81i|ePK_}5`_Ziu=N%>g?L4OSuMlgKq|5S{dH0Y6VTJjiOp%N4)KJvc#-P}Wb}f-Pndk}r+@3$AuilX>EKvB4ffM8{?V`lzOROEmA(w~lE#Daox;J5pR3i2Pmj76h=bZn)$ zR(vc^^)W~M#7{j1_yD$q;7-?887w97r;P;SMKa+vMVODX73=Gp7Q$br#gkyxN%|zl zr>h4y4}3gF8b2fY&B3OIDs_K^QHfQg4A^OA@>l-SDKO0Gp4Q)cc=EZA$h)6AzUKVm z2c9j?lYWl4sw(p2b04h^9M@+*@DJhv=|y`{j!B+<5d*mBq3T7X`6*$fxZZ4i%~{wi zTY3j?mm23FV@Cgy28=Dwl1G2eukqd?R7))Z$t>;{dpI^$x*lNO0Hr$k?2e@rz+w2Y zsa6Q(i8w-+$8>|)GS1V%c)8Ea9YeV?7m(jn;+8%`xe!D$;1X{w(vR(V}_8g!8!`c}&1GqK(rs)C$v zD2GBi!Bg3Ss}wV6+a52qH({OC*IYkqH$N@6^b<`Mu!cp2gdD(fb@^I*mr^8hhTq?n zKwMjc9#RDAeUg{5DFD0xygMuW8FW=IywA4qV6!HJYsvkLH*V4=n3m(L9w)#k3{Fhv zwqh`C%mfV-xG_5bfq*|2;bX0uSk|DLsDg(gM#5{s68z^5VJi*_Uy(?| zMwmDlP9d;8P!#m~J6(!ypF=)(2Xn+hm~Fy5RGh`lUK z%hv=YX*OR2{{5sT*O0*VG7WT3NLt>517NuOOiU;c56M`eZ_J15=&5)9obc(%aXtCL zj|3~9{=j?J`_$)Q{}b?+cRzvbj(4fW(rDxSU;94@&l-A-9efM1Bo?sHs+~J)4 zpi7t+^@V|MEagZWEeR>6pmC;eE6z0_+GJN75^R85<5+5nK&?Eczwh-q!vOJMsZ;79 z2D(Jc;ddB6*UO!T%TxJ{I4C?FbFJ8w`OLWKn|KpWR$96OY-cOCOWNP>XWP*ogX{S>dRkVO*!myHu>Jy*hR zOnr}RRObrkOe!(@Hpg&+Y=gaH4@)%u>(!HZNU>;Z8`pRoXwfqW-Ymp!zj`q01=-6E zk1)9Vczk7fJ;^{}O!6T3+e(hsXy*;5tpIpSuR&u4HpqptQnK~8=AN$rSedx<>phdt zEoH;f4-P{`_D4^Uz`H2pD(Z_mu1f5*7l+_w$sts8+Sv zy%jlLz`5NnWvW;s4IaLuu>26PHPrmG!Fy0+7BrgJFv*BuWM;W}hhQM-vvK07B7gX$ zKauZwn5hR$+!N2)bT0jYezFKU=$Xq1YlLp3z7a`xQt=bth*z48 zn(-tzpWIQw3-g1bKi6~uJV^{WDaUkg$Y!K&4jpvsx7!ZhKy*+{O=GA++_W{ayUCls zQ$tVh`sEMHVp~4*OYf!i2s6o9Kpr%Z9{T;vFFh+yJ@*m$^e;V|3`xc`*&Rn%Ho6fL zO@{&sUiLhn8}3b;V*Yt|a(fIcvcf$Mc{n*TlmyfhQxk7;lahI;d_DdnKOyIHo?3)| zthhdYgEyjz)}1f)ylqAH)^f;K`>{)PH9WZ)mlgIcSQu9RH2*^bH#m`EEOKp$0J!Dy^qrO&T* z?$oPL=`zek{AP2m7##Sn_1q59oMx40SHB0}pp&MvLC&bPp+RO_;vpix$2`*XU1UKf z`W(i?%(?D@o&y0d71-xLb2^^|CG#BRM z^NG*dwwK;>W1Fv->@Mg}gmmaPafdX+mv>Sz0oAd)1TZ!5Tb-JxKm{Io_q&7ioY>RC z$LkBf{+TRXBz<1>Bwzcpe@;BcsnwxTF*AAQ*$)mjEnmx`=hIiVikt*mQzH4-xLDnM zk4;PCFdpz?Edo}UQT(KFP>wYVlk`YgV3I(yCGtIQd|hL`@u)k@<(YuQ%{G_f+fRa# zoEO?o=cFoM{QL{0Xz7L^J_Q>8p|MESm1j|=_gG<__0jhU$aU_m<|*!yZl9XWFqf=?j!P< zUwT$lPogUFuIGNWxUc5IBzFow;c{qA*Ux-wtvRN~q}WgO_~loiTL>T0yMe67+phWASTZ^c`VMW4P4p59g`ji2#e$*(o`l%5@e))=gOOf@~` z;ay!=Wr{KIIfm*y_CgrV{4x2CXT>&E*2+U&>oy*-@3@WD#KW`>9zNn4)5f2Yg7Ll- ztm|_|-`mKdV6;1LKvvn;hne@fULBXXTl>+9&oc_G`B(Q}ZETFe!(*|eVTBQ7GU;7b zh{At3k#*5yz}40N2y@w1>yB~|Gs-P|Sc!l=Pt2dS=;neHWE znLup|hGpz-O|<7&Ou-e&!mG6n|Hu6f+IImKynoThe5~}V&O?4?{(GZb`RGYyFJI2V zW}B0cl`(i96Y?iN^8)bejm)uw{I#$A3(yAxj}u&6%6tCdFUP(7D%YSqiD7*VV^rv5 z*Zknvf74e>t}?SQ!)2!Qh z-q#p+G)bx=U;NyQ`3&SxQ8~lk^gYHT{pz=M%SWNjT^Zpimq zc&s_F=Kfs`Lvjv2%ym}^f2l@7MO~`fDnG483!X|2X*%%gfn}KL-8#SOZ>sBS9Y2UU z)`IwX*3nKMwFe4q#Qm-V#{Q{}-|MAs22vdXqbIp|eT&bRWaY+kk5fDBn*D0`?X83V zsjp#8ByUrHR%yj4@NojnS2bW)oPXu88UYycAY8Y0%CAD8v8quyPf|wZdw_l%Bw$r=iJ+eqUjOAngFjC)Z#xgXkB~BrDbFvY%8SpYaXZ#xoF<0C z&75uURc3{z0488z`KC9%Zj*(0VJhI4lhh)9lAvJ@(udKi%Cl7hYgG?l|Gm$D8fZG^ z0ntSOPk%*4UiI*|%Gba4k_h+@$$~ssKB1yN^xp4xyh6D=%s)*~l@GS=7M&!pI ze?z?gyZ_|FhkZ}?yDUBjea~faxdgGH-uMe!M@C zJ*Vr@AAUk^)-UEl8O;RduCM%?6<^Nr$b|WSP?01E=tZ=tqW`?Pgr5+jOW?q*srZKb z$J>lIj#3~AvG`40JD|PeoNdlE7T?ECbpnkSap=CK{^PvAtLLzmo9a}WTXexSLH*X( zWx7ZMuexrlL4Y3dQP!b3HI_2{@iTt}HFEOB_ja^zvkUhzvo6NiU(PZeXwgAI;i+Di z>NJ+2$~%7(rZ%73Uherz^+@-YR@?4)y0=bUb60efBA z-Iz8D`q$KvJ83!rz)I=qd7}foS6eYJ5_-h@b=+O%?#9<^lfTCRoW`Sv+(tL3J zJ%OJ5t|orgUpY|**~T!w<5f>X>dD3S0)2e5*F>K~d{c!WSYXk)6r!T?-EVwtX__`X zQ1Zj2>W;Y<-f%E~#uMLcT9daF&70sCQYgxfNteI=Eb{QTd~3-4jjz9y-~8d~+>noYYKOUBu3>9G^~p0(}Uo!H)~xmJ9sjz=yS{fDyVkU1sNo6RpTc zY%KoF4C1;tkT>e5Q(zS5(I0+d{oM;q?e1P?)rObpLk&b*W(F67M7hqgY$Sai9W+0PHrhP=4Ln4FqwP3|irZbx+=0=ncKT(Q`{iDla001BWNkl-qAD@GS3Lu({@u zd-Y}=;KEHu`<>|uz^r7y@8gqp&f&uB5Gb1iU$1_}persCDk+C~nH(Fh+@<#C)o^*g z79;+*lvO;!=QY?cJG2rQQ|BK8SpSY#)m~GWp}a{HPsw*XPLsX&psTWeeeA`c#9*#P zoJzI1v}A>IMnJNBMOoUoT$a|@fnLl3K7D@WPdEG?b}aM?P*TFx9Dp8~qBMNq6; z^<{lL7F_=RLLN;TC7$coWMeQCkt|pL#s@7D{szh_j_)S#qF$5$Mp~?03-@|Ttguk{ zaxtl)x{HKVInuz4~~;y zGdW$|OWw`o>WaVadp=)>tzCCSY%NCNX(D>{Py(DY<^HcK{`X5os*m|_f1WlwpFOX1 ztm(y#Q(H6~s|w~Ieqc`F;#!st&c}&A0@d<^jNkrM+7NlM@Yq|QSaO!6h6OxK;Jk`{ zS&|T_8f9hYl+gP@i-)R6{GDmW#DYQaxk}3}(rreM*MBemd_UbwyrQ60;m_`SK}6%X z?FY_H9mn7oL{j;26}tJ2^v}C7)%RL`Bh2zRzG!V+GsCgf`8}>uK8$f%r~IiE%)4B} z89e8FhcZmGyawFWcB*Jw0V7qvvo<$$BHSzB#r4Zn<4fRVm8IGe^{$$^Bxx>QJRNxc zlw33DAdf{a$m3LJR6e}#nEQyT@9ukS->U2BM+|n@pfR6iPt5U+!?efFcQFR?Ir1O0 zukOFvCWh*%@DAkXqjy#&BFx-ucZH`gmz}DP%Q3}i1~Bg8^d=waPVbo>>I~(cfve7w z0$zLB_5oMlPgh?b<(f~mnV)_V9-y#3UY6JANY2~vH1Y1LGO4`hGa2sR#dq-8te;sQ z82Dr2l6gKpkGaO5E8XB1=@yx*4Bq&fn4I(k#6_;Z_QykP6fjiDCWICT=GPU!49kU^ zWG=quLPHMg7p`~dIqFF3Gfm}v6Bqwdq$aW?%h?S3Y01bsI8{4UX~9re5H1+OKF29= zWsK?d%|gcd&T*NC)sSOrm07j2E!d3uZ9S=c;dejPXtEH;%vXKOw>G%|l|X90aM;(s z_7bdL;>O%|uvr1uF}9urrcJJ{?&ZA7Dl^CrL06RkH~JYo)h4@Kmdh~~`F$~w zd-v~)8GMDi#lIZ(SS8YJT$XOS0e|n`!tr}0*^6AZnE;<9Pqchlbe8vkYx04-k97{#A(VqF zub1)<(3o<4<#Vb%{5feO%y+rgo=u){L(he6x~pmOdFOB9M+d@lQ@TGHoNMH{o^^hD zJ=yUh^&xHT>hH1{zdKp=HFo-&F7}OjXxV*%Yb~CW^Em(aK929F?(Wtb?sU-Sag#fZ zYn$`~_SD=qts^4G&j9a>pe9l&hASlU`-#y>_%Rr^^C>gJn!Ik(H=Em;q9cb)6 zZvz`S8~_gSa1YQM=Z?D@x@BJ9=#Z9lYe3cp{W2Ib163Xb2Y+7qW}C1cx4t7ii6CE< z#ui8inP#A5nHrtu=bTKsJp05mtwrBzsENLe|HKQQ2*KP&swxlu{Et)U<8Bt`qy(Ao zjh{`PdFHveHx>gUfp6w2$!vmy>3ujGQi5U&0&(}1ym}IeV{h{*W~a|N^t5#hdX0vp z6tgNS-}A=T!s41d08K!`QBhNoHRgrL2SqON`${@R5tGHE!Bjn(Vb+~SyuIq-Z)JTg z9fWL}4cGCr!ZPyR8z+ocILRM;#>|edK&M#5Ej1(*h%{{RnLO++Zg6_xvMZ{B=d#At zz5DPp%sq4t71;V(w8{DAI`u=7wSI`^_YB`9v&0Y=0UP59fDHz-y^4LR-&z-c22GIHYpq(afIX+W zv0<4dF5UK(=lRrka|PSQU#7f8H;N`;Jd@;nFwvRnJCUw3oL4vKE`&bO+irRhN0=st zyiw{v#Q8?AU<#JqlS_lFnuQcD>H_oen8;ytHS#4FS@}c6||P@tm)9ZM?YG+tcqG4Ev1}rn~Or z&j43~z>Wk64~wud>dCKDumEZtvkUIsJ>&`J&NBGtDL}izY7llMcBe!joaXj=wmMXG z6inRJ2B^DodM0z=PQ_mZk_5!Hjwj5LC;I77*EPz(_xYsjHXT>!%d7L)_ z5EpOrfsyZFe)R#Asq(O+kzDuO&!C>Z^{b!yc(K36x;J0{|Hwz$sZ?E%NdSNS>!~U# z&ph+N9BX|Z^DWJ;yYUCV)7)JG-O=pHxn7rkE^Ruwn5bh?)xt2vg9|27;-n`g1{hhm zs)4a@`mWcpxI3psehZKF+Qlg5E zC%|6y6P`O$BFERGTk$7k`dV~H(=9kAW6n(E>gtN-Acde4ycA4Q&=cYi@D(Oo`ttXv z58A9!dK_zIqj{`#|DlITPc6f&XE!(3a&!HFRDC?gS$P^9&xsgc>4xl2MZ;x$e#Myc zYh56JR0~Wu1=kv^|8~*Bfqv9u;{eb#Q1z$8w@f}byY5y zdYbFOiC6aLkv8glDYu@ER$U@rtk2Zj)cDnT`x0f7hFk?y5d2?ONZ&Z-M4OoShqgrm6}sA@Gz;CZ>0dEx*TStnk~r|8|E8 z%Bi6Y`lU$O?IhHl`1-!Ci8|{6+#RaRG$-2%s6DXvyE*%{;@t-HSpGVGvR~zG2e^0B zMVGD8>b!LT-jHv8;zbXS*@0WG1!@_uNe9y@4?gP!n90X}?V}=cobo1LDxxAcU;C5b zcMCuu6aI|i60h^UZXz~3^Xvyf*jcgFS7_W+fQSsbo90169p~J3^`e5$OgDZ=Y;w_d zn5QHI0WnKZc!89Qa^}lT3ywpdahw8|6UoZ&5L07OHZ&&4Qhi@a6^UkRJ#b$=#7Q6Y zMp#c8>zwo?zx&(2CZfkzppUUBt6@+SJyrSQ7ialphb^PIT0}z@W8WqjRs)>cuYO*X zv6A|f1CMtmwa5tES-#vGjpYup6w|u@(8DO|#V{~1pzHO)gRi&HorIGaUJNl@-N#3g4TCdJNe3!nf%bd?@j_Gp6+>+CJ zgWNH3>buZqTXU|N?WbM>*SW1nn|R0u7z*9F+lNJb3?$~sAze$C5=5Ps4j>XnUPas- z0J#ne$h+;Z;u-@oQIR+~y)?sgC9^|zr>g7j9dU9f45&J9&sQHu+S=%`0}$%MXxt1~ zuCobX2H-WE+gnDs;#5^v@L}uE2BrMT;=wOs>X|+_9FQH3GAs06oWybSbkcY@)e3$+{v$sj zH#cWFI}F;<%sXdhNVn!oW&m|uH?>F~pgI?yO~xKMDrUV8e}>qhe4stIVKeMM{?MCv z9c-sS9YyFE%_qa+N@Uze1r+^`kEeX&WH`G4ly}0b0A5i**YhzV@zh#^;wd+jg7AT_(W% zO?^yyQhX0G(^!dhD!n-xe`38XL`KX)Y3j;zlUO z!j|a_ge&Vm1{Be1sMnw;j={X-p`L1Q)>YS*vO`EwH^^XOfKfhR!b=U!9p=-F69sx0 zTZL;SAIm0NRpnK${x*5l!`~_o`&X)wuE*`VuaY?7IOhMQbsgiDx-za^UYA4#o1Wlr z&|_?FfKBe*e^s39LMzpjK)46==FEZNp{%?$|NcV{$J+PrKg>p60nO=_^DHq!H#|TQ z==}acP){e}dLsRZi>|Ve3FAokc)l7gjq*fJ29A~=*g1JU*6;aRMC9h?yjU>u2gI)6 zxZvRt0}}HiPCQRI9m1t@xsG6-&%#(kA4Vp0y*GRo4~7dc({&iNC18_C#%_{LU+9~% z8vk&kFKQhtybti4g>NAlOxOT*#R>dv%as{43(B_@ac67 zV0hrUB(20TY5s^cCyE`|v*FqAqJHzUu(zVF;673F+z2&jG%t&A>c!*AfG*ao_1liT z*^0Fl=RG5x;dAGu^VxMWWTlpupbFsFxAc{K4l!J6V!zjW7Mz<-k8^Tfoy+|dZ;<4? z)JJ~11!b5vZjpE10B0W1K3N8Jzp1*M^iyRwGr1QDAA)zM%(<)X#>V@-Npf&aK(Ed> zU6r3v3F3|X3UH|>sJF{8IoYK~wihWpzwhE)KI!Rm`mR#lQ9&M$+uY!zhER?QbkmN^ zrG|VGqc^6z(@Y~C)4{u3v%a{%WW8ZFkZ4NkdOo23O8?4#-=*?3MEuWPIX|9|d~JyW zBxXze=@OvF`s^n{u`VP4RgsVW|D?Tnv~I~&ANH&7-uLe7?$?7RH1;4N#7c~?tq^rP zvIHgpmYo2`YJqwXn4TnOLc$hmfeaV~>TcO6F(P z9OD>h3Fwv>G{4tUOFg{%oys4l_TIle)VWu1q}Sg$b*lDMd#tMOyYG6ZvD-|p9YBBb zLcr0juae!-dysE!f@)tN+Z7sFCJe*)BDyj73brOiS<`46gL2dRXw&r-a6n`b?1}iW z7}RV`O0bz%3GtbiD7Q8QGQ!9D$;m)BycX;|4+d1Dfun;4m6Ga z^VQONwVW|QGBqa8@+D1n$(4C19a{LYOhEQ2l3#kqfi^UwT_~X`l4mpVmS#}k%b!zv z@`*17o(YENGFar{cwr#}w=>Q(NzBzh3)i&2=*pQh=Nx}d_QQx8+W50%mH_wW^}Nzt zmTSBhLfIAs9>>EoXV2l%Q%{ge(Zt8A(Hwyjt01tDy~Eb&g)l&S;m#{dnn#Jg`6Ui;bPDl0pv^KD=M(gE8}d z#AJ^GG9T3mfNUe){YVhCM0RiTOv^%E*{i3!aGG#3vYuAo0{$blF& z0lEGw{O&+=-XQTW=Vm_lLwc|Jp*kjXc>FQH(Kz2>IY{gDOsqKkUQeYz7Z>h1j5dt2`dY;mKt3@_%~aol)PA^I9A z>y62y-jS|!$>m{A_t-|Hzo#+ELiNr$^-8~4x4iGDo>g-G&aYe;oW|{ON$av#4`BXBED>7Wr%0F}XmDB2uUr}6!!+i66 z+ZgX4qC;h)^?kCgaKa(@7?03syoqz8C>k6!%irL)gkK#}Gk#-Vp)n;|U>bwdiRT@OUzudeQ?N6{}`bdBWG?4snOtAm8=pzY~($LvX{eCGpi)5O=QtMJt*E$h6J z$Pt>M8xV86!L~V}(n!UxDqqlCa>W57?Xp1v@Y)vbWJMe88=6!}09QM=j;^2THv3zN zx*UBQ>k{o64amR!@C6FFB2KffRP@3>o1Z9TEub3t98v_*o+KmJulKTD-dUj_x|nAw zf)=`yx)T@di;gZkkE3%};M`^BHDPQlIKefhVcG8qC;5tszmOP9(ciFsPxs8(b2yY8 z)-&t9>P8h)n(c(88FBs<2rQU<7#z&9EYTRaOJ7X-NwO5V`y>N8WumrSZFq07x{_!2q7jerr9Km zFKXUDbG`=e%}D!&+klv4K{n*{pm_)`hHH#&h3y($zVPqx42bWLHc=e7_b#xBPDwwB z51l1oxU#OX43tuW-BbttwZi6H2LS151LL2?3CGGL&PvSVe8|zM@XhvPJhgn2VUoX) zxTf^6O)>p`Q-Q~O5e>~#zhrU8^Z(|ySZ?C$8_>P*TQ7;G(9$V&M3Qs&=!(r8NO}4UuR!lmELx7r1;H;mAwIX!|bwgr~>20du z-pJh!Pnc-NCxVFqXM^RWNV=m@@WyTBVn9@&#?CJ8BoFEmA0B3GXJcgGqCA9s?CD3`OKwL1F9uUmmZZ^ZDvr#jo1b#42CC(n9?IWhdGP7qId*`$Pam*6o)4B zA$SG7^9;Cbg(;da%I%eqgc@t%T|D(2E7PD4c)@!g$2)s&&Vx?^&A;lxfaPPeDiVcu zE@DNdSvpSZgD*_GGtQ1WLEyxW0%H_wxH{1-fYo=0F}6@d;uT^9QE$U$?ceWnPl}NpED%=~?)TyrKs`$gs`vDoSpu5vYGW9J$Go_gx>30$ZgWy_iqDTw^KHQ9Ufm63Kyd^s)zN!eqt`$9F9YtjFs zbLa8o6OXNZS@)Y?jKAp{ZgaL}dRN7WVEgX8_pxF-H%=S1bM?>KG%>P zNsCotW4>6m*dU)dCn3DfR*i~Sta`rKr+Hc}M@7pbWeO|T=&XGJF#*6JN$A#4B zKfRaExeTAkDyz6*GT*41#nR~eltZ3t zmp|3MoAo2sY>o`-BC;P;PQfCx<@r1Sx6NhzDBh6T?7=9v-qys`06BteEyH~E0F6JXDt~mHerxmeA zw@+X*Y<9rxpt&C>MRkEUNdOJAf7g66!4A~|gC8F+c2GjA8xiNMHG-2@sd%15j$SV( ztPwpt=dr)NTlw*G3Z1uTH_0)B1K?Wx5|WWXj*k1!`+*T$%WYQB`BgC<;&i)EWp+>i z&BegQ!7&B|-)2PG7#|p166|Q946sp~-Z!;lBw5GwraNb=y-5FqS4{u)JoF zI$-{nWHyv07RpAg#9hKgGWhL>=?Bo1tmY<5bSW+{ioWK{Hx7#;cwP=dUmET7sxuUV z3?qV!qJwqV`iS+5x}-2oti#0+BdoQCqjTqRblLh{VNT@4j*~1#j5<7Xq~DiyyShTY z;G#KT`N)EY6i-eEq6u{TGP$Sk@GmLbQYxbx4r&YrytXU?3% z*`v!$`kiMe`tic?61|=h??czWTRcRXfUxdlI0?7X2pnB@1&+>LfunQhA<9INWz5r} zzUiiKxE1?l(U{VyucIjWe(3xP-_cssFR8k*?bv|sCd+s!B;w!nu-jAkC!u3q*fUsc z8}dJwk5pN_;v#xjR~?1XU-Q4nO{ag2?oE&SnB$l;uJJ}-#dxFxLq2A-HQ~oicVkmG zOfGM1u5Z*&(J!<8PVJmq*bbzOk$k6t?LNcjT*mSaE?#|KYx0{QmS1^ZrEh%p`IqUR zmscqG0zRLANHnVSLLR*z@na)iewMsm?#UkyRr2{W@#}n_@vJ=1+`3{@_|d#GP&i<7 zUK#6&wF?!m?5_(uXL|C&xJW{1+rC`gMmnK5rhcML+KunH2*5PP+AA*l_1@PX!Qu&s z1APIN6C_5+aPp)^#mLX`vH~Lux+-F;qI1SeUd0e0x0xX7+E+XGB{OeMoZ|k~j5Y<6U3xAA0zLFJ@epW;ngyGd;BK zW>*G{i+m$LE~;do$~4ez3IqI!H;6;9(r&sJpCvfn=I+v5XFmtWERohosB2z`U_Lk%DN9V5KW<2@Cmxf7E zd%nZL}V(t#fO8Xepga{`H({>r&!jJvsh;JL32zM3PD9#*v*0(r3}lJ`|D zGrJ-kJZ^;_V30oedW^h)%M(UF)jwN+aJU;i`wxA0h@b>f@D*cQ#!!v1m5ZowC?+}_ z{|n69yY7Nh6jG$K!l40VGPWwzQvnhZ;A-`S;W1uT&}!vnZK(NYT=R%^AiO?Bh38QQ9bgG&S*sM#k%eI=x;%MST zL+<0;bV8nZ7FviOnJX@G+hnZsHwtg1*B8NU{FqjE^f<|JEF<_9D;E=R6uQO^i)FIl zAVt~Hxht@FkzCbR3Xet*Zl&<{f07*naRQ&qebHdhFJgYbw_|G(n>@?39q>`6# zGz)GmFj>!{kJkPM7e^DS|nsR?0coKMrVC8jB8)F)Tr+&pHpWp z9OzK?(AYEHr<|8!ki}&n9d&lFoYM&4Bv-TCE>2%-A@&a4t%?uMCw`u zbGw)ebu~;-yTRg19~vAC|D$b%j63T2u~_c)g4-+JT_42x zYf9`k&%j;S2L-FpuBVqgK;tZ1z8ajie|9Cs-k`%7B~CV=s)&zt zM_gQB#C|T=_c`8--<)Bk@FdL>=@)~Y72mPVlCsS649_41?1cS-LLEeWaam}m6v*m; z=!mlB0K@<@Z>C2#-SoAkfg3aOLADp~U9w~RSBa{ow_BdK zz@K0Y-F@c+Z^N5^;3u@>DyAW%=H-y_Hr0_8aEB!9t%Y|d61UDrOK-fRJa@0Tt;;U+@tNPSi1kA<4(OVqcqJ+FAr#-f)Lfc>y9a-)9$Uh(h0PIrB|_!WKZ zq+PZchMEse9)*09o#{;Eod?l;&|9PZ6c-tTTWBKwG}lsj+1!Y>blBVp<&|%Ah6(H2 zc|uY)$o`?!O6pQ^O#!@!f6h5WidHz=GT%?{RIjaQ78c`u?-T-?=gr5C5DQYQ@j0U} z)+w&({h(Z5)u-$l@xkLwXT!Y39M|b&T-eX{HT9X9vN5L9H0F~D(q2vfEcdO7-|7;3 zoWaOE&gP;3tT8Ie!!{A!>Ak?yj24fEH4advW)>P%dA>mrMDC`7{)rXk(_;jt9&aKlO-QrQ@N2`I|aG{ z(BVnBi0j%3Z`MPj(*aG6H6!Q5!TSo)N9)_%ID<3Vde=V}W6&}~mYg~+6pnw_1oZ0b zu!ku7YmE}VIGU*Qo(D5H}^SxQpsSI%6$O-$pW{ah3(rR*F_IvCO4xof0 z$3!qsgBRhOG<3`<=}aTu9h)7Oo_YcRaQ8iLw8Wuz>~=dJKaj7A-$)Dl&p68|=F42O z?TiVC35&wwM2q@#K>z#`0NoiLVl=s_O$qOnJ&*zn4vx-Up^P}6*v%&>GR>m4aDhsqs?%sM)*u2ub#%&nYgl>6O^XAk$0lqRvq6!7--MpIU09S7Nhnbc4d5 z`Dvd6#|?n)a4;O7JLDqR)64k14jN6~!$iI0`Cz)MoRei{IH+&q#oVE5mP8$#j%;}^5TSFC@pIu!lBF11%J_h zR&gW3uJpLlx2?LSk{kPNCnwUiLnp9E^a?cvGUC>aCF(W|#IKA%k}A}~uP!COQp^G$ zk7EJwN;oH7k~Cp5X%Pod2Q(-AQhZ)45je?c6 zRCHzq&$0x!NkFFOx!?MK(8tdAH{z=k8vY8p;c2VP3iz7@%DYAIY zYrft0rQ(9P9v^1EtWPt&bqQh2AL4yc1UZ<^>w#sN+&9{m=@|!f>m2b}(o)mp6X7A% zvcJVJepfNi_9DrT%xlv`(qA3D^GZF8#}0*Mda@BXlguKf`ctK#?r5EzhvY}H8t{_q zpXTUq*_dGSqm6_CdT*~OL2m&4v05`$EoQ_92_`XOdraFgqqksp17sHg1Q;r(K}Q*c zNtOsUXR?iPr-c-gL>bzQh3@%ecnx^{8{ULvS+Fb;uk2VY7ZWIC6FkK9-jXHpl|=&4 z^U_=LGmt_iF}cc_aJtyk)*lmFVE~t&eB99`_9B0dDnxm`KRS1wdV`d%C#@6~=g*1reLR}2xtpY!AVU`jdcF6e0koeC-9v`qUL6up(=N4TQPRdn;k zH8$7PSFLSYta5_h#9hlh+e%aZx)4h6n0{#AphwZ~w^p~akZMg2p8~FmG5+4iPQH(D z`rsqy0hSXP9m;R3PV~XSin&RQna&TD`3u9yaYf$E;?1lOvG;yzI&WC0ZLz-jILGfb zXCXU~1(KL63h!E&!t+q&&N(NBgGD4|DGL6Lxa?tjJpgLk+sff1A1*&`Ez!w5L`TI| z;Kr;2W6M+yaqMPo0Y4|RVmBqnG%k);*dnLsR2(i~CxmDpQUVD|l~K%!0drbipUc&k zny(D6=Ts6S8JQJ^vrApU7{@`E@1yc0rD*1ec_QMZRkF*h6a^h2_6b}Sl)S>2A=Egm zIBBI4ai2(k>}P?jPC|KHO2l;Tj6R-EORa)g8uTYx2?Z_|PL4tsvHMS$BkQulHf@hCHLn+SE3i$q*Y>ou%it78|#}?rx)l{6@(? z`Q4B?|CEczUTW$m%0a}zK1MN

naxI=U`0B4TQ;mpxxA>PJ$ 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

    r;6H0XYY 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

    +
    AdaEngine / Spine 4.2

    Персонаж оживает

    Ходьба, бег и прыжок — с настоящим движением костей и деформацией сетки.

    Кадры из Swift runtime
    +
    +
    Ходьба
    Кости персонажа
    +
    +
    0.00 / 2.00 s
    +
    +
    Spineboy · официальный пример Esoteric Software
    Рассчитано AdaSpineRuntime → Spine C 4.2 → вершины и кости
    Браузерный WebGL-просмотр кадров
    Не является снимком нативного GPU-рендера AdaEngine
    +
    + + + + diff --git a/Examples/Technical/SpinePreview/Assets/spineboy-pro.skel b/Examples/Technical/SpinePreview/Assets/spineboy-pro.skel new file mode 100644 index 0000000000000000000000000000000000000000..09e564b7edc42fe37be66a4a0391862071ed948a GIT binary patch literal 64463 zcmd3O2V4}%_HIv;hMe<|a~fb6@=R5C4GQL*Q2_x#5fD%@BcftL%!mnd&Usas?oro( zIj1#;HDb>4sv2=!clZA9yYK$qd+o33{=QSEa-BL=UE|>WM>l<{EvnO#OJ!1-Oru!J zsK1(fsZK}FjSHCa3LT~>5nD%52GZcn0m*&S@`FWf_4{OH=H_N*_ciE~my@5Lk(`-l zmNqmkC^I`XGd(>mFD<*kgy8%^dAWI+`Dv-f>3KQX1wko!$$irDEE+(1W`03XpR61# zHv56e$xX{P{DyOK3ckJOXJlp@HLwL4nSC?9X$;EEP0I^P&Kn@^o71;%R$9Jx-$B_r z8EMI>!XNXDoWW^%DLKh`sX@YDs~?DhjJ!el1!;MI$C(M?`ex+}3CbUkoR#%|8ygMC z8B~xF)He^;sA0o<4!*w8`2#Yu(u@WS8a6B|Er?{Y@f`>6`|rH#H|U0hHonLjU&0z+ z-EXZ z>ywoxvPsSy5Y#6pJHH?=ITIV6g5Zu>WsI}>M?2|qi`H&H>%-(VYnB)NMdcM2@Mjg$ z$a*N!DFMBFtXIQ!O#F*V>kda7RZLQn`}7YYDnSLAx#F7cPHNP0%{7pJ<1e*=n#nKF z-!iA)V0ttA3+2>k9U6fq1rGW-p@vFm*}1-6FF7wSXGlKveST>Wef#_OdJWym<_E)$ z+r1z!Co3y0kE))&oYE}6G#*V}G3W2q>nZJeaYM3*(oZYQNXC;ws1d`q`KTGXsXgjc zF8h1MhIAV>WJc_nO~x8nd6nChZ1V4Dgc)&73Z7`P^wyyz)_Y;X%`$TTslZf28b;p+ zFd1fooNYaTQY~+y$I$LC$o+RpdJXp3jL6i-^oMHPW-R{aY#HPx=M`k)k&{n}8x%wS z_ca@ml>MiQVgIS3{6AF;|4$Vo{!_)s|5P#RKUIwW-&brf>mqb=rGL#y12wbY*`715*zWb6rwe{xn`*coX_XyW{+ znqZ5hzi7F~A8gcW^jWc2>&iBLHUYWECx8~~{#td#2b(tPG(H)B z&)mOcQV@QhEzBG0<&T-hUC_M~=E*)RYWZ_k|E&9?D=p${bRD_L>$SOa)k|{Lr@!T|VUqgZPxw=jCzwZ4iko-fFLT?s+7M>YpPU+B zzWDCUT@3;L(gLUr_potJ{LydnWA{V@)GB+{o)3T1w+v!WH7b$yiNAWoraGj*S*!Zt zU)vZ3W_4@~EXIM!d>g>r2|c4qI5Zcv`?~$-+HNcgo^nNktM0^oZZ!+}oqt%p@bg~^ zz#dz&v2oxEOQaz7)RFV-_0~z%<1GFXTBUVN+8A1wtnxyod|akVWqmGz&#^Z8IV(u< zxXGV_%Ysp}b$Uqg=n{Z!{}Mau6*uQk!Na6Hwa!)L>5<6vKkNFJ*b8sn{8MmwC|cD& z2o>IXxZmP$YQ1XO{>I=AKX?a?%f29C_!x1&FLgjQlP;@a_FqyYRZD-Hgzf(>3gYSs zG4K^Hiq#9O>VD4ik1_nPh7^(x1G05g%^j%bZ9U`uPLcYSwCNvQc>cQcYQ|?n)!*w-CiQqB_J@w_&pL{_RS@5e>3(|(I>uyY zg{-THe~m2zp1`kVDai95Qd;WT=+leje{3Nr>c3rhYw1r_to%Xnb7jEqGLh&fSt$5H z_NSG1l)dIygNzc1{v?TZ_(5X&&BOlY`da)T`o0t~{GJ9SYV`WUOnYtr9{oRB2>B11 z|7?lEehBrKeJi6Mgnu+#C{sUvydc4)`-2Yqds@c+5c+3h6#hd&ezG?aKZqI&9%}M8 zq|EpS@~2tVudx7aDAA7-r+*{gf)bIrF`y9}H!f|78z63ETT-GQ7RkDebnC{zWWPeM zk!|&DLJVpod?`_bZ|m5|wEe4_=+Y=N#OkEKOB)GOoJG8=`5kNFqBQtm!sdu)V>knx z$p)U}-Mf(%f2T<$-A&D!i-p?MZ13A3Bj2$a5ed(d*A@NB5!xsZ>>wb`ON;>w5OMctMMPZ zP?`PpL}G2%hLO_{Mu*nb({UBsk)#@;!`t9Nc)u$+nbUehQ~0(l!b~8^Xfawdv`UexplIiF}=- zBBv=^BiFSbYR>JYjB0R}$Zc4Vla}AG#cx9U=nE5?Tu&s@_0~t@CM;Kdt)|$;$JeMX z$6aLBe)d+a_Dp5BOm3zc^7Jj5|EfymGV!`9B3zr-NVdf7DDA@kIw9WYHK00h67O(SI2 zT*L>_NzmTFQmV2_sKTHRIR5x@V+l!t$$R6~_%6Z*kk%4YG_9?zOX;Ft8Y)7&A)7I8 zT={Joo(l|SwFeC6r%4fA(uDvpYuGIsF}0xz_F7sy*m2k`Df&IQ zEdfAkH5_Nt>Yg8;TeA<^<8rGkb2113wYA6p$86GCIH!NfriVzU2rUlvWSOF*nhTZR zJ!6!Ci%~^Up0sWe8sDKKGX8X!QG1s*CPUg1EvG2G2B~wL74v?W-FNAFEX6A<7m>Kw z#Dw-{r>Bla-Yt&6<{mLVY%w*)fVJtnxwe1E~*t_o_3}Ul0w!luRu0Uzm>+w?sgu<>Z6(Hgrc?uP?(6qoYMWsHo*j zHsix8QUZ*|=nPTsebuS~v8xvbtIrKiA_zw!+v=;nR6PWm7q9hETfg{SeM4s-xb|^_ z$eU?en8mB$I6=*uJAc8Hs~jn~pCWJWMTmwS?x^1&t9iUzi9(x9B?#I%?f^L#b)ieL zKA7KbBJ|F>1@Q#>Yx&i zuJ20Wi(qnr!<#;Xi2ZGZ_ph&A$WyGZr7hOd5o_y;b;P=Qh9U#X$e1$3bE}~~?j*E< zz5(rSVrFJxVWn+hWn<@HV`pSyU_@)vR@%C{W_av7=!(S#=reBPNfhNO(x>g^-2PS} zY~{;DF1Bho``}bhX3`VHzFoVK-4;KZJ@h#VQF6$Ry>Sl?sEub+eBpG;;ar52!q z&)eBq;{IsG)~oD=u&$`K)(@Fqbwn4FRw7B4ljv&;JNDxKNR{n=D>f$UyvkveBZr>F zsho65d2vEhmGzxAyus=_=yf5(Ti&!oYev=buDzP0-oJ(MjzzE8H@}VMwIkoM1v5u; zr&M!lR!R-Ht6(QLtF1n_d*5R2ZB!JenB~KZ=Ib-&0c+8*^Y-df6V9S3Z)`XpT{G0l zc{+!r8A#lJDrZ$7XE*KqjoV`8!CtlNq<(qV9PNBNfsHGEg~q5Yn2iS0QA?E<)Aou5 zvOIN%89eYe_Ib($X0r}pzxIB})fO0_#MZ&wiz(q~@x))aM{gjy^;;09-rkGN@EXS% zhX=s@tMt{1+GQLww1av?(pqju$ri5Z;_d8`KFe6g%r;E&*9q*Hb_QJgu%7I+?2+7| zCQ{b#RaDK%kJ;RykA*7Bozu7!>V?YqX$w{qgsZAzBfI}L2h)d*R%X@Z3LQl&(OY=- zOe%qW4Mu@Qzr2Ob%4dO{+q%N|JISEdr!8!3y`gS8i4fwB=UkeYcLEOj0TeU#ZS z@bn_+IMo~KzWNO9)yKdC{X5Wg$yT6_qM>hG71+>bJt!;d2UgFp0w~%SJjg8sen#QY z`r{f9tM?0xTcZs{iHpGqwiUEvMu5oAbD@J4qrBYaH>g!^rVIrWVAR=CFmw9@*uGW) z+DtHny+EMycTpj1!O4`$+Hv6Cx}CuJW=~L@g6pH*9VnJ8gad!`hs-f4>}31NjtUO2 zwF?fg3$U^E4+xe9Q~tqHDJ2TA2?z=Bx3&rK3-J%~m-_h!;n_DxO8a8M%GxQ!*U2g* z&@af>FHkFp4h+(AcJlRb_Vu*1^0aaa^zfB9Ico=Mc?4>^JA3GOXuC_C-6ZZ_mYx=t zUXD%@M~R!KlcSfXqmH|WuDgz#yRNRQo1Uw#gO{VXg_pONgSmybi>scCp4ipi!P~*! z(aqJ>!O_Rt-rU>A%-ko;MI0v9Hw@D^)HiUE*}K@g%3Q)iee6T+Wu|66p{72@p)wQG zP-Bx&BUzYHn4z)EXp%^*tBdDvY(zq&A=1D=e}7+JZ*NaecUO0rTpke-D5F1$8 z*w_JvK`2h#w5cMlX-q;w^X4sEwzhL{ki@iY+rE9rj-5LPHtpKAd-ue|UcExvcI~R$ zzI%7=j){qM=U%<2D20KMk%@_!#M#-^Atj}?bBbMRsw^edCOsXbrW4baZb7CmRTM=z ziwug;n!O#6-~BO6S@Jy6ZOM(W+lX#rPflc5gfvG-u($KRFpqDc?{ch*c#3it85P@O zzXJ^^p1|%L@)dUc@>;42v^l`;EYt#l;!rHgDZj*hm|zZrM?90N{2e+H0G8-_VNqPI zFTY`aYp}|;n^fhJNkAJISkMuR`XprVhv>tK_|%P3m5(?IgQIZ7?ExaG$~3)-zyHpL zE8iUuc|0i2WVu4AG6s>CEiNSg}++`AWp<>T=<(IZu13tYjm7$4M@?=h7k`=J>GfNN9lV9|7|wtVojyHI&@ofO$@x`@GjP?EG3i)N%}aa|_Y!eo1I zDY7!0ivg#67jXiMvL_s7yB?9jp23b%)V%E)0)U}v4iO#v9oe6#fZe-LSY$B~gGykt zT!cm8Ce2Vvx*CFklci|PJv$6|Fjn#yi-xjMXz`=H(4~5a6v4SH2K#|}tOXV=8CQsA zTvS7+twB=u@q7~kz=8QIv1o7YShOMD4a_XqCuNIA-6Q};G+8Q=qGj|&m0|KOQrQ^Y zk|e2YS_-}auKMvtFIBqlZz^8U5mNN!c_9Y3VBwHwSTr-~B)UC)3D{#XPpYDpMq#iF zdJNu;lcQJb;I*CQTYb}@qOU#yj??66~m z0gy*`#iGbQLlNC?H0-qOlGD`<2wq=w z2@Oen-!R^|4~eG8v3-+MTa)Uup=%MH$?dGVh9FPzC}1V zRKhsNjB3!@ztRqa)eTx)n|aH5w+CHe)T{$iJdVT|bO&V@hTv>0NZrVncDM~~3$Pv8 z(ZLLZyWq5KFm9vC!(Q-;h5MoSLMth%Z~mSD@T@}`)b9?IzQyJ+W}_?cl+T6z)?No| z?JHqnZVIUCyOdNWcq_JogWNkq3(Y>*C$${9)my?|8HTXArv^6liHE(cd|~v{5)u|V z4#^rLN%Ip(T(pUk_F;$4kF{GeKEyFKF!%0zzUm(4F!CA^qn-M!HgY z?Z|G}a^e{ZUtmSr4DwXgkG`Os^Hr>zlXeX_J$F`KJ^K|5i0BGTTjqlK@>Yu77iNO3 zA;E&qHRF~rRAK~IcK@M}xyhI>7ci zZJ`1G4E7i)hb|Q#VP@=Ws8tyUqhC)0%jdR)HaR^&!f`Qp>lvfGf8-ayt?I5!?oa28$VxrKYw2* z4|iV&dwYjqFFVT9i}DZf@%QnSczgQ#I7l459ef;tU>{7nK)OaqNg{EdwLr4py$5Q7kXgHUk@ z?Jmmmba!`kb#|6W931TIY%I*oOiYZ73=G77I3FQWX`rXKueY77!R?5`ZU=TajKp|C zj%(WVo4e7PxEgkLg0ta^OXT0Rt8gkq^5$DR8?^irShgIYmspg z%5SwBRn9-aj#UZ^Gtzfe?eX1$q9h{IVkbz;kk75rypIgR+;g3g$}6)UxBWDw%==}b zb_kmBtb)DPY7&?jQY};Odis%XeK8ljoc$;i-THW#i&&Pb{P<}!QkjlA!I!A+0fW~s zu#(+VH#S)F8cJ_0m+_tkb-dAy)5;}wqe9W1A*H-*X`nK`Y%xNYTW;r9eryMjc`1!k z+M#B#orYcWHskmXxbrKfz6H+V5R3XHwd1@!j>CRq%aKYn8t|tM#w*v|8KosvsZKrQ zpD*b`=8#}C=ZjoDeKD)t7uzO;O{>8Rk}PA`>e3}`sYpikLKn+Z^o-sxq#H zaMSHXTJ9}W!QineL2EP~3W9L)E{T|;NgF3K#h8GrXTNcjWU2zYZ zKOTp;WuC4W+y>Wt-(u0kfd}{(XCDe8-s|-X4DNjsW%S#_KRDW_LDY5t0ZHFPE!|D| zBWx`69JCDaSv!+3hyuH;e!&qsde-yjCx~G?BSXZOUEYU*E{HvOo|ZBJ-HiBcX^&t$ zUYPP1&2tF=ecE-SrQBw`o~_Kp>y6EBNTZ!lhQVzR4oA{bIPc&E6frg%YFV2g{)&z( z23g?4`FpgK6@@Tp%n}Facvgb=+NQw-fWzI6;A|MzaAwg{oPd~#RX*57m0Da= z=`|IR-j6#?tGT77^79Q%{V(dAsafuNM;nmUVeBQIO==~VJqsA*veH(aBtx?86VrC zkjtl8W&ac7LQ#3|2|V*IQ~9{<7KFBLt>x$X&jOk59kha(r@arb6-$c&ms%2v^jr4k zBul%6lKl@Wvo8z@Wo1KqqGneLfu-YogtixsAiaXjS?|$NUVd1zP`Rk$I_}irV=LIpFZY6g0TU2EX6--> zcEC=ai?C?a+XNK$R3jwJN8b)5pdn#2HA9YuY%>CVEOM}~CpIMj#>b{&t>Hzh(ZYUS zfS;C#cx9Jg34qSK+hb9TghOlRBS;g`sJ)vpV8O>*33#wR@8yaXZE6Y*t*S$O)vO&D zG=Y-!Vk{b{U{T@4uMH7a$8EvjQ$vJo^3Z)Kyk!dV_8Jwv#H3g`!EDi+BEkxYWZO$05u#^|e@w|D=_ZW4b59v2M|zp2v*0$>-CG779X%-7sI0~Okj z5I^4KA_k|xgtq}$Wv+mU zMyH_o))knrz8~~?r42#W90=#w!fy9wL8gy2?B?eTJM?sh?Rq?e-6su%Z0RuA1fF8OSwwb$LIrva93=KR>;R{;d?M|NHjGm2h z;}&z!;no~b$mjv9@e=%*|1&Tja{^N5kg_6XA~?UTwV-1;a;@;}rcMOAHG5&~rxW0M zWJeg>rXQ$s^oLRVFM)uNq0lrKDgC|XfP10Zpx?kUP*6V>O!#yGMii8QTZ4x}^ZWO~ z0o%9Wd}o6=qpr!q6|!*L5N2k0%r%HLwH3>#n{|2lk zhQQ{lH-R>zd%(7Fzk{+J9Pp3sY-V@3^_b7327>ktED z?mmM_pG=@^TW{EV!5rw95(8U&It{kl!duDN*o;BC^w0#8|6xg-0U6PT*>Ac?TWu6X*;>#4@o*s zw2rQmjq+~;-1(kMi*NoP_iPjEluNhIOi`E{h(`4@`Me9?0YBI*H zN5_&+Yr4+gjh|7P7Kc+%_1xYX<;(+U^8i-kS=<^Ghnr}ug3FQ1jwTu-lX7Hm?y}16 z^dw~P<$k%BVq^;G?`@=(C=+p50L`>}O} z^{OOMHoIc)XI1OpZ!`BVk5u$7po7&QM=5 zFV%=AcjQX$$7{?Y72MVM9}$$`)qT7rsJ|R$Z?EF6WNtu%A`6yPCl64!cEi%z` z?f4c=%(|@Uq-ly|(++CFI@PjG5BJvuG(Q6$O63~od9%2smkw+EvP{_0>lZav&?tTq5u3NgZLuc;*#vc^W?2W1Nk^UB_wZF4+fjAlJ zr2eAdR(V6c^;Z<_t}TLMFCf@!zQ9v>Cg0f?yVgacyuPKU!tc{-<<<2Ql}<)7<*8rm zlx-(pAYqhiOJaoQjR#khfeF2V@i#u-Qx@SQFUN+sTya_u^ z^aQsGj>43FW5EH7&v1Y^53G{dz(F`@vze z#z1lVL2%%vXVAs07N$QfhoSegVb6shV0is)*iknKhDVQuZEYvRCV3+0=73<6+KS-?I$swf;9Q|lM(Ds=O)9+4Eo=dccidD|aQ`cTVm)D`ny>uaX zDITWWYrFxRo$U)8avi{h#8V(Sv>;;5n})?7rj* zFdT!on~HBK-~D0I@h9EhI>dUxHUxN+z`;P$>zoX))izLpOLR4(OJ%Jjr>x_WU+V-uh> zktqQLCb3p{!zMON2EqUgYZ4b0C)15EMj9~ZOtuWn(8#6!=$31_~4NEU?wCaAzl=pU>3pz(Na1{)KptX zt0|s>n%c$KCQzbgkqMDhLP)cOX!98R=$NPwvt}VtQD){*=FxI0(#}36kdmtcDr0u6q%#4 zTDQ$=O+GJyD5fcuotu|OW+Z=EL7sa`Vc{?vJ3EI$yI~_nj2cxWDiS5NEfy7vO7Oq& z_+MA@rMy&RRw|l=|4k9$Pvqh$BHg6i#4=Hts9cmiLo`E_TaN#z-r_AFJNy%3kwpg%h(eD~Af zOYZWmr5yo)_cahY8gZzG71SuZsK-$X%9mMzV=>mN%bYcc_456Y&SHKfz##kWDGKpkxbtvgsX3 z1LyhBb^?UFNRe4eA-k@lg&^W*#ncnvFkeB5JWi7xN1Ay`z8vq zeur~b3r?vw;M%;!U~nATE?)B=)~1(^M-gx`s#4j$-^lE_Sj6Nwz9Y9v2Y0(g_@qyR zG!_nK_Fbo#F<)cIth? z9u~pzEyBpH8i(_PZy&8Np&aXQ{=e(}hV}5URtge)DC!T%T`Vb}sQAB1?qdn={l5R@ z`27CM@%jIk;|usN#~1itjxXrH9G~`oIX<2La(ue~<@iJ*JgC22jpL(n>}ZLaHHs)W zEIfHw?>$;$yg?7DcF}>jGBR@1ELNTiE0!VNepj z%PGo6)RLS(6tg}NC)md=uEC4~N?(1k)(bTqxl6e(Nehcg^3?33fcLP=wvYO1zlQ+H zyH^0W5F0Go*sFy7U49M9w(ru1-A@7Jd88YtoHGN9YMD{&r@<1aS3XytSvveBat+l3 zb-$g(q8C|NNZ)!9I1(G9&w4etM-D@eK*y9mv>1h0UPAs4Ex?qg)AiYt=hBgW-UApt zF%pX^p5I4GhhCtkk5V7C26Nb6y$oT(&QL7c9M}z+do=?y4W?sJ=mE9Px!Evc*e)#U zaG*&|OlCLmYR+kWsCD0|=1cN)s4K6)B7+G_xFsi!z!2>@`rPT`x@ytWm0-fl+Y}h4zg+4!Mw^~j4{R-UE`qN@=V2vNQ!PgXKAAgBO3nn4$1(nK)8np5?`!unbAnkSK||$eU$+WXXOwMoS$=xJjM9@ zqPC7$N4MehqLw~Q8;I}`Mtp`*WJuBa23lf$cM~JL_3@`ejQG@%aDb5@pTt*CVo!v7Be($1ct9=mAccX=WXvk#vt z7quxuTUS0}*HA1|e7OF*+!f35Ay^}k1I6g-z9v}*xsN`9vy*EYeKnJRAv69_wyWY3 zbc^5{^&CWPi!Iz~CnW39hVzbC4zY9O%T0|)LwX+ym2dcIS`w7K;3h9`c|-YO$q*-Y zqD2`2U}BS9zU+?tCG1F_dr;#07Kclmm%+{AAPZ3#K{(1OwPq+Y z_#atVaMCJ1cXCVAoq86q?nU3r!uy&VCdE@CRon3XRBZy)Z1v~gbdQ{!0OWXpl;bk97pmyC(dnhp%8~7yLjwoZgtbouz!WCgxkKX z41;&dWuP8sUZ+`m?uxy6Lm`c0ce6L%xPmX&oSoG7YYZ@O1U=eQG(JbZxgRf44<(tG zumeUfRhOH#7rr?-BE!*}*aOQ8U|{A&iTd^8A_Bmw!1g$Yv*;f17;izU#)%zaodQRf z?g4}NY0y=-0}ve$K2w76@79uhf|;iU3kdzR8vdgW>5d4P)h!K%w(0}(N87<}#phs? zoR31-udzbez-0d$0yeIG44W*@P#!I;gVGYYGX2C`XuSy=DID+blhcLg`WM(>VH~g5 z5m?y^pAA4+R|CSq=rxx?+1LjV9kT#Ws(Qn2ZDU~2XA3CBp9S3>`$Gdc00-WxL2=w= zuzW`pnD@jA8iR6hw0JyhF>wW$;3Nl9?;5BZ&;h_m4UE)21LG8@VEfh;Fy?>fTq^*PqNRGBc?>!V}LV?h#aktCh?o zD#~9Lg|{GlV+^DUMTmn!5oqUN7vc{1CFfxCJoNHx-O$>=N5O1qX5%L7y=m4H+ zZkO2LHf!d9dJe)uE$CieY%u~vf^T$+hjGXHSt zrlutqWO!&fi70InL>r1rCu%W9wa2xYnPGA*&u^L2!zIHjQ9QIr07tkjOfF#z)~<78 zrkh(x9Hca5O8#pEN-h7QR+g4dWYMQXv|^;eHi57R>Cd((ZV#}k`s&a`T6thWXEx^H zUFEA+$7^N`HY2~k;Vlbh(7^7RDc3RH6m*$b&09PBf@ja_xV?{d&|nAX##`jy0B2sW z;6>?oNiNiFBFky;@yc9o(cAG*%Z^vKPfLLA?jHQC6CG)2s&Y_wefb_bHT{(zKe`OY z?%l_4xo$y2AL=N-%=-iksEq(&IV{Mwn7 zH0=NUD8F=BJRDlBLkPy?*>my~F;3Ti<3~OpL^D>-27<({P|TOQ6f-SrPw+eqnX5oXZRk^!kLmb&-j!q#4N;7k;ItU#oGLcw=I}i zn_~DCDH{Bq3weNIO3%#bi9247KOHl zcJXC!to}6USUd_AxjhLIQ3m411_!uMObJs(D}O&?0oS%T1>)D-V@muoAP&JD9BD>_ zZRajCC5cwxPPbRw0s0N}U%L(&6{pkC!nz4p(XdzWQFiD4t*~F;uY@3tL7pN8$H~qzRM3oNm|T$f3{kMN z_a~Ar+8}5l`ofkh3uVSUZ_SSHAZKv56XIm%%)idgGoQp%oU=im{Z~7RC|#kqbNZJm zNO$ISMjFuyU+eeWxUCAMHl4-m_O&C;g5FGGXb|Hykf*cPgNpu{=&h$OsdlvG>0lbt z$M>T*$xon8j4L{vz6k%cOpfMkT1rEkenDsz-Vr19fC-^=6=v^g7#G(>Akx$OB22i5 zC}Y7M@Q(c}$oS!X)>E`%+oF%WTam9)a|s_)TTg-PXLahy)>Sl+PgsHpZP0UV88;#E zJ>IK2fpXVgqQTfJ@oW!k3M?Ek1Px5V=c90)>>l-=249{gp`6DDp#F_Cq&s#B878Q6 zK^zV3xLJ36I;-OsifQsB+a~rhU~dG~shPGpJK%G~@gnnn{1r43%!I zXR zHYLNa(E{XrMot`)K!e(o&H{1kr3rEw?Mf^Vy7A~dwm`;XP-(AL zP$xPb9T`|l+Ef+&K7xiuPq(2j`~&D((V7tWu=WX+vuGy`L(MG(LeW!4_@b%thK8W<+HfnfUK#0-|=s>PL0LNM5x z5rTAjm7erH%@meS6o^SUPE0U!v8Gl9uE81UeFb6;7GMG&Tv{jOf~mk!5uzMxlGJIM z)B+jpXF_~iNt-cCM@20pK4)id9yfp^Fi-rhh0)~;R0InLiqgF%xS-uCh+kl8Gk zE1P$H_N~RHsn}2q-rBDv4HI1^8QLjzyc8ySbMzYV?h$lc&GOz4C8yMTD_)VIfD~} z=fiVpCaCH8nqNDXGog3`9urLTyvpjs!x@^9<6nysB8n0bf?+5TC^@C3nb|y4JMe>xF%||hy^t1RsxaY?m-CB@2Xb?<6Na(zabEr<`#rt z@^M=0)`ZYZR_zIa7-()m2xjQK%9d#-Kld!C62={I0RFUL*iN$?6yI87B&Lg!`brGNTvdhMNE)Ml$%}u znr140n}oz45wqa(uPl=nfxQkgE%7PqV49CKPRcULAeb)~0rN=Jqb3aKaE zkQ+3m4GnCgdy){!PeD_-{Hu_3L-o+UEoo5N{R20+elA#YXtDa_sFi{l-E0#`gFTZG zxZdw3c;kY9n}FvrJejg)JhqmSU@5zCdmMC~700%k(Sh_f-l@JF4L!FWXF_Kq=+d6$ zopxR(ZU~$8Y9tMtJio;|tEynzZW=bL>s(?T)coWzG#p~Lkj=KLBm}d)y%FhcL?B{t zV%)Z#&GF2)%#SdPV{0Ssq$G-TLuOZpZMYjU%eiIdzcBv#<%D2j_wG}#H_N7(&^G-A zB4S7>A(-a4q~lsjX@(iTLm-+=nW3H@--g*0(1!ZQ@x%kUCeN;j&{vtG4E!qlZzcDG^ZV}djSj|rh_%cf#S4rfUqu;Ef;f{bv^ z^xQL=m}Y^v8GBNFb>$RNwcMU1rZm(WKA7wF>@swC`1d& zAi};NCP;-fXe8lZ{}Wq+Ty>Avx0hQ}Cj;9}yuE4t|=+U6Z#5(SIhiou9rHXgg=Y*;wckG0#wKRC05TRaSzX|HP__7mq-;zGUggm)PL$|%bZ0W{x z(51c}6Tgx9mGQd#gofTCFA@U!_!Tq3hh2$l#@U>iN5h~k0~ot)xrAWc4RT4xXG$ME zq#-z5sCF(=!-TMIO#G+c1fNasGEKvdFAp$BJ8gq$G3{8r@9WWNIUNKs@@GeeFikaFXswW?Z`oaH^bQ_Rds5Jj@xlnFnZCkt1UE?_*)*FB_TZ zb5znH_{tY(#>RPIiu)#&Wl&#IKWK6L zA{xAk-=wk__!(NeKSDJ*NrESQ!f-MToi}Kq{lmY&*sKxgMC${jP-vx284cS!I*X2P z{Q%P{j-#4U%k}V@M4u!|E`V#1@9EQvR&2c7l^YkcP5H~_0elZt9r2a<$fwU~07sPY zJ=c_i?iC&Q_U0PF5*_uSXfWh~Js+6*>T#VNZy$-?S7$QLemZG z*#34fE$uw3r*#LG#5G}c=dGY&!7&wcg&P6KURlklhFs#uWeVT-x%I)jXmBCMh97r&1E`OCz-{baD$GOOjGN$I zc2}2MXZZ{CcT3>AT=FJatl9e!TO#)NP=V-j%v-I!gdqc)TfDVBo`)V=3&hZ!mV^+@ zYtvuKX~C=#V&c3?4ilu$a5HM&(xg`j#5^p(g!i9X3ila4{nB(=fnT_AxmtN0FUT=L zb_LkVy-#RB=1fBLYj>Yrc)lEv0DTQo@UDRJ7zsg^IfNk2ACt8kPbQCW>l1>mu2%PX z+LnwdcEl!M8kz;|V>>SBD9q285atXORYVI-MhI+(c}$QM88c_%W}4Vrfylyx3==|W zcLiC~q&@@!Hw=dfxD?Mz9kcPcoq=Bnu>emyn9%;d!87dx<0GQ<1+$G?i4m5TW5@g^ z6rB*UQOj=g<6>S4>lC|s>{s}Wvf_&_d;~eEFW9u@Pl=sDI|fgp!JL#h)OX1maQN|g zv~5Oj(ic^sYX;Nc9bPEo5YPxODlj2mP;UhF&H|Q>7i@c)S?J1jK_Fjd9ST;oSSn1!8`BAu74uMgNDs zC=`mD`#zVBS|2M{e|^7LaU*eI-0_pSD%p@&g=O&9;AF!-Vw z+IMm@X*Tv=$8c=%UOA$D9h<{6-^c8e!-=HXP^TgZ?xel?lMry+w(+Rr^f@vSWrI&b zG+e^gRm8dkS`qQ7k|}pcQexA}VuF|x&Uc=gR^qNE5QYOH)%*LDlaa@14%*P5gKcxJ z#914xT0fWD^u?V_T72-wLK>WfrQDS_1*GW+A#^?EN^E;c$0vkwuY8t$WGD1R@q|>o z_i-+hjZVKL_%E0sL!UFAok7DMc$gDn%;P>>{KU4TLEwrg+CF|ncmaGkGZk#E??&yP8 z%#8RvrsCqY(uUV98xlO$JQ|m!*vM} z(%3UtKi*2{8O?Wl(n?~L2tj%VCInw$(Tl#c^7CrBKs24#f-5mhC+3U$n*Ij&jKcoh z-ka%Q;Kf|-%iuABuTa?$yE8jSyK?ohv%rm=)m-h}Lekxt^NELP@V@XPH>l}3sF&%^ zoJ`wHx;q~oT8;gjYFp-p;X~-%^D`ekV+QH&+@2H-wo+$L@=;sy4{#si&8nfckK@?)?Hn5GzHpFIXvonA>k08&K1gp>S0Tf<3r^Ug@9ULps{Geg}Y20FAz3TOz4ygU1qY!GrU_d)`7Wt{U+l*sRxS* zMv2!r{t)jF;q427h&Hca{a0i$={U-WPI&LG#oGwh&$=tq>C0?3VB0KaINn?upe&%7 zfm)%gGCY+T@^~pb;7cHb=NQ(m5+`1?V?3MXQpJp4m&4j#ixYPH28=yGGgHQXV(q&c zF=Y-Z>;SXjWRVCL`(lk*Wfp9pYwjmL%*c&9uVHr^*fs;flLcm`Z61JLAGI z(ldlAVHUi2$j*!#&n&ojoAuj0Nz%CciR(=8G`P_|*|f6Bhd_bQo@~pt_+RY3cT^Nx z(=R+U8Bq}xK~YgLU_?PhWx96HfP$i;2Xn%V88hZFU=El86Dnc=GYSTn?#6%_Glrv> zb55AQsyz&z=Xvh?y?5O&toz5EwP2=xT|3pTUAuPdgL}CGr0nq(#6D98DOFf?jJNNcgvORj~hVC z561-Y!ss+r2n`YM*UV6@Dpepus2uH?Cy3uS)=;gyHh={TR*ufROM+5vY;A&bHdTu% z8SPJkTgz3-jh(l-puRTSAV94EgK{IGCy3Sylxo*c(EPF7c&=hJ!M@`&qq{5 zTN5~-8;cEQtnIz!Y{4;wVVrPlQvyz3)=Xke|8{1PZAP;qi4K26JFD9(D04HEEph%x zQPwy2{zPz-(r0ltu2Gpj+G@3Oq*@O|GAYv15@*rYcvqH2uYN3+8ISWEt>XAlc;inG zK{V|3mzG{_B(8InhJd10ohl4|3he zr0_IgQu#a5f$Y~XZKeyeTz#;fd2)qH!3!1EHC@m$=XRN0>u9tAz7yH^_2Ilwa%Jp6 zcg*-G#f;b@Is^}vvKEY?X2O~;MW>C70CI>+=Gn8;Ey&G&E5H6r7Q`(T?;1;c%VJja zQTaihhU}y?GZp(o;Y*_&$5-x*uXMop6>7c9lWx@-!rg+{ zTP_0pwNcN3;a8SPhpx>e&s45-Gf#kN(=JP6x~0MboNYjWd{-)u05}!R0h}HsfYCqv zSTG#$LW^StZWjq*#cwFin$9ou-c@pI=mOsm7bVC z)K1~daE)4|c&R^aHSJ3cNSntB+b)Wl7)Y{g$6=-fS9isstV1)_!No(Au}lbxYE+iIj@GmtsB^D9_>MgzS^ zT`+DL#vpLZcV*UF8)$d7gH*iI7E(XCe+iB8aBZxVv5!LK09%t5I@NrsM3HAhW7hH4L6_W4@LN ztl^Ns%DU@48LJtkoJttZP?=b~O`fuLPmsX6IM-&)*K649ZfR`#Oqun3^+qj$elEVa7dFhqn0$X%6iETzNY}xNol3lzXTk5x6=^c2IE!(j}{-F`M({kug zsPVU(PGE5ZEu^AHqF7w^J(hu6&sUY3BoDCu%;MI?8PDB#Z-pztd=mkVM7XiBE?8u4 zw)wgPj^8awiRiaUnTq_mMcm)9M8V*tth4zC4m|n7a#@_b;Xm+>I@1p)hk_r@I3VDU zoQoIyDC=bY;aHG|vfLsULyAmBSsG1givG*9N{$w|U!U@%-*6(rc&3DbMiBa)SL*62 zOs*klXN13^2V(2sYxlrIemGmwFZbcK-}r@^Bnk?60vxzcV#S z{E&QCzvIXTaf|k>u4Cv>@t)%ZUGgTrQO=x-0A)uE(Qh5x2L`PluHSI!I8=CjTbHc8 ziQBja8?$m`oO(0mOYQJc)M=J^^4ZNmDU#(i2^X{z=hRj^6<@2(eAP^C3zM`Bcl$^) z4#aB>T~pmv2 zm{Sp;@qh#+A!7p!n!Qi$P^&1gEnd10v7RuhLSJ3mA>)c#SlK&~yx`0YfN{xtDPI%= zG@9+rrv~T&w-gA{+88l$8X3qy!-JA#p!e4+0-d0ykTfexAg76mXk?(C2v#@Ag=#tn zoG`(DkeHGN3?z`##6&bQP))%576YK&fn9=l5!a-N2`veMoJJ;2BLnqVu-dsI)LU3n z0G#6HAe%NiHT@r;9@HfBTg1#L5PV8N+8k1L^O)9SfSwGuC59lN>}AFr2te2vc7;1 zXyib#aGIEiMh5bvm?kM309Mg}gfx0!dK)fsC6%H!CPl%X+-gFvE*iD+ct;z}A`ohu7D9-N74 zgFvE*iD*(5DqMjW1sIACiD?3gia?@?iD(p|4;n9S(XgNzDy<|(mlZ^!@IyTs0Td;D zaQIXJgqzG$Lkp{7W$6iY>Fomd)I(&7pu?`=_`;&*fN z^)P?Lv=n1PkkiCOG%|3FX#On`ZuAHfL>%66rv13ih#;qliD+ctm0z#hXjtXa3pL_v zJ81E^toRt!89|a4XCfLIxJLZd)E7=k0leoYCcv&05ajKZn21IOnqq?{3%p?cd2}k> zquN2}g%MDxbsRKxaN+c+TOXlZoxPB-z86=Y{(hG5Ds2lbhdc9-S}Z+*L}M%fH}=8f zc2T@ZcJ4b4zE?n93&KhvrdE0TpkMFF(CWl(_!e>u+F>AM;JVhj&t=GbkRU*3-|rBH zm%;WysSwx&+zbrx_WGlk_&`f7 z89}a?$V4>PIZ{|s%u_?XOqLv(xQ>y|xuLsF+DoPr8Mv+$Dkd2=VnSz&>m1RW%IqiG`b)%|qt3zPPkm|51ei)~b zf%g%Gidh5IhnN~-vIG)MOhl8;b-?dJ#SGm35Sq0d2(9k)gMORdK#;x(te>es3n>v^ zv1wc*3Mxo|aAQjt(5DX900MhAbcWaNUYy3tsVHcyxTB>eUoS>-RJ$+fDrh%XcT|(> zNaE6v>*~bwqo`zR?OQ_yF|WG6s*9TsMQc`6YhO*Fv?wGx0lnST+IY`p1kN5JP~eIf z%dF7I{(c6E*?1>FBcBa32-V-p9BJbUjYfvSs`c&kT{ zXwKx)IY3_0iqAoqQ^9pLY)QyOxyV?zNCRToM{>WV;Y3pkl`IPu_SlCl&eTmQSEd~n zMCWEB*oV|aaZ2POL(lIsbBdGbd;6=-KT7oG*fQFsG#laeG{;- zw4#P&{%`|m{aPcpi$Kp48w@?*8jIjRX<{&U9K<6~o&cGsqauK4&Qw6#{z*t$zr&Fd zlEw^)l%2=sA5*joJjU6$?GdRbhYqh=B6_Ixx%4kI&&uKlF1!Jnll}nzZ)7?b>`;swc9wbpPIv4E_Y9{M1Y`pH|B!)q&8zdQpzEr^0&m_F5-kl7h_a(tplsSB=(<+o{@97ommuct;HzSsiM(S1 zee>2s*Ja7j+-fB>AEM(<8+m@*XKaTt5mOgzCM9)wwtk)bNJ zpaLl8r{q~!lq6cC-|nf`c|7<sdK$n>k5%$LeGh~g3I z=Z|;_OEru~s*kE!rLh4crrOl^=$70VBeft+*X#H8_wyhEv!$<9s+j2sDyH7)n##ja z73kha+VCeNYF*lAD-(guLpO1bf()2vD$Zvge-q*3<4Zs2V?myh@?dr6G)`dA)Y)I7 zq}dB&ElBoiQq^2Zz4g(8#HSuvJ5GAp$J@fnBss9lYfCccPOWRzNA#N)96J5l&k3%l zh;o8gyxlH76y}kOx12vi>l$f1a&h0z?NB`|z(S&m;T1v^g9YamLot~u2D50Y7!|lF-MbW`z|)bx~L`R2PL6gZli>is6-Et{BWJ zm@9_YMPbEY!KqSA6@!sOVZ~tNe<}teFRU2cv~21YREL*Q)EdNJy5ol3KzhpwMMzVF#?=xOeTQxKv7bk zAIE_x_m-;l5O>@IZc0$9Qnx)NC{3@b6SRvbCrHwOwW4&xLo!I8DM5BPHeV2TOwT3` z@o|X^NwX+{5@fZu;tIRN*7eM=bry9P1WeTy9IKrp!?@8mq*A^q z1uhh3lz%8@dG>dWJn*VP@c(@BerD7*z9oo2ZTkt$jB|Ytk=-E%ZbmyC(=fR^c0Fn1 zqlgI{(EcOHX<|Z}7$^tkkI98XCWwsuC~iTfCRlu88f85KmU(USFpF1dfS1bd!1d>Z z67vM@%tp(VVPzXo_f7!sWgXIRk?GcMdnMsh9F*!;oo&A7NQOg795xE~&p0oUnvD;I zdT$R%i46>t35rsHF7-M}Tb5UYaj`Cn%Y}NlIAPk1CAnRTqL$5SEU^>(2lqTI*_CEA zTR{L>L8)_hCh&m-0T>?vRMC=el#Fw2*k%wQublugEYecPSOH4n0|Kz51n>&Mv@j5EL!`J=Bbp7i-Ku?2m=0?H3F!`7(aWWn~N33f%4bC%M0Iy zbJbWl+D{OJGu_#YCz0aFo)4rp^MlA}OLxzpcO7q$AsrYwSKNhu7y^`c2*61X1pzYUa>@r3uP0h=0&1W-Awc60 zWo#9L0CjO)gMh}kc#8n9TjYe5uj}q;J zjh2AHs2&JV@2PCwi~C$gVh94pcIZd|uXL0hAGmU03L0YsaPh`8ETKv#Et86k4Z$6F zSzjcltxtK~B0yr02I+$vAbHM_aq--dA6$^fM8Boc zt5Tu|<5MaGXlFSeR-B{PQcW>qYn-2LRPT}Ev@T2>(OQ8mMfrv%Y3^0rdA`W|A$z(n zPfTesMw)x&64ex(xrOR?xmhxDwC4^z0=yw~6(aez3gX~-Mu3(iAZQcg(^L`xD1QQY z3laMs#UT~?90V|%>k_LLLxVtL7u=HuEia}>&5|`Fe*|Riq&&^RsJiSdM;y?*y$k$W zyrCCdJ1E0wT$n(BK`G6RL$eTk;d~T^&+I!)qaqk zPzc=kYN~bkIwF#4UFV#;o(~;3F!9TCo%5@B(s9Yr0&D%ACR^uh>pAMY@3?BEE4cl9#1n4W~|Yo_6xX!JvCnJ$vUtyD=1XTh6N z1<`g_X?h?gZ(2(r(ZobFF;KMTfLL|=FA@{ARRW3TOw@KUPz7^RaKv3BRqm(Z1A$#0 z8hPQy+Jg3S!f<*ZPV4><5G0y2Ax#XFlsO=p`g>)GiF@1_h-l74_7!8UQJB>JXpMOH zvP@MkS7@b?>~U36oB9+F_ThuDzn>9EG-pDZ7M2)BKqK_>X^B@%a8K(>$)mq3qG8s8h)|H0EzM zW+0PCZYgD^iBVqm*bV~lC4F?M~7Qy{AhO2Y&vrAo<2rS?gt z*lH4F)yYG?ou2m}Y5#8mfa7e9tiNf1Ogn?@{NsOZ(09G4L;=dH-&vjTs_tu#%N zl@is%m2&}am4zV&<*bya%qnH4_|FPgd~5R=8HxnT-oUFx`u~aV|L0%-p1$nWipeiV z$p4+V&Efv5@Bg=oVUFJ%pHj)qph$7vWUBrL+AZgSL9zUtAfI29Cto=Ef3({yxBta& zvv!l!`X7k<{}_}1MY;YL!OY^uTVxAdAAaJ6JO31fPs|xKniUqBCP=dKT?qZZ{jk0p zBM+@b-h%J{iurI09Ep@4@A3cD_kWeH8JE|7o2z}4qETFChBd8>{oI)v+nPM2?>ct! zCGqW_?*hDZExCy|J}>QSkS|Fdf4)t)IbO4z{;O}+!7Ya^E|vH1-)4SuJpbLdTz+K^ z&yV@L(j)`KoHxk-_HB;W{H?gmxWdZ!^?w&bu&eVc zrXzy}U+el0R~N^rusOvbXjfGY68D8BiECO}!lu>VArALH@5#!;(N6cFkmNibI_I7> zrq;56s~tL0Gy)|5>SNs9+Z)cgbUC4DKFblbkx6fq zwnM*)vr6t%Mmuk&)osqSYj3i0vRV`kh!m!4q`Y;(QGA7qJ(Q7iK0)x+L?vudD7e0K zP#(3!VHFN*k%4xrD^9QV%GGk1i;2B#l?KigU{(Khic{_}n6>bd@@9qs)_qv1+&O~WH~^u%i9 zqN?*+D#i_YstBR)K8=z3A`e{B`1 ztMy>GXdmBE*RWDiidR?R>tg{*Y4UXqi|vGv0WLa^RxhXybguWe;hNyhnY!}Li^GiZ zF*?`Bb16ZJQh+^;N9$bg+=UB4pLNv^-7Opq>fFz4P=4i|pY!oxIvz|R zpuvc#a&F2Mz6o;XOFY}vyWR_V!&rNmjhl%PpadyO0XErO;lPov>GJMYhv_zu!euoQ z5S!&J;Ay#Te7lx7{IdhA@F0N_lq%WdJr%d2x3YsFDl{t6hX4`~YhZyVHHTHd%z*_t z0-K#akrJf(6CmZteFz!t4JVdACjiI0f0Umb9M+}bHXP?ko4_H4FM1NdmH*s#4*?qB z+#&&y-I^J5o@oBWdm#0+@yu)nr>3|YYu8UG90*e)d{Jec3pT3LSqH@hi@DC zMde7`81c}@Xyy0|9!6Onkxzi4wwKOpZ}W}D__H{x^u4?#pK#k#a-zy zSmofVytuK}SG7pr{`E!*M`sxPtYl5(uEjW?IW&-OCTzq&SN8#1E6-Zq^f zKnb!{ot^NgVC`)PWW(Ie9oX(mhCc<_5HW;x_z?qHrZpFww))ou6?dBze-a$fG*JHa zB#IJLqP4j9edEUcigtQBSY6FV;3XxfIM>H%wst-Oalp*fp-Q8VSN8Z|3k53r6}=5Ck@D^P6?+_ z|21C4u5GxWeLrMf=7Y)_n#3i5$NTN5Y%&Q1bio7>_>%+Xiz*l}%JIQ$6XpIwhFNevh43bJT7Ghf{J>Yd!~T@qg}JXp-2^lO4? z+AgzVD|$OY^UV!d)dL3c`x_gjSmV)9%YLTPHzJj`V9U|~55=k~YR33R-$d8N8d$7p zEjRTKhpD4tDHd2Z&$3B?eFqw1mOJ}6a_0@BSGFU$b;_A)k>Njt^&r?vUja%rycEnj_bHo(#&MCB@ z^;zYqY(A^g{{HGp02(xt2&8$jgZXqY*)4j)vbR(w5s)Fn{@o-5x%R+F`9>Y?`WLzf zywLc75+RV&c@2bF|^EGkjUZRw#DTMyTg@FNF2^wc_dgiFg8)iBEyXHh+>N$Y;q z73)l`LrhktnLvnKzl_=oMF8uY#=xj~t9c|aE@Y4Y@jL`W4-!8y`Cm+%Mhp}wZ)AuG z+P9v^V7*5pQHtKcV|u;oEoUmA|4i!o7r8>BRITTKHs$ko{U84GT3lDHWBdIPWecZ@ zs`b>>qD`|Ylx{h5T`Nm}XH&x1gWTr96|d=mBuWDK+kH)$gqhbJ{xyRIxfN~RyB8Lf zm$6dCpzrkpEI+oRcEJXrrgw+gJYju(BQ}Q&*7yUWdwNYfBQcF6P!|a=v~Sj9D7((aMI^|UFx4go06qT9b?fkz4KjK z^7M-6)oG11d1??jlDet=Z3J3@8SLmJsX`jVVyr*Edzb@V8B`gg1ChZyckq?H#6ITha>UVW%Uq}qBntDtZzT+Z4 zO^&$}V8h(?y71WDuyIe6uA6+xys<2?jY0CeL1xY5lBtcFpW|{Y>UBl%PkR!pHW>QR z|4YZosykamYhcQTbqRv@)7wVMYmaN_24I5_hCDGh%V+5$(wuZ7HJ_UL{OH=lj z97E|-lmaYte4tvlJ`Jmu_^UptZsznybt`HN7@da)WK8KxA+Nltnsh4~7v&u<2gZ-j z)y+{G(~6ZYed0=V2`xljitStR>Aq>Y^f3`+<#c14x5m}oV^ehLv#!GUz!thW5BgC0 z6oUY>zQ5IVvb2Xa_ghOXUyi}057Rol`lQ8XZWx}o#2a1a?tY^_?=+J(x2p({uc%&Y z+mtV&abQQ?!Rn3KziAOoJ@clkAbv^?R4>iIgA(mutLO8lQ%=9fKisie31a71$)Mi+?Qz^Bqd}8sHX$25qaWH_Cs6Rk~|pdJD!ll7H>!<@}Xk5BpWn( zj^wv}H-x3VgvZxH`I>%&-#`KSZ(O117cm&H=B?5C881gDw)WcqcN9uhW{ebI&e|7>^|A9XZ*aC$>F*9) z?pPiy?Q}`1o@oo4qKBzY0aiHwV7jYGSJ^Ux@9@|h7cOW64z9(wUL=aOCv=uJ$3@Z- zyRPisD7>p>=N$w(gLCaLovmFBDy?o(!XDi7(6gi-5k7&j-%**HfdxU^@WR7Q9hC~H^~KCh7nKEe zQPe6FX+>KB9J0HLIvrLu~OGN{!Kpu)Og;eTTG` zu=3j}b*%0MRV|8?=O5?$6j!;8<2cxw^-3!iJqKI7t<IOhpyszr==-fl)y@d#Ed}^>WaLIG;N&acnuE& z{;twPy_@zNDinE|-UdrqB zLt$zDKxO;5zsbE&!*)$V_u^YAWt%P*Vh4GtE#r$*c_?={x$D(O9qe`=Hf{A)mmPbI zmk*iR274hI$e&QI)=1@fXK`D->2MbT+_L-k3Ki%$Gy!Dc6$JQYEb%Y!ph11K{RE7} zZv-eoiqdr35dqu2uVG^rc$g2&YUGErJaD*da?GT_tF^eEe4f+{y_u@<(hMny>j(lQ zIVr3nUX_3bR3ZSUbqL`7%80{w3V ztQr>2a&sS%;bREk7Jt*O45e4aNag(z2WtTxVy-l9M-CP|)9tXBquPYC%7xD+R!66u zvq>`!4HcW#)Zm!009Y~jb-}YN?|ysrHWeD<(P2~dWEDU3nA|P(FT4A=HRb;XPoeEZ#(>;;0j>*ER4xz!i23_Yeg2kW@$ihhH0`c3>Zm218$pi2e4GI#1e zDiuYEeP8bp%JemrVAGk;Sx&X^W!MEBi}6%XC!XNwj*eU(l;bG|vFe^B>S#kneqUDk zb6o^+cf~>K=*H)v)YH3aU5k>Gpz0jqf%i7PvsFu;w1u!oyVR0pZ;{HX)P>EV!^sEgf})&r)Mr0<7;^T6z8zP1xD;#?)sm>YJ^$eB+Zh9~v#)bByOi>M~B{ zXGRd<-Lv2OAAHtVA|SfP7O8E(e6rqB=?dP0n6;p)RHV8;IG+0~xjcVKMW-n7mYBT; z$$6jwhE%qcpI?u{u{H(bb%Xy%BP4^?1BO�<^fqXB8moaV!V_K@$T-Y7QvC8ml^- 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 literal 0 HcmV?d00001 diff --git a/Examples/Technical/SpinePreview/Assets/spineboy.atlas b/Examples/Technical/SpinePreview/Assets/spineboy.atlas new file mode 100644 index 0000000..eca542b --- /dev/null +++ b/Examples/Technical/SpinePreview/Assets/spineboy.atlas @@ -0,0 +1,94 @@ +spineboy.png + size: 1024, 256 + filter: Linear, Linear + scale: 0.5 +crosshair + bounds: 352, 7, 45, 45 +eye-indifferent + bounds: 862, 105, 47, 45 +eye-surprised + bounds: 505, 79, 47, 45 +front-bracer + bounds: 826, 66, 29, 40 +front-fist-closed + bounds: 786, 65, 38, 41 +front-fist-open + bounds: 710, 51, 43, 44 + rotate: 90 +front-foot + bounds: 210, 6, 63, 35 +front-shin + bounds: 665, 128, 41, 92 + rotate: 90 +front-thigh + bounds: 2, 2, 23, 56 + rotate: 90 +front-upper-arm + bounds: 250, 205, 23, 49 +goggles + bounds: 665, 171, 131, 83 +gun + bounds: 798, 152, 105, 102 +head + bounds: 2, 27, 136, 149 +hoverboard-board + bounds: 2, 178, 246, 76 +hoverboard-thruster + bounds: 722, 96, 30, 32 + rotate: 90 +hoverglow-small + bounds: 275, 81, 137, 38 +mouth-grind + bounds: 614, 97, 47, 30 +mouth-oooo + bounds: 612, 65, 47, 30 +mouth-smile + bounds: 661, 64, 47, 30 +muzzle-glow + bounds: 382, 54, 25, 25 +muzzle-ring + bounds: 275, 54, 25, 105 + rotate: 90 +muzzle01 + bounds: 911, 95, 67, 40 + rotate: 90 +muzzle02 + bounds: 792, 108, 68, 42 +muzzle03 + bounds: 956, 171, 83, 53 + rotate: 90 +muzzle04 + bounds: 275, 7, 75, 45 +muzzle05 + bounds: 140, 3, 68, 38 +neck + bounds: 250, 182, 18, 21 +portal-bg + bounds: 140, 43, 133, 133 +portal-flare1 + bounds: 554, 65, 56, 30 +portal-flare2 + bounds: 759, 112, 57, 31 + rotate: 90 +portal-flare3 + bounds: 554, 97, 58, 30 +portal-shade + bounds: 275, 121, 133, 133 +portal-streaks1 + bounds: 410, 126, 126, 128 +portal-streaks2 + bounds: 538, 129, 125, 125 +rear-bracer + bounds: 857, 67, 28, 36 +rear-foot + bounds: 663, 96, 57, 30 +rear-shin + bounds: 414, 86, 38, 89 + rotate: 90 +rear-thigh + bounds: 756, 63, 28, 47 +rear-upper-arm + bounds: 60, 5, 20, 44 + rotate: 90 +torso + bounds: 905, 164, 49, 90 diff --git a/Examples/Technical/SpinePreview/Assets/spineboy.png b/Examples/Technical/SpinePreview/Assets/spineboy.png new file mode 100644 index 0000000000000000000000000000000000000000..0ea9737f30707915e0bf495cdf987c6511dc0500 GIT binary patch literal 245321 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 z
  1. sZ@kf@gL7X)y;k|NZYN7CI4}AlT7Z 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

    $ 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%0DxD_{VYG+f0?szS)DJk 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 kPx# literal 0 HcmV?d00001 diff --git a/Examples/Technical/SpinePreview/Package.swift b/Examples/Technical/SpinePreview/Package.swift new file mode 100644 index 0000000..668b0ba --- /dev/null +++ b/Examples/Technical/SpinePreview/Package.swift @@ -0,0 +1,27 @@ +// swift-tools-version: 6.2 +import Foundation +import PackageDescription + +let package = Package( + name: "SpinePreview", + platforms: [.macOS(.v15), .iOS(.v18)], + products: [.executable(name: "SpinePreview", targets: ["SpinePreview"])], + dependencies: [ + .package(url: "https://github.com/AdaEngine/AdaEngine.git", revision: "b43d7e8f2f03e124a62b77499f7c2949a078dc27") + ], + targets: [ + .executableTarget( + name: "SpinePreview", + dependencies: [ + .product(name: "AdaSpineRuntime", package: "adaengine") + ], + path: ".", + exclude: ["README.md"] + (FileManager.default.fileExists(atPath: "dist") ? ["dist"] : []), + sources: [ + "SpinePreview.swift" + ], + resources: [.copy("Assets")], + swiftSettings: [.enableUpcomingFeature("MemberImportVisibility"), .strictMemorySafety()] + ) + ] +) diff --git a/Examples/Technical/SpinePreview/README.md b/Examples/Technical/SpinePreview/README.md new file mode 100644 index 0000000..77d5841 --- /dev/null +++ b/Examples/Technical/SpinePreview/README.md @@ -0,0 +1,23 @@ +# Spine runtime visual preview + +Export 240 real poses of the official Spineboy example with the new +`AdaSpineRuntime`, including skinned/clipped geometry and bone endpoints: + +```powershell +$env:ADAENGINE_HEADLESS = '1' +swift run --package-path Examples/Technical/SpinePreview SpinePreview C:/path/to/spine-preview +python -m http.server 8769 --bind 127.0.0.1 --directory C:/path/to/spine-preview +``` + +Open `http://127.0.0.1:8769`. Select walk, run or jump; show the skeleton, pause, +change playback speed or scrub individual frames. + +The Swift executable samples the production player. The browser only draws the +exported triangles and bone endpoints; it does not implement or imitate Spine +animation. This is a portable WebGL preview, **not proof of AdaEngine's native GPU +draw pass**. The production headless integration tests cover extraction and GPU +buffer preparation separately. See the [Spine guide](https://github.com/AdaEngine/Ada/blob/main/Documentation/Spine2D.md) for engine usage. + +The example character, skeleton and atlas are official Esoteric Software assets +from the pinned upstream commit. Source and license notices are included in the +exported preview directory. No generated animation data is checked into the repo. diff --git a/Examples/Technical/SpinePreview/SpinePreview.swift b/Examples/Technical/SpinePreview/SpinePreview.swift new file mode 100644 index 0000000..fee1d4d --- /dev/null +++ b/Examples/Technical/SpinePreview/SpinePreview.swift @@ -0,0 +1,80 @@ +import AdaSpineRuntime +import Foundation + +/// Exports actual runtime poses for a portable visual preview, without substituting animation in JavaScript. +@main +struct SpinePreview { + struct Draw: Encodable { + let page: Int + let blend: Int + let pma: Bool + let vertices: [[Float]] + let indices: [UInt32] + } + struct Frame: Encodable { + let draws: [Draw] + let bones: [[Float]] + } + struct Clip: Encodable { + let name: String + let fps: Int + let frames: [Frame] + } + struct Preview: Encodable { + let source = "AdaSpineRuntime / official Spine C 4.2" + let clips: [Clip] + } + + static func main() throws { + let arguments = CommandLine.arguments + guard arguments.count == 2 else { + print("Usage: swift run SpinePreview ") + return + } + let output = URL(fileURLWithPath: arguments[1], isDirectory: true) + try FileManager.default.createDirectory(at: output, withIntermediateDirectories: true) + guard let assets = Bundle.module.resourceURL?.appendingPathComponent("Assets") else { + throw SpineError.invalidData("Preview assets are missing.") + } + let skeleton = try Data(contentsOf: assets.appendingPathComponent("spineboy-pro.skel")) + let atlas = try String(contentsOf: assets.appendingPathComponent("spineboy.atlas"), encoding: .utf8) + let player = try SpineAnimationPlayer(skeleton: skeleton, atlas: atlas, format: .binary) + print("Animations: \(player.animationNames.joined(separator: ", "))") + let fps = 30 + var clips: [Clip] = [] + for name in ["idle", "walk", "run", "jump"] where player.animationNames.contains(name) { + player.resetToSetupPose() + try player.play(name, repeats: name != "jump", transitionDuration: 0) + var frames: [Frame] = [] + for index in 0..<60 { + if index > 0 { player.advance(by: 1 / Float(fps)) } + frames.append(Frame( + draws: player.snapshot().map { draw in + Draw(page: draw.pageIndex, blend: draw.blendMode.rawValue, pma: draw.premultipliedAlpha, + vertices: draw.vertices.map { vertex in + [round(vertex.x), round(vertex.y), round(vertex.u), round(vertex.v), + round(vertex.red), round(vertex.green), round(vertex.blue), round(vertex.alpha), + round(vertex.darkRed), round(vertex.darkGreen), round(vertex.darkBlue), round(vertex.darkAlpha)] + }, indices: draw.indices) + }, + bones: player.boneSnapshot().filter(\.isActive).map { [round($0.x), round($0.y), round($0.endX), round($0.endY)] } + )) + } + clips.append(Clip(name: name, fps: fps, frames: frames)) + } + let data = try JSONEncoder().encode(Preview(clips: clips)) + try data.write(to: output.appendingPathComponent("poses.json")) + var script = Data("window.SPINE_PREVIEW_DATA=".utf8) + script.append(data) + script.append(Data(";".utf8)) + try script.write(to: output.appendingPathComponent("poses.js")) + for name in ["spineboy.png", "preview.html", "SpineRuntime-LICENSE.txt", "UPSTREAM.md"] { + let content = try Data(contentsOf: assets.appendingPathComponent(name)) + let destination = name == "preview.html" ? "index.html" : name + try content.write(to: output.appendingPathComponent(destination)) + } + print("Exported \(clips.count) animations / \(clips.reduce(0) { $0 + $1.frames.count }) runtime frames to \(output.path)") + } + + private static func round(_ value: Float) -> Float { (value * 100_000).rounded() / 100_000 } +} diff --git a/Examples/Technical/Sponza/.gitignore b/Examples/Technical/Sponza/.gitignore new file mode 100644 index 0000000..fd14c91 --- /dev/null +++ b/Examples/Technical/Sponza/.gitignore @@ -0,0 +1,6 @@ +.build/ +.swiftpm/ +dist/ +*.xcodeproj/ +__pycache__/ +Package.resolved diff --git a/Examples/Technical/Sponza/Assets/intel-sponza-routes.json b/Examples/Technical/Sponza/Assets/intel-sponza-routes.json new file mode 100644 index 0000000..165b537 --- /dev/null +++ b/Examples/Technical/Sponza/Assets/intel-sponza-routes.json @@ -0,0 +1,105 @@ +{ + "schema": 1, + "dataset": "intel-sponza-2022", + "samples": 600, + "fieldOfViewDegrees": 60, + "near": 0.05, + "far": 200, + "interpolation": "linear-position-shortest-nlerp-v1", + "rotationConvention": "AdaEngine +Z camera; source glTF rotation multiplied by local Y pi", + "routes": [ + { + "id": "atrium", + "start": { + "sourceCamera": "PhysCamera001", + "position": [ + -8.80743, + 1.59221947, + -0.85825783 + ], + "rotation": [ + -0.07516095149438418, + 0.6351054436274549, + 0.062298597138649006, + 0.7662315522345637 + ] + }, + "end": { + "sourceCamera": "PhysCamera003", + "position": [ + 2.70301843, + 1.35489559, + 2.11138153 + ], + "rotation": [ + 0.024976103325682304, + 0.8155856936530769, + 0.03530248834015994, + -0.577018114869964 + ] + } + }, + { + "id": "ground-floor-corridor", + "start": { + "sourceCamera": "PhysCamera005", + "position": [ + -2.23714, + 0.7440546, + 2.3608017 + ], + "rotation": [ + -0.0645746858853836, + 0.8437104882398467, + 0.10425182535720703, + 0.522603366700382 + ] + }, + "end": { + "sourceCamera": "PhysCamera001", + "position": [ + -8.80743, + 1.59221947, + -0.85825783 + ], + "rotation": [ + -0.07516095149438418, + 0.6351054436274549, + 0.062298597138649006, + 0.7662315522345637 + ] + } + }, + { + "id": "upper-gallery", + "start": { + "sourceCamera": "PhysCamera004", + "position": [ + -9.594356, + 6.921101, + 5.35278 + ], + "rotation": [ + 0.005818486075351097, + 0.817546556587467, + -0.008261681106991187, + 0.5757738424564397 + ] + }, + "end": { + "sourceCamera": "PhysCamera002", + "position": [ + 10.5311031, + 7.352985, + 1.52825129 + ], + "rotation": [ + 0.007428735261073167, + 0.7500144768872583, + 0.008424937740373797, + -0.6613260306203164 + ] + } + } + ] +} diff --git a/Examples/Technical/Sponza/Camera/SponzaCameraMotion.swift b/Examples/Technical/Sponza/Camera/SponzaCameraMotion.swift new file mode 100644 index 0000000..348016a --- /dev/null +++ b/Examples/Technical/Sponza/Camera/SponzaCameraMotion.swift @@ -0,0 +1,30 @@ +import AdaTransform +import Foundation + +/// Repeatable six-second gallery controls, evaluated from wall time rather than frame count. +public enum SponzaCameraMotion: String, CaseIterable, Sendable { + case stationary + case translation + case rotation + + public func pose(from origin: Transform, seconds: Double) -> Transform { + guard seconds.isFinite else { return origin } + let phase = seconds.remainder(dividingBy: 6) * .pi / 3 + var pose = origin + switch self { + case .stationary: + break + case .translation: + // The upper gallery runs along world X. Keep height, heading and corridor Z fixed. + pose.position.x += Float(1.5 * (1 - cos(phase))) + case .rotation: + var camera = SponzaFlyCamera() + camera.setPose(origin) + pose.rotation = SponzaFlyCamera.rotation( + yaw: camera.yaw + Float(phase), + pitch: camera.pitch + Float(0.2 * sin(2 * phase)) + ) + } + return pose + } +} diff --git a/Examples/Technical/Sponza/Camera/SponzaFlyCamera.swift b/Examples/Technical/Sponza/Camera/SponzaFlyCamera.swift new file mode 100644 index 0000000..2d225fb --- /dev/null +++ b/Examples/Technical/Sponza/Camera/SponzaFlyCamera.swift @@ -0,0 +1,48 @@ +import AdaTransform +import Foundation +import Math + +/// +Z forward, yaw about world Y, then pitch about the camera's local X. No roll. +public struct SponzaFlyCamera { + public private(set) var transform = Transform() + public private(set) var yaw: Float = 0 + public private(set) var pitch: Float = 0 + + public init() {} + + public mutating func setPose(_ pose: Transform) { + transform = pose + let forward = pose.matrix.z + yaw = Math.atan2(forward.x, forward.z) + pitch = -asin(max(-1, min(1, forward.y))) + } + + public static func rotation(yaw: Float, pitch: Float) -> Quat { + let horizontal = Quat(axis: [0, 1, 0], angle: yaw) + let vertical = Quat(axis: [1, 0, 0], angle: pitch) + // Hamilton product Y * X; spelling out the axes avoids legacy Euler conventions. + return Quat(x: horizontal.w * vertical.x, y: horizontal.y * vertical.w, + z: -horizontal.y * vertical.x, w: horizontal.w * vertical.w).normalized + } + + public static func looking(from position: Vector3, at target: Vector3) -> Transform { + let direction = (target - position).normalized + return Transform(rotation: rotation(yaw: Math.atan2(direction.x, direction.z), pitch: -asin(max(-1, min(1, direction.y)))), position: position) + } + + public mutating func look(delta: Vector2) { + guard delta.x.isFinite, delta.y.isFinite, delta != .zero else { return } + yaw = (yaw + delta.x * 0.003).remainder(dividingBy: 2 * .pi) + pitch = max(-1.55, min(1.55, pitch + delta.y * 0.003)) + transform.rotation = Self.rotation(yaw: yaw, pitch: pitch) + } + + public mutating func move(local: Vector3, seconds: Double, fast: Bool) { + guard seconds.isFinite, seconds > 0 else { return } + let basis = transform.matrix + var direction = Vector3(basis.x.x, basis.x.y, basis.x.z) * local.x + + Vector3(0, local.y, 0) + Vector3(basis.z.x, basis.z.y, basis.z.z) * local.z + if direction.length > 1 { direction = direction.normalized } + transform.position += direction * Float(min(seconds, 0.05)) * (fast ? 10 : 3) + } +} diff --git a/Examples/Technical/Sponza/Camera/SponzaLightMotion.swift b/Examples/Technical/Sponza/Camera/SponzaLightMotion.swift new file mode 100644 index 0000000..0c42b4a --- /dev/null +++ b/Examples/Technical/Sponza/Camera/SponzaLightMotion.swift @@ -0,0 +1,13 @@ +import Foundation +import Math + +/// A repeatable twelve-second flight through the upper gallery. +public enum SponzaLightMotion { + public static func position(seconds: Double) -> Vector3 { + let phase: Double = (seconds.isFinite ? seconds : 0).remainder(dividingBy: 12) * .pi / 6 + let x = Float(8 * Foundation.sin(phase)) + let y = Float(7.4 + 0.6 * Foundation.sin(2 * phase)) + let z = Float(5.35 + 0.5 * Foundation.cos(phase)) + return Vector3(x, y, z) + } +} diff --git a/Examples/Technical/Sponza/Package.swift b/Examples/Technical/Sponza/Package.swift new file mode 100644 index 0000000..e5f501f --- /dev/null +++ b/Examples/Technical/Sponza/Package.swift @@ -0,0 +1,35 @@ +// swift-tools-version: 6.2 +import Foundation +import PackageDescription + +let package = Package( + name: "SponzaDemo", + platforms: [.macOS(.v15), .iOS(.v18)], + products: [.executable(name: "SponzaDemo", targets: ["SponzaDemo"])], + dependencies: [ + .package(url: "https://github.com/AdaEngine/AdaEngine.git", revision: "b43d7e8f2f03e124a62b77499f7c2949a078dc27") + ], + targets: [ + .executableTarget( + name: "SponzaDemo", + dependencies: [ + "SponzaCamera", + .product(name: "AdaEngine", package: "adaengine"), + .product(name: "Math", package: "adaengine") + ], + path: ".", + exclude: ["README.md", "Camera", "Tests"] + (FileManager.default.fileExists(atPath: "dist") ? ["dist"] : []), + sources: [ + "SponzaDemo.swift", + "SponzaDemoProfiler.swift", + "SponzaLighting.swift", + "SponzaStutterProfiler.swift", + "SponzaWarmup.swift" + ], + resources: [.copy("Assets")], + swiftSettings: [.enableUpcomingFeature("MemberImportVisibility"), .strictMemorySafety()] + ), + .target(name: "SponzaCamera", dependencies: [.product(name: "AdaTransform", package: "adaengine"), .product(name: "Math", package: "adaengine")], path: "Camera"), + .testTarget(name: "SponzaDemoTests", dependencies: ["SponzaCamera", .product(name: "AdaTransform", package: "adaengine")], path: "Tests") + ] +) diff --git a/Examples/Technical/Sponza/README.md b/Examples/Technical/Sponza/README.md new file mode 100644 index 0000000..06a9b4f --- /dev/null +++ b/Examples/Technical/Sponza/README.md @@ -0,0 +1,183 @@ +# Sponza windowed demo + +> Commands below run from an AdaExamples checkout. Set `ADAENGINE_ROOT` to an +> engine checkout and `ADAENGINE_SPONZA_ASSETS` to its prepared Sponza `assets` +> directory. Route metadata is bundled with this package; datasets remain external. + + +Fetch the external dataset first with `python "$ADAENGINE_ROOT/script/fetch_benchmark_scene.py"` from the AdaExamples root. +The original assets and licenses stay in the engine checkout under `.build-codex/benchmark-assets/intel-sponza`. + +Run `swift run --package-path Examples/Technical/Sponza -c release SponzaDemo`. +`ADAENGINE_SPONZA_ASSETS` can override the prepared assets directory. +On Windows, use the same Swift/Dawn/Tint configuration as the native renderer benchmark. + +WASD moves, Q/E changes world height, hold the right mouse button to look, and Shift increases speed. +Escape releases mouse capture until the right button is released. Yaw uses world Y and pitch uses local X; +there is no roll. The toolbar selects atrium, corridor, gallery or outside and toggles Hi-Z. +There is no collision controller. PBR textures, three shadow cascades and +3 EV match the benchmark profile. + +Set `ADAENGINE_SPONZA_PROFILE_OUTPUT` to an absolute JSON filename to measure actual SceneView publication +intervals without image readback. After loading, the profiler visits atrium, gallery and outside with three +alternating pairs of shadow-on/off measurements (one second warmup, two seconds measured per case). +Keep window size constant during the entire run; discard a case if its size changes. Camera input is disabled +while profiling. The profiler restores shadows and the outside viewpoint when it finishes. +Graph records contain CPU encoding times, not GPU timestamp measurements. Use the opt-in rendering tests +for the reproducible meshlet benchmark, and the window profile to investigate interactive frame pacing. + +`ADAENGINE_WEBGPU_LEGACY_COMPLETION=1` selects the old native callback polling path for diagnostic comparisons. +Leave it unset during normal use. + +For moving-camera measurements, also set `ADAENGINE_SPONZA_PROFILE_MOTION=1`. +This compares the stationary gallery pose, a 0–3 metre translation along gallery X, and a full 360-degree +turn with a small pitch sweep. Motion follows a six-second wall-clock cycle through the same ECS camera +component write path as interactive movement. Each case has one second warmup and six seconds measured; +three alternating shadow-on/off pairs are recorded for each motion. `motion` and `cameraUpdates` identify +what actually moved. Use `stationary`, `translation` or `rotation` instead of `1` to run only that motion. +The scripted motion does not emulate native mouse events or an arbitrary user flight path. + +## Lighting and path tracing + +The window now has three explicit presets: full 8.81M-triangle raster geometry, raster lighting LOD, +and path tracing on the same lighting LOD. The default interactive preset is full-scene raster with the 12 local lights. +`ADAENGINE_SPONZA_RENDER_PRESET=fullRaster|lodRaster|pathTracing` selects startup mode. +The light button cycles 0 / 4 / 12 local lights; the sun stays enabled. +Four warm gallery spots cast shadows; eight warm/cool point fill lights do not. +The demo now defaults to 2048 pixels per sun cascade and 1024 per local-light face/tile. +Sun-shadow coverage also increases from 30 to 80 metres with closer cascade splits (lambda 0.85). +The shadow button switches back to the earlier 1024/512, 30-metre setting. Other scenes retain their defaults. +Raster local-shadow budget remains four lights; the renderer selects nearby shadow-casting sources, +including the moving test light, within that budget. PT shadow rays do not use this raster atlas budget. +The separate flying-light button enables a shadow-casting point light on a twelve-second gallery orbit. +It starts enabled for interactive testing, independently of the 0 / 4 / 12 stationary lights. +Turn it off to inspect static PT accumulation; moving light intentionally resets that accumulation. + +The portable shader-BVH tracer supports at most 131072 triangles. Prepare the distinct lighting LOD first: +`python "$ADAENGINE_ROOT/script/prepare_sponza_path_tracing.py" --gltfpack `. +The current preparation yields 122286 source triangles, preserving image references and keeping the originals. +The tool records output hashes and its executable hash in `assets/lighting-pt-receipt.json`. +Pinned tool source: https://github.com/zeux/meshoptimizer/releases/tag/v1.3 ; Windows archive SHA-256: +`f6e9c09d66af23da3da71b86f0652d2413e81c734e0aecd1cd3d0e6e6e8645c0`. +This is a strongly simplified geometry preset; UVs and normals participate in attribute-aware simplification. +The relative geometric error is limited to 1%, with a larger triangle allocation for architecture than ivy. +Preparation rejects a result that loses an entire source material group. The former 100% error profile +discarded the floor and wall groups and must be regenerated. This LOD does not reproduce full-scene geometric detail. + +PT uses 1 sample per pixel, 2 interactions and up to 128 accumulated static frames. +Without DLSS the quality button selects 1/2 width and height or the faster 1/4 preview. +With DLSS it selects Quality (2/3 input scale) or Performance (1/2); PT traces at that input size, +without a second internal resolution reduction. DLSS Super Resolution is enabled by default when available. +Its separate status line reports actual encoded frames and fallback frames. Unsupported devices retain +the ordinary rendering path and report that DLSS is unavailable. +Camera/light changes reset accumulation. It is software BVH traversal, not hardware RTX. +The demo uses 512-pixel PT material tiles (the engine default remains 128); raster still samples the +original textures. The comparison is a renderer workload comparison, not an equal-image-quality benchmark. +The status line reports actual encoded geometry, lights, ray-image size or a tracing failure. + +For the lighting benchmark set `ADAENGINE_SPONZA_PROFILE_LIGHTING=1` along with the profile output, +`ADAENGINE_SPONZA_RENDER_PRESET=lodRaster`, and optionally `ADAENGINE_SPONZA_PROFILE_MOTION=rotation`. +It measures the LOD in raster and path tracing with 0, 4 and 12 local lights, three rounds of six seconds +per case after one second warmup. Cold BVH/atlas construction is outside measurement and has a 180-second +readiness deadline. PT cases require actual encoded-frame progress, expected light count and no failure; +a fallback image does not count as a path-tracing result. Profiling disables DLSS and the flying light +to preserve the explicit stationary-light cases. Full-scene legacy profiles retain 0 local lights. + +For Windows DLSS builds, prepare and stage the matching native NGX runtime using +[Documentation/DLSS.md](https://github.com/AdaEngine/Ada/blob/main/Documentation/DLSS.md). This demo uses Super Resolution, not Frame Generation +or Ray Reconstruction. DLSS cannot recover geometry removed during asset preparation. + +Native camera history is retained while offscreen render targets are being prepared; removal of the actual +camera releases that history. GPU regression coverage exercises this lifecycle. During movement, this +experimental tracer resets accumulation; it has no temporal reprojection or production denoiser. +The current static PT image still has substantial visual defects even after accumulation and is not a +production-quality reference. See the accepted workload measurements and remaining limits in +[the lighting report](https://github.com/AdaEngine/Ada/blob/main/Documentation/Performance/SponzaLightingPerformance-2026-11-03.md). + +## Meshlets and cluster map + +Prepare clusters without simplifying the source scene: + +```text +python "$ADAENGINE_ROOT/script/build_meshlet_tool.py" +python "$ADAENGINE_ROOT/script/prepare_meshlets.py" /main_sponza/benchmark-pbr.gltf --builder native +python "$ADAENGINE_ROOT/script/prepare_meshlets.py" /pkg_b_ivy/benchmark-pbr.gltf --builder native +``` + +Keep each `.gltf.meshlets` file beside its source. Repeat preparation for `lighting-pt.gltf` to use +the smaller raster LOD. Missing or invalid sidecars retain ordinary geometry. The builder pins +meshoptimizer 1.3; no offline C++ dependency enters the runtime. See [Tools/Meshlets](https://github.com/AdaEngine/Ada/blob/main/Tools/Meshlets/README.md). + +The meshlet button cycles **disabled → cpuReference → gpu**. The engine default stays disabled; +this diagnostic demo explicitly selects GPU mode. `ADAENGINE_SPONZA_MESHLETS` overrides the startup mode. +GPU v1 conservatively culls prepared static opaque singleton draws by frustum and compacts their indices, +issuing one indirect draw per original coarse draw. Existing instancing, MASK/BLEND, deformed/graph/parallax +surfaces, force-visible meshes, unknown draw passes and unsupported devices retain the original path. +Custom passes must explicitly adopt `MeshletGeometryDrawPass` to promise static vertex coverage and consume +the main-pass geometry override. Hi-Z uses the existing +legacy path; combined meshlet Hi-Z/cone culling is not enabled in this version. +Fully contained parts bypass classification/index copying and use their complete original draw; `целиком` +reports this fast path separately from unsupported fallbacks. Partial parts use workgroup-parallel prefix +scan and three batched compute passes per view, preserving source primitive order. + +The separate **Карта мешлетов** button displays stable colors from actual local cluster IDs. Gray means +ordinary fallback geometry, not a missing surface. The map selects full-scene raster, disables DLSS for +sharp diagnostic colors and preserves the source silhouette. Its cached diagnostic vertex streams are +bounded to 768 MiB and created only when requested. Exact partition display uses one draw per eligible part; +adaptive LOD display coalesces the selected node ranges. Neither path issues one draw per cluster. +this diagnostic allocation/draw path is excluded from performance measurements and bypasses unused GPU +visibility compaction. Unsupported or over-budget +parts remain gray. Set `ADAENGINE_SPONZA_MESHLET_MAP=1` to start in this view. + +These meshlets retain the full source triangles and are separate from the simplified PT lighting LOD. +The raster visibility processor does not accelerate the software path tracer's BVH. + +`ADAENGINE_SPONZA_PROFILE_MESHLETS=1` with an absolute `ADAENGINE_SPONZA_PROFILE_OUTPUT` runs +disabled/CPU/GPU comparisons in gallery rotation and a stationary outside view: three alternating rounds, +one second warmup and four seconds measured per case. It fixes full geometry, disables DLSS, local/flying +lights, Hi-Z and the map, and leaves sun shadows enabled. The run first warms the outside overview for +three seconds and a complete gallery turn for six seconds. CPU-known cluster counts, fully visible and +fallback triangles are separate from GPU-submitted index counts, which are read back only after each +measured interval. SceneView publication +and CPU graph times are not GPU timestamps. The run ends in the full-scene meshlet map. + +The current Windows/RTX 4070 gallery benchmark does **not** meet the acceleration gate: about 103 FPS +in GPU mode versus 123 FPS in disabled mode at 1890×843 without local lights or DLSS. Keep the mode +explicit while investigating this cost. Correctness, raw measurements and remaining platform limits: +[implementation report](https://github.com/AdaEngine/Ada/blob/main/Documentation/Performance/MeshletsImplementation-2026-11-03.md). + +## Adaptive meshlet LOD + +The original visibility-only meshlets do not simplify geometry. Prepare the additional hierarchy to let +groups of clusters use coarser parents with distance: + +```text +python "$ADAENGINE_ROOT/script/build_meshlet_tool.py" +python "$ADAENGINE_ROOT/script/prepare_meshlet_lod.py" /main_sponza/benchmark-pbr.gltf +python "$ADAENGINE_ROOT/script/prepare_meshlet_lod.py" /pkg_b_ivy/benchmark-pbr.gltf +``` + +Keep `.gltf.meshletlod` beside the source model; `.gltf.meshlets` remains the exact v1 partition. +The builder preserves source vertex identities and exact group boundary edges; it does not cross materials. +Missing/stale/corrupt hierarchy retains the original geometry or v1 culling. Unreducible groups remain exact +forest roots instead of inventing parent levels. The prepared full architecture has L0–L4, Ivy L0–L1. + +The **LOD** button cycles Off / 1 / 2 / 4 / 8 output pixels of allowed approximation error; the demo starts at 2. +`ADAENGINE_SPONZA_MESHLET_LOD=0|1|2|4|8` sets startup quality. Engine settings default to zero, and the +meshlet `disabled` mode still uses original geometry. Different source regions choose levels independently. +In the map, actual selected parents replace their children: L1 is tinted cyan, L2 orange, L3 pink, L4 purple; +L0 retains the original cluster-ID colors. The status reports selected levels/triangles for the diagnostic +cut. Ordinary GPU mode reports active LOD items; it does not synchronously read GPU triangle counts. + +At the coarsest complete forest, opaque architecture changes from 3,738,878 to 2,172,290 triangles, +Ivy from 5,065,558 to 4,455,592. These are offline lower bounds, not expected counts at every camera position. +Shadow/contact passes retain full source geometry. Temporal motion guides use independent immutable indices +and the same LOD cut, including previous object transforms; they do not borrow a completed GPU frame's buffer. + +`ADAENGINE_SPONZA_PROFILE_MESHLET_LOD=1` compares GPU LOD Off / 2 / 8 with the same two camera paths and +three alternating rounds. It fixes the new 2048/1024 shadow quality with 80-metre sun coverage, disables DLSS, local/flying lights, +Hi-Z and the map during timing, and records the explicit LOD/shadow settings. Profiling fixes the SceneView +to 1120×400 logical points so maximizing the native window cannot change the measured resolution. +Historical profiles keep +LOD off and 1024/512 shadows. `ADAENGINE_SPONZA_SHADOW_QUALITY=baseline` selects old startup shadows. + +[LOD, shadows and final validation](https://github.com/AdaEngine/Ada/blob/main/Documentation/Performance/MeshletLODAndShadows-2026-11-03.md). diff --git a/Examples/Technical/Sponza/SponzaDemo.swift b/Examples/Technical/Sponza/SponzaDemo.swift new file mode 100644 index 0000000..f83d61d --- /dev/null +++ b/Examples/Technical/Sponza/SponzaDemo.swift @@ -0,0 +1,371 @@ +import AdaEngine +import Foundation +import Math +import Observation +import SponzaCamera + +struct CameraRoutes: Decodable { + struct Pose: Decodable { + var position: [Float] + var rotation: [Float] + + var transform: Transform { + Transform(rotation: Quat(x: rotation[0], y: rotation[1], z: rotation[2], w: rotation[3]), position: [position[0], position[1], position[2]]) + } + } + struct Route: Decodable { var id: String; var start: Pose } + var routes: [Route] +} + +@MainActor +@Observable +final class SponzaSession: Resource { + var status = "Загружаем Sponza + Ivy…" + var hiZ = false + var requestedView: Int? + var camera: Entity? + var poses: [CameraRoutes.Pose] = [] + var preset = SponzaRenderPreset.fullRaster + var lightCount = 12 + var requestedPreset: SponzaRenderPreset? + var requestedLightCount: Int? + var pathHighQuality = true + var requestedQuality: Bool? + var dlssAvailable = false + var dlssEnabled = true + var requestedDLSS: Bool? + var dlssStatus = "Проверяем DLSS…" + var flyingLightEnabled = true + var meshletMode = MeshletVisibilityMode3D.gpu + var meshletMapEnabled = false + var requestedMeshletMode: MeshletVisibilityMode3D? + var requestedMeshletMap: Bool? + var meshletLODError: Float = 2 + var requestedMeshletLODError: Float? + var highResolutionShadows = true + var requestedShadowQuality: Bool? + var meshletStatus = "Загружаем подготовленные мешлеты…" + @ObservationIgnored var meshletStatistics: Render3DMeshletStatistics? + @ObservationIgnored var flightSeconds = 0.0 + @ObservationIgnored var temporalStatistics: Render3DTemporalStatistics? + var rendererStatus = "Готовим освещение…" + @ObservationIgnored var fullGeometry: Entity? + @ObservationIgnored var lodGeometry: Entity? + @ObservationIgnored var sun: Entity? + @ObservationIgnored var lighting = SponzaLighting() + @ObservationIgnored var pathStatistics: Render3DPathTracingStatistics? + @ObservationIgnored var nextStatusUpdate = ContinuousClock.now + var isLoaded = false + @ObservationIgnored let warmupFrames = SponzaWarmupFrames() + @ObservationIgnored var flight = SponzaFlyCamera() + @ObservationIgnored var cancelledLook = false + @ObservationIgnored var profiler: SponzaDemoProfiler? + var loadTask: Task? + @ObservationIgnored weak var runtime: AppWorlds? + + func move(to index: Int) { + guard poses.indices.contains(index), let camera else { return } + let transform = poses[index].transform + camera.components[Transform.self] = transform + camera.components[GlobalTransform.self] = GlobalTransform(matrix: transform.matrix) + flight.setPose(transform) + } +} + +@main +struct SponzaDemo: App { + var body: some AppScene { + WindowGroup { SponzaView() } + .window(with: UIWindow.Configuration(title: "Sponza + Ivy · AdaEngine", frame: Rect(x: 0, y: 0, + width: ProcessInfo.processInfo.environment["ADAENGINE_SPONZA_PROFILE_STUTTER"] == "1" ? 2560 : 1280, + height: ProcessInfo.processInfo.environment["ADAENGINE_SPONZA_PROFILE_STUTTER"] == "1" ? 1400 : 800))) + } +} + +private struct SponzaView: View { + @State private var session = SponzaSession() + + var body: some View { + VStack(spacing: 8) { + HStack(spacing: 16) { + Button("Атриум") { session.requestedView = 0 } + Button("Коридор") { session.requestedView = 1 } + Button("Галерея") { session.requestedView = 2 } + Button("Снаружи") { session.requestedView = 3 } + Button(session.hiZ ? "Hi-Z: вкл." : "Hi-Z: выкл.") { session.hiZ.toggle() } + } + .disabled(!session.isLoaded) + Text(session.status) + HStack(spacing: 16) { + Button("Полная сцена · растр") { session.requestedPreset = .fullRaster } + Button("PT LOD · растр") { session.requestedPreset = .lodRaster } + Button("PT LOD · path tracing") { session.requestedPreset = .pathTracing } + Button("Локальный свет: \(session.lightCount)") { session.requestedLightCount = session.lightCount == 0 ? 4 : session.lightCount == 4 ? 12 : 0 } + Button(session.meshletMapEnabled ? "Карта: 1:1" : session.dlssEnabled && session.dlssAvailable + ? (session.pathHighQuality ? "DLSS: Quality" : "DLSS: Performance") + : (session.pathHighQuality ? "PT: качество ½" : "PT: предпросмотр ¼")) { session.requestedQuality = !session.pathHighQuality } + } + .disabled(!session.isLoaded) + HStack(spacing: 16) { + Button(session.dlssEnabled && session.dlssAvailable && !session.meshletMapEnabled ? "DLSS: вкл." : "DLSS: выкл.") { session.requestedDLSS = !session.dlssEnabled } + Button(session.flyingLightEnabled ? "Летающий свет: вкл." : "Летающий свет: выкл.") { session.flyingLightEnabled.toggle() } + Button(session.highResolutionShadows ? "Тени: высокие · 80 м" : "Тени: базовые · 30 м") { session.requestedShadowQuality = !session.highResolutionShadows } + SponzaDLSSStatus(session: session) + } + .disabled(!session.isLoaded) + SponzaRendererStatus(session: session) + HStack(spacing: 16) { + Button("Мешлеты: \(session.meshletMode.rawValue)") { + session.requestedMeshletMode = session.meshletMode == .disabled ? .cpuReference : session.meshletMode == .cpuReference ? .gpu : .disabled + } + Button(session.meshletMapEnabled ? "Карта мешлетов: вкл." : "Карта мешлетов: выкл.") { session.requestedMeshletMap = !session.meshletMapEnabled } + Button(session.meshletLODError > 0 ? "LOD: \(Int(session.meshletLODError)) px" : "LOD: выкл.") { + session.requestedMeshletLODError = session.meshletLODError == 0 ? 1 : session.meshletLODError >= 8 ? 0 : session.meshletLODError * 2 + } + } + .disabled(!session.isLoaded) + SponzaMeshletStatus(session: session) + if session.meshletMapEnabled && session.meshletLODError > 0 { + Text("L0 — исходные кластеры · L1 — голубой · L2 — оранжевый · L3 — розовый · L4 — фиолетовый") + } + Text("WASD — движение · Q/E — вниз/вверх · правая кнопка мыши — осмотр · Shift — быстрее") + SceneView(useSceneCameras: true, make: { app in + app.addPlugin(TransformPlugin()).addPlugin(InputPlugin()).addPlugin(RenderWorldPlugin()) + .addPlugin(CameraPlugin()).addPlugin(AssetsPlugin()).addPlugin(VisibilityPlugin()) + .addPlugin(ScenePlugin()).addPlugin(Core3DPlugin(pathTracingPresentation: true)).addPlugin(UpscalePlugin()).addPlugin(SponzaPlugin()) + app.insertResource(session) + session.runtime = app + }, updateContent: { _, _ in }, onFrameRendered: { texture in + session.warmupFrames.didPublish() + session.profiler?.didPresent(width: texture.width, height: texture.height) + }) + .frameCaptureLabel("SponzaDemo") + // Keep measured GPU work independent of native-window resizing/maximization. + .frame(width: session.profiler?.isRunning == true && session.profiler?.usesFixedViewport == true ? 1120 : nil, + height: session.profiler?.isRunning == true && session.profiler?.usesFixedViewport == true ? 400 : nil) + .frame(maxWidth: .infinity, maxHeight: .infinity) + } + .padding(10) + .background(Color(0.06, 0.07, 0.09, 1)) + .foregroundColor(.white) + } +} + +private struct SponzaPlugin: Plugin { + func setup(in app: AppWorlds) { + app.addSystem(SponzaStartupSystem.self, on: .startup) + app.addSystem(SponzaControlsSystem.self, on: .preUpdate) + } +} + +@System +@MainActor +func SponzaStartup(_ context: WorldUpdateContext, _ resource: Res) { + let session = resource.wrappedValue + guard let app = session.runtime else { return } + // Keep the window rendering and accepting input while the asset actor decodes the 4K textures. + // The session owns this task for the lifetime of this single-window demo; it is not detached. + session.loadTask = Task { @MainActor in + do { + let environment = ProcessInfo.processInfo.environment + let repository = (environment["ADAENGINE_ROOT"] ?? environment["ADAENGINE_SHADER_SOURCE_ROOT"]).map { URL(fileURLWithPath: $0) } + ?? URL(fileURLWithPath: FileManager.default.currentDirectoryPath, isDirectory: true) + let root = ProcessInfo.processInfo.environment["ADAENGINE_SPONZA_ASSETS"].map { URL(fileURLWithPath: $0, isDirectory: true) } + ?? repository.appendingPathComponent(".build-codex/benchmark-assets/intel-sponza/assets") + let routes = try JSONDecoder().decode(CameraRoutes.self, from: Data(contentsOf: Bundle.module.bundleURL.appendingPathComponent("Assets/intel-sponza-routes.json"))) + guard routes.routes.count == 3, routes.routes.allSatisfy({ $0.start.position.count == 3 && $0.start.rotation.count == 4 }) else { + throw CocoaError(.fileReadCorruptFile) + } + session.poses = routes.routes.map(\.start) + let outside = SponzaFlyCamera.looking(from: [-32, 25, -35], at: [0, 4, 0]) + session.poses.append(CameraRoutes.Pose(position: [outside.position.x, outside.position.y, outside.position.z], + rotation: [outside.rotation.x, outside.rotation.y, outside.rotation.z, outside.rotation.w])) + var environment = Environment3D(antiAliasing: .none) + environment.skybox.isEnabled = false + environment.shadows.isEnabled = true + environment.shadowCascadeCount = 3 + environment.shadows.resolution = 2048 + environment.ambientOcclusion.isEnabled = false + environment.screenSpaceReflection.isEnabled = false + environment.exposureEV = 3 + environment.gpuOcclusionEnabled = session.hiZ + let environmentRoot = try await app.withWorldAccess { + session.camera = app.main.spawn("Camera", bundle: Camera3D( + camera: Camera(), perspectiveProjection: PerspectiveProjection(near: 0.05, far: 200, fieldOfView: .degrees(60)), + transform: routes.routes[0].start.transform, environment: environment + )) + session.move(to: 0) + session.camera?.components[MouseCaptureComponent.self] = MouseCaptureComponent() + let lighting = app.main.spawn("Lighting") { Transform() } + let sun = app.main.spawn("Sun") { + DirectionalLightComponent(intensity: 3, castShadows: true) + Transform(rotation: Quat.euler([-0.4, 0.5, 0])) + } + lighting.addChild(sun) + session.sun = sun + session.lighting.spawn(in: app.main, parent: lighting) + let root = app.main.spawn("Environment") { Transform() } + session.fullGeometry = app.main.spawn("Full Sponza + Ivy") { Transform(); Visibility.hidden } + session.lodGeometry = app.main.spawn("PT lighting LOD") { Transform(); Visibility.hidden } + if let full = session.fullGeometry { root.addChild(full) } + if let lod = session.lodGeometry { root.addChild(lod) } + return root + } + _ = environmentRoot + for (filename, isLOD) in [("benchmark-pbr.gltf", false), ("lighting-pt.gltf", true)] { + for (folder, label) in [("main_sponza", "Sponza"), ("pkg_b_ivy", "Ivy")] { + try Task.checkCancellation() + session.status = "Загружаем \(label)\(isLOD ? " · PT LOD" : "")…" + let file = root.appendingPathComponent(folder).appendingPathComponent(filename) + guard let model = try await AssetsManager.load(ModelAsset3D.self, at: file.path).asset else { throw CocoaError(.fileReadCorruptFile) } + try await app.withWorldAccess { + let parent = isLOD ? session.lodGeometry : session.fullGeometry + parent?.addChild(model.instantiate(in: app.main)) + } + } + } + try await app.withWorldAccess { + session.pathStatistics = app.getSubworldBuilder(by: .renderWorld)?.getResource(Render3DPathTracingStatistics.self) + session.temporalStatistics = app.getSubworldBuilder(by: .renderWorld)?.getResource(Render3DTemporalStatistics.self) + session.meshletStatistics = app.getSubworldBuilder(by: .renderWorld)?.getResource(Render3DMeshletStatistics.self) + session.meshletMode = ProcessInfo.processInfo.environment["ADAENGINE_SPONZA_MESHLETS"].flatMap(MeshletVisibilityMode3D.init(rawValue:)) ?? .gpu + session.meshletMapEnabled = ProcessInfo.processInfo.environment["ADAENGINE_SPONZA_MESHLET_MAP"] == "1" + if let value = ProcessInfo.processInfo.environment["ADAENGINE_SPONZA_MESHLET_LOD"].flatMap(Float.init), value.isFinite { + session.meshletLODError = min(max(value, 0), 8) + } + session.highResolutionShadows = ProcessInfo.processInfo.environment["ADAENGINE_SPONZA_SHADOW_QUALITY"] != "baseline" + session.dlssAvailable = app.getSubworldBuilder(by: .renderWorld)?.getResource(RenderDeviceHandler.self)?.renderDevice.supportsTemporalUpscaling ?? false + let requested = ProcessInfo.processInfo.environment["ADAENGINE_SPONZA_RENDER_PRESET"].flatMap(SponzaRenderPreset.init(rawValue:)) ?? .fullRaster + session.apply(preset: requested, lights: 12) + session.move(to: 2) + } + try await session.warmupRaster(app: app) + session.isLoaded = true + session.status = "Sponza + Ivy · полная сцена / отдельный PT LOD" + FileHandle.standardOutput.write(Data("SPONZA_DEMO_READY\n".utf8)) + if let output = ProcessInfo.processInfo.environment["ADAENGINE_SPONZA_PROFILE_OUTPUT"] { + let profiler = SponzaDemoProfiler(output: URL(fileURLWithPath: output)) + session.profiler = profiler + try await profiler.run(session: session, app: app) + } + } catch { + session.status = session.isLoaded ? "Замер остановлен; подробности в журнале" : "Не удалось завершить загрузку: \(error)" + FileHandle.standardError.write(Data("SPONZA_DEMO_ERROR \(error)\n".utf8)) + } + } +} + +private struct SponzaRendererStatus: View { + let session: SponzaSession + + var body: some View { Text(session.rendererStatus) } +} + +private struct SponzaDLSSStatus: View { + let session: SponzaSession + var body: some View { Text(session.dlssStatus) } +} + +private struct SponzaMeshletStatus: View { + let session: SponzaSession + var body: some View { Text(session.meshletStatus) } +} + +@PlainSystem(dependencies: [.after(InputEventParseSystem.self), .before(CameraSystem.self)]) +struct SponzaControlsSystem { + @Res private var session + @Res private var input + @Res private var time + // Declare writes performed through the session's camera ID. + @Query, Ref, Ref, Ref, Ref> private var cameraAccess + @Query, Ref, PointLightComponent> private var lightAccess + @Query> private var visibilityAccess + @Query> private var sunAccess + + init(world _: World) {} + + @MainActor + func update(context _: UpdateContext) { + _ = cameraAccess + _ = visibilityAccess + _ = lightAccess + _ = sunAccess + guard session.isLoaded, let camera = session.camera, + let transform = camera.components[Transform.self] else { return } + session.refreshPathStatus() + if let profiler = session.profiler, profiler.isRunning { + if let next = profiler.cameraPose(), next != transform { + camera.components[Transform.self] = next + camera.components[GlobalTransform.self] = GlobalTransform(matrix: next.matrix) + profiler.didMoveCamera() + } + return + } + if session.isLoaded, session.requestedPreset != nil || session.requestedLightCount != nil || session.requestedQuality != nil + || session.requestedDLSS != nil || session.requestedMeshletMode != nil || session.requestedMeshletMap != nil + || session.requestedMeshletLODError != nil || session.requestedShadowQuality != nil { + if let quality = session.requestedQuality { session.pathHighQuality = quality } + if let dlss = session.requestedDLSS { session.dlssEnabled = dlss } + if let quality = session.requestedShadowQuality { session.highResolutionShadows = quality } + if let error = session.requestedMeshletLODError { + session.meshletLODError = error + session.hiZ = false + if error > 0 && session.meshletMode == .disabled { session.meshletMode = .gpu } + if session.preset == .pathTracing { session.requestedPreset = .fullRaster } + } + if session.requestedPreset == .pathTracing { session.meshletMapEnabled = false } + if let mode = session.requestedMeshletMode { + session.meshletMode = mode + session.hiZ = false + if session.preset == .pathTracing { session.requestedPreset = .fullRaster } + } + if let map = session.requestedMeshletMap { + session.meshletMapEnabled = map + if map { session.hiZ = false; session.requestedPreset = .fullRaster } + } + session.apply(preset: session.requestedPreset ?? session.preset, lights: session.requestedLightCount ?? session.lightCount) + session.requestedPreset = nil + session.requestedLightCount = nil + session.requestedQuality = nil + session.requestedDLSS = nil + session.requestedMeshletMode = nil + session.requestedMeshletMap = nil + session.requestedMeshletLODError = nil + session.requestedShadowQuality = nil + } + session.flightSeconds += max(0, Double(time.deltaTime)) + session.lighting.updateFlight(enabled: session.flyingLightEnabled, seconds: session.flightSeconds) + if let index = session.requestedView { + session.move(to: index) + session.requestedView = nil + } + let rightDown = input.isMouseButtonPressed(.right) + if !rightDown { session.cancelledLook = false } + if input.isKeyPressed(.escape) { session.cancelledLook = true } + if var capture = camera.components[MouseCaptureComponent.self] { + let requested = rightDown && !session.cancelledLook + if requested && capture.isCaptured { session.flight.look(delta: input.getMouseDelta()) } + if capture.isRequested != requested { + capture.isRequested = requested + camera.components[MouseCaptureComponent.self] = capture + } + } + var movement = Vector3.zero + if input.isKeyPressed(.w) { movement.z += 1 } + if input.isKeyPressed(.s) { movement.z -= 1 } + if input.isKeyPressed(.d) { movement.x += 1 } + if input.isKeyPressed(.a) { movement.x -= 1 } + if input.isKeyPressed(.e) { movement.y += 1 } + if input.isKeyPressed(.q) { movement.y -= 1 } + session.flight.move(local: movement, seconds: Double(time.deltaTime), fast: input.isKeyPressed(.shift)) + let next = session.flight.transform + if next != transform { + camera.components[Transform.self] = next + camera.components[GlobalTransform.self] = GlobalTransform(matrix: next.matrix) + } + if var environment = camera.components[Environment3D.self], environment.gpuOcclusionEnabled != session.hiZ { + environment.gpuOcclusionEnabled = session.hiZ + camera.components[Environment3D.self] = environment + } + } +} diff --git a/Examples/Technical/Sponza/SponzaDemoProfiler.swift b/Examples/Technical/Sponza/SponzaDemoProfiler.swift new file mode 100644 index 0000000..9ea0fde --- /dev/null +++ b/Examples/Technical/Sponza/SponzaDemoProfiler.swift @@ -0,0 +1,357 @@ +import AdaEngine +import Foundation +import SponzaCamera + +/// Opt-in measurements of actual SceneView publication, with no image readback in the interval. +@MainActor +final class SponzaDemoProfiler { + struct Measurement: Codable { + var view: String + var shadows: Bool + var round: Int + var width: Int + var height: Int + var publishedIntervalsMilliseconds: [Double] + var graphRecords: [RenderGraphFrameRecord] + var motion: String? + var cameraUpdates: Int? + var preset: String? + var localLightCount: Int? + var lightStatistics: [String: Render3DLightStatistics.Snapshot]? + var pathTracing: [String: PathTracing3DStatus]? + var pathFramesBefore: [String: Int]? + var pathSettings: PathTracing3D? + var meshlets: [String: Meshlet3DCount]? + var meshletGPUIndexCount: Int? + var meshletLODPixelError: Float? + var shadowCascadeResolution: Int? + var localShadowResolution: Int? + var shadowDistance: Float? + } + + let output: URL + let usesFixedViewport = ProcessInfo.processInfo.environment["ADAENGINE_SPONZA_PROFILE_STUTTER"] != "1" + private(set) var isRunning = false + var recording = false + var last: ContinuousClock.Instant? + var intervals: [Double] = [] + var size = [0, 0] + var sizeChanged = false + var motion = SponzaCameraMotion.stationary + var motionOrigin = Transform() + var motionStart: ContinuousClock.Instant? + var cameraUpdates = 0 + + init(output: URL) { self.output = output } + + func cameraPose() -> Transform? { + guard motion != .stationary, let motionStart else { return nil } + let elapsed = motionStart.duration(to: .now).components + let seconds = Double(elapsed.seconds) + Double(elapsed.attoseconds) / 1e18 + return motion.pose(from: motionOrigin, seconds: seconds) + } + + func didMoveCamera() { + if recording { cameraUpdates += 1 } + } + + func didPresent(width: Int, height: Int) { + guard recording else { return } + if size[0] > 0, size != [width, height] { sizeChanged = true } + let now = ContinuousClock.now + if let last { + PerformanceStallProbe.end("SceneView.PublishGap", since: last, count: width * height) + let elapsed = last.duration(to: now).components + intervals.append(Double(elapsed.seconds) * 1000 + Double(elapsed.attoseconds) / 1e15) + } + last = now + size = [width, height] + } + + func run(session: SponzaSession, app: AppWorlds) async throws { + guard let render = app.getSubworldBuilder(by: .renderWorld), let diagnostics = render.getResource(RenderGraphDiagnostics.self) else { return } + isRunning = true + defer { isRunning = false; recording = false; motionStart = nil } + if !usesFixedViewport { + try await runStutter(session: session, app: app, diagnostics: diagnostics) + return + } + // Keep historical profiles comparable; the new LOD profile explicitly records its quality settings. + session.meshletLODError = 0 + session.highResolutionShadows = false + if ProcessInfo.processInfo.environment["ADAENGINE_SPONZA_PROFILE_MESHLETS"] == "1" + || ProcessInfo.processInfo.environment["ADAENGINE_SPONZA_PROFILE_MESHLET_LOD"] == "1" { + try await runMeshlets(session: session, app: app, diagnostics: diagnostics) + return + } + session.meshletMode = .disabled + session.meshletMapEnabled = false + if let lighting = ProcessInfo.processInfo.environment["ADAENGINE_SPONZA_PROFILE_LIGHTING"], + ["1", "lodRaster", "pathTracing"].contains(lighting) { + try await runLighting(session: session, app: app, diagnostics: diagnostics) + return + } + try await app.withWorldAccess { + session.dlssEnabled = false + session.flyingLightEnabled = false + session.apply(preset: .fullRaster, lights: 0) + } + var measurements: [Measurement] = [] + let requestedMotion = ProcessInfo.processInfo.environment["ADAENGINE_SPONZA_PROFILE_MOTION"] + let selectedMotion = requestedMotion.flatMap(SponzaCameraMotion.init(rawValue:)) + let motionRun = requestedMotion == "1" || selectedMotion != nil + let motions = selectedMotion.map { [$0] } ?? SponzaCameraMotion.allCases + let scenarios = motionRun ? motions.map { (2, $0) } : [0, 2, 3].map { ($0, .stationary) } + for (view, mode) in scenarios { + for round in 0..<3 { + for shadows in round.isMultiple(of: 2) ? [true, false] : [false, true] { + try await app.withWorldAccess { + session.move(to: view) + motion = mode + motionOrigin = session.flight.transform + motionStart = .now + if let camera = session.camera, var environment = camera.components[Environment3D.self] { + environment.shadows.isEnabled = shadows + camera.components[Environment3D.self] = environment + } + diagnostics.configure(isEnabled: true, capacity: 64) + diagnostics.clear() + } + session.status = "Измеряем сцену…" + try await Task.sleep(for: .seconds(1)) + intervals.removeAll(keepingCapacity: true) + intervals.reserveCapacity(1024) + last = nil + cameraUpdates = 0 + recording = true + try await Task.sleep(for: .seconds(motionRun ? 6 : 2)) + recording = false + let records = try await app.withWorldAccess { diagnostics.records } + let name = ["atrium", "corridor", "gallery", "outside"][view] + measurements.append(Measurement(view: name, shadows: shadows, round: round, + width: size[0], height: size[1], publishedIntervalsMilliseconds: intervals, graphRecords: records, + motion: mode.rawValue, cameraUpdates: cameraUpdates, preset: session.preset.rawValue, + localLightCount: session.lightCount)) + let encoder = JSONEncoder() + encoder.outputFormatting = [.prettyPrinted, .sortedKeys] + try FileManager.default.createDirectory(at: output.deletingLastPathComponent(), withIntermediateDirectories: true) + try encoder.encode(measurements).write(to: output, options: .atomic) + } + } + } + try await app.withWorldAccess { + diagnostics.configure(isEnabled: false) + if let camera = session.camera, var environment = camera.components[Environment3D.self] { + environment.shadows.isEnabled = true + camera.components[Environment3D.self] = environment + } + session.move(to: 3) + } + session.status = "Sponza + Ivy · полная сцена / отдельный PT LOD" + FileHandle.standardOutput.write(Data("SPONZA_PROFILE_READY \(output.path)\n".utf8)) + } + + private func runLighting(session: SponzaSession, app: AppWorlds, diagnostics: RenderGraphDiagnostics) async throws { + let render = app.getSubworldBuilder(by: .renderWorld) + guard let tracing = render?.getResource(Render3DPathTracingStatistics.self), + let lights = render?.getResource(Render3DLightStatistics.self) else { throw CocoaError(.featureUnsupported) } + let selected = ProcessInfo.processInfo.environment["ADAENGINE_SPONZA_PROFILE_MOTION"].flatMap(SponzaCameraMotion.init(rawValue:)) ?? .rotation + session.pathHighQuality = false + session.dlssEnabled = false + session.flyingLightEnabled = false + var measurements: [Measurement] = [] + // Group modes so the cold CPU BVH/texture atlas is built once, outside measured intervals. + let requested = ProcessInfo.processInfo.environment["ADAENGINE_SPONZA_PROFILE_LIGHTING"] + let presets = requested.flatMap(SponzaRenderPreset.init(rawValue:)).map { [$0] } ?? [.lodRaster, .pathTracing] + for preset in presets { + for round in 0..<3 { + for count in round.isMultiple(of: 2) ? [0, 4, 12] : [12, 4, 0] { + motionStart = nil + try await app.withWorldAccess { + session.move(to: 2) + session.apply(preset: preset, lights: count) + } + if preset == .pathTracing { + let deadline = ContinuousClock.now + .seconds(180) + while true { + let states = tracing.snapshots.values + if let failure = states.compactMap(\.failure).first { + throw CocoaError(.featureUnsupported, userInfo: [NSLocalizedDescriptionKey: failure]) + } + if !states.isEmpty && states.allSatisfy({ $0.encodedFrames > 0 && $0.triangles > 0 && $0.lights == count + 1 }) { break } + guard ContinuousClock.now < deadline else { throw CocoaError(.executableRuntimeMismatch) } + try await Task.sleep(for: .milliseconds(50)) + } + } + try await app.withWorldAccess { + motion = selected + motionOrigin = session.flight.transform + motionStart = .now + diagnostics.configure(isEnabled: true, capacity: 64) + diagnostics.clear() + } + session.status = "Замер света: \(preset.rawValue) · \(count) источников" + try await Task.sleep(for: .seconds(1)) + let before = tracing.snapshots.mapValues(\.encodedFrames) + intervals.removeAll(keepingCapacity: true) + last = nil + cameraUpdates = 0 + recording = true + try await Task.sleep(for: .seconds(6)) + recording = false + let states = tracing.snapshots + guard !intervals.isEmpty else { throw CocoaError(.fileReadCorruptFile) } + if preset == .pathTracing { + guard !states.isEmpty && states.allSatisfy({ key, value in + value.failure == nil && value.encodedFrames > (before[key] ?? 0) && value.lights == count + 1 + }) else { + struct Failure: Encodable { + var before: [String: Int] + var after: [String: PathTracing3DStatus] + } + let data = try JSONEncoder().encode(Failure(before: before, after: states)) + try data.write(to: output.appendingPathExtension("failure.json"), options: .atomic) + let reason = "PT frame progress validation failed: \(String(decoding: data, as: UTF8.self))" + throw CocoaError(.featureUnsupported, userInfo: [NSLocalizedDescriptionKey: reason]) + } + } + let records = try await app.withWorldAccess { diagnostics.records } + measurements.append(Measurement(view: "gallery", shadows: true, round: round, + width: size[0], height: size[1], publishedIntervalsMilliseconds: intervals, graphRecords: records, + motion: selected.rawValue, cameraUpdates: cameraUpdates, preset: preset.rawValue, localLightCount: count, + lightStatistics: lights.snapshots, pathTracing: states, pathFramesBefore: before, + pathSettings: session.camera?.components[Environment3D.self]?.pathTracing)) + let encoder = JSONEncoder() + encoder.outputFormatting = [.prettyPrinted, .sortedKeys] + try FileManager.default.createDirectory(at: output.deletingLastPathComponent(), withIntermediateDirectories: true) + try encoder.encode(measurements).write(to: output, options: .atomic) + } + } + } + motionStart = nil + try await app.withWorldAccess { + diagnostics.configure(isEnabled: false) + session.pathHighQuality = true + session.dlssEnabled = true + session.apply(preset: .pathTracing, lights: 12) + session.move(to: 2) + } + session.status = "Sponza + Ivy · полная сцена / отдельный PT LOD" + FileHandle.standardOutput.write(Data("SPONZA_PROFILE_READY \(output.path)\n".utf8)) + } + + private func runMeshlets(session: SponzaSession, app: AppWorlds, diagnostics: RenderGraphDiagnostics) async throws { + let render = app.getSubworldBuilder(by: .renderWorld) + guard let statistics = render?.getResource(Render3DMeshletStatistics.self) else { throw CocoaError(.featureUnsupported) } + session.dlssEnabled = false + session.meshletMapEnabled = false + session.flyingLightEnabled = false + session.hiZ = false + let lodRun = ProcessInfo.processInfo.environment["ADAENGINE_SPONZA_PROFILE_MESHLET_LOD"] == "1" + session.highResolutionShadows = lodRun + var measurements: [Measurement] = [] + var measuredSize: [Int]? + // The outside overview primes all eligible geometry uploads and material variants before timing. + try await app.withWorldAccess { + session.meshletMode = .gpu + session.meshletLODError = lodRun ? 2 : 0 + session.apply(preset: .fullRaster, lights: 0) + session.move(to: 3) + } + session.status = "Прогрев полной геометрии и GPU мешлетов…" + try await Task.sleep(for: .seconds(3)) + try await app.withWorldAccess { + session.move(to: 2) + motion = .rotation + motionOrigin = session.flight.transform + motionStart = .now + } + // A complete turn warms the partially clipped parts that actually enter the compute path. + try await Task.sleep(for: .seconds(6)) + for view in [2, 3] { + for round in 0..<3 { + let cases: [(mode: MeshletVisibilityMode3D, error: Float)] = lodRun + ? [(.gpu, 0), (.gpu, 2), (.gpu, 8)] : [(.disabled, 0), (.cpuReference, 0), (.gpu, 0)] + for sample in round.isMultiple(of: 2) ? cases : Array(cases.reversed()) { + let mode = sample.mode + try await app.withWorldAccess { + session.meshletMode = mode + session.meshletLODError = sample.error + session.apply(preset: .fullRaster, lights: 0) + session.move(to: view) + motion = view == 2 ? .rotation : .stationary + motionOrigin = session.flight.transform + motionStart = .now + diagnostics.configure(isEnabled: true, capacity: 32) + diagnostics.clear() + } + session.status = "Замер мешлетов · \(mode.rawValue) · LOD \(Int(sample.error)) px · \(view == 2 ? "галерея" : "снаружи") · \(round + 1)/3" + try await Task.sleep(for: .seconds(1)) + intervals.removeAll(keepingCapacity: true) + last = nil + cameraUpdates = 0 + size = [0, 0] + sizeChanged = false + recording = true + try await Task.sleep(for: .seconds(4)) + recording = false + guard !intervals.isEmpty, !sizeChanged, measuredSize == nil || measuredSize == size else { + throw CocoaError(.featureUnsupported, userInfo: [NSLocalizedDescriptionKey: "Benchmark requires a constant render size and published frames"]) + } + measuredSize = size + // Freeze frame updates only after timing, so statistics and arguments describe one completed frame. + let captured = try await app.withExclusiveWorldAccess { + let snapshot = statistics.snapshots + let actualGPUOrFullyVisible = snapshot.values.contains { + $0.gpuDraws > 0 || ($0.candidateMeshlets > 0 && $0.fullyVisibleItems > 0 && $0.fullyVisibleItems == $0.eligibleItems + && $0.fallbackReasons["processorUnavailableOrBudget"] == nil) + } + if mode == .gpu && !actualGPUOrFullyVisible { + throw CocoaError(.featureUnsupported, userInfo: [NSLocalizedDescriptionKey: "No actual GPU meshlet draws in benchmark"]) + } + if lodRun && sample.error > 0 && !snapshot.values.contains(where: { $0.lodGPUItems > 0 }) { + throw CocoaError(.featureUnsupported, userInfo: [NSLocalizedDescriptionKey: "No actual adaptive LOD draws in benchmark"]) + } + var submittedIndices: Int? + // Explicit benchmark readback AFTER the measured interval; never in ordinary frames. + if mode == .gpu, let camera = session.camera, + let output = render?.getResource(Meshlet3DState.self)?.output(for: camera.id) { + let bytes = try await output.arguments.readData() + var total = 0 + for draw in 0...stride + guard offset + 4 <= bytes.count else { throw CocoaError(.fileReadCorruptFile) } + let word = UInt32(bytes[offset]) | UInt32(bytes[offset + 1]) << 8 | UInt32(bytes[offset + 2]) << 16 | UInt32(bytes[offset + 3]) << 24 + total += Int(word) + } + submittedIndices = total + } + return (snapshot, submittedIndices, diagnostics.records) + } + measurements.append(Measurement(view: view == 2 ? "gallery" : "outside", shadows: true, round: round, + width: size[0], height: size[1], publishedIntervalsMilliseconds: intervals, graphRecords: captured.2, + motion: motion.rawValue, cameraUpdates: cameraUpdates, preset: session.preset.rawValue, localLightCount: 0, + meshlets: captured.0, meshletGPUIndexCount: captured.1, meshletLODPixelError: sample.error, + shadowCascadeResolution: session.highResolutionShadows ? 2048 : 1024, + localShadowResolution: session.highResolutionShadows ? 1024 : 512, + shadowDistance: session.highResolutionShadows ? 80 : 30)) + let encoder = JSONEncoder() + encoder.outputFormatting = [.prettyPrinted, .sortedKeys] + try FileManager.default.createDirectory(at: output.deletingLastPathComponent(), withIntermediateDirectories: true) + try encoder.encode(measurements).write(to: output, options: .atomic) + } + } + } + motionStart = nil + try await app.withWorldAccess { + diagnostics.configure(isEnabled: false) + session.meshletMode = .gpu + session.meshletLODError = lodRun ? 2 : 0 + session.meshletMapEnabled = true + session.apply(preset: .fullRaster, lights: 0) + session.move(to: 2) + } + session.status = "Sponza + Ivy · мешлеты\(lodRun ? " + LOD" : "") · полный raster asset" + FileHandle.standardOutput.write(Data("SPONZA_PROFILE_READY \(output.path)\n".utf8)) + } +} diff --git a/Examples/Technical/Sponza/SponzaLighting.swift b/Examples/Technical/Sponza/SponzaLighting.swift new file mode 100644 index 0000000..a9f0ba8 --- /dev/null +++ b/Examples/Technical/Sponza/SponzaLighting.swift @@ -0,0 +1,134 @@ +import AdaEngine +import Foundation +import Math +import SponzaCamera + +enum SponzaRenderPreset: String, CaseIterable { + case fullRaster + case lodRaster + case pathTracing + + var usesLOD: Bool { self != .fullRaster } +} + +@MainActor +struct SponzaLighting { + private var lamps: [Entity] = [] + private var flyingLamp: Entity? + + mutating func spawn(in world: World, parent: Entity) { + let spots = world.spawn("Gallery spotlights") { Transform() } + let points = world.spawn("Gallery fill lights") { Transform() } + let moving = world.spawn("Flying test light") { Transform() } + parent.addChild(spots) + parent.addChild(points) + parent.addChild(moving) + let lamp = world.spawn("Moving point light") { + PointLightComponent(radiance: [0.85, 0.93, 1], intensity: 25, castShadows: true, range: 10) + Transform(position: SponzaLightMotion.position(seconds: 0)) + } + moving.addChild(lamp) + flyingLamp = lamp + for (index, x) in [Float(-9), -3, 3, 9].enumerated() { + let position = Vector3(x, 8.4, 5.35) + let lamp = world.spawn("Spot \(index + 1)") { + SpotLightComponent(radiance: [1, 0.92, 0.82], intensity: 8, castShadows: true, + range: 9, innerConeAngle: 25, outerConeAngle: 42) + SponzaFlyCamera.looking(from: position, at: [x, 6.4, 5.35]) + } + spots.addChild(lamp) + lamps.append(lamp) + } + for z in [Float(-5.35), 5.35] { + for (index, x) in [Float(-9), -3, 3, 9].enumerated() { + let lamp = world.spawn("Fill \(lamps.count - 3)") { + PointLightComponent(radiance: index.isMultiple(of: 2) ? [1, 0.9, 0.8] : [0.8, 0.9, 1], + intensity: 2, castShadows: false, range: 8) + Transform(position: [x, 7.6, z]) + } + points.addChild(lamp) + lamps.append(lamp) + } + } + } + + func setCount(_ count: Int) { + for (index, lamp) in lamps.enumerated() { + lamp.components[Visibility.self] = index < count ? .visible : .hidden + } + } + + func updateFlight(enabled: Bool, seconds: Double) { + guard let flyingLamp else { return } + let visibility: Visibility = enabled ? .visible : .hidden + if flyingLamp.components[Visibility.self] != visibility { flyingLamp.components[Visibility.self] = visibility } + guard enabled else { return } + let pose = Transform(position: SponzaLightMotion.position(seconds: seconds)) + flyingLamp.components[Transform.self] = pose + flyingLamp.components[GlobalTransform.self] = GlobalTransform(matrix: pose.matrix) + } +} + +extension SponzaSession { + func apply(preset: SponzaRenderPreset, lights: Int) { + fullGeometry?.components[Visibility.self] = preset.usesLOD ? .hidden : .visible + lodGeometry?.components[Visibility.self] = preset.usesLOD ? .visible : .hidden + lighting.setCount(lights) + lighting.updateFlight(enabled: flyingLightEnabled, seconds: flightSeconds) + if let sun, var light = sun.components[DirectionalLightComponent.self] { + light.shadowDistance = highResolutionShadows ? 80 : 30 + sun.components[DirectionalLightComponent.self] = light + } + if let camera, var component = camera.components[Camera.self] { + component.temporalUpscaling = dlssEnabled && dlssAvailable && !meshletMapEnabled + ? .init(renderScale: pathHighQuality ? 2.0 / 3.0 : 0.5, method: .automatic) : nil + camera.components[Camera.self] = component + } + if let camera, var environment = camera.components[Environment3D.self] { + environment.pathTracing = PathTracing3D(isEnabled: preset == .pathTracing, + samplesPerPixel: 1, maximumBounces: 2, + resolutionScale: dlssEnabled && dlssAvailable ? 1 : (pathHighQuality ? 0.5 : 0.25), historyLimit: 128) + environment.pathTracing.textureTileSize = 512 + environment.debugView = meshletMapEnabled ? .meshlets : .none + environment.meshVisibility.meshlets = preset == .pathTracing ? .disabled : meshletMode + environment.meshVisibility.meshletLODPixelError = meshletLODError + environment.shadows.isEnabled = true + environment.shadows.resolution = highResolutionShadows ? 2048 : 1024 + environment.shadows.splitLambda = highResolutionShadows ? 0.85 : 0.65 + environment.localShadows = LocalShadowSettings3D(isEnabled: true, maximumLights: 4, resolution: highResolutionShadows ? 1024 : 512) + camera.components[Environment3D.self] = environment + } + self.preset = preset + self.lightCount = lights + rendererStatus = preset == .pathTracing ? "Path tracing · 1 spp · 2 отскока · подготовка BVH…" + : "\(preset.usesLOD ? "PT LOD" : "Полная геометрия") · растр · \(lights) локальных источников" + } + + func refreshPathStatus() { + guard ContinuousClock.now >= nextStatusUpdate else { return } + nextStatusUpdate = .now + .seconds(1) + if preset == .pathTracing && !meshletMapEnabled { + meshletStatus = "Мешлеты — растровый путь; PT использует свой BVH" + } else if let status = meshletStatistics?.snapshots.values.first { + let levels = status.selectedLODLevels.keys.sorted().map { "L\($0): \(status.selectedLODLevels[$0] ?? 0)" }.joined(separator: " / ") + let lod = meshletLODError > 0 + ? (meshletMapEnabled ? "\n\(levels.isEmpty ? "LOD: нет данных" : levels) · \(status.lodSelectedTriangles) треуг." + : " · GPU LOD: \(status.lodGPUItems)") : "" + meshletStatus = meshletMapEnabled + ? "Кластеры \(status.candidateMeshlets) · серый = без карты (\(status.fallbackItems))\(lod)" + : "Кластеры \(status.candidateMeshlets) · GPU \(status.gpuDraws) · целиком \(status.fullyVisibleItems) · fallback \(status.fallbackItems)\(lod)" + } + if meshletMapEnabled { dlssStatus = "DLSS: отключён для карты мешлетов" } + else if dlssEnabled && dlssAvailable, let status = temporalStatistics?.snapshots.values.first { + dlssStatus = "DLSS · \(status.inputWidth)×\(status.inputHeight) → \(status.outputWidth)×\(status.outputHeight)" + + " · кадры \(status.encodedFrames) · fallback \(status.fallbackFrames)" + } else { dlssStatus = dlssAvailable ? "DLSS: выкл." : "DLSS недоступен на текущем устройстве/сборке" } + guard preset == .pathTracing, let status = pathStatistics?.snapshots.values.first else { return } + if let failure = status.failure { + rendererStatus = "Path tracing недоступен: \(failure)" + } else { + rendererStatus = "Path tracing · \(status.triangles) треуг. · \(status.lights) источников · \(status.width)×\(status.height)" + + " · кадр \(status.encodedFrames) · накопление \(status.accumulatedFrames)" + } + } +} diff --git a/Examples/Technical/Sponza/SponzaStutterProfiler.swift b/Examples/Technical/Sponza/SponzaStutterProfiler.swift new file mode 100644 index 0000000..9ca17ab --- /dev/null +++ b/Examples/Technical/Sponza/SponzaStutterProfiler.swift @@ -0,0 +1,72 @@ +import AdaEngine +import Foundation +import SponzaCamera + +extension SponzaDemoProfiler { + struct StutterPhase: Codable { + var name: String + var input: String + var width: Int + var height: Int + var sizeChanged: Bool + var publishedIntervalsMilliseconds: [Double] + var graphRecords: [RenderGraphFrameRecord] + var meshlets: [String: Meshlet3DCount] + } + + func runStutter(session: SponzaSession, app: AppWorlds, diagnostics: RenderGraphDiagnostics) async throws { + let render = app.getSubworldBuilder(by: .renderWorld) + let statistics = render?.getResource(Render3DMeshletStatistics.self) + var captured: [StutterPhase] = [] + session.status = "Sponza + Ivy · запись задержек кадров" + let cases: [(String, SponzaCameraMotion, Double)] = [ + ("stationary", .stationary, 6), ("rotation-first", .rotation, 12), ("rotation-repeat", .rotation, 12), + ("translation", .translation, 12), ("LOD-off", .rotation, 6), ("LOD-on", .rotation, 6), + ("DLSS-off", .rotation, 6), ("DLSS-on", .rotation, 6), + ("shadows-baseline", .stationary, 4), ("shadows-high", .stationary, 4), + ("lights-off", .stationary, 4), ("lights-on", .stationary, 4) + ] + for (name, movement, seconds) in cases { + try await app.withWorldAccess { + motionStart = nil + session.meshletMode = .gpu + session.meshletLODError = name == "LOD-off" ? 0 : 2 + session.meshletMapEnabled = false + session.flyingLightEnabled = false + session.dlssEnabled = name != "DLSS-off" + session.highResolutionShadows = name != "shadows-baseline" + session.apply(preset: .fullRaster, lights: name == "lights-off" ? 0 : 12) + session.move(to: 2) + motion = movement + motionOrigin = session.flight.transform + motionStart = .now + diagnostics.configure(isEnabled: true, capacity: 4096) + diagnostics.clear() + } + intervals.removeAll(keepingCapacity: true) + last = nil + size = [0, 0] + sizeChanged = false + cameraUpdates = 0 + PerformanceStallProbe.mark("begin:\(name)") + recording = true + try await Task.sleep(for: .seconds(seconds)) + recording = false + PerformanceStallProbe.mark("end:\(name)") + let data = try await app.withExclusiveWorldAccess { (diagnostics.records, statistics?.snapshots ?? [:]) } + captured.append(.init(name: name, input: movement.rawValue, width: size[0], height: size[1], sizeChanged: sizeChanged, + publishedIntervalsMilliseconds: intervals, graphRecords: data.0, meshlets: data.1)) + let encoder = JSONEncoder() + encoder.outputFormatting = [.sortedKeys] + try FileManager.default.createDirectory(at: output.deletingLastPathComponent(), withIntermediateDirectories: true) + try encoder.encode(captured).write(to: output, options: .atomic) + } + try await app.withWorldAccess { + diagnostics.configure(isEnabled: false) + motionStart = nil + session.move(to: 2) + } + session.status = "Sponza + Ivy · запись задержек завершена" + print("SPONZA_STUTTER_READY \(output.path)") + } +} diff --git a/Examples/Technical/Sponza/SponzaWarmup.swift b/Examples/Technical/Sponza/SponzaWarmup.swift new file mode 100644 index 0000000..2999ef0 --- /dev/null +++ b/Examples/Technical/Sponza/SponzaWarmup.swift @@ -0,0 +1,111 @@ +import AdaEngine +import Foundation + +enum SponzaWarmupError: Error, CustomStringConvertible { + case alreadyWaiting + case timedOut(String) + + var description: String { + switch self { + case .alreadyWaiting: "Прогрев уже ожидает кадры" + case .timedOut(let stage): "Не получены готовые кадры прогрева: \(stage)" + } + } +} + +/// A demo-local barrier driven by actual SceneView publications, not elapsed warmup time. +@MainActor +final class SponzaWarmupFrames { + private struct Waiter { + let id: UUID + let target: Int + let condition: @MainActor () -> Bool + let continuation: CheckedContinuation + let deadline: Task + } + private var publications = 0 + private var waiter: Waiter? + + func didPublish() { + publications += 1 + guard let waiter, publications >= waiter.target, waiter.condition() else { return } + finish(waiter.id) + } + + func wait(stage: String, frames: Int = 6, timeout: Duration = .seconds(60), + condition: @escaping @MainActor () -> Bool = { true }) async throws { + guard waiter == nil else { throw SponzaWarmupError.alreadyWaiting } + let id = UUID() + try Task.checkCancellation() + try await withTaskCancellationHandler { + try await withCheckedThrowingContinuation { (continuation: CheckedContinuation) in + let deadline = Task { @MainActor [weak self] in + do { try await Task.sleep(for: timeout) } catch { return } + self?.finish(id, error: SponzaWarmupError.timedOut(stage)) + } + waiter = Waiter(id: id, target: publications + frames, condition: condition, continuation: continuation, deadline: deadline) + } + } onCancel: { + Task { @MainActor [weak self] in self?.finish(id, error: CancellationError()) } + } + } + + private func finish(_ id: UUID, error: (any Error)? = nil) { + guard let pending = waiter, pending.id == id else { return } + waiter = nil + pending.deadline.cancel() + if let error { pending.continuation.resume(throwing: error) } else { pending.continuation.resume() } + } +} + +extension SponzaSession { + /// Render both depth-format pipeline variants while controls remain in the loading state. + func warmupRaster(app: AppWorlds) async throws { + let selectedPreset = preset + let selectedDLSS = dlssEnabled + let selectedMap = meshletMapEnabled + let selectedMeshlets = meshletMode + let selectedLODError = meshletLODError + let selectedFlight = flyingLightEnabled + let selectedLights = lightCount + @MainActor func restoreSelection() { + dlssEnabled = selectedDLSS + meshletMapEnabled = selectedMap + meshletMode = selectedMeshlets + meshletLODError = selectedLODError + flyingLightEnabled = selectedFlight + apply(preset: selectedPreset, lights: selectedLights) + } + do { + let variants = dlssAvailable ? [false, true] : [false] + for temporal in variants { + try Task.checkCancellation() + let stage = temporal ? "растр · DLSS вкл." : "растр · DLSS выкл." + status = "Прогреваем \(stage)…" + try await app.withWorldAccess { + dlssEnabled = temporal + meshletMapEnabled = false + // Prime the exact leaf stream as well as the selected hierarchy below. Otherwise + // turning LOD off first uploads Ivy's large v1 stream during camera movement. + meshletMode = selectedMeshlets == .gpu ? .gpu : .disabled + meshletLODError = 0 + flyingLightEnabled = false + apply(preset: .fullRaster, lights: selectedLights) + } + // Six publications exceed the three in-flight slots. The DLSS stage additionally + // requires encoded temporal frames; an empty/fallback-only image cannot prove warmup. + try await warmupFrames.wait(stage: stage) { [weak self] in + guard let snapshots = self?.temporalStatistics?.snapshots else { return true } + return temporal ? snapshots.values.contains { $0.encodedFrames >= 3 && $0.fallbackFrames == 0 } : snapshots.isEmpty + } + FileHandle.standardOutput.write(Data("SPONZA_WARMUP_READY \(temporal ? "temporal" : "native")\n".utf8)) + } + status = "Готовим выбранный режим…" + try await app.withWorldAccess { restoreSelection() } + try await warmupFrames.wait(stage: "выбранный режим") + } catch { + try? await app.withWorldAccess { restoreSelection() } + throw error + } + } +} diff --git a/Examples/Technical/Sponza/Tests/SponzaCameraTests.swift b/Examples/Technical/Sponza/Tests/SponzaCameraTests.swift new file mode 100644 index 0000000..0ef7dbd --- /dev/null +++ b/Examples/Technical/Sponza/Tests/SponzaCameraTests.swift @@ -0,0 +1,66 @@ +import AdaTransform +import Testing +@testable import SponzaCamera + +@Suite("Sponza fly camera") +struct SponzaCameraTests { + @Test func yawTurnsHorizontallyAndPitchVerticallyWithoutRoll() { + let yaw = Transform(rotation: SponzaFlyCamera.rotation(yaw: .pi / 2, pitch: 0)).matrix + #expect(abs(yaw.z.x - 1) < 0.00001 && abs(yaw.z.y) < 0.00001 && abs(yaw.z.z) < 0.00001) + let pitch = Transform(rotation: SponzaFlyCamera.rotation(yaw: 0, pitch: .pi / 4)).matrix + #expect(pitch.z.y < -0.7 && pitch.z.z > 0.7 && abs(pitch.z.x) < 0.00001) + let mixed = Transform(rotation: SponzaFlyCamera.rotation(yaw: 1.2, pitch: 0.6)).matrix + #expect(abs(mixed.x.y) < 0.00001, "Camera right stays horizontal; there is no bank") + } + + @Test func resetsPreservePoseAndMouseMotionDoesNotJumpAxes() { + let pose = SponzaFlyCamera.looking(from: [-32, 25, -35], at: [0, 4, 0]) + var camera = SponzaFlyCamera() + camera.setPose(pose) + camera.look(delta: .zero) + #expect(camera.transform == pose) + camera.look(delta: [1, 0]) + #expect(abs(camera.transform.matrix.z.y - pose.matrix.z.y) < 0.00001) + camera.look(delta: [0, 10000]) + #expect(camera.pitch <= 1.55) + } + + @Test func movementHasConstantDiagonalSpeedAndUsesCameraForward() { + var straight = SponzaFlyCamera(), diagonal = SponzaFlyCamera() + straight.move(local: [0, 0, 1], seconds: 0.05, fast: false) + diagonal.move(local: [1, 0, 1], seconds: 0.05, fast: false) + #expect(abs(straight.transform.position.length - diagonal.transform.position.length) < 0.00001) + var turned = SponzaFlyCamera() + turned.setPose(Transform(rotation: SponzaFlyCamera.rotation(yaw: .pi / 2, pitch: 0))) + turned.move(local: [0, 0, 1], seconds: 0.05, fast: false) + #expect(abs(turned.transform.position.x - 0.15) < 0.00001 && abs(turned.transform.position.z) < 0.00001) + } + + @Test func galleryMotionIsPeriodicAndKeepsTranslationInsideTheCorridor() { + let origin = SponzaFlyCamera.looking(from: [-9.594356, 6.921101, 5.35278], at: [0, 6.921101, 5.35278]) + for mode in SponzaCameraMotion.allCases { + #expect(mode.pose(from: origin, seconds: 0) == origin) + #expect(mode.pose(from: origin, seconds: 6) == origin) + #expect(mode.pose(from: origin, seconds: .nan) == origin) + } + let midpoint = SponzaCameraMotion.translation.pose(from: origin, seconds: 3) + #expect(abs(midpoint.position.x - origin.position.x - 3) < 0.00001) + #expect(midpoint.position.y == origin.position.y && midpoint.position.z == origin.position.z) + #expect(midpoint.rotation == origin.rotation) + let turned = SponzaCameraMotion.rotation.pose(from: origin, seconds: 1.5) + #expect(turned.position == origin.position) + #expect(abs(turned.matrix.x.y) < 0.00001) + #expect(turned.rotation != origin.rotation) + } + + @Test func flyingLightStaysInGalleryAndCompletesItsOrbit() { + let start = SponzaLightMotion.position(seconds: 0) + #expect((SponzaLightMotion.position(seconds: 12) - start).length < 0.0001) + #expect(SponzaLightMotion.position(seconds: .nan) == start) + #expect((SponzaLightMotion.position(seconds: 3) - start).length > 8) + for step in 0...120 { + let p = SponzaLightMotion.position(seconds: Double(step) / 10) + #expect(abs(p.x) <= 8 && p.y >= 6.8 && p.y <= 8 && p.z >= 4.85 && p.z <= 5.85) + } + } +} diff --git a/Examples/Technical/SpriteInstancingValidation/.gitignore b/Examples/Technical/SpriteInstancingValidation/.gitignore new file mode 100644 index 0000000..fd14c91 --- /dev/null +++ b/Examples/Technical/SpriteInstancingValidation/.gitignore @@ -0,0 +1,6 @@ +.build/ +.swiftpm/ +dist/ +*.xcodeproj/ +__pycache__/ +Package.resolved diff --git a/Examples/Technical/SpriteInstancingValidation/Package.swift b/Examples/Technical/SpriteInstancingValidation/Package.swift new file mode 100644 index 0000000..771e050 --- /dev/null +++ b/Examples/Technical/SpriteInstancingValidation/Package.swift @@ -0,0 +1,44 @@ +// swift-tools-version: 6.2 +import Foundation +import PackageDescription + +let package = Package( + name: "SpriteInstancingValidation", + platforms: [.macOS(.v15), .iOS(.v18)], + products: [.executable(name: "SpriteInstancingValidation", targets: ["SpriteInstancingValidation"])], + dependencies: [ + .package(url: "https://github.com/AdaEngine/AdaEngine.git", revision: "b43d7e8f2f03e124a62b77499f7c2949a078dc27") + ], + targets: [ + .executableTarget( + name: "SpriteInstancingValidation", + dependencies: [ + .product(name: "AdaApp", package: "adaengine"), + .product(name: "AdaAssets", package: "adaengine"), + .product(name: "AdaCorePipelines", package: "adaengine"), + .product(name: "AdaECS", package: "adaengine"), + .product(name: "AdaInput", package: "adaengine"), + .product(name: "AdaPlatform", package: "adaengine"), + .product(name: "AdaRender", package: "adaengine"), + .product(name: "AdaSprite", package: "adaengine"), + .product(name: "AdaText", package: "adaengine"), + .product(name: "AdaTransform", package: "adaengine"), + .product(name: "AdaUI", package: "adaengine"), + .product(name: "AdaUtils", package: "adaengine"), + .product(name: "Math", package: "adaengine") + ], + path: ".", + exclude: ["README.md", "project.yml"] + (FileManager.default.fileExists(atPath: "dist") ? ["dist"] : []), + sources: [ + "SpriteValidationApp.swift", + "SpriteValidationFixture.swift" + ], + swiftSettings: [.enableUpcomingFeature("MemberImportVisibility"), .strictMemorySafety()], + linkerSettings: [.unsafeFlags([ + "-Xclang-linker", "-mexec-model=reactor", + "-Xlinker", "--export-if-defined=main", + "-Xlinker", "--export-if-defined=__main_argc_argv" + ], .when(platforms: [.wasi]))] + ) + ] +) diff --git a/Examples/Technical/SpriteInstancingValidation/README.md b/Examples/Technical/SpriteInstancingValidation/README.md new file mode 100644 index 0000000..6fbe97f --- /dev/null +++ b/Examples/Technical/SpriteInstancingValidation/README.md @@ -0,0 +1,39 @@ +# Sprite instancing validation + +Separate QA app using production SpriteRenderSystem / SpriteDrawPass / shaders. +The same 640x360 GPU fixture covers stretch/fit/fill, sliced/tiled atlas regions, +flips, reflected/rotated transforms, anchors, alpha and ordered texture changes. +It compares readback pixels for five expanded and five instanced frames, with a +1200-sprite contiguous run. A PASS requires identical nonempty pixels and active +instancing. It reports backend, quads and draw count; no backend fallback counts as proof. + +iOS, from this demo directory: + +```sh +xcodegen generate --spec project.yml +``` + +Build and launch the scheme with `ADAENGINE_DISABLE_SWAN=1` in the host environment. +On iOS the visible PASS also writes `Documents/sprite-validation.json` in the QA +app's container, allowing a physical device result to be retrieved without relying +on launch success alone. + +Browser, from the AdaExamples root (set `ADAENGINE_ROOT` to the engine checkout for Tint preparation): + +```sh +python3 "$ADAENGINE_ROOT/script/ensure_tint.py" +ADAENGINE_WEB_EXPORT=1 swift package --package-path Examples/Technical/SpriteInstancingValidation --allow-writing-to-package-directory export-web \ + --product SpriteInstancingValidation --output dist/SpriteInstancingValidation \ + --scratch-path /tmp/ada-sprite-web-validation \ + --swift-sdk swift-6.3.2-RELEASE_wasm --debug +``` + +Use compatible Swan/Dawn; local development overrides are described in +[Tools/Tint](https://github.com/AdaEngine/Ada/blob/main/Tools/Tint/README.md). Serve the output over HTTP and inspect the +console `[SpriteValidation] PASS`. The canvas presents the validated GPU readback +image with a green border; failures log FAIL and show a red background. Known color +probes reject a blank frame even when both rendering modes produce equal bytes. + +Recorded proof: macOS native WebGPU, actual WASM WebGPU, iPhone 17 Pro Simulator, +and physical iPad8,1 / iPadOS 26.5. Rendering correctness is verified; this app +provides no browser/mobile performance benchmark or Editor UI validation. diff --git a/Examples/Technical/SpriteInstancingValidation/SpriteValidationApp.swift b/Examples/Technical/SpriteInstancingValidation/SpriteValidationApp.swift new file mode 100644 index 0000000..5ac1fc6 --- /dev/null +++ b/Examples/Technical/SpriteInstancingValidation/SpriteValidationApp.swift @@ -0,0 +1,152 @@ +import AdaApp +import AdaCorePipelines +import AdaECS +import AdaRender +import AdaSprite +import AdaText +import AdaTransform +import AdaUtils +import Foundation +import Math + +#if os(iOS) + import SwiftUI + import UIKit + + /// Separate QA application; no validation hooks are installed in Studio. + @main + struct SpriteValidationApp: SwiftUI.App { + var body: some SwiftUI.Scene { WindowGroup { ValidationView() } } + } + + private struct ValidationView: SwiftUI.View { + @State private var status = "Running Metal A/B readback…" + @State private var image: UIImage? + @State private var passed = false + var body: some SwiftUI.View { + VStack(spacing: 20) { + Text("Sprite instancing").font(.title) + Text(status).foregroundStyle(passed ? .green : .primary).accessibilityIdentifier("validation-status") + if let image { SwiftUI.Image(uiImage: image).resizable().interpolation(.none).aspectRatio(contentMode: .fit) } + } + .padding() + .task { + do { + unsafe RenderEngine.configurations.preferredBackend = .metal + let host = AppWorlds(main: World()) + host.addPlugin(RenderWorldPlugin()) + try await host.build() + let result = try await SpriteValidationFixture.run() + let bytes = result.image.data as CFData + guard let provider = CGDataProvider(data: bytes), + let cgImage = CGImage( + width: 640, + height: 360, + bitsPerComponent: 8, + bitsPerPixel: 32, + bytesPerRow: 640 * 4, + space: CGColorSpaceCreateDeviceRGB(), + bitmapInfo: result.image.format == .bgra8 + ? [.byteOrder32Little, CGBitmapInfo(rawValue: CGImageAlphaInfo.premultipliedFirst.rawValue)] + : [.byteOrder32Big, CGBitmapInfo(rawValue: CGImageAlphaInfo.premultipliedLast.rawValue)], + provider: provider, + decode: nil, + shouldInterpolate: false, + intent: .defaultIntent + ) + else { return } + let report: [String: Any] = [ + "passed": true, "backend": String(describing: result.backend), "frames": 10, + "quads": result.quads, "draws": result.draws, "pixels": "identical", "controlPixels": "passed", + ] + let documents = try FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true) + try JSONSerialization.data(withJSONObject: report, options: [.prettyPrinted, .sortedKeys]) + .write(to: documents.appendingPathComponent("sprite-validation.json"), options: .atomic) + image = UIImage(cgImage: cgImage) + status = "PASS · Metal · identical pixels\n10 frames · \(result.quads) quads · \(result.draws) draws" + passed = true + } catch { + status = "FAIL: \(error)" + print("[SpriteValidation] FAIL: \(error)") + } + } + } + } +#else + import AdaAssets + import AdaInput + import AdaPlatform + import AdaUI + + @main + struct SpriteValidationApp: AdaApp.App { + var body: some AppScene { + EmptyWindow().transformAppWorlds { world in + world.insertPlugin(ValidationPlugin(), after: MainSchedulerPlugin.self) + } + .window(with: UIWindow.Configuration(title: "Sprite instancing validation", frame: Rect(x: 80, y: 80, width: 960, height: 540))) + } + } + + private struct ValidationPlugin: Plugin { + func setup(in app: AppWorlds) { + app.addPlugin(TransformPlugin()) + app.addPlugin(AppPlatformPlugin()) + app.addPlugin(InputPlugin()) + app.addPlugin(RenderWorldPlugin()) + app.addPlugin(CameraPlugin()) + app.addPlugin(AssetsPlugin()) + app.addPlugin(VisibilityPlugin()) + app.addPlugin(SpritePlugin()) + app.addPlugin(Mesh2DPlugin()) + app.addPlugin(TextPlugin()) + app.addPlugin(WindowPlugin()) + app.addPlugin(Core2DPlugin()) + app.addPlugin(UpscalePlugin()) + app.addPlugin(UIPlugin()) + app.addSystem(StartupSpriteValidationSystem.self, on: .startup) + } + } + + @System + @MainActor + func StartupSpriteValidation(_ context: WorldUpdateContext) async { + do { + let result = try await SpriteValidationFixture.run() + context.world.spawn { + Sprite(texture: Texture2D(image: result.image), size: [640, 360]) + Transform() + } + var camera = Camera() + camera.projection = .custom(ValidationProjection()) + camera.backgroundColor = .green + context.world.spawn { + camera + Transform() + GlobalViewUniform() + VisibleEntities() + Visibility.visible + CameraRenderGraph(subgraphLabel: .main2D, inputSlot: Main2DRenderNode.InputNode.view) + } + } catch { + print("[SpriteValidation] FAIL: \(error)") + var camera = Camera() + camera.backgroundColor = .red + context.world.spawn { + camera + Transform() + GlobalViewUniform() + VisibleEntities() + Visibility.visible + CameraRenderGraph(subgraphLabel: .main2D, inputSlot: Main2DRenderNode.InputNode.view) + } + } + } + + private struct ValidationProjection: CameraProjection { + var near: Float { -1 } + var far: Float { 1000 } + func makeClipView() -> Transform3D { Transform3D(scale: [Float(2) / 680, Float(2) / 400, 0.001]) } + mutating func updateView(width: Float, height: Float) {} + } +#endif diff --git a/Examples/Technical/SpriteInstancingValidation/SpriteValidationFixture.swift b/Examples/Technical/SpriteInstancingValidation/SpriteValidationFixture.swift new file mode 100644 index 0000000..bf3050b --- /dev/null +++ b/Examples/Technical/SpriteInstancingValidation/SpriteValidationFixture.swift @@ -0,0 +1,154 @@ +import AdaCorePipelines +import AdaECS +@_spi(Internal) import AdaRender +import AdaSprite +import AdaTransform +import AdaUtils +import Foundation +import Math + +/// Shared GPU readback fixture for native/mobile Metal and browser WebGPU. +@MainActor +enum SpriteValidationFixture { + struct Result { + let image: Image + let backend: RenderBackendType + let draws: Int + let quads: Int + } + + enum Failure: Error { + case unsupportedBackend, missingResource, missingImage, unequalPixels, emptyImage, missingInstancing + } + + static func run() async throws -> Result { + let device = unsafe RenderEngine.shared.renderDevice + guard device.supportsInstancedVertexInputs else { throw Failure.unsupportedBackend } + Camera.registerComponent() + let world = World() + world.insertResource(SpriteDrawPass()) + world.insertResource(SpriteBatches()) + world.insertResource(AdditionalExtractedSprites()) + world.insertResource(RenderDeviceHandler(renderDevice: device)) + world.insertResource(RenderPipelines(configurator: SpriteRenderPipeline())) + world.addSystem(SpriteRenderSystem.self, on: .update) + let view = world.spawn { Camera() } + let target = RenderTexture(size: [640, 360], scaleFactor: 1, format: .bgra8) + var pipelines = RenderPipelines(configurator: SpriteRenderPipeline()) + let pipeline = pipelines.pipeline(device: device) + var sprites: [Entity.ID: ExtractedSprite] = [:] + var items: [Transparent2DRenderItem] = [] + var atlasImage = Image(width: 32, height: 16, color: .green) + atlasImage.samplerDescription.magFilter = .nearest + atlasImage.samplerDescription.minFilter = .nearest + for y in 0..<16 { + for x in 0..<32 where x < 4 || x >= 28 || y < 4 || y >= 12 { + atlasImage.setPixel(in: [Float(x), Float(y)], color: y < 8 ? (x < 16 ? .red : .yellow) : (x < 16 ? .blue : .white)) + } + } + let atlas = TextureAtlas(from: atlasImage, size: [32, 16]) + guard let slice = atlas.textureSlice(in: RectInt(x: 0, y: 0, width: 32, height: 16)) else { throw Failure.missingImage } + let alphaTexture = Texture2D(image: Image(width: 2, height: 1, data: Data([255, 255, 255, 0, 255, 255, 255, 128]))) + func add( + texture: Texture2D, + position: Vector3, + size: Size, + mode: SpriteImageMode = .stretch, + anchor: SpriteAnchor = .center, + flipX: Bool = false, + flipY: Bool = false, + color: Color = .white, + scale: Vector3 = [1, 1, 1], + rotation: Quat = .identity + ) { + let id = sprites.count + let transform = Transform(rotation: rotation, scale: scale, position: position) + sprites[id] = ExtractedSprite( + entityId: id, + texture: texture, + size: size, + flipX: flipX, + flipY: flipY, + tintColor: color, + transform: transform, + worldTransform: transform.matrix, + anchor: anchor, + imageMode: mode + ) + items.append(.init(entity: id, drawPass: SpriteDrawPass(), renderPipeline: pipeline, sortKey: Float(id), batchRange: 0..<0)) + } + let modes: [SpriteImageMode] = [.stretch, .fit, .fill, .sliced(SpriteSliceBorder(4)), .sliced(SpriteSliceBorder(4)), .tiled()] + for (index, mode) in modes.enumerated() { + add( + texture: slice, + position: [Float(index) * 96 - 240, 112, 0], + size: [72, 72], + mode: mode, + flipX: index == 4, + flipY: index == 5 + ) + } + add(texture: .whiteTexture, position: [-280, 8, 0], size: [40, 40], anchor: .bottomLeft, color: .red) + add(texture: slice, position: [-170, 28, 0], size: [96, 48], scale: [-1, 1, 1], rotation: Quat(axis: [0, 0, 1], angle: 0.2)) + add(texture: .whiteTexture, position: [-32, 28, 0], size: [72, 48], color: .blue) + add(texture: alphaTexture, position: [-32, 28, 0], size: [72, 48]) + add(texture: .whiteTexture, position: [64, 28, 0], size: [72, 48], color: .red) + add(texture: alphaTexture, position: [64, 28, 0], size: [72, 48]) + // A long contiguous run exercises instance offsets and buffer reuse across frames. + for index in 0..<1200 { + add( + texture: .whiteTexture, + position: [Float(index % 120) * 5 - 298, Float(index / 120) * 5 - 120, 0], + size: [3, 3], + color: index % 2 == 0 ? .green : .yellow + ) + } + world.insertResource(ExtractedSprites(sprites: SparseSet(sprites))) + var reference: Data? + var resultImage: Image? + var draws = 0 + var quads = 0 + for mode in [SpriteRenderingMode.batched, .automatic] { + var data = SpriteDrawData.defaultValue + data.renderingMode = mode + world.insertResource(data) + for _ in 0..<5 { + world.insertResource(SortedRenderItems(items: RenderItems(items: items))) + await world.runScheduler(.update) + guard let prepared = world.getResource(SpriteDrawData.self), + let sorted = world.getResource(SortedRenderItems.self) + else { throw Failure.missingResource } + if mode == .automatic, !prepared.vertexBuffer.isEmpty { throw Failure.missingInstancing } + draws = sorted.items.items.filter { $0.batchRange?.isEmpty == false }.count + quads = world.getResource(SpriteBatches.self)?.batches.values.reduce(0) { $0 + $1.range.count } ?? 0 + let command = device.createCommandQueue().makeCommandBuffer() + let encoder = command.beginRenderPass( + RenderPassDescriptor(colorAttachments: [ + .init(texture: target, operation: OperationDescriptor(loadAction: .clear, storeAction: .store), clearColor: .black) + ]) + ) + let projection = Transform3D(scale: [Float(2) / 640, Float(2) / 360, 0.001]) + encoder.setVertexBuffer(GlobalViewUniform(projectionMatrix: projection, viewProjectionMatrix: projection), slot: GlobalBufferIndex.viewUniform) + encoder.setViewport(Rect(x: 0, y: 0, width: 640, height: 360)) + try sorted.items.render(with: encoder, world: world, view: view) + encoder.endRenderPass() + await withCheckedContinuation { (continuation: CheckedContinuation) in + command.addCompletedHandler { continuation.resume() } + command.commit() + } + guard let image = try await device.readImage(from: target) else { throw Failure.missingImage } + if let reference, image.data != reference { throw Failure.unequalPixels } + reference = image.data + resultImage = image + } + } + guard let image = resultImage else { throw Failure.missingImage } + guard image.getPixel(x: 50, y: 150) == .red, image.getPixel(x: 260, y: 150) == .blue, + image.getPixel(x: 356, y: 150) == .red, image.getPixel(x: 22, y: 300) == .green, + quads >= 1200, draws > 1 + else { throw Failure.emptyImage } + let backend = unsafe RenderEngine.shared.type + print("[SpriteValidation] PASS backend=\(backend) pixels=identical frames=10 quads=\(quads) draws=\(draws) instancing=true") + return Result(image: image, backend: backend, draws: draws, quads: quads) + } +} diff --git a/Examples/Technical/SpriteInstancingValidation/project.yml b/Examples/Technical/SpriteInstancingValidation/project.yml new file mode 100644 index 0000000..96457ba --- /dev/null +++ b/Examples/Technical/SpriteInstancingValidation/project.yml @@ -0,0 +1,45 @@ +name: SpriteInstancingValidation +options: + deploymentTarget: + iOS: '18.0' +packages: + AdaEngine: + url: https://github.com/AdaEngine/Ada.git + revision: b43d7e8f2f03e124a62b77499f7c2949a078dc27 +settings: + base: + SWIFT_VERSION: '6.2' + DEVELOPMENT_TEAM: 8PYCRS3EA3 + CODE_SIGN_STYLE: Automatic +targets: + SpriteInstancingValidation: + type: application + platform: iOS + sources: + - SpriteValidationApp.swift + - SpriteValidationFixture.swift + dependencies: + - package: AdaEngine + product: AdaApp + - package: AdaEngine + product: AdaCorePipelines + - package: AdaEngine + product: AdaECS + - package: AdaEngine + product: AdaRender + - package: AdaEngine + product: AdaSprite + - package: AdaEngine + product: AdaTransform + - package: AdaEngine + product: AdaUtils + - package: AdaEngine + product: Math + settings: + base: + PRODUCT_BUNDLE_IDENTIFIER: org.adaengine.SpriteInstancingValidation + GENERATE_INFOPLIST_FILE: YES + INFOPLIST_KEY_UILaunchScreen_Generation: YES + TARGETED_DEVICE_FAMILY: '1,2' + scheme: + testTargets: [] diff --git a/scripts/validate_technical_packages.py b/scripts/validate_technical_packages.py new file mode 100644 index 0000000..8523795 --- /dev/null +++ b/scripts/validate_technical_packages.py @@ -0,0 +1,58 @@ +"""Validate standalone technical SwiftPM manifests without downloading dependencies or building apps.""" +import argparse +import json +from pathlib import Path +import shutil +import subprocess + + +ROOT = Path(__file__).resolve().parents[1] + + +def manifest(path, swift): + result = subprocess.run([swift, "package", "--package-path", str(path), "dump-package"], + capture_output=True, text=True, check=True) + return json.loads(result.stdout) + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--engine-root", type=Path, help="Also check products against a local engine manifest") + args = parser.parse_args() + swift = shutil.which("swift") + if not swift: + parser.error("Swift 6.2 or later is required") + products = None + if args.engine_root: + engine = manifest(args.engine_root.resolve(), swift) + products = {item["name"] for item in engine["products"]} + assert all(not (item.get("path") or "").startswith("Demos/") for item in engine["targets"]) + public = json.loads((ROOT / "catalog.json").read_text(encoding="utf-8")) + public_paths = {item["path"] for item in public["items"]} + paths = sorted((ROOT / "Examples/Technical").glob("*/Package.swift")) + for path in paths: + data = manifest(path.parent, swift) + assert path.parent.relative_to(ROOT).as_posix() not in public_paths + for dependency in data["dependencies"]: + assert "fileSystem" not in dependency, "Unset local dependency overrides when validating distribution manifests" + for source in dependency.get("sourceControl", []): + assert source["requirement"].get("revision") or source["requirement"].get("exact"), "Pin technical dependencies" + for target in data["targets"]: + folder = path.parent / target.get("path", ".") + assert folder.is_dir(), folder + for source in target.get("sources") or []: + assert source != "Package.swift", "Do not compile the package manifest as application code" + assert (folder / source).is_file(), source + for resource in target.get("resources", []): + assert (folder / resource["path"]).exists(), resource + if products: + for dependency in target["dependencies"]: + product = dependency.get("product") + if product and product[1].lower() == "adaengine": + assert product[0] in products, f"Missing engine product {product[0]}" + print(f"manifest ok: {path.parent.name}", flush=True) + print(f"Validated {len(paths)} technical packages; native builds and device execution are separate checks.") + + +if __name__ == "__main__": + main() From c33c6e2c8e04f81251337bf2ec2389009b42d510 Mon Sep 17 00:00:00 2001 From: Vladislav Prusakov Date: Wed, 4 Nov 2026 14:25:41 +0300 Subject: [PATCH 4/4] Pin technical examples to published engine extraction commit --- Examples/Technical/A2UIForm/Package.swift | 2 +- Examples/Technical/AndroidDemo/Package.swift | 2 +- Examples/Technical/LinuxSmoke/Package.swift | 2 +- Examples/Technical/MovieMaker/Package.swift | 2 +- Examples/Technical/Navigation/Package.swift | 2 +- Examples/Technical/Physics2D/Package.swift | 2 +- Examples/Technical/SpineNative/Package.swift | 2 +- Examples/Technical/SpinePreview/Package.swift | 2 +- Examples/Technical/Sponza/Package.swift | 2 +- Examples/Technical/SpriteInstancingValidation/Package.swift | 2 +- Examples/Technical/SpriteInstancingValidation/project.yml | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/Examples/Technical/A2UIForm/Package.swift b/Examples/Technical/A2UIForm/Package.swift index 44d1a8e..bb64cfe 100644 --- a/Examples/Technical/A2UIForm/Package.swift +++ b/Examples/Technical/A2UIForm/Package.swift @@ -7,7 +7,7 @@ let package = Package( platforms: [.macOS(.v15), .iOS(.v18)], products: [.executable(name: "A2UIFormDemo", targets: ["A2UIFormDemo"])], dependencies: [ - .package(url: "https://github.com/AdaEngine/AdaEngine.git", revision: "b43d7e8f2f03e124a62b77499f7c2949a078dc27") + .package(url: "https://github.com/AdaEngine/AdaEngine.git", revision: "a624ccded0a050fddc24ccfbb8079dfb8032805c") ], targets: [ .executableTarget( diff --git a/Examples/Technical/AndroidDemo/Package.swift b/Examples/Technical/AndroidDemo/Package.swift index 2457a0b..aa64794 100644 --- a/Examples/Technical/AndroidDemo/Package.swift +++ b/Examples/Technical/AndroidDemo/Package.swift @@ -7,7 +7,7 @@ let package = Package( platforms: [.macOS(.v15), .iOS(.v18)], products: [.library(name: "AndroidDemo", type: .dynamic, targets: ["AndroidDemo"])], dependencies: [ - .package(url: "https://github.com/AdaEngine/AdaEngine.git", revision: "b43d7e8f2f03e124a62b77499f7c2949a078dc27") + .package(url: "https://github.com/AdaEngine/AdaEngine.git", revision: "a624ccded0a050fddc24ccfbb8079dfb8032805c") ], targets: [ .target( diff --git a/Examples/Technical/LinuxSmoke/Package.swift b/Examples/Technical/LinuxSmoke/Package.swift index f739808..0254362 100644 --- a/Examples/Technical/LinuxSmoke/Package.swift +++ b/Examples/Technical/LinuxSmoke/Package.swift @@ -7,7 +7,7 @@ let package = Package( platforms: [.macOS(.v15), .iOS(.v18)], products: [.executable(name: "LinuxSmoke", targets: ["LinuxSmoke"])], dependencies: [ - .package(url: "https://github.com/AdaEngine/AdaEngine.git", revision: "b43d7e8f2f03e124a62b77499f7c2949a078dc27") + .package(url: "https://github.com/AdaEngine/AdaEngine.git", revision: "a624ccded0a050fddc24ccfbb8079dfb8032805c") ], targets: [ .executableTarget( diff --git a/Examples/Technical/MovieMaker/Package.swift b/Examples/Technical/MovieMaker/Package.swift index 2c8d46e..33de126 100644 --- a/Examples/Technical/MovieMaker/Package.swift +++ b/Examples/Technical/MovieMaker/Package.swift @@ -7,7 +7,7 @@ let package = Package( platforms: [.macOS(.v15), .iOS(.v18)], products: [.executable(name: "MovieMakerDemo", targets: ["MovieMakerDemo"])], dependencies: [ - .package(url: "https://github.com/AdaEngine/AdaEngine.git", revision: "b43d7e8f2f03e124a62b77499f7c2949a078dc27") + .package(url: "https://github.com/AdaEngine/AdaEngine.git", revision: "a624ccded0a050fddc24ccfbb8079dfb8032805c") ], targets: [ .executableTarget( diff --git a/Examples/Technical/Navigation/Package.swift b/Examples/Technical/Navigation/Package.swift index 77615a2..8355254 100644 --- a/Examples/Technical/Navigation/Package.swift +++ b/Examples/Technical/Navigation/Package.swift @@ -7,7 +7,7 @@ let package = Package( platforms: [.macOS(.v15), .iOS(.v18)], products: [.executable(name: "NavigationDemo", targets: ["NavigationDemo"])], dependencies: [ - .package(url: "https://github.com/AdaEngine/AdaEngine.git", revision: "b43d7e8f2f03e124a62b77499f7c2949a078dc27") + .package(url: "https://github.com/AdaEngine/AdaEngine.git", revision: "a624ccded0a050fddc24ccfbb8079dfb8032805c") ], targets: [ .executableTarget( diff --git a/Examples/Technical/Physics2D/Package.swift b/Examples/Technical/Physics2D/Package.swift index c7626aa..e541d9e 100644 --- a/Examples/Technical/Physics2D/Package.swift +++ b/Examples/Technical/Physics2D/Package.swift @@ -7,7 +7,7 @@ let package = Package( platforms: [.macOS(.v15), .iOS(.v18)], products: [.executable(name: "Physics2DDemo", targets: ["Physics2DDemo"])], dependencies: [ - .package(url: "https://github.com/AdaEngine/AdaEngine.git", revision: "b43d7e8f2f03e124a62b77499f7c2949a078dc27") + .package(url: "https://github.com/AdaEngine/AdaEngine.git", revision: "a624ccded0a050fddc24ccfbb8079dfb8032805c") ], targets: [ .executableTarget( diff --git a/Examples/Technical/SpineNative/Package.swift b/Examples/Technical/SpineNative/Package.swift index 0a82cc2..8453a2c 100644 --- a/Examples/Technical/SpineNative/Package.swift +++ b/Examples/Technical/SpineNative/Package.swift @@ -4,7 +4,7 @@ import PackageDescription let enginePath = ProcessInfo.processInfo.environment["ADAENGINE_PACKAGE_PATH"] let engineDependency: Package.Dependency = enginePath.map { .package(name: "AdaEngine", path: $0) } - ?? .package(url: "https://github.com/AdaEngine/AdaEngine.git", revision: "b43d7e8f2f03e124a62b77499f7c2949a078dc27") + ?? .package(url: "https://github.com/AdaEngine/AdaEngine.git", revision: "a624ccded0a050fddc24ccfbb8079dfb8032805c") let mcpPath = ProcessInfo.processInfo.environment["ADA_MCP_LOCAL_PATH"] let mcpDependency: Package.Dependency = mcpPath.map { .package(name: "AdaMCP", path: $0) } diff --git a/Examples/Technical/SpinePreview/Package.swift b/Examples/Technical/SpinePreview/Package.swift index 668b0ba..19780bc 100644 --- a/Examples/Technical/SpinePreview/Package.swift +++ b/Examples/Technical/SpinePreview/Package.swift @@ -7,7 +7,7 @@ let package = Package( platforms: [.macOS(.v15), .iOS(.v18)], products: [.executable(name: "SpinePreview", targets: ["SpinePreview"])], dependencies: [ - .package(url: "https://github.com/AdaEngine/AdaEngine.git", revision: "b43d7e8f2f03e124a62b77499f7c2949a078dc27") + .package(url: "https://github.com/AdaEngine/AdaEngine.git", revision: "a624ccded0a050fddc24ccfbb8079dfb8032805c") ], targets: [ .executableTarget( diff --git a/Examples/Technical/Sponza/Package.swift b/Examples/Technical/Sponza/Package.swift index e5f501f..e66ac49 100644 --- a/Examples/Technical/Sponza/Package.swift +++ b/Examples/Technical/Sponza/Package.swift @@ -7,7 +7,7 @@ let package = Package( platforms: [.macOS(.v15), .iOS(.v18)], products: [.executable(name: "SponzaDemo", targets: ["SponzaDemo"])], dependencies: [ - .package(url: "https://github.com/AdaEngine/AdaEngine.git", revision: "b43d7e8f2f03e124a62b77499f7c2949a078dc27") + .package(url: "https://github.com/AdaEngine/AdaEngine.git", revision: "a624ccded0a050fddc24ccfbb8079dfb8032805c") ], targets: [ .executableTarget( diff --git a/Examples/Technical/SpriteInstancingValidation/Package.swift b/Examples/Technical/SpriteInstancingValidation/Package.swift index 771e050..1dd3ce9 100644 --- a/Examples/Technical/SpriteInstancingValidation/Package.swift +++ b/Examples/Technical/SpriteInstancingValidation/Package.swift @@ -7,7 +7,7 @@ let package = Package( platforms: [.macOS(.v15), .iOS(.v18)], products: [.executable(name: "SpriteInstancingValidation", targets: ["SpriteInstancingValidation"])], dependencies: [ - .package(url: "https://github.com/AdaEngine/AdaEngine.git", revision: "b43d7e8f2f03e124a62b77499f7c2949a078dc27") + .package(url: "https://github.com/AdaEngine/AdaEngine.git", revision: "a624ccded0a050fddc24ccfbb8079dfb8032805c") ], targets: [ .executableTarget( diff --git a/Examples/Technical/SpriteInstancingValidation/project.yml b/Examples/Technical/SpriteInstancingValidation/project.yml index 96457ba..e302720 100644 --- a/Examples/Technical/SpriteInstancingValidation/project.yml +++ b/Examples/Technical/SpriteInstancingValidation/project.yml @@ -5,7 +5,7 @@ options: packages: AdaEngine: url: https://github.com/AdaEngine/Ada.git - revision: b43d7e8f2f03e124a62b77499f7c2949a078dc27 + revision: a624ccded0a050fddc24ccfbb8079dfb8032805c settings: base: SWIFT_VERSION: '6.2'

  2. bs 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%0D4hgGtuCwgBxw4 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≠KdcR_>$DpElti2u@f3Mc>f<-UhcJG=fj}1XB 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 SkeletalAnimationPlayer { + let nodes = SkeletonRig.nodes + let rig = try SkeletalRig(nodes: nodes.map { node in + let t = node.translation + let pose = SkeletalJointPose(translation: Vector3(t.x, t.y, t.z)) + return SkeletalRig.Node(parentIndex: node.parent, restPose: pose, restMatrix: pose.matrix, name: node.name) + }) + let clip = WalkClip.make() + let tracks = try clip.tracks.map { track in + try SkeletalAnimationTrack(nodeIndex: track.node, path: track.path == .rotation ? .rotation : .translation, + interpolation: .linear, times: track.times.map(Double.init), + values: track.values.map { Vector4($0.x, $0.y, $0.z, $0.w) }) + } + return try SkeletalAnimationPlayer(rig: rig, clips: [.init(name: clip.name, tracks: tracks)]) + } + + @Test("Native player loops continuously and leaves the model root in place") + func loop() throws { + var player = try player() + try player.play("Walk", transitionDuration: 0) + let duration = Double(WalkClip.duration) + for time in [0.0, 0.17, 0.49, 0.93] { + player.seek(to: time) + let first = player.globalTransforms + player.seek(to: time + duration) + for index in first.indices { + let a = first[index], b = player.globalTransforms[index] + for column in 0..<4 { + for row in 0..<4 { #expect(abs(a[column, row] - b[column, row]) < 0.00002) } + } + } + #expect(player.globalTransforms[0] == .identity) + } + } + + @Test("Both feet remain flat and above the floor; each alternates stance and swing") + func contacts() throws { + var player = try player() + try player.play("Walk", transitionDuration: 0) + var raised = [Joint.leftAnkle: Float(0), Joint.rightAnkle: Float(0)] + for step in 0..<96 { + player.seek(to: Double(step) / 96 * Double(WalkClip.duration)) + for ankle in [Joint.leftAnkle, .rightAnkle] { + let matrix = player.globalTransforms[ankle.node] + let height = matrix.w.y - ankle.position.y + #expect(height >= -0.001, "Sole must not sink through the floor") + #expect(height < 0.037, "Swing clearance must stay within the authored range") + #expect(abs(matrix.y.x) < 0.0001 && abs(matrix.y.z) < 0.0001 && abs(matrix.y.y - 1) < 0.0001, "Foot should stay flat") + raised[ankle] = max(raised[ankle] ?? 0, height) + } + let left = player.globalTransforms[Joint.leftAnkle.node].w.y + let right = player.globalTransforms[Joint.rightAnkle.node].w.y + #expect(min(left, right) < 0.121, "At least one planted foot is required") + } + #expect((raised[.leftAnkle] ?? 0) > 0.03 && (raised[.rightAnkle] ?? 0) > 0.03) + } + + @Test("Encoded clip keys and inverse binds survive the native importer") + func export() throws { + var mesh = ProceduralNode(name: "Probe", mesh: ProceduralGeometry.box(width: 0.1, height: 0.1, depth: 0.1)) + mesh.parent = 0 + let count = mesh.mesh?.positions.count ?? 0 + mesh.skinning = .init(skin: 0, joints: Array(repeating: [5, 0, 0, 0], count: count), weights: Array(repeating: [1, 0, 0, 0], count: count)) + let model = ProceduralModel(materials: [.init(name: "Probe")], nodes: SkeletonRig.nodes + [mesh], + skins: [SkeletonRig.skin], animations: [WalkClip.make()]) + let imported = try NativeGLTFLoader().load(data: GLBWriter().encode(model)) + #expect(imported.skins.first?.joints.count == 23) + #expect(imported.animations.first?.samplers.allSatisfy { $0.times.count == 49 } == true) + let inverse = try #require(imported.skins.first?.inverseBindMatrices[Joint.head.rawValue]) + #expect(abs(inverse.w.y + 1.14) < 0.00001) + } + + @Test("Baking rotated source geometry preserves outward-facing normals") + func bakedNormals() throws { + let root = ProceduralNode(name: "Head") + var box = ProceduralNode(name: "Rotated skull probe", mesh: ProceduralGeometry.box(width: 1, height: 2, depth: 3)) + box.parent = 0 + box.rotation = ProceduralMath.quaternion(eulerDegrees: [25, 35, 70]) + box.scale = [1, 2, 3] + let source = ProceduralModel(materials: [.init(name: "Bone")], nodes: [root, box]) + let imported = try NativeGLTFLoader().load(data: GLBWriter().encode(source)) + let baked = try MeshSkinning.make(imported) + let mesh = try #require(baked.first?.mesh) + for start in stride(from: 0, to: mesh.indices.count, by: 3) { + let corners = (0..<3).map { Int(mesh.indices[start + $0]) } + let p = mesh.positions[corners[0]], q = mesh.positions[corners[1]], r = mesh.positions[corners[2]] + let u = q - p, v = r - p + let cross = SIMD3(u.y * v.z - u.z * v.y, u.z * v.x - u.x * v.z, u.x * v.y - u.y * v.x) + let face = cross / (cross * cross).sum().squareRoot() + for index in corners { #expect((face * mesh.normals[index]).sum() > 0.999) } + } + } +} diff --git a/Examples/Technical/ProceduralSkeleton/Validation/StandaloneAssetScope.swift b/Examples/Technical/ProceduralSkeleton/Validation/StandaloneAssetScope.swift new file mode 100644 index 0000000..0e63ab0 --- /dev/null +++ b/Examples/Technical/ProceduralSkeleton/Validation/StandaloneAssetScope.swift @@ -0,0 +1,9 @@ +import Foundation + +// The CLI has no ECS asset manager. Supply only the loader's resource-scope boundary; +// GLB decoding, skin/animation import and writing all use the actual engine sources. +// This host always restricts external dependencies instead of granting unrestricted access. +enum AssetsManager { + static let restrictedResourceRoot: URL? = URL(fileURLWithPath: + ProcessInfo.processInfo.environment["SKELETON_RIG_RESOURCE_ROOT"] ?? FileManager.default.currentDirectoryPath) +} diff --git a/Examples/Technical/ProceduralSkeleton/author_recipe.py b/Examples/Technical/ProceduralSkeleton/author_recipe.py new file mode 100644 index 0000000..9918bf4 --- /dev/null +++ b/Examples/Technical/ProceduralSkeleton/author_recipe.py @@ -0,0 +1,283 @@ +"""Author the AdaScript recipe. Only stdlib; no mesh writer or 3D application. + +Coordinates below use +Z for the front for readability; emitted AdaScript uses +the engine camera convention (front is -Z). All actual meshes are made by Ada. +""" +import math +from pathlib import Path + +ROOT = Path(__file__).resolve().parent +lines = ["// Generated by author_recipe.py; run directly through editor.model.generate.", + "// Units: meters. Front: -Z. Static multipart study, not a skinned mesh.", + "func part(m, p, parent, mat, name, x, y, z) {", + " m.parent(p, parent); m.paint(p, mat); m.name(p, name); m.place(p, x, y, z); return p;", + "}", "func build(m) {"] +counter = 0 + + +def n(value): + return f"{value:.5f}".rstrip("0").rstrip(".") if value else "0" + + +def emit(text): + lines.append(" " + text) + + +def group(name, parent=None): + global counter + counter += 1 + key = f"g{counter}" + emit(f'var {key} = m.group(); m.name({key}, "{name}");') + if parent: + emit(f"m.parent({key}, {parent});") + return key + + +def shape(expr, name, parent, mat, pos=(0, 0, 0), scale=None, rotation=None): + global counter + counter += 1 + key = f"p{counter}" + x, y, z = pos + emit(f'var {key} = part(m, {expr}, {parent}, {mat}, "{name}", {n(x)}, {n(y)}, {n(-z)});') + if scale: + emit(f"m.scale({key}, {', '.join(n(v) for v in scale)});") + if rotation: + emit(f"m.rotate({key}, {', '.join(n(v) for v in rotation)});") + return key + + +def sphere(name, parent, mat, pos, scale, seg=8): + return shape(f"m.sphere(1, {seg})", name, parent, mat, pos, scale) + + +def bone(name, parent, a, b, radius=.027, mat=1): + delta = [b[0]-a[0], b[1]-a[1], -(b[2]-a[2])] + length = math.sqrt(sum(v*v for v in delta)) + pitch = math.degrees(math.atan2(delta[2], delta[1])) + roll = -math.degrees(math.asin(delta[0]/length)) + return shape(f"m.cylinder({n(radius*.85)}, {n(radius)}, {n(length)}, 7)", + name, parent, mat, tuple((x+y)/2 for x, y in zip(a, b)), rotation=(pitch, 0, roll)) + + +def mesh(name, parent, mat, verts, tris): + # Reflect Z and reverse winding to preserve outward normals. + for x, y, z in verts: + emit(f"m.vertex({n(x)}, {n(y)}, {n(-z)});") + for a, b, c in tris: + emit(f"m.triangle({a}, {c}, {b});") + return shape("m.mesh()", name, parent, mat) + + +def front(name, parent, mat, verts, tris): + fixed = [] + for a, b, c in tris: + p, q, r = verts[a], verts[b], verts[c] + cross_z = (q[0]-p[0])*(r[1]-p[1])-(q[1]-p[1])*(r[0]-p[0]) + fixed.append((a, b, c) if cross_z > 0 else (a, c, b)) + return mesh(name, parent, mat, verts, fixed) + + +def plate(name, parent, mat, polygon, front_z, back_z): + count = len(polygon) + area = sum(polygon[i][0]*polygon[(i+1)%count][1]-polygon[(i+1)%count][0]*polygon[i][1] for i in range(count)) + if area < 0: + polygon = list(reversed(polygon)) + verts = [(x, y, front_z) for x, y in polygon] + [(x, y, back_z) for x, y in polygon] + tris = [] + for i in range(1, count-1): + tris += [(0, i, i+1), (count, count+i+1, count+i)] + for i in range(count): + j = (i+1)%count + tris += [(i, count+i, j), (j, count+i, count+j)] + return mesh(name, parent, mat, verts, tris) + + +def oval_ring(name, parent, mat, y, rx, rz, thickness, height, segments=16): + # Lathe makes an actual hollow ring, rather than a solid disc hiding ribs. + for r, yy in [(1, height/2), (1, -height/2), (1-thickness/rx, -height/2), + (1-thickness/rx, height/2), (1, height/2)]: + emit(f"m.profile({n(r)}, {n(yy)});") + return shape(f"m.lathe({segments})", name, parent, mat, (0, y, 0), (rx, 1, rz)) + + +def build(): + materials = { + 0: (.73, .63, .43, 0, .85), # bone shaded facets + 1: (.94, .83, .59, 0, .76), # ivory + 2: (.12, .065, .025, 0, .95), # cavity + 3: (.56, .25, .022, 0, .82), # socket walls + 4: (1, .65, .015, 0, .35), # luminous eye + 5: (.46, .16, .085, 0, .95), # terracotta scarf + 6: (.24, .075, .038, 0, .95), # folds, belt + 7: (.078, .067, .058, 0, .95), # shorts + 8: (.24, .32, .35, .6, .55), # steel + 9: (.39, .17, .08, 0, .9), # shield wood + 10: (.55, .64, .64, .5, .48), # edge + } + for i, (r, g, b, metal, rough) in materials.items(): + emit(f"m.material({i}, {n(r)}, {n(g)}, {n(b)}); m.surface({i}, {n(metal)}, {n(rough)});") + emit("m.emissive(4, 1, 0.65, 0.008);") + root = group("Skeleton minion") + head = group("Head", root) + # Whole cranium shell: beveled perimeter, faceted sides and convex back. + outline = [(-.22, 1.70), (.22, 1.70), (.46, 1.55), + (.47, 1.25), (.37, 1.115), (.19, 1.06), (-.19, 1.06), + (-.37, 1.115), (-.47, 1.25), (-.46, 1.55)] + count = len(outline) + verts = [(x, y, .265) for x, y in outline] + verts += [(x*.92, 1.38+(y-1.38)*.95, -.19) for x, y in outline] + verts += [(x*.57, 1.38+(y-1.38)*.66, -.29) for x, y in outline] + verts.append((0, 1.38, -.31)) + tris = [] + # Outline is clockwise, side quads face out. + for level in range(2): + for i in range(count): + j = (i+1)%count + a, b = level*count+i, level*count+j + c, d = a+count, b+count + tris += [(a, b, c), (b, d, c)] + for i in range(count): + tris.append((2*count+i, 2*count+(i+1)%count, 3*count)) + mesh("Faceted cranium shell", head, 1, verts, tris) + + # Two open socket rings. Their side walls recede 11 cm into the skull. + outer_left = [(-.22, 1.70), (0, 1.70), (0, 1.38), + (0, 1.10), (-.19, 1.06), (-.37, 1.115), + (-.47, 1.25), (-.46, 1.55)] + for side in [-1, 1]: + label = "Left" if side < 0 else "Right" + outer = [(x*(-side), y, .265) for x, y in outer_left] + cx, cy = side*.235, 1.365 + inner = [(cx+.155*math.sin(i*math.pi/4), cy+.16*math.cos(i*math.pi/4), .295) for i in range(8)] + # Left inner sequence aligns clockwise top -> nose -> lower -> outer. + if side > 0: + inner = [(2*cx-x, y, z) for x, y, z in inner] + v = outer+inner + ts = [] + for i in range(8): + j = (i+1)%8 + ts += [(i, j, 8+i), (j, 8+j, 8+i)] + front(label+" orbital ivory rim", head, 1, v, ts) + back = [(cx+(x-cx)*.72, cy+(y-cy)*.72, .17) for x, y, z in inner] + # The wall normals face toward the socket center. + wall = inner+back + ts = [] + for i in range(8): + j = (i+1)%8 + tri = (i, j, i+8) + a,b,c = [wall[k] for k in tri] + normal = ((b[1]-a[1])*(c[2]-a[2])-(b[2]-a[2])*(c[1]-a[1]), + (b[2]-a[2])*(c[0]-a[0])-(b[0]-a[0])*(c[2]-a[2]), 0) + inward = (cx-(a[0]+b[0]+c[0])/3, cy-(a[1]+b[1]+c[1])/3) + if normal[0]*inward[0]+normal[1]*inward[1] < 0: + ts += [(i, i+8, j), (j, i+8, j+8)] + else: + ts += [(i, j, i+8), (j, j+8, i+8)] + mesh(label+" recessed socket walls", head, 3, wall, ts) + front(label+" socket shadow", head, 2, back, [(0, i, i+1) for i in range(1, 7)]) + sphere(label+" ember eye", head, 4, (cx, cy-.005, .205), (.061, .084, .043), 10) + # Nose reads as a dark triangular recess with ivory bridge and lower bevel. + plate("Nasal cavity", head, 2, [(-.065, 1.145), (.065, 1.145), (0, 1.285)], .288, .22) + front("Nasal bevel", head, 0, [(-.075,1.135,.29), (-.065,1.145,.29), + (0,1.17,.295), (.065,1.145,.29), (.075,1.135,.29)], [(0,1,2),(2,3,4)]) + for i, x in enumerate([-.27, -.135, 0, .135, .27]): + plate(f"Upper tooth {i+1}", head, 1, + [(x-.061,1.14), (x+.061,1.14), (x+.049,1.045), (x+.012,1.01), (x-.052,1.045)], .27, .12) + jaw = group("Lower jaw", head) + plate("Chin", jaw, 0, [(-.12,1.016), (.12,1.016), (.10,.945), (.045,.91), (-.07,.925)], .20, .07) + for side in [-1, 1]: + bone("Jaw hinge", jaw, (side*.13,.96,.11), (side*.24,1.10,.02), .032) + plate("Chin light facet", jaw, 1, [(-.10,1.005), (.04,.98), (.065,.925), (-.06,.94)], .205, .20) + + torso = group("Torso", root) + bone("Spine", torso, (0,.40,-.055), (0,1.01,-.055), .035, 0) + sphere("Neck joint", torso, 0, (0,1.01,0), (.07,.06,.065)) + for level, (y, rx, rz) in enumerate([(.52,.23,.13), (.63,.255,.15), (.74,.27,.155), (.85,.26,.14)]): + rib = group(f"Rib cage row {level+1}", torso) + # U-shaped left and right ribs, with a gap in the sternum. + for side in [-1, 1]: + points = [] + for j in range(8): + angle = -.5+j*(math.pi+.12)/7 + points.append((side*rx*math.sin(angle), y+.035*math.cos(angle), rz*math.cos(angle))) + for j in range(len(points)-1): + bone(f"Rib {level+1} segment {side} {j}", rib, points[j], points[j+1], .023) + bone("Sternum", torso, (0,.53,.13), (0,.86,.14), .027, 0) + for side in [-1,1]: + bone("Clavicle", torso, (0,.90,0), (side*.31,.91,0), .033) + scarf = group("Terracotta neckerchief", torso) + plate("Scarf bib", scarf, 5, [(-.32,.94), (-.22,1.01), (0,.96), (.23,1.005), (.33,.93), + (.24,.76), (.09,.665), (-.05,.65), (-.23,.76)], .205, .16) + plate("Scarf left folded facet", scarf, 5, [(-.32,.94), (-.22,1.01), (-.04,.91), (.22,.82), (.09,.665), (-.05,.65)], .215, .21) + fold = [(-.25,.925,.222), (-.12,.845,.225), (.015,.81,.225), (.15,.835,.222), (.25,.93,.219)] + for i in range(4): + bone("Scarf seam", scarf, fold[i], fold[i+1], .006, 6) + plate("Back scarf tail", scarf, 5, [(-.04,.96), (.12,.93), (.18,.73), (.075,.78), (.02,.74)], -.115, -.16) + oval_ring("Scarf collar", scarf, 5, .96, .14, .12, .028, .075) + + pelvis = group("Pelvis and belt", root) + sphere("Dark shorts", pelvis, 7, (0,.395,0), (.245,.14,.13), 8) + oval_ring("Leather belt", pelvis, 6, .475, .252, .155, .035, .075) + # Buckle built from four bars, the leather remains visible through it. + for name, pos, dimensions in [ + ("Buckle upper", (0,.511,.175), (.10,.016,.025)), + ("Buckle lower", (0,.44,.175), (.10,.016,.025)), + ("Buckle left", (-.047,.475,.175), (.016,.075,.025)), + ("Buckle right", (.047,.475,.175), (.016,.075,.025)), + ("Buckle tongue", (.007,.475,.19), (.065,.012,.012))]: + shape("m.box("+", ".join(n(v) for v in dimensions)+")", name, pelvis, 8, pos) + + for side in [-1, 1]: + leg = group("Left leg" if side < 0 else "Right leg", root) + x = side*.14 + shape("m.cylinder(0.095, 0.087, 0.11, 8)", "Shorts leg", leg, 7, (x,.35,0)) + shape("m.cylinder(0.098, 0.098, 0.04, 8)", "Leather cuff", leg, 6, (x,.303,0)) + bone("Shin", leg, (x,.28,0), (x,.12,.015), .034) + sphere("Knee", leg, 1, (x,.26,0), (.046,.05,.047)) + sphere("Ankle", leg, 0, (x,.12,.02), (.045,.045,.045)) + sphere("Chunky foot", leg, 1, (x,.055,.063), (.112,.055,.145)) + for j in [-1,1]: + bone("Toe separation", leg, (x+j*.028,.058,.177), (x+j*.028,.085,.158), .004, 0) + arm = group("Left arm" if side < 0 else "Right arm", root) + shoulder = (side*.31,.91,0) + elbow = (side*.49,.86,.012) + sphere("Shoulder", arm, 0, shoulder, (.05,.055,.052)) + bone("Humerus", arm, shoulder, elbow, .029) + sphere("Elbow", arm, 1, elbow, (.039,.042,.04)) + bone("Radius", arm, (side*.495,.88,.028), (side*.655,.88,.055), .019) + bone("Ulna", arm, (side*.495,.84,0), (side*.655,.84,.025), .016) + sphere("Hand", arm, 1, (side*.70,.86,.045), (.063,.063,.058)) + + # Equipment kept as independent, named subassemblies. These are static props. + equipment = group("Equipment", root) + sword = group("Broken sword", equipment) + # Hero holds sword on image-left, angled outward. + plate("Notched blade", sword, 10, [(-.75,.90), (-.88,1.12), (-.98,1.28), (-.96,1.40), + (-1.055,1.34), (-1.075,1.25), (-1.04,1.20), (-1.08,1.17), (-1.02,1.04), (-.87,.84)], .12, .075) + bone("Blade fuller", sword, (-.81,.91,.124), (-1.015,1.30,.124), .009, 8) + bone("Cross guard", sword, (-.88,.82,.10), (-.68,.94,.10), .032, 8) + bone("Leather grip", sword, (-.77,.85,.10), (-.66,.67,.10), .036, 6) + for i in range(3): + bone("Grip wrap", sword, (-.775+i*.03,.835-i*.05,.135), (-.725+i*.03,.865-i*.05,.135), .009, 9) + bone("Pommel", sword, (-.69,.67,.10), (-.625,.71,.10), .025, 8) + shield = group("Round shield", equipment) + # A vertical lathe ring, rotate +90 around X: model front is -Z. + for r, y in [(.30,.027), (.30,-.027), (.255,-.027), (.255,.027), (.30,.027)]: + emit(f"m.profile({n(r)}, {n(y)});") + shape("m.lathe(12)", "Steel shield rim", shield, 10, (.80,.67,.145), rotation=(90,0,0)) + shape("m.cylinder(0.257, 0.257, 0.045, 12)", "Wood shield face", shield, 9, (.80,.67,.145), rotation=(90,0,0)) + sphere("Steel shield boss", shield, 8, (.80,.67,.195), (.095,.095,.048), 10) + for xoff in [-.135,.135]: + bone("Wood plank groove", shield, (.80+xoff,.49,.172), (.80+xoff,.85,.172), .005, 6) + emit("}") + + +if __name__ == "__main__": + build() + target = ROOT / "Generators" / "Skeleton.ada" + target.parent.mkdir(parents=True, exist_ok=True) + source = "\n".join(lines)+"\n" + if len(source.encode()) > 65536: + raise RuntimeError("AdaScript source exceeds VM limit") + target.write_text(source, encoding="utf-8") + print(f"{target}: {len(source.encode())} bytes, {counter} nodes") diff --git a/Examples/Technical/ProceduralSkeleton/check_geometry.py b/Examples/Technical/ProceduralSkeleton/check_geometry.py new file mode 100644 index 0000000..0ed8407 --- /dev/null +++ b/Examples/Technical/ProceduralSkeleton/check_geometry.py @@ -0,0 +1,102 @@ +"""Check the actual GLB vertex/index buffers and this experiment's asset contract. + +This is not a manifold, intersection or artistic-similarity validator. +""" +import hashlib +import json +import math +from pathlib import Path +import struct + +ROOT = Path(__file__).resolve().parent + + +def check(path): + data = path.read_bytes() + magic, version, total = struct.unpack_from("<4sII", data) + assert magic == b"glTF" and version == 2 and total == len(data), "Invalid GLB header" + cursor, chunks = 12, {} + while cursor < len(data): + length, kind = struct.unpack_from("= size and end <= len(binary), "Buffer overrun" + assert end <= view.get("byteOffset", 0)+view["byteLength"], "Accessor exceeds buffer view" + return [struct.unpack_from("<"+fmt*width, binary, start+i*stride) for i in range(entry["count"])] + + triangles, vertices, min_normal, max_normal = 0, 0, 2, 0 + for mesh in gltf["meshes"]: + for primitive in mesh["primitives"]: + assert primitive.get("mode", 4) == 4, "Expected triangle lists" + attributes = primitive["attributes"] + positions, normals = accessor(attributes["POSITION"]), accessor(attributes["NORMAL"]) + indices = [value[0] for value in accessor(primitive["indices"])] + assert len(positions) == len(normals) and len(indices) % 3 == 0 + assert all(0 <= i < len(positions) for i in indices), "Index outside vertex buffer" + assert all(math.isfinite(x) for v in positions+normals for x in v), "Non-finite geometry" + assert len(accessor(attributes["TEXCOORD_0"])) == len(positions) + assert 0 <= primitive["material"] < len(gltf["materials"]) + for normal in normals: + length = math.sqrt(sum(x*x for x in normal)) + min_normal, max_normal = min(min_normal, length), max(max_normal, length) + assert abs(length-1) < .002, "Non-unit normal" + for i in range(0, len(indices), 3): + a, b, c = [positions[j] for j in indices[i:i+3]] + u, v = [b[j]-a[j] for j in range(3)], [c[j]-a[j] for j in range(3)] + normal = [u[1]*v[2]-u[2]*v[1], u[2]*v[0]-u[0]*v[2], u[0]*v[1]-u[1]*v[0]] + assert sum(x*x for x in normal) > 1e-16, f"Degenerate face: {mesh['name']}" + # A smooth normal may be nearly perpendicular, but must not point behind its face. + for j in indices[i:i+3]: + assert sum(normal[k]*normals[j][k] for k in range(3)) >= -1e-8, f"Reversed normal: {mesh['name']}" + vertices += len(positions) + triangles += len(indices)//3 + + nodes = gltf["nodes"] + parents = {} + for i, node in enumerate(nodes): + for child in node.get("children", []): + assert 0 <= child < len(nodes) and child not in parents, "Invalid hierarchy" + parents[child] = i + for i in range(len(nodes)): + seen = set() + while i in parents: + assert i not in seen, "Cycle in node hierarchy" + seen.add(i) + i = parents[i] + required = {"Head", "Torso", "Left arm", "Right arm", "Left leg", "Right leg", + "Left ember eye", "Right ember eye", "Broken sword", "Round shield"} + assert required <= {node.get("name") for node in nodes}, "Missing character parts" + assert not gltf.get("skins") and not gltf.get("animations"), "This is a static asset contract" + assert not gltf.get("images"), "No image-generation or external texture dependency expected" + assert triangles < 10000 and len(data) < 1024*1024, "Prototype budget exceeded" + report = {"passed": True, "asset": str(path.relative_to(ROOT)), "sha256": hashlib.sha256(data).hexdigest(), + "bytes": len(data), "nodes": len(nodes), "meshes": len(gltf["meshes"]), + "materials": len(gltf["materials"]), "vertices": vertices, "triangles": triangles, + "normalLengthRange": [min_normal, max_normal], + "checks": ["GLB/chunk bounds", "self-contained buffers", "accessor ranges", "index ranges", + "finite positions and unit normals", "non-degenerate triangles", "normals agree with winding", + "UV counts", "material indices", "acyclic single-parent hierarchy", "named character parts", + "static/no-texture contract", "triangle and byte budgets"], + "notChecked": ["manifoldness", "self-intersections", "rig or deformation quality", "reference similarity"]} + return report + + +if __name__ == "__main__": + result = check(ROOT / "Assets/Models/Skeleton.glb") + (ROOT / "Evidence").mkdir(exist_ok=True) + (ROOT / "Evidence/geometry-check.json").write_text(json.dumps(result, indent=2)+"\n", encoding="utf-8") + print(json.dumps(result, indent=2)) diff --git a/Examples/Technical/ProceduralSkeleton/check_rig.py b/Examples/Technical/ProceduralSkeleton/check_rig.py new file mode 100644 index 0000000..ea79812 --- /dev/null +++ b/Examples/Technical/ProceduralSkeleton/check_rig.py @@ -0,0 +1,168 @@ +"""Independent checks on the actual authored GLB: bind pose, weights and loop seam. + +Uses only the standard library. Artistic deformation and intersections still need visual review. +""" +import hashlib +import argparse +import json +import math +from pathlib import Path +import struct + +ROOT = Path(__file__).resolve().parent + + +def identity(): + return [[float(i == j) for j in range(4)] for i in range(4)] + + +def multiply(a, b): + return [[sum(a[i][k]*b[k][j] for k in range(4)) for j in range(4)] for i in range(4)] + + +def transform(matrix, vector): + return [sum(matrix[i][j]*vector[j] for j in range(4)) for i in range(4)] + + +def matrix(node): + if "matrix" in node: + return [[node["matrix"][j*4+i] for j in range(4)] for i in range(4)] + x, y, z, w = node.get("rotation", [0, 0, 0, 1]) + s = node.get("scale", [1, 1, 1]) + t = node.get("translation", [0, 0, 0]) + rows = [[1-2*(y*y+z*z), 2*(x*y-z*w), 2*(x*z+y*w)], + [2*(x*y+z*w), 1-2*(x*x+z*z), 2*(y*z-x*w)], + [2*(x*z-y*w), 2*(y*z+x*w), 1-2*(x*x+y*y)]] + return [[rows[i][j]*s[j] for j in range(3)]+[t[i]] for i in range(3)]+[[0, 0, 0, 1]] + + +class GLB: + def __init__(self, path): + data = path.read_bytes() + magic, version, size = struct.unpack_from("<4sII", data) + assert magic == b"glTF" and version == 2 and size == len(data) + offset, chunks = 12, {} + while offset < len(data): + size, kind = struct.unpack_from(" 1e-16 + assert all(sum(face[k]*normals[j][k] for k in range(3)) >= -1e-8 for j in corners) + for vertex, (p, js, ws) in enumerate(zip(positions, joints, weights)): + assert all(0 <= joint < 23 for joint in js) + assert all(math.isfinite(w) and 0 <= w <= 1 for w in ws) + sum_error = max(sum_error, abs(sum(ws)-1)) + assert sum_error < 1e-5 + influences = sum(w > 1e-6 for w in ws) + assert 1 <= influences <= 2 + blended += influences == 2 + targets = [transform(palettes[joint], [*p, 1]) for joint in js] + deformed = [sum(ws[j]*targets[j][axis] for j in range(4)) for axis in range(3)] + authored = transform(rig.globals[i], [*p, 1]) + rest_error = max(rest_error, math.dist(deformed, authored[:3])) + source_error = max(source_error, math.dist(authored[:3], original[vertex][:3])) + vertices += len(positions) + assert rest_error < 1e-5 and source_error < 1e-5 and normal_error < 1e-5 and blended > 0 + walk = next(clip for clip in rig.doc["animations"] if clip["name"] == "Walk") + seam_error = 0. + for channel in walk["channels"]: + sampler = walk["samplers"][channel["sampler"]] + times, values = rig.accessor(sampler["input"]), rig.accessor(sampler["output"]) + assert len(times) == len(values) == 49 and times[0][0] == 0 and abs(times[-1][0]-1.2) < 1e-6 + assert all(a[0] < b[0] for a, b in zip(times, times[1:])) + seam_error = max(seam_error, max(abs(a-b) for a, b in zip(values[0], values[-1]))) + assert seam_error < 1e-6 + return {"passed": True, "sha256": hashlib.sha256(path.read_bytes()).hexdigest(), "vertices": vertices, + "triangles": triangles, "joints": 23, "skinnedMeshes": len(rig.doc["meshes"]), "blendedVertices": blended, + "maximumWeightSumError": sum_error, "maximumBindPoseErrorMeters": rest_error, + "maximumSourcePositionErrorMeters": source_error, "maximumLoopSeamError": seam_error, + "maximumSourceNormalError": normal_error, + "walkDurationSeconds": 1.2, "keysPerTrack": 49, + "notChecked": ["arbitrary character auto-rigging", "manifoldness", "all possible self-intersections"]} + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--asset", type=Path, default=ROOT / "Assets/Models/Skeleton-Walk.glb") + parser.add_argument("--output", type=Path, default=ROOT / "Evidence/Rig/buffer-check.json") + args = parser.parse_args() + result = check(args.asset.resolve()) + target = args.output + target.parent.mkdir(parents=True, exist_ok=True) + target.write_text(json.dumps(result, indent=2)+"\n", encoding="utf-8") + print(json.dumps(result, indent=2)) diff --git a/Examples/Technical/ProceduralSkeleton/experiment.py b/Examples/Technical/ProceduralSkeleton/experiment.py new file mode 100644 index 0000000..e01b621 --- /dev/null +++ b/Examples/Technical/ProceduralSkeleton/experiment.py @@ -0,0 +1,147 @@ +"""Generate and accept the model using a running native Ada Studio MCP server. + + python experiment.py generate --destination Assets/Models/Skeleton-next.glb + python experiment.py capture + +Open this project in Studio with --mcp-port=2516 first. No Python packages needed. +""" +import argparse +import json +import math +from pathlib import Path +import shutil +import time +import urllib.request +import urllib.parse + +ROOT = Path(__file__).resolve().parent + + +class MCP: + def __init__(self, endpoint): + if urllib.parse.urlsplit(endpoint).scheme not in ("http", "https"): + raise ValueError("The MCP endpoint must use HTTP or HTTPS") + self.endpoint, self.session, self.sequence = endpoint, None, 0 + self.request("initialize", { + "protocolVersion": "2024-11-05", "capabilities": {}, + "clientInfo": {"name": "procedural-skeleton-study", "version": "1"}, + }) + + def request(self, method, params): + self.sequence += 1 + headers = {"Content-Type": "application/json", "Accept": "application/json, text/event-stream"} + if self.session: + headers["Mcp-Session-Id"] = self.session + payload = {"jsonrpc": "2.0", "id": self.sequence, "method": method, "params": params} + request = urllib.request.Request(self.endpoint, headers=headers, data=json.dumps(payload).encode()) + with urllib.request.urlopen(request, timeout=60) as response: + self.session = response.headers.get("Mcp-Session-Id", self.session) + body = response.read().decode() + if body.startswith(("event:", "data:")): + body = next(line[5:].strip() for line in body.splitlines() if line.startswith("data:")) + reply = json.loads(body) + if "error" in reply: + raise RuntimeError(reply["error"]) + return reply["result"] + + def tool(self, name, **arguments): + result = self.request("tools/call", {"name": name, "arguments": arguments}) + text = next(item["text"] for item in result["content"] if item["type"] == "text") + if result.get("isError"): + raise RuntimeError(text) + return json.loads(text) + + +def save(name, payload): + target = ROOT / "Evidence" / name + target.parent.mkdir(parents=True, exist_ok=True) + target.write_text(json.dumps(payload, indent=2, ensure_ascii=False)+"\n", encoding="utf-8") + + +def build(client): + client.tool("editor.build.start") + deadline = time.monotonic()+60 + while time.monotonic() < deadline: + state = client.tool("editor.task.status") + if not state["isWorkspaceTaskRunning"]: + output = client.tool("editor.output.read", limit=40) + if state.get("buildStep", {}).get("title") != "Completed": + raise RuntimeError({"state": state, "output": output}) + return output + time.sleep(.2) + raise TimeoutError("Native project build exceeded 60 seconds") + + +def turn(client, degrees): + half = math.radians(degrees)/2 + scene = client.tool("editor.scene.get") + client.tool("editor.scene.apply", expectedRevision=scene["revision"], operations=[{ + "op": "setComponent", "entityID": "subject", "typeName": "AdaTransform.Transform", + "payload": {"position": [0, 0, 0], "rotation": [0, math.sin(half), 0, math.cos(half)], "scale": [1, 1, 1]}, + }]) + + +def capture(client): + status = client.tool("editor.task.status") + if status["isWorkspaceTaskRunning"] or status["playMode"] != "editing": + client.tool("editor.task.stop") + report = {"model": "Assets/Models/Skeleton.glb", "views": [], "limitations": [ + "Static multipart model; no skin, animation clips, retopology or texture maps.", + "These checks do not prove manifold topology, absence of intersections, or reference similarity.", + ]} + validation = client.tool("editor.model.validate", path=report["model"]) + save("native-validation.json", validation) + if not validation.get("valid"): + raise RuntimeError("Native model validation failed") + try: + for name, degrees in [("front", 0), ("three-quarter", -28), ("side", -90), ("back", 180)]: + turn(client, degrees) + build(client) + result = client.tool("editor.play.run_scenario", width=1280, height=960, maxDimension=1280, + duration=.7, steps=[{"t": .4, "capture": name}], + watch={"entities": ["Camera", "Skeleton minion"], "components": ["Transform"]}) + frames = result.get("frames", []) + if (result["status"] != "completed" or result["errors"] or result["scriptErrorCount"] + or len(frames) != 1 or frames[0].get("uniform", True) or "error" in frames[0]): + raise RuntimeError(result) + target = ROOT / "Evidence" / f"{name}.png" + shutil.copy2(frames[0]["path"], target) + save(f"session-{name}.json", result) + report["views"].append({"yawDegrees": degrees, "savedAs": target.name, **frames[0]}) + print(f"{name}: native GPU {frames[0]['width']}x{frames[0]['height']}", flush=True) + finally: + turn(client, -28) + build(client) + save("capture-report.json", report) + client.tool("editor.play.start") + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("action", choices=["generate", "capture"]) + parser.add_argument("--endpoint", default="http://127.0.0.1:2516/mcp") + parser.add_argument("--destination", default="Assets/Models/Skeleton.glb") + args = parser.parse_args() + client = MCP(args.endpoint) + context = client.tool("editor.project.context") + if Path(context["projectPath"]).resolve() != ROOT: + raise RuntimeError("The MCP endpoint has a different project open") + if args.action == "capture": + settings = json.loads((ROOT / ".ada/project.json").read_text(encoding="utf-8")) + if (context["activeDocument"]["path"] != "Assets/Scenes/Showcase.ascn" + or settings["runtime"]["entry"]["scene"] != "Assets/Scenes/Showcase.ascn"): + raise RuntimeError("Static capture requires Showcase.ascn as both active scene and runtime entry; use rig_capture.py for Walk.ascn") + capture(client) + else: + result = client.tool("editor.model.generate", source=(ROOT / "Generators/Skeleton.ada").read_text(encoding="utf-8"), + destination=args.destination) + save("generation.json", result) + validation = client.tool("editor.model.validate", path=result["path"]) + save("native-validation.json", validation) + if not validation.get("valid"): + raise RuntimeError("Native import failed") + print(f"{result['path']}: {result['triangleCount']} triangles, {result['vertexCount']} vertices") + + +if __name__ == "__main__": + main() diff --git a/Examples/Technical/ProceduralSkeleton/native_rig.py b/Examples/Technical/ProceduralSkeleton/native_rig.py new file mode 100644 index 0000000..52fc254 --- /dev/null +++ b/Examples/Technical/ProceduralSkeleton/native_rig.py @@ -0,0 +1,89 @@ +"""Build the native AdaAssets rig author and its production-source tests without renderer dependencies. + +The isolated SwiftPM package snapshots the checked-out Math, AdaAssets GLTF and +procedural sources verbatim. It has no third-party dependencies or downloads. +""" +import argparse +import os +from pathlib import Path +import shutil +import subprocess + +PROJECT = Path(__file__).resolve().parent +ENGINE = Path(os.environ.get("ADAENGINE_ROOT", str(PROJECT))).expanduser().resolve() +STAGE = ENGINE / ".build-tools/skeleton-rig" + + +def require_engine(): + if not (ENGINE / "Sources/AdaScripting/AdaScriptModelRigBuilder.swift").is_file(): + raise RuntimeError("Set ADAENGINE_ROOT to an Ada engine checkout containing the procedural rig builder") + + +def write(path, data): + path.parent.mkdir(parents=True, exist_ok=True) + if not path.exists() or path.read_bytes() != data: + path.write_bytes(data) + + +def stage(): + require_engine() + groups = { + "Math": [ENGINE / "Sources/Math"], + "AdaAssets": [ENGINE / "Sources/AdaAssets/GLTF", ENGINE / "Sources/AdaAssets/Procedural"], + "SkeletonRig": [PROJECT / "NativeRig"], + "AdaAnimation": [ENGINE / "Sources/AdaAnimation/Skeletal"], + } + for module, folders in groups.items(): + for folder in folders: + for source in folder.rglob("*.swift"): + write(STAGE / "Sources" / module / source.name, source.read_bytes()) + for name in ["ProceduralModelTests.swift", "ProceduralRigTests.swift"]: + source = ENGINE / "Tests/AdaAssetsTests" / name + write(STAGE / "Tests/AdaAssetsTests" / name, source.read_bytes()) + scope = PROJECT / "Validation/StandaloneAssetScope.swift" + write(STAGE / "Sources/AdaAssets/StandaloneAssetScope.swift", scope.read_bytes()) + sampler = (ENGINE / "Sources/AdaAnimation/KeyframeSampler.swift").read_text(encoding="utf-8") + interpolation = "import Math\n\n" + sampler[sampler.index("func slerpQuat("):] + write(STAGE / "Sources/AdaAnimation/SkeletalQuaternionInterpolation.swift", interpolation.encode()) + walk_test = PROJECT / "Validation/SkeletonWalkTests.swift" + write(STAGE / "Tests/SkeletonRigTests/SkeletonWalkTests.swift", walk_test.read_bytes()) + manifest = '''// swift-tools-version: 6.2 +import PackageDescription +let package = Package(name: "SkeletonRigStudy", targets: [ + .target(name: "Math"), + .target(name: "AdaAssets", dependencies: ["Math"]), + .target(name: "AdaAnimation", dependencies: ["Math"]), + .executableTarget(name: "SkeletonRig", dependencies: ["AdaAssets", "Math"]), + .testTarget(name: "AdaAssetsTests", dependencies: ["AdaAssets", "Math"]), + .testTarget(name: "SkeletonRigTests", dependencies: ["SkeletonRig", "AdaAssets", "AdaAnimation", "Math"]) +]) +''' + write(STAGE / "Package.swift", manifest.encode()) + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("action", choices=["test", "generate"]) + args = parser.parse_args() + stage() + swift = shutil.which("swift") + if not swift: + raise RuntimeError("Install the repository's compatible Swift toolchain first") + if args.action == "test": + subprocess.run([swift, "test", "--package-path", str(STAGE)], check=True) + else: + output = PROJECT / "Assets/Models/Skeleton-Walk.glb" + environment = dict(os.environ, SKELETON_RIG_RESOURCE_ROOT=str(PROJECT / "Assets")) + result = subprocess.run([swift, "run", "--package-path", str(STAGE), "SkeletonRig", + str(PROJECT / "Assets/Models/Skeleton.glb"), str(output), + str(PROJECT / "Assets/Models/Skeleton-Walk-samples.glb")], + check=True, capture_output=True, text=True, env=environment) + print(result.stderr, end="") + print(result.stdout, end="") + evidence = PROJECT / "Evidence/Rig" + evidence.mkdir(parents=True, exist_ok=True) + (evidence / "generation.json").write_text(result.stdout, encoding="utf-8") + + +if __name__ == "__main__": + main() diff --git a/Examples/Technical/ProceduralSkeleton/rig_capture.py b/Examples/Technical/ProceduralSkeleton/rig_capture.py new file mode 100644 index 0000000..373e286 --- /dev/null +++ b/Examples/Technical/ProceduralSkeleton/rig_capture.py @@ -0,0 +1,126 @@ +"""Accept live native playback, then render 24 fixed phases through native GPU skinning. + +Run native_rig.py generate first, and open Assets/Scenes/Walk.ascn in Studio. +Only GIF encoding uses Pillow; rigging, clip evaluation and pixels come from AdaEngine. +""" +import argparse +import hashlib +import json +from pathlib import Path +import shutil + +from experiment import MCP, build + +ROOT = Path(__file__).resolve().parent +EVIDENCE = ROOT / "Evidence/Rig" +SCENE = "Assets/Scenes/Walk.ascn" +SOURCE = "@res://Models/Skeleton-Walk.glb" + + +def save(name, data): + EVIDENCE.mkdir(parents=True, exist_ok=True) + (EVIDENCE / name).write_text(json.dumps(data, indent=2)+"\n", encoding="utf-8") + + +def select(client, source, clip): + scene = client.tool("editor.scene.get", path=SCENE) + client.tool("editor.scene.apply", path=SCENE, expectedRevision=scene["revision"], operations=[{ + "op": "setComponent", "entityID": "subject", "typeName": "AdaScene.Model3DSource", + "payload": {"source": source, "animation": clip, "autoplay": True, "repeats": True}, + }]) + return build(client) + + +def scenario(client, **options): + result = client.tool("editor.play.run_scenario", width=960, height=800, maxDimension=960, **options) + if (result["status"] != "completed" or result["errors"] or result["scriptErrorCount"] + or any(frame.get("uniform", True) or "error" in frame for frame in result["frames"])): + raise RuntimeError(result) + return result + + +def gif(): + from PIL import Image + images = [Image.open(EVIDENCE / "frames" / f"frame-{index:02d}.png").convert("RGB") for index in range(24)] + palette = images[0].quantize(colors=256) + frames = [frame.quantize(palette=palette) for frame in images] + frames[0].save(EVIDENCE / "walk.gif", save_all=True, append_images=frames[1:], duration=50, loop=0, disposal=2) + for image in images: + image.close() + + +def main(): + global EVIDENCE, SOURCE + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--endpoint", default="http://127.0.0.1:2516/mcp") + parser.add_argument("--asset", default="Assets/Models/Skeleton-Walk.glb") + parser.add_argument("--evidence", type=Path, default=EVIDENCE) + parser.add_argument("--live-only", action="store_true", help="Capture playback and bind pose without the Swift baseline's 24 fixed phases") + args = parser.parse_args() + source_path = Path(args.asset) + if source_path.is_absolute() or source_path.parts[:2] != ("Assets", "Models") or ".." in source_path.parts: + parser.error("--asset must be a project-relative Assets/Models GLB") + if not args.live_only and source_path.name != "Skeleton-Walk.glb": + parser.error("Alternative assets need --live-only; fixed CapturePose clips belong to the Swift baseline") + SOURCE = "@res://" + source_path.relative_to("Assets").as_posix() + evidence_path = args.evidence if args.evidence.is_absolute() else ROOT / args.evidence + EVIDENCE = evidence_path + client = MCP(args.endpoint) + context = client.tool("editor.project.context") + if Path(context["projectPath"]).resolve() != ROOT or context["activeDocument"]["path"] != SCENE: + raise RuntimeError("Open this project's Walk.ascn in Studio before capturing") + status = client.tool("editor.task.status") + if status["isWorkspaceTaskRunning"] or status["playMode"] != "editing": + client.tool("editor.task.stop") + validation = client.tool("editor.model.validate", path=source_path.as_posix()) + save("native-validation.json", validation) + if not validation.get("valid") or validation["counts"]["skins"] != 1 or validation["skins"][0]["jointCount"] != 23: + raise RuntimeError("Rig import/profile contract failed") + report = {"renderer": client.tool("render_graph.get")["backend"], "frames": [], + "method": "Live Walk and BindPose, rendered by native GPU skinning." if args.live_only else + "Fixed CapturePose clips sampled from every second Walk key; rendered by native skinning, 20 fps.", + "sourceSha256": hashlib.sha256((ROOT / source_path).read_bytes()).hexdigest()} + try: + select(client, SOURCE, "Walk") + live = scenario(client, duration=3, steps=[ + {"t": .4, "snapshot": "a"}, {"t": .8, "capture": "walk-live-a"}, + {"t": 1.3, "snapshot": "b"}, {"t": 1.8, "capture": "walk-live-b"}, + {"t": 2.5, "snapshot": "c"}, + ], watch={"entities": ["Rig.hips", "Rig.leftHip", "Rig.rightHip", "Rig.leftKnee", "Rig.rightKnee", + "Rig.leftAnkle", "Rig.rightAnkle", "Rig.leftHand", "Rig.rightHand"], + "components": ["Transform"]}) + save("live-motion.json", live) + report["liveFrames"] = live["frames"] + for frame in live["frames"]: + shutil.copy2(frame["path"], EVIDENCE / (frame["label"] + ".png")) + hips = [next(e for e in snapshot["entities"] if e["name"] == "Rig.leftHip") for snapshot in live["snapshots"]] + rotations = {tuple(entity["componentFields"]["AdaTransform.Transform"]["rotation"]) for entity in hips} + if len(rotations) < 2 or live["snapshots"][-1]["frameSequence"] <= live["snapshots"][0]["frameSequence"]: + raise RuntimeError("Live animation did not advance") + report["liveDistinctHipPoses"] = len(rotations) + print(f"Live Walk: {len(rotations)} distinct sampled hip poses; no script errors", flush=True) + select(client, SOURCE, "BindPose") + bind = scenario(client, duration=.3, steps=[{"t": .15, "capture": "bind-pose"}], watch={"entities": ["Rig.head"]}) + report["bindFrame"] = bind["frames"][0] + shutil.copy2(bind["frames"][0]["path"], EVIDENCE / "bind-pose.png") + (EVIDENCE / "frames").mkdir(parents=True, exist_ok=True) + for frame in range(0 if args.live_only else 24): + select(client, "@res://Models/Skeleton-Walk-samples.glb", f"CapturePose{frame}") + result = scenario(client, duration=.25, steps=[{"t": .12, "capture": f"pose-{frame:02d}"}], + watch={"entities": ["Rig.leftAnkle", "Rig.rightAnkle"], "components": ["Transform"]}) + image = result["frames"][0] + target = EVIDENCE / "frames" / f"frame-{frame:02d}.png" + shutil.copy2(image["path"], target) + report["frames"].append({**image, "poseTime": frame * .05, "savedAs": str(target.relative_to(EVIDENCE))}) + if frame % 4 == 0 or frame == 23: + print(f"Native GPU phases: {frame+1}/24", flush=True) + if not args.live_only: + gif() + finally: + save("build-output.json", select(client, SOURCE, "Walk")) + save("capture-report.json", report) + client.tool("editor.play.start") + + +if __name__ == "__main__": + main() diff --git a/Examples/Technical/ProceduralSkeleton/script_rig.py b/Examples/Technical/ProceduralSkeleton/script_rig.py new file mode 100644 index 0000000..acedd46 --- /dev/null +++ b/Examples/Technical/ProceduralSkeleton/script_rig.py @@ -0,0 +1,109 @@ +"""Develop/test the AdaScript model bridge in an isolated native VM harness. + +The Swift build is a developer check, not a step required by an iPad recipe. +The app bundles this bridge ahead of time; recipe execution uses the bytecode VM. +""" +import argparse +import json +import os +from pathlib import Path +import shutil +import subprocess + +from native_rig import ENGINE, PROJECT, require_engine, write + +STAGE = ENGINE / ".build-tools/skeleton-script" + + +def stage(gravity): + require_engine() + groups = { + "Math": [ENGINE / "Sources/Math"], + "AdaAssets": [ENGINE / "Sources/AdaAssets/GLTF", ENGINE / "Sources/AdaAssets/Procedural", ENGINE / "Sources/AdaAssets/Voxel"], + "AdaScriptCompilerCore": [ENGINE / "Sources/AdaScriptCompilerCore"], + } + for module, folders in groups.items(): + for folder in folders: + for source in folder.rglob("*.swift"): + write(STAGE / "Sources" / module / source.name, source.read_bytes()) + scripting = ["AdaScriptModelGenerator.swift", "AdaScriptModelRigBuilder.swift", "AdaScriptGeneratorRunner.swift", + "AdaScriptGeneratorDelegate.swift", "AdaScriptCommunityPolicy.swift", "AdaScriptRuntimeCoordinator.swift", + "AdaScriptStandardLibrary.swift", "GravityScriptModule.swift", "AdaScriptSoundGenerator.swift", "AdaScriptSpriteGenerator.swift", "AdaScriptVoxelGenerator.swift"] + for name in scripting: + path = ENGINE / "Sources/AdaScripting" / name + if path.exists(): + write(STAGE / "Sources/AdaScripting" / name, path.read_bytes()) + identifiers = (ENGINE / "Sources/AdaScripting/AdaScriptIdentifiers.swift").read_text(encoding="utf-8") + identifiers = identifiers[:identifiers.index("\n#if canImport(GravityAOT)\nfinal class NativeIdentifiersHost")] + write(STAGE / "Sources/AdaScripting/AdaScriptIdentifiers.swift", identifiers.encode()) + test_runner = (ENGINE / "Sources/AdaScripting/AdaScriptTestRunner.swift").read_text(encoding="utf-8") + write(STAGE / "Sources/AdaScripting/AdaScriptTestCase.swift", test_runner[:test_runner.index("/// The outcome")].encode()) + write(STAGE / "Sources/AdaAssets/StandaloneAssetScope.swift", (PROJECT / "Validation/StandaloneAssetScope.swift").read_bytes()) + for name in ["AdaScriptModelGeneratorTests.swift", "AdaScriptModelRigTests.swift", "AdaScriptMediaGeneratorTests.swift", "AdaScriptVoxelGeneratorTests.swift"]: + path = ENGINE / "Tests/AdaScriptingTests" / name + if path.exists(): + write(STAGE / "Tests/AdaScriptingTests" / name, path.read_bytes()) + main = PROJECT / "Validation/ScriptRigMain.swift" + write(STAGE / "Sources/ScriptRig/Main.swift", main.read_bytes() if main.exists() else b'@main struct Main { static func main() {} }\n') + manifest = '''// swift-tools-version: 6.2 +import PackageDescription +let package = Package(name: "ScriptRigStudy", dependencies: [.package(name: "gravity-lang", path: GRAVITY_PATH)], targets: [ + .target(name: "Math"), + .target(name: "AdaAssets", dependencies: ["Math"]), + .target(name: "AdaScriptCompilerCore"), + .target(name: "AdaScripting", dependencies: ["AdaAssets", "Math", "AdaScriptCompilerCore", .product(name: "Gravity", package: "gravity-lang")]), + .executableTarget(name: "ScriptRig", dependencies: ["AdaAssets", "AdaScriptCompilerCore", "AdaScripting"]), + .testTarget(name: "AdaScriptingTests", dependencies: ["AdaAssets", "AdaScripting"]) +]) +'''.replace("GRAVITY_PATH", json.dumps(str(gravity), ensure_ascii=False)) + write(STAGE / "Package.swift", manifest.encode()) + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("action", choices=["bootstrap", "test", "generate", "run"]) + parser.add_argument("--gravity", type=Path, default=None) + parser.add_argument("--runtime-path", help="Override PATH for the prebuilt VM runner, for a compiler-free execution check") + args = parser.parse_args() + require_engine() + if args.runtime_path and args.action != "run": + parser.error("--runtime-path is only valid with the prebuilt 'run' action") + gravity = args.gravity or Path(os.environ.get("ADAENGINE_GRAVITY_PACKAGE_PATH", ENGINE / "Sources/gravity-lang")) + if args.action != "run": + stage(gravity.resolve()) + swift = shutil.which("swift") + if args.action != "run" and not swift: + raise RuntimeError("The developer harness requires Swift; the bundled iPad runtime does not") + if args.action == "bootstrap": + command = [swift, "build", "--package-path", str(STAGE), "--jobs", "2", "--target", "Gravity"] + elif args.action == "test": + command = [swift, "test", "--package-path", str(STAGE), "--jobs", "2"] + else: + source = (PROJECT / "Generators/Skeleton.ada").read_text(encoding="utf-8") + source = source.replace("func build(m) {", "func buildStaticSkeleton(m) {", 1) + source = source.replace("Static multipart study, not a skinned mesh.", "Base geometry; the rig recipe follows below.", 1) + # Expand the static author's packed calls in the composed, reviewable rig recipe. + source = "\n".join(line if line.lstrip().startswith("//") else line.replace("; ", ";\n ") for line in source.splitlines()) + "\n" + source = source.replace("}\nfunc ", "}\n\nfunc ") + source = "// Geometry, rig, weights and walk are authored by this interpreted AdaScript recipe.\n" + source + source += "\n" + (PROJECT / "Generators/SkeletonRigRecipe.ada").read_text(encoding="utf-8") + write(PROJECT / "Generators/Skeleton-Rig.ada", source.encode()) + arguments = [str(PROJECT / "Generators/Skeleton-Rig.ada"), str(PROJECT / "Assets/Models/Skeleton-AdaScript.glb")] + if args.action == "run": + name = "ScriptRig.exe" if os.name == "nt" else "ScriptRig" + candidates = [p for p in (STAGE / ".build").rglob(name) if p.is_file() and p.parent.name == "debug"] + if len(candidates) != 1: + raise RuntimeError("Build the developer runner once before running it without a compiler") + command = [str(candidates[0]), *arguments] + else: + command = [swift, "run", "--package-path", str(STAGE), "ScriptRig", *arguments] + environment = dict(os.environ) + if args.runtime_path: + environment["PATH"] = args.runtime_path + assert shutil.which("swift", path=args.runtime_path) is None + assert shutil.which("swiftc", path=args.runtime_path) is None + subprocess.run(command, check=True, env=environment) + + +if __name__ == "__main__": + main() diff --git a/Examples/Technical/README.md b/Examples/Technical/README.md new file mode 100644 index 0000000..8e081d1 --- /dev/null +++ b/Examples/Technical/README.md @@ -0,0 +1,17 @@ +# Technical examples + +Developer studies and acceptance projects live here. Clone the repository and open +the desired project directly; these are not beginner recommendations or sample games. + +| Project | Focus | +| --- | --- | +| [Procedural Skeleton](ProceduralSkeleton/README.md) | Explicit AdaScript rig, vertex weights and a walk clip; precompiled builder and interpreted VM | + +This section is intentionally separate from `catalog.json`. Studio and website +catalogs consume only its `items`, and the release workflow packages only those +items. The catalog validator rejects `Examples/Technical/` paths to prevent an +accidental promotion into those feeds. Adding technical studies does not require a +new public catalog schema or changes to catalog consumers. + +Commit the small assets needed to open a project. Keep build outputs, per-frame +captures, logs, workspace state and generated distributions ignored locally. diff --git a/README.md b/README.md index 95756da..469b765 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,8 @@ Official examples and complete sample games for [AdaEngine](https://github.com/A ## Repository layout - `Examples` contains focused projects that demonstrate one engine feature. +- [`Examples/Technical`](Examples/Technical/README.md) contains opt-in developer studies, + excluded from the public catalog and recommendations. - `Samples` contains complete, runnable games and larger reference projects. - `Assets/Previews` contains the images used by catalog cards. - `catalog.json` is the machine-readable catalog consumed by AdaEditor and the website. @@ -34,5 +36,8 @@ Keep every project self-contained. Do not add local package paths, build output, editor workspace state, or generated distribution bundles. Add a real preview under `Assets/Previews` and describe the project in `catalog.json`. +Technical studies use `Examples/Technical` and its separate README index instead. +Do not add them to `catalog.json`; catalog validation enforces this boundary. + All contributions must pass catalog validation. Swift samples are also built and tested in CI. diff --git a/scripts/test_technical_examples.py b/scripts/test_technical_examples.py new file mode 100644 index 0000000..e0f6b70 --- /dev/null +++ b/scripts/test_technical_examples.py @@ -0,0 +1,31 @@ +import contextlib +import io +import unittest + +from validate_catalog import load_catalog, validate_catalog + + +class TechnicalExamplesTests(unittest.TestCase): + def test_existing_catalog_still_validates(self): + validate_catalog(load_catalog()) + + def test_technical_project_cannot_enter_public_catalog(self): + for path in ["Examples/Technical/ProceduralSkeleton", "Examples/./Technical/ProceduralSkeleton", + "Examples/Other/../Technical/ProceduralSkeleton"]: + with self.subTest(path=path): + catalog = load_catalog() + catalog["items"].append({ + **catalog["items"][0], + "id": "procedural-skeleton", + "kind": "example", + "path": path, + }) + errors = io.StringIO() + with contextlib.redirect_stderr(errors), self.assertRaises(SystemExit) as raised: + validate_catalog(catalog) + self.assertEqual(raised.exception.code, 1) + self.assertIn("technical examples must remain outside the public catalog", errors.getvalue()) + + +if __name__ == "__main__": + unittest.main() diff --git a/scripts/validate_catalog.py b/scripts/validate_catalog.py index 2f76558..578fb2d 100755 --- a/scripts/validate_catalog.py +++ b/scripts/validate_catalog.py @@ -84,7 +84,9 @@ def validate_item( fail(f"duplicate item path: {relative_path}") item_paths.add(relative_path) - project_path = ROOT / relative_path + project_path = (ROOT / relative_path).resolve() + if project_path.is_relative_to((ROOT / "Examples/Technical").resolve()): + fail(f"{item_id}: technical examples must remain outside the public catalog") if not project_path.is_dir(): fail(f"{item_id}: project directory does not exist: {relative_path}") if not (project_path / ".ada" / "project.json").is_file(): From dea1aec56fd2417dfdcee58211929b04b1fbce33 Mon Sep 17 00:00:00 2001 From: Vladislav Prusakov Date: Wed, 4 Nov 2026 12:48:21 +0300 Subject: [PATCH 2/4] Point technical study to source-only engine PR --- Examples/Technical/ProceduralSkeleton/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Examples/Technical/ProceduralSkeleton/README.md b/Examples/Technical/ProceduralSkeleton/README.md index 1697bc3..c3e1b8a 100644 --- a/Examples/Technical/ProceduralSkeleton/README.md +++ b/Examples/Technical/ProceduralSkeleton/README.md @@ -21,7 +21,7 @@ The leg IK runs while authoring keys; runtime playback evaluates a regular clip. ## Regenerate through Studio Use a Studio build containing the procedural rig builder from -[Ada PR #205](https://github.com/AdaEngine/Ada/pull/205). Pass the full contents of +[Ada PR #206](https://github.com/AdaEngine/Ada/pull/206). Pass the full contents of `Generators/Skeleton-Rig.ada` as `source` to `editor.model.generate`, with a fresh `destination`, such as `Assets/Models/Skeleton-v2.glb`. The tool never overwrites an existing asset. Validate the new file and point the scene at its asset reference. From 7fbeaac598974d72324a18a620ff19386b8c7958 Mon Sep 17 00:00:00 2001 From: Vladislav Prusakov Date: Wed, 4 Nov 2026 14:20:38 +0300 Subject: [PATCH 3/4] Move all engine demos into standalone technical examples --- .gitattributes | 2 + Examples/Technical/A2UIForm/.gitignore | 6 + .../Technical/A2UIForm/A2UIFormDemo.swift | 199 ++++++++++ .../Technical/A2UIForm/Fixtures/form.jsonl | 5 + Examples/Technical/A2UIForm/Package.swift | 29 ++ Examples/Technical/A2UIForm/README.md | 10 + .../A2UIForm/script/build_and_run.sh | 69 ++++ Examples/Technical/AndroidDemo/.gitignore | 6 + .../Technical/AndroidDemo/AndroidDemo.swift | 39 ++ .../Technical/AndroidDemo/Assets/fixture.txt | 1 + Examples/Technical/AndroidDemo/Package.swift | 29 ++ Examples/Technical/AndroidDemo/README.md | 11 + Examples/Technical/LinuxSmoke/.gitignore | 6 + .../Technical/LinuxSmoke/LinuxSmoke.swift | 49 +++ Examples/Technical/LinuxSmoke/Package.swift | 27 ++ Examples/Technical/LinuxSmoke/README.md | 11 + Examples/Technical/MovieMaker/.gitignore | 6 + .../Technical/MovieMaker/MovieMakerDemo.swift | 75 ++++ Examples/Technical/MovieMaker/Package.swift | 27 ++ Examples/Technical/MovieMaker/README.md | 10 + Examples/Technical/Navigation/.gitignore | 6 + .../Navigation/NavigationDemoApp.swift | 201 ++++++++++ .../Navigation/NavigationDemoFixture.swift | 115 ++++++ .../Navigation/NavigationDemoMain.swift | 148 +++++++ .../Navigation/NavigationDemoScript.swift | 24 ++ .../Technical/Navigation/NavigationRobot.ada | 20 + Examples/Technical/Navigation/Package.swift | 32 ++ Examples/Technical/Navigation/README.md | 18 + .../Navigation/script/run_windows.ps1 | 43 ++ Examples/Technical/Physics2D/.gitignore | 6 + Examples/Technical/Physics2D/Package.swift | 38 ++ .../Physics2D/Physics2DAdvancedChecks.swift | 81 ++++ .../Physics2D/Physics2DAdvancedDemo.swift | 202 ++++++++++ .../Physics2D/Physics2DCharactersDemo.swift | 93 +++++ .../Physics2D/Physics2DDemoMain.swift | 364 +++++++++++++++++ .../Physics2D/Physics2DDemoScenes.swift | 302 ++++++++++++++ .../Physics2D/Physics2DDemoView.swift | 70 ++++ .../Physics2D/Physics2DLargeWorldChecks.swift | 86 ++++ .../Physics2D/Physics2DLargeWorldDemo.swift | 152 +++++++ .../Physics2D/Physics2DMechanismsDemo.swift | 132 +++++++ .../Physics2D/Physics2DQueriesDemo.swift | 135 +++++++ Examples/Technical/Physics2D/README.md | 61 +++ .../Physics2D/script/build_and_run.sh | 68 ++++ Examples/Technical/README.md | 19 +- Examples/Technical/SpineNative/.gitignore | 6 + Examples/Technical/SpineNative/Package.swift | 37 ++ Examples/Technical/SpineNative/README.md | 41 ++ .../SpineNative/SpineNativeApp.swift | 141 +++++++ Examples/Technical/SpineNative/capture.py | 85 ++++ Examples/Technical/SpinePreview/.gitignore | 6 + .../Assets/SpineRuntime-LICENSE.txt | 26 ++ .../Technical/SpinePreview/Assets/UPSTREAM.md | 5 + .../SpinePreview/Assets/preview.html | 75 ++++ .../SpinePreview/Assets/spineboy-pro.skel | Bin 0 -> 64463 bytes .../SpinePreview/Assets/spineboy.atlas | 94 +++++ .../SpinePreview/Assets/spineboy.png | Bin 0 -> 245321 bytes Examples/Technical/SpinePreview/Package.swift | 27 ++ Examples/Technical/SpinePreview/README.md | 23 ++ .../Technical/SpinePreview/SpinePreview.swift | 80 ++++ Examples/Technical/Sponza/.gitignore | 6 + .../Sponza/Assets/intel-sponza-routes.json | 105 +++++ .../Sponza/Camera/SponzaCameraMotion.swift | 30 ++ .../Sponza/Camera/SponzaFlyCamera.swift | 48 +++ .../Sponza/Camera/SponzaLightMotion.swift | 13 + Examples/Technical/Sponza/Package.swift | 35 ++ Examples/Technical/Sponza/README.md | 183 +++++++++ Examples/Technical/Sponza/SponzaDemo.swift | 371 ++++++++++++++++++ .../Technical/Sponza/SponzaDemoProfiler.swift | 357 +++++++++++++++++ .../Technical/Sponza/SponzaLighting.swift | 134 +++++++ .../Sponza/SponzaStutterProfiler.swift | 72 ++++ Examples/Technical/Sponza/SponzaWarmup.swift | 111 ++++++ .../Sponza/Tests/SponzaCameraTests.swift | 66 ++++ .../SpriteInstancingValidation/.gitignore | 6 + .../SpriteInstancingValidation/Package.swift | 44 +++ .../SpriteInstancingValidation/README.md | 39 ++ .../SpriteValidationApp.swift | 152 +++++++ .../SpriteValidationFixture.swift | 154 ++++++++ .../SpriteInstancingValidation/project.yml | 45 +++ scripts/validate_technical_packages.py | 58 +++ 79 files changed, 5706 insertions(+), 2 deletions(-) create mode 100644 .gitattributes create mode 100644 Examples/Technical/A2UIForm/.gitignore create mode 100644 Examples/Technical/A2UIForm/A2UIFormDemo.swift create mode 100644 Examples/Technical/A2UIForm/Fixtures/form.jsonl create mode 100644 Examples/Technical/A2UIForm/Package.swift create mode 100644 Examples/Technical/A2UIForm/README.md create mode 100755 Examples/Technical/A2UIForm/script/build_and_run.sh create mode 100644 Examples/Technical/AndroidDemo/.gitignore create mode 100644 Examples/Technical/AndroidDemo/AndroidDemo.swift create mode 100644 Examples/Technical/AndroidDemo/Assets/fixture.txt create mode 100644 Examples/Technical/AndroidDemo/Package.swift create mode 100644 Examples/Technical/AndroidDemo/README.md create mode 100644 Examples/Technical/LinuxSmoke/.gitignore create mode 100644 Examples/Technical/LinuxSmoke/LinuxSmoke.swift create mode 100644 Examples/Technical/LinuxSmoke/Package.swift create mode 100644 Examples/Technical/LinuxSmoke/README.md create mode 100644 Examples/Technical/MovieMaker/.gitignore create mode 100644 Examples/Technical/MovieMaker/MovieMakerDemo.swift create mode 100644 Examples/Technical/MovieMaker/Package.swift create mode 100644 Examples/Technical/MovieMaker/README.md create mode 100644 Examples/Technical/Navigation/.gitignore create mode 100644 Examples/Technical/Navigation/NavigationDemoApp.swift create mode 100644 Examples/Technical/Navigation/NavigationDemoFixture.swift create mode 100644 Examples/Technical/Navigation/NavigationDemoMain.swift create mode 100644 Examples/Technical/Navigation/NavigationDemoScript.swift create mode 100644 Examples/Technical/Navigation/NavigationRobot.ada create mode 100644 Examples/Technical/Navigation/Package.swift create mode 100644 Examples/Technical/Navigation/README.md create mode 100644 Examples/Technical/Navigation/script/run_windows.ps1 create mode 100644 Examples/Technical/Physics2D/.gitignore create mode 100644 Examples/Technical/Physics2D/Package.swift create mode 100644 Examples/Technical/Physics2D/Physics2DAdvancedChecks.swift create mode 100644 Examples/Technical/Physics2D/Physics2DAdvancedDemo.swift create mode 100644 Examples/Technical/Physics2D/Physics2DCharactersDemo.swift create mode 100644 Examples/Technical/Physics2D/Physics2DDemoMain.swift create mode 100644 Examples/Technical/Physics2D/Physics2DDemoScenes.swift create mode 100644 Examples/Technical/Physics2D/Physics2DDemoView.swift create mode 100644 Examples/Technical/Physics2D/Physics2DLargeWorldChecks.swift create mode 100644 Examples/Technical/Physics2D/Physics2DLargeWorldDemo.swift create mode 100644 Examples/Technical/Physics2D/Physics2DMechanismsDemo.swift create mode 100644 Examples/Technical/Physics2D/Physics2DQueriesDemo.swift create mode 100644 Examples/Technical/Physics2D/README.md create mode 100755 Examples/Technical/Physics2D/script/build_and_run.sh create mode 100644 Examples/Technical/SpineNative/.gitignore create mode 100644 Examples/Technical/SpineNative/Package.swift create mode 100644 Examples/Technical/SpineNative/README.md create mode 100644 Examples/Technical/SpineNative/SpineNativeApp.swift create mode 100644 Examples/Technical/SpineNative/capture.py create mode 100644 Examples/Technical/SpinePreview/.gitignore create mode 100644 Examples/Technical/SpinePreview/Assets/SpineRuntime-LICENSE.txt create mode 100644 Examples/Technical/SpinePreview/Assets/UPSTREAM.md create mode 100644 Examples/Technical/SpinePreview/Assets/preview.html create mode 100644 Examples/Technical/SpinePreview/Assets/spineboy-pro.skel create mode 100644 Examples/Technical/SpinePreview/Assets/spineboy.atlas create mode 100644 Examples/Technical/SpinePreview/Assets/spineboy.png create mode 100644 Examples/Technical/SpinePreview/Package.swift create mode 100644 Examples/Technical/SpinePreview/README.md create mode 100644 Examples/Technical/SpinePreview/SpinePreview.swift create mode 100644 Examples/Technical/Sponza/.gitignore create mode 100644 Examples/Technical/Sponza/Assets/intel-sponza-routes.json create mode 100644 Examples/Technical/Sponza/Camera/SponzaCameraMotion.swift create mode 100644 Examples/Technical/Sponza/Camera/SponzaFlyCamera.swift create mode 100644 Examples/Technical/Sponza/Camera/SponzaLightMotion.swift create mode 100644 Examples/Technical/Sponza/Package.swift create mode 100644 Examples/Technical/Sponza/README.md create mode 100644 Examples/Technical/Sponza/SponzaDemo.swift create mode 100644 Examples/Technical/Sponza/SponzaDemoProfiler.swift create mode 100644 Examples/Technical/Sponza/SponzaLighting.swift create mode 100644 Examples/Technical/Sponza/SponzaStutterProfiler.swift create mode 100644 Examples/Technical/Sponza/SponzaWarmup.swift create mode 100644 Examples/Technical/Sponza/Tests/SponzaCameraTests.swift create mode 100644 Examples/Technical/SpriteInstancingValidation/.gitignore create mode 100644 Examples/Technical/SpriteInstancingValidation/Package.swift create mode 100644 Examples/Technical/SpriteInstancingValidation/README.md create mode 100644 Examples/Technical/SpriteInstancingValidation/SpriteValidationApp.swift create mode 100644 Examples/Technical/SpriteInstancingValidation/SpriteValidationFixture.swift create mode 100644 Examples/Technical/SpriteInstancingValidation/project.yml create mode 100644 scripts/validate_technical_packages.py diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..85674a7 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +*.sh text eol=lf +*.ada text eol=lf diff --git a/Examples/Technical/A2UIForm/.gitignore b/Examples/Technical/A2UIForm/.gitignore new file mode 100644 index 0000000..fd14c91 --- /dev/null +++ b/Examples/Technical/A2UIForm/.gitignore @@ -0,0 +1,6 @@ +.build/ +.swiftpm/ +dist/ +*.xcodeproj/ +__pycache__/ +Package.resolved diff --git a/Examples/Technical/A2UIForm/A2UIFormDemo.swift b/Examples/Technical/A2UIForm/A2UIFormDemo.swift new file mode 100644 index 0000000..e2f21d6 --- /dev/null +++ b/Examples/Technical/A2UIForm/A2UIFormDemo.swift @@ -0,0 +1,199 @@ +import AdaA2UI +import AdaEngine +@_spi(Internal) import AdaPlatform +import Foundation +import Observation +#if os(macOS) +import AppKit +#endif + +@main +struct A2UIFormDemo: App { + var body: some AppScene { + WindowGroup { FormDemoView() } + .window(with: UIWindow.Configuration(title: "AdaUI · A2UI Forms", frame: Rect(x: 160, y: 140, width: 760, height: 820))) + } +} + +@MainActor @Observable +private final class FormDemoModel { + let client = A2UIClient() + var status = "Waiting for the agent stream…" + var lastAction = "Submit the form to inspect its action payload." + var started = false + var lastEvent: A2UIClientEvent? + + init() { + client.onEvent = { [weak self] event in + guard let self else { return } + if case let .object(envelope) = event.envelope, envelope["action"] != nil { + self.lastEvent = event + self.lastAction = (try? String(decoding: JSONEncoder().encode(event.envelope), as: UTF8.self)) ?? "Action received" + demoLog("A2UI action: \(self.lastAction)") + } else { + self.status = self.client.lastError?.message ?? "Invalid message rejected" + } + } + } + + func start() async { + guard !started else { return } + started = true + do { + guard let url = Bundle.module.url(forResource: "form", withExtension: "jsonl", subdirectory: "Fixtures") else { + throw A2UIValidationError(message: "Demo fixture missing.") + } + let data = try Data(contentsOf: url) + var decoder = A2UIJSONLDecoder() + // Byte chunks exercise the same framing path a network adapter would use. + for offset in stride(from: 0, to: data.count, by: 53) { + let chunk = data.subdata(in: offset.. some View { + PlainTextFieldStyle()._body(configuration: configuration) + .padding(.horizontal, 8) + .background(Color(red: 0.16, green: 0.19, blue: 0.24)) + .border(Color(red: 0.34, green: 0.39, blue: 0.47), lineWidth: 1) + } +} + +private struct FormDemoButtonStyle: ButtonStyle { + func makeBody(configuration: Configuration) -> some View { + configuration.label + .fontSize(14) + .padding(9) + .background(configuration.isPressed ? Color(red: 0.25, green: 0.38, blue: 0.55) : Color(red: 0.18, green: 0.26, blue: 0.37)) + } +} diff --git a/Examples/Technical/A2UIForm/Fixtures/form.jsonl b/Examples/Technical/A2UIForm/Fixtures/form.jsonl new file mode 100644 index 0000000..dcba20a --- /dev/null +++ b/Examples/Technical/A2UIForm/Fixtures/form.jsonl @@ -0,0 +1,5 @@ +{"version":"v0.9.1","createSurface":{"surfaceId":"form","catalogId":"https://adaengine.org/a2ui/catalogs/forms/v1","sendDataModel":true}} +{"version":"v0.9.1","updateComponents":{"surfaceId":"form","components":[{"id":"root","component":"Column","spacing":16,"children":["heading","name","copy","enabled","role","health-label","health","submit"]},{"id":"heading","component":"Text","text":"Create an NPC profile"}]}} +{"version":"v0.9.1","updateComponents":{"surfaceId":"form","components":[{"id":"name","component":"TextField","placeholder":"NPC name","text":{"path":"/npc/name"},"checks":[{"condition":{"call":"required","args":{"value":{"path":"/npc/name"}}},"message":"NPC name is required."}]},{"id":"copy","component":"Text","text":{"path":"/npc/name"}},{"id":"enabled","component":"Toggle","label":"Enable dialog","value":{"path":"/npc/dialogEnabled"}}]}} +{"version":"v0.9.1","updateDataModel":{"surfaceId":"form","value":{"npc":{"name":"Guide","dialogEnabled":true,"role":"guide","health":50}}}} +{"version":"v0.9.1","updateComponents":{"surfaceId":"form","components":[{"id":"submit","component":"Button","text":"Create profile","action":{"event":{"name":"create_npc","context":{"name":{"path":"/npc/name"},"dialogEnabled":{"path":"/npc/dialogEnabled"},"role":{"path":"/npc/role"},"health":{"path":"/npc/health"}}}},"checks":[{"condition":{"call":"required","args":{"value":{"path":"/npc/name"}}},"message":"NPC name is required."},{"condition":{"call":"range","args":{"value":{"path":"/npc/health"},"min":1,"max":100}},"message":"Health must be between 1 and 100."}]},{"id":"role","component":"ChoicePicker","label":"Role","value":{"path":"/npc/role"},"options":[{"label":"Guide","value":"guide"},{"label":"Merchant","value":"merchant"},{"label":"Guard","value":"guard"}]},{"id":"health-label","component":"Text","text":"Health"},{"id":"health","component":"Slider","value":{"path":"/npc/health"},"min":1,"max":100,"step":1,"checks":[{"condition":{"call":"range","args":{"value":{"path":"/npc/health"},"min":1,"max":100}},"message":"Health must be between 1 and 100."}]}]}} diff --git a/Examples/Technical/A2UIForm/Package.swift b/Examples/Technical/A2UIForm/Package.swift new file mode 100644 index 0000000..44d1a8e --- /dev/null +++ b/Examples/Technical/A2UIForm/Package.swift @@ -0,0 +1,29 @@ +// swift-tools-version: 6.2 +import Foundation +import PackageDescription + +let package = Package( + name: "A2UIFormDemo", + platforms: [.macOS(.v15), .iOS(.v18)], + products: [.executable(name: "A2UIFormDemo", targets: ["A2UIFormDemo"])], + dependencies: [ + .package(url: "https://github.com/AdaEngine/AdaEngine.git", revision: "b43d7e8f2f03e124a62b77499f7c2949a078dc27") + ], + targets: [ + .executableTarget( + name: "A2UIFormDemo", + dependencies: [ + .product(name: "AdaA2UI", package: "adaengine"), + .product(name: "AdaEngine", package: "adaengine"), + .product(name: "AdaPlatform", package: "adaengine") + ], + path: ".", + exclude: ["README.md", "script"] + (FileManager.default.fileExists(atPath: "dist") ? ["dist"] : []), + sources: [ + "A2UIFormDemo.swift" + ], + resources: [.copy("Fixtures")], + swiftSettings: [.enableUpcomingFeature("MemberImportVisibility"), .strictMemorySafety()] + ) + ] +) diff --git a/Examples/Technical/A2UIForm/README.md b/Examples/Technical/A2UIForm/README.md new file mode 100644 index 0000000..0c3fd5b --- /dev/null +++ b/Examples/Technical/A2UIForm/README.md @@ -0,0 +1,10 @@ +# A2UI form demo + +See [the integration guide](https://github.com/AdaEngine/Ada/blob/main/Documentation/A2UI.md). + +The NPC form includes a single-choice role picker and stepped health slider. +Required/range checks show inline messages and block invalid submission. Native +verification clears the name, checks rejection, corrects it, chooses a role, +changes health, submits, and exports controls plus validation into `.ui`. + +From the AdaExamples root on macOS, run `Examples/Technical/A2UIForm/script/build_and_run.sh --verify`. diff --git a/Examples/Technical/A2UIForm/script/build_and_run.sh b/Examples/Technical/A2UIForm/script/build_and_run.sh new file mode 100755 index 0000000..093563e --- /dev/null +++ b/Examples/Technical/A2UIForm/script/build_and_run.sh @@ -0,0 +1,69 @@ +#!/usr/bin/env bash +set -euo pipefail +MODE="${1:-run}" +DEMO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +REPO_ROOT="$DEMO_ROOT" +BUILD_PATH="${ADAENGINE_A2UI_BUILD_PATH:-/private/tmp/adaengine-a2ui-build}" +mkdir -p "$BUILD_PATH" +BUILD_PATH="$(cd "$BUILD_PATH" && pwd -P)" +APP="$DEMO_ROOT/dist/A2UIFormDemo.app" +export ADAENGINE_DISABLE_SWAN=1 +export CLANG_MODULE_CACHE_PATH="$BUILD_PATH/clang-cache" +export SWIFTPM_MODULECACHE_OVERRIDE="$BUILD_PATH/swift-cache" +case "$MODE" in run|--verify|--debug|--logs|--telemetry) ;; *) echo "usage: $0 [run|--verify|--debug|--logs|--telemetry]" >&2; exit 2 ;; esac +for demo_pid in $(pgrep -f "$APP/Contents/MacOS/A2UIFormDemo" || true); do + demo_command="$(ps -p "$demo_pid" -o command= || true)" + if [[ "$demo_command" == "$APP/Contents/MacOS/A2UIFormDemo" || "$demo_command" == "$APP/Contents/MacOS/A2UIFormDemo "* ]]; then + kill "$demo_pid" + fi +done +mkdir -p "$DEMO_ROOT/dist" +if ! swift build --package-path "$REPO_ROOT" --scratch-path "$BUILD_PATH" --disable-sandbox --product A2UIFormDemo > "$DEMO_ROOT/dist/build.log" 2>&1; then + tail -60 "$DEMO_ROOT/dist/build.log" + exit 1 +fi +BIN="$(swift build --package-path "$REPO_ROOT" --scratch-path "$BUILD_PATH" --disable-sandbox --show-bin-path)" +mkdir -p "$APP/Contents/MacOS" "$APP/Contents/Resources" +cp "$BIN/A2UIFormDemo" "$APP/Contents/MacOS/" +for resource in "$BIN"/*.bundle; do + [[ -d "$resource" ]] && cp -R "$resource" "$APP/" +done +cat > "$APP/Contents/Info.plist" <<'PLIST' + + + +CFBundleExecutableA2UIFormDemo +CFBundleIdentifierorg.adaengine.demo.a2ui-form +CFBundleNameAdaUI A2UI Forms +CFBundlePackageTypeAPPL +LSMinimumSystemVersion15.0 +NSPrincipalClassNSApplication + +PLIST +: > "$DEMO_ROOT/dist/runtime.log" +if [[ "$MODE" == --debug ]]; then + /usr/bin/lldb -- "$APP/Contents/MacOS/A2UIFormDemo" + exit +fi +OPEN_ARGS=(-n "$APP" --stdout "$DEMO_ROOT/dist/runtime.log" --stderr "$DEMO_ROOT/dist/runtime.log" --args) +if [[ "$MODE" == --verify ]]; then OPEN_ARGS+=(--verify --proof-directory "$DEMO_ROOT/dist/proof"); fi +/usr/bin/open "${OPEN_ARGS[@]}" +case "$MODE" in + --verify) + for attempt in {1..30}; do + if rg -q 'A2UI demo verification PASS' "$DEMO_ROOT/dist/runtime.log"; then + cat "$DEMO_ROOT/dist/runtime.log" + exit 0 + fi + if rg -q 'verification FAIL|Fatal error' "$DEMO_ROOT/dist/runtime.log"; then + tail -40 "$DEMO_ROOT/dist/runtime.log" + exit 1 + fi + sleep 1 + done + tail -40 "$DEMO_ROOT/dist/runtime.log" + echo 'A2UI verification timed out' >&2 + exit 1 + ;; + --logs|--telemetry) /usr/bin/log stream --info --style compact --predicate 'process == "A2UIFormDemo"' ;; +esac diff --git a/Examples/Technical/AndroidDemo/.gitignore b/Examples/Technical/AndroidDemo/.gitignore new file mode 100644 index 0000000..fd14c91 --- /dev/null +++ b/Examples/Technical/AndroidDemo/.gitignore @@ -0,0 +1,6 @@ +.build/ +.swiftpm/ +dist/ +*.xcodeproj/ +__pycache__/ +Package.resolved diff --git a/Examples/Technical/AndroidDemo/AndroidDemo.swift b/Examples/Technical/AndroidDemo/AndroidDemo.swift new file mode 100644 index 0000000..e2d1782 --- /dev/null +++ b/Examples/Technical/AndroidDemo/AndroidDemo.swift @@ -0,0 +1,39 @@ +#if os(Android) + import AdaEngine + import AdaPlatform + import Foundation + + @_cdecl("ada_android_start") + public func androidDemoStart() { + AndroidRuntime.start { AndroidDemo() } + } + + struct AndroidDemo: App { + var body: some AppScene { + WindowGroup( + content: { AndroidDemoView() }, + assetBundle: AndroidResourceBundle.bundle(named: "AndroidDemo_AndroidDemo") + ) + } + } + + private struct AndroidDemoView: View { + @State private var taps = 0 + var body: some View { + VStack(spacing: 24) { + Text("AdaEngine on Android").foregroundColor(.white) + Text("Native Swift • Android Surface • Touch").foregroundColor(.white) + Text("Taps: \(taps)").foregroundColor(.white) + Button(action: { + taps += 1 + AndroidRuntime.log("AndroidDemo taps=\(taps)") + }) { + Text("Tap +1").foregroundColor(.white) + } + } + } + } + +#else + public enum AndroidDemoUnsupportedHost {} +#endif diff --git a/Examples/Technical/AndroidDemo/Assets/fixture.txt b/Examples/Technical/AndroidDemo/Assets/fixture.txt new file mode 100644 index 0000000..4331b72 --- /dev/null +++ b/Examples/Technical/AndroidDemo/Assets/fixture.txt @@ -0,0 +1 @@ +AdaEngine Android packaged resource diff --git a/Examples/Technical/AndroidDemo/Package.swift b/Examples/Technical/AndroidDemo/Package.swift new file mode 100644 index 0000000..2457a0b --- /dev/null +++ b/Examples/Technical/AndroidDemo/Package.swift @@ -0,0 +1,29 @@ +// swift-tools-version: 6.2 +import Foundation +import PackageDescription + +let package = Package( + name: "AndroidDemo", + platforms: [.macOS(.v15), .iOS(.v18)], + products: [.library(name: "AndroidDemo", type: .dynamic, targets: ["AndroidDemo"])], + dependencies: [ + .package(url: "https://github.com/AdaEngine/AdaEngine.git", revision: "b43d7e8f2f03e124a62b77499f7c2949a078dc27") + ], + targets: [ + .target( + name: "AndroidDemo", + dependencies: [ + .product(name: "AdaEngine", package: "adaengine"), + .product(name: "CAndroid", package: "adaengine"), + .product(name: "AdaPlatform", package: "adaengine") + ], + path: ".", + exclude: ["README.md"] + (FileManager.default.fileExists(atPath: "dist") ? ["dist"] : []), + sources: [ + "AndroidDemo.swift" + ], + resources: [.copy("Assets")], + swiftSettings: [.enableUpcomingFeature("MemberImportVisibility"), .strictMemorySafety()] + ) + ] +) diff --git a/Examples/Technical/AndroidDemo/README.md b/Examples/Technical/AndroidDemo/README.md new file mode 100644 index 0000000..eab70cd --- /dev/null +++ b/Examples/Technical/AndroidDemo/README.md @@ -0,0 +1,11 @@ +# Android native AdaUI example + +From the AdaExamples root, set ADAENGINE_ROOT to a compatible engine checkout: + +```sh +python3 "$ADAENGINE_ROOT/Tools/Android/android.py" run --package Examples/Technical/AndroidDemo --product AndroidDemo +``` + +Use the engine's documented Swift Android SDK, Swan/Dawn, NDK and adb setup. +The Swift package exports a dynamic library and bundles its resource fixture. +See the [Android guide](https://github.com/AdaEngine/Ada/blob/main/Tools/Android/README.md). diff --git a/Examples/Technical/LinuxSmoke/.gitignore b/Examples/Technical/LinuxSmoke/.gitignore new file mode 100644 index 0000000..fd14c91 --- /dev/null +++ b/Examples/Technical/LinuxSmoke/.gitignore @@ -0,0 +1,6 @@ +.build/ +.swiftpm/ +dist/ +*.xcodeproj/ +__pycache__/ +Package.resolved diff --git a/Examples/Technical/LinuxSmoke/LinuxSmoke.swift b/Examples/Technical/LinuxSmoke/LinuxSmoke.swift new file mode 100644 index 0000000..d32df8a --- /dev/null +++ b/Examples/Technical/LinuxSmoke/LinuxSmoke.swift @@ -0,0 +1,49 @@ +import AdaEngine +@_spi(Internal) import AdaPlatform +import Foundation + +@main +struct LinuxSmoke: App { + var body: some AppScene { + WindowGroup { + LinuxSmokeView() + } + .window( + with: UIWindow.Configuration( + title: "AdaEngine Linux", + frame: Rect(x: 80, y: 80, width: 800, height: 600), + minimumSize: Size(width: 480, height: 360) + ) + ) + } +} + +private struct LinuxSmokeView: View { + @State private var clicks = 0 + @State private var text = "Hello, Linux!" + + var body: some View { + VStack(spacing: 24) { + Text("AdaEngine on Linux") + .font(.system(size: 36)) + Text("Resize the window, type a message and press the button.") + TextField("Message", text: $text) + .frame(width: 360, height: 44) + Button("Clicks: \(clicks)") { + clicks += 1 + smokeLog("LINUX_SMOKE_CLICK \(clicks) text=\(text)") + } + Text(text) + } + .padding(32) + .frame(maxWidth: .infinity, maxHeight: .infinity) + .background(Color.white) + .task { + smokeLog("LINUX_SMOKE_READY backend=\(RenderEngine.shared.type)") + } + } +} + +private func smokeLog(_ message: String) { + FileHandle.standardOutput.write(Data((message + "\n").utf8)) +} diff --git a/Examples/Technical/LinuxSmoke/Package.swift b/Examples/Technical/LinuxSmoke/Package.swift new file mode 100644 index 0000000..f739808 --- /dev/null +++ b/Examples/Technical/LinuxSmoke/Package.swift @@ -0,0 +1,27 @@ +// swift-tools-version: 6.2 +import Foundation +import PackageDescription + +let package = Package( + name: "LinuxSmoke", + platforms: [.macOS(.v15), .iOS(.v18)], + products: [.executable(name: "LinuxSmoke", targets: ["LinuxSmoke"])], + dependencies: [ + .package(url: "https://github.com/AdaEngine/AdaEngine.git", revision: "b43d7e8f2f03e124a62b77499f7c2949a078dc27") + ], + targets: [ + .executableTarget( + name: "LinuxSmoke", + dependencies: [ + .product(name: "AdaEngine", package: "adaengine"), + .product(name: "AdaPlatform", package: "adaengine") + ], + path: ".", + exclude: ["README.md"] + (FileManager.default.fileExists(atPath: "dist") ? ["dist"] : []), + sources: [ + "LinuxSmoke.swift" + ], + swiftSettings: [.enableUpcomingFeature("MemberImportVisibility"), .strictMemorySafety()] + ) + ] +) diff --git a/Examples/Technical/LinuxSmoke/README.md b/Examples/Technical/LinuxSmoke/README.md new file mode 100644 index 0000000..b9e0e76 --- /dev/null +++ b/Examples/Technical/LinuxSmoke/README.md @@ -0,0 +1,11 @@ +# Linux native smoke application + +From the AdaExamples root, with the native Linux toolchain and X11/Vulkan dependencies: + +```sh +swift run --package-path Examples/Technical/LinuxSmoke LinuxSmoke +``` + +Resize the window, edit the message, and click the counter. This is a native +window/input check, not a browser preview. See the +[Linux guide](https://github.com/AdaEngine/Ada/blob/main/Documentation/Linux.md). diff --git a/Examples/Technical/MovieMaker/.gitignore b/Examples/Technical/MovieMaker/.gitignore new file mode 100644 index 0000000..fd14c91 --- /dev/null +++ b/Examples/Technical/MovieMaker/.gitignore @@ -0,0 +1,6 @@ +.build/ +.swiftpm/ +dist/ +*.xcodeproj/ +__pycache__/ +Package.resolved diff --git a/Examples/Technical/MovieMaker/MovieMakerDemo.swift b/Examples/Technical/MovieMaker/MovieMakerDemo.swift new file mode 100644 index 0000000..789b1df --- /dev/null +++ b/Examples/Technical/MovieMaker/MovieMakerDemo.swift @@ -0,0 +1,75 @@ +import AdaEngine +import Math + +/// An asset-free take that exercises the same renderer and mixer used by games. +@main +struct MovieMakerDemo { + @MainActor + static func main() async throws { + let configuration = try MovieRecordingConfiguration.commandLine() ?? MovieRecordingConfiguration( + outputURL: URL(fileURLWithPath: "Movies/demo.png"), + width: 640, + height: 360, + frameCount: 180 + ) + let maker = MovieMaker() + let scene = MovieDemoScene(configuration: configuration) + defer { scene.music?.stop() } + let recording = try await maker.record(configuration: configuration, make: { app in + scene.configure(app) + }, update: { world, frame in + try scene.update(world: world, frame: frame) + }, progress: { count in + if count % configuration.framesPerSecond == 0 { print("Recorded \(count) frames") } + }) + print("Saved \(recording.frameCount) frames (\(recording.duration) seconds) to \(configuration.outputURL.deletingLastPathComponent().path)") + } +} + +@MainActor +private final class MovieDemoScene { + let configuration: MovieRecordingConfiguration + var sprites: [Entity] = [] + var music: AudioPlaybackController? + + init(configuration: MovieRecordingConfiguration) { self.configuration = configuration } + + func configure(_ app: AppWorlds) { + app.addPlugin(TransformPlugin()) + .addPlugin(RenderWorldPlugin()) + .addPlugin(CameraPlugin()) + .addPlugin(VisibilityPlugin()) + .addPlugin(Core2DPlugin()) + .addPlugin(SpritePlugin()) + .addPlugin(AudioPlugin()) + var camera = Camera() + camera.backgroundColor = Color(red: 0.025, green: 0.035, blue: 0.08) + app.spawn("TrailerCamera", bundle: Camera2D(camera: camera)) + } + + func update(world: World, frame: MovieFrame) throws { + if sprites.isEmpty { + for index in 0..<9 { + let hue = Float(index) / 8 + let color = Color(red: 0.25 + hue * 0.7, green: 0.85 - hue * 0.4, blue: 1 - hue * 0.35) + sprites.append(world.spawn("Light \(index)") { + Sprite(tintColor: color, size: [32, 32]) + Transform() + }) + } + var spec = SoundSpec() + spec.peak = 0.15 + spec.voices = [SoundVoice(wave: .sine, frequency: 220, duration: 1)] + let resource = try AudioResource.create(from: WAVWriter().encode(SoundSynth.render(spec))) + music = AudioServer.shared.prepareAudio(resource).setLoop(true) + music?.play() + } + let time = Float(frame.time) + for (index, entity) in sprites.enumerated() { + let phase = time * 1.4 + Float(index) * .pi * 2 / 9 + let x = Math.cos(phase) * Float(configuration.width) * 0.32 + let y = Math.sin(phase * 2) * Float(configuration.height) * 0.28 + entity.components += Transform(rotation: Quat(axis: [0, 0, 1], angle: phase), position: [x, y, 0]) + } + } +} diff --git a/Examples/Technical/MovieMaker/Package.swift b/Examples/Technical/MovieMaker/Package.swift new file mode 100644 index 0000000..2c8d46e --- /dev/null +++ b/Examples/Technical/MovieMaker/Package.swift @@ -0,0 +1,27 @@ +// swift-tools-version: 6.2 +import Foundation +import PackageDescription + +let package = Package( + name: "MovieMakerDemo", + platforms: [.macOS(.v15), .iOS(.v18)], + products: [.executable(name: "MovieMakerDemo", targets: ["MovieMakerDemo"])], + dependencies: [ + .package(url: "https://github.com/AdaEngine/AdaEngine.git", revision: "b43d7e8f2f03e124a62b77499f7c2949a078dc27") + ], + targets: [ + .executableTarget( + name: "MovieMakerDemo", + dependencies: [ + .product(name: "AdaEngine", package: "adaengine"), + .product(name: "Math", package: "adaengine") + ], + path: ".", + exclude: ["README.md"] + (FileManager.default.fileExists(atPath: "dist") ? ["dist"] : []), + sources: [ + "MovieMakerDemo.swift" + ], + swiftSettings: [.enableUpcomingFeature("MemberImportVisibility"), .strictMemorySafety()] + ) + ] +) diff --git a/Examples/Technical/MovieMaker/README.md b/Examples/Technical/MovieMaker/README.md new file mode 100644 index 0000000..b250c02 --- /dev/null +++ b/Examples/Technical/MovieMaker/README.md @@ -0,0 +1,10 @@ +# Movie recording example + +From the AdaExamples root: + +```sh +swift run --package-path Examples/Technical/MovieMaker MovieMakerDemo --write-movie Examples/Technical/MovieMaker/dist/demo.png --fixed-fps 60 --resolution 1280x720 --quit-after 180 +``` + +This records native rendering and audio through the engine's MovieMaker. See the +[recording guide](https://github.com/AdaEngine/Ada/blob/main/Sources/AdaEngine/AdaEngine.docc/MovieMaker.md). diff --git a/Examples/Technical/Navigation/.gitignore b/Examples/Technical/Navigation/.gitignore new file mode 100644 index 0000000..fd14c91 --- /dev/null +++ b/Examples/Technical/Navigation/.gitignore @@ -0,0 +1,6 @@ +.build/ +.swiftpm/ +dist/ +*.xcodeproj/ +__pycache__/ +Package.resolved diff --git a/Examples/Technical/Navigation/NavigationDemoApp.swift b/Examples/Technical/Navigation/NavigationDemoApp.swift new file mode 100644 index 0000000..716abf0 --- /dev/null +++ b/Examples/Technical/Navigation/NavigationDemoApp.swift @@ -0,0 +1,201 @@ +import AdaEngine +import Foundation +import Observation + +@MainActor +@Observable +final class NavigationDemoSession: Resource { + var status = "Готовим площадку…" + var showNavigation = true + var rebakeRequested = false + var nextGoalRequested = false + var resetRequested = false + var patrolRequested = false + var script: AdaScriptPlugin? + var triangles: [Vector3] = [] + var robot: Entity.ID? + var goalIndex = 0 + var wasMouseDown = false + + func setStatus(_ value: String) { + if status != value { status = value } + } +} + +struct NavigationDemoApp: App { + var body: some AppScene { + WindowGroup { NavigationDemoView() } + .window(with: UIWindow.Configuration(title: "AdaEngine · Navigation playground", frame: Rect(x: 80, y: 60, width: 1100, height: 800))) + } +} + +private struct NavigationDemoView: View { + @State private var session = NavigationDemoSession() + + var body: some View { + VStack(spacing: 12) { + Text("Проложи путь для робота").font(.system(size: 24)) + Text("Нажми на пол — робот найдёт дорогу вокруг препятствий.") + HStack(spacing: 18) { + Button("Другая цель") { session.nextGoalRequested = true } + Button(session.showNavigation ? "Скрыть сетку" : "Показать сетку") { session.showNavigation.toggle() } + Button("В начало") { session.resetRequested = true } + Button("Запечь заново") { session.rebakeRequested = true } + Button("Патруль AdaScript") { session.patrolRequested = true } + } + Text(session.status) + SceneView(useSceneCameras: true, make: { app in + configureNavigationDemo(&app, session: session) + }, updateContent: { _, _ in }) + .frameCaptureLabel("NavigationDemo") + .frame(maxWidth: .infinity, maxHeight: .infinity) + } + .padding(16) + .background(Color(0.06, 0.08, 0.13, 1)) + .foregroundColor(.white) + } +} + +@MainActor +func configureNavigationDemo(_ app: inout AppWorlds, session: NavigationDemoSession) { + app.addPlugin(TransformPlugin()).addPlugin(InputPlugin()).addPlugin(RenderWorldPlugin()) + .addPlugin(CameraPlugin()).addPlugin(AssetsPlugin()).addPlugin(VisibilityPlugin()) + .addPlugin(ScenePlugin()).addPlugin(Core3DPlugin(includes2D: false)).addPlugin(UpscalePlugin()) + .addPlugin(Physics3DPlugin()).addPlugin(Navigation3DPlugin()).addPlugin(NavigationDemoPlugin()) + app.insertResource(session) +} + +/// SceneView installs its schedulers after make(); register systems when plugins are built. +private struct NavigationDemoPlugin: Plugin { + func setup(in app: AppWorlds) { + app.addSystem(NavigationDemoStartupSystem.self, on: .startup) + app.addSystem(NavigationDemoControlsSystem.self, on: .update) + app.addSystem(NavigationDemoOverlaySystem.self, on: .postUpdate) + do { + app.main.getResource(NavigationDemoSession.self)?.script = try NavigationDemoScript.install(in: app) + } catch { + app.main.getResource(NavigationDemoSession.self)?.setStatus("Ошибка AdaScript: \(error)") + } + if CommandLine.arguments.contains("--capture") { + app.getSubworldBuilder(by: .renderWorld)?.getResource(RenderGraphDiagnostics.self)?.configure(isEnabled: true) + } + } +} + +@System +@MainActor +func NavigationDemoStartup(_ context: WorldUpdateContext, _ session: Res) async { + let robot = NavigationDemoFixture.installPhysics(in: context.world) + session.wrappedValue.robot = robot.id + robot.components[NavigationDemoPatrolComponent.self] = NavigationDemoPatrolComponent() + robot.components[NavigationTarget3DComponent.self] = NavigationTarget3DComponent() + NavigationDemoFixture.installGraphics(in: context.world, robot: robot) + do { + let mesh = try await NavigationMesh(data: NavigationDemoFixture.bakedAsset()) + context.world.insertResource(NavigationMap3D(mesh: mesh)) + session.wrappedValue.triangles = try await mesh.debugTriangles() + } catch { + session.wrappedValue.status = "Не удалось построить сетку: \(error)" + } +} + +@PlainSystem(dependencies: [.before(NavigationPathRequest3DSystem.self)]) +struct NavigationDemoControlsSystem { + @Res private var session + @Res private var input + @Query private var cameras + // Reset/picking use the robot's stable ID; declare those component writes to the scheduler. + @Query, Ref, Ref, Ref, Ref> + private var robotAccess + + init(world _: World) {} + + @MainActor + func update(context: UpdateContext) async { + let state = session + _ = robotAccess + guard let id = state.robot, let robot = context.world.getEntityByID(id) else { return } + if state.resetRequested { + robot.components[NavigationDemoPatrolComponent.self] = NavigationDemoPatrolComponent(enabled: false) + state.resetRequested = false + robot.components[Transform.self] = Transform(position: NavigationDemoFixture.start) + var controller = robot.components[CharacterController3DComponent.self] ?? CharacterController3DComponent() + controller.resetMotion = true + robot.components[CharacterController3DComponent.self] = controller + // Invalidate the pending request even when returning to the same goal. + robot.components[NavigationAgent3DComponent.self] = NavigationAgent3DComponent() + } + if state.nextGoalRequested { + robot.components[NavigationDemoPatrolComponent.self] = NavigationDemoPatrolComponent(enabled: false) + state.nextGoalRequested = false + state.goalIndex = (state.goalIndex + 1) % NavigationDemoFixture.goals.count + robot.components[NavigationTarget3DComponent.self] = NavigationTarget3DComponent(destination: NavigationDemoFixture.goals[state.goalIndex]) + } + let down = input.isMouseButtonPressed(.left) + if down && !state.wasMouseDown, let (camera, transform) = cameras.first, + let ray = camera.viewportToWorld( + cameraGlobalTransform: transform.matrix, + point: Vector2(input.getMousePosition().x, camera.logicalViewport.rect.size.height - input.getMousePosition().y) + ), + abs(ray.direction.y) > 0.0001 { + let distance = -ray.origin.y / ray.direction.y + let point = ray.origin + ray.direction * distance + if distance > 0, abs(point.x) < 10, abs(point.z) < 7 { + robot.components[NavigationDemoPatrolComponent.self] = NavigationDemoPatrolComponent(enabled: false) + robot.components[NavigationTarget3DComponent.self] = NavigationTarget3DComponent(destination: [point.x, 0, point.z]) + } + } + state.wasMouseDown = down + if state.patrolRequested { + state.patrolRequested = false + robot.components[NavigationDemoPatrolComponent.self] = NavigationDemoPatrolComponent() + robot.components[NavigationTarget3DComponent.self] = NavigationTarget3DComponent() + } + if state.rebakeRequested { + state.rebakeRequested = false + state.status = "Запекаем площадку…" + do { + let mesh = try await NavigationMesh(data: NavigationDemoFixture.bakedAsset()) + context.world.insertResource(NavigationMap3D(mesh: mesh)) + state.triangles = try await mesh.debugTriangles() + } catch { + state.status = "Ошибка запекания: \(error)" + } + } + } +} + +@System +@MainActor +func NavigationDemoOverlay( + _ session: Res, + _ agents: Query, + _ draw: Res +) { + let state = session.wrappedValue + if state.showNavigation { + let triangles = state.triangles + for offset in stride(from: 0, to: triangles.count, by: 3) { + draw.wrappedValue.polyline(Array(triangles[offset..<(offset + 3)]).map { $0 + Vector3(0, 0.06, 0) }, closed: true, color: Color(0.15, 0.85, 0.7, 1)) + } + } + agents.forEach { agent, target, transform in + if let path = agent.follower.path { + draw.wrappedValue.polyline(path.points.map { $0 + Vector3(0, 0.16, 0) }, color: .yellow, depthTested: false) + } + if let destination = target.destination { + draw.wrappedValue.sphere(center: destination + Vector3(0, 0.2, 0), radius: 0.3, color: agent.lastError == nil ? .yellow : .red) + } + draw.wrappedValue.sphere(center: transform.position + Vector3(0, 0.06, 0), radius: 0.4, color: .mint) + if let error = agent.lastError { + state.setStatus(error == .targetOutsideMesh || error == .unreachable ? "Здесь нет прохода. Выбери другую точку." : "Ошибка маршрута: \(error)") + } else { + switch agent.follower.state { + case .following: state.setStatus("Идём к цели · поворотов: \(max(0, (agent.follower.path?.points.count ?? 0) - 2))") + case .arrived: state.setStatus("Пришли! Выбери следующую цель.") + case .blocked: state.setStatus("Проход занят — ищем путь снова…") + default: break + } + } + } +} diff --git a/Examples/Technical/Navigation/NavigationDemoFixture.swift b/Examples/Technical/Navigation/NavigationDemoFixture.swift new file mode 100644 index 0000000..9af5141 --- /dev/null +++ b/Examples/Technical/Navigation/NavigationDemoFixture.swift @@ -0,0 +1,115 @@ +import AdaEngine +import AdaNavigationBaking +import Foundation + +/// The same geometry drives the bake, physical colliders, and visible meshes. +@MainActor +enum NavigationDemoFixture { + struct Obstacle { + let center: Vector3 + let size: Vector3 + } + + static let start = Vector3(-8, 0, -4) + static let goals: [Vector3] = [[8, 0, 4], [-8, 0, 5], [8, 0, -5], [0, 0, 5]] + static let obstacles = [ + Obstacle(center: [0, 1.5, 0], size: [4, 3, 4]), + Obstacle(center: [-5.5, 1.1, 0], size: [1.4, 2.2, 6]), + Obstacle(center: [5, 1.1, 2.5], size: [2, 2.2, 3]) + ] + + static func bakedAsset() async throws -> NavigationMeshData { + var vertices: [Vector3] = [[-10, 0, -7], [-10, 0, 7], [10, 0, 7], [10, 0, -7]] + var indices: [UInt32] = [0, 1, 2, 0, 2, 3] + for box in obstacles { + let min = box.center - box.size / 2 + let max = box.center + box.size / 2 + let corners: [Vector3] = [ + [min.x, min.y, min.z], [min.x, min.y, max.z], [max.x, min.y, max.z], [max.x, min.y, min.z], + [min.x, max.y, min.z], [min.x, max.y, max.z], [max.x, max.y, max.z], [max.x, max.y, min.z] + ] + let offset = UInt32(vertices.count) + vertices += corners + // Outward winding: ceiling on the bottom, walkable top, and blocking walls. + indices += [0, 2, 1, 0, 3, 2, 4, 5, 6, 4, 6, 7, + 0, 1, 5, 0, 5, 4, 3, 7, 6, 3, 6, 2, + 0, 4, 7, 0, 7, 3, 1, 2, 6, 1, 6, 5].map { offset + $0 } + } + let baked = try await NavigationMeshBaker.bake(vertices: vertices, indices: indices) + let directory = FileManager.default.temporaryDirectory.appendingPathComponent("AdaEngine-NavigationDemo", isDirectory: true) + try FileManager.default.createDirectory(at: directory, withIntermediateDirectories: true) + let url = directory.appendingPathComponent("playground.navmesh") + try baked.encoded().write(to: url, options: .atomic) + // Exercise the production file decoder before installing the map. + return try NavigationMeshData(encoded: Data(contentsOf: url)) + } + + @discardableResult + static func installPhysics(in world: World) -> Entity { + func box(_ name: String, center: Vector3, size: Vector3) { + world.spawn(name) { + Transform(position: center) + PhysicsBody3DComponent(shapes: [.generateBox(width: size.x, height: size.y, depth: size.z)], mode: .static) + } + } + box("Floor", center: [0, -0.3, 0], size: [20, 0.6, 14]) + for (index, obstacle) in obstacles.enumerated() { box("Obstacle \(index)", center: obstacle.center, size: obstacle.size) } + return world.spawn("Navigation robot") { + Transform(position: start) + CharacterController3DComponent() + NavigationAgent3DComponent() + NavigationTarget3DComponent(destination: goals[0]) + } + } + + static func installGraphics(in world: World, robot: Entity) { + let device = unsafe RenderEngine.shared.renderDevice + func material(_ color: Vector4) -> PBRMaterial { + let result = PBRMaterial() + result.baseColorFactor = color + result.metallicFactor = 0 + result.roughnessFactor = 0.75 + return result + } + let cube = Mesh.generateCube(renderDevice: device) + for entity in world.getEntities() where entity.components[PhysicsBody3DComponent.self] != nil { + let size = entity.name == "Floor" ? Vector3(20, 0.6, 14) + : obstacles[Int(entity.name.split(separator: " ").last ?? "0") ?? 0].size + var transform = entity.components[Transform.self] ?? Transform() + transform.scale = size + entity.components[Transform.self] = transform + entity.components[Mesh3DComponent.self] = Mesh3DComponent( + mesh: cube, materials: [material(entity.name == "Floor" ? [0.18, 0.24, 0.31, 1] : [0.55, 0.48, 0.8, 1])] + ) + } + let sphere = Mesh.generateSphere(radius: 1, segments: 24, rings: 16, renderDevice: device) + func part(_ name: String, at position: Vector3, scale: Vector3, color: Vector4) { + let entity = world.spawn(name) { + Transform(scale: scale, position: position) + Mesh3DComponent(mesh: sphere, materials: [material(color)]) + } + robot.addChild(entity) + } + part("Body", at: [0, 0.7, 0], scale: [0.36, 0.55, 0.32], color: [0.05, 0.8, 0.85, 1]) + part("Head", at: [0, 1.5, 0], scale: [0.32, 0.32, 0.32], color: [1, 0.8, 0.2, 1]) + for x: Float in [-0.12, 0.12] { + part("Eye", at: [x, 1.55, -0.28], scale: [0.055, 0.075, 0.045], color: [0.03, 0.05, 0.1, 1]) + } + var camera = Camera() + camera.backgroundColor = Color(0.035, 0.055, 0.09, 1) + let eye = Vector3(12, 16, -18) + let forward = (-eye).normalized + let right = Vector3.up.cross(forward).normalized + let up = forward.cross(right) + let cameraMatrix = Transform3D(columns: [Vector4(right, 0), Vector4(up, 0), Vector4(forward, 0), Vector4(eye, 1)]) + world.spawn("Playground camera", bundle: Camera3D( + camera: camera, + perspectiveProjection: PerspectiveProjection(fieldOfView: .degrees(45)), + transform: Transform(matrix: cameraMatrix) + )) + world.spawn("Sun") { + Transform(rotation: Quat(axis: .right, angle: .pi / 3)) + DirectionalLightComponent(intensity: 3, castShadows: true) + } + } +} diff --git a/Examples/Technical/Navigation/NavigationDemoMain.swift b/Examples/Technical/Navigation/NavigationDemoMain.swift new file mode 100644 index 0000000..e8d1fcc --- /dev/null +++ b/Examples/Technical/Navigation/NavigationDemoMain.swift @@ -0,0 +1,148 @@ +@_spi(Internal) import AdaApp +import AdaEngine +import Foundation + +@main +@MainActor +struct NavigationDemoMain { + static func main() async throws { + if CommandLine.arguments.contains("--validate-script") { + try await validateScript() + } else if CommandLine.arguments.contains("--validate") { + try await validate() + } else if let index = CommandLine.arguments.firstIndex(of: "--capture"), CommandLine.arguments.indices.contains(index + 1) { + try await capture(to: CommandLine.arguments[index + 1]) + } else { + try await AppRuntime.run(NavigationDemoApp()) + } + } + + private static func validateScript() async throws { + let app = AppWorlds(main: World()) + app.addPlugin(MainSchedulerPlugin()).addPlugin(Physics3DPlugin()).addPlugin(Navigation3DPlugin()) + try await app.build() + let script = try NavigationDemoScript.install(in: app) + let robot = NavigationDemoFixture.installPhysics(in: app.main) + robot.components[NavigationDemoPatrolComponent.self] = NavigationDemoPatrolComponent() + robot.components[NavigationTarget3DComponent.self] = NavigationTarget3DComponent() + app.insertResource(NavigationMap3D(mesh: try await NavigationMesh(data: NavigationDemoFixture.bakedAsset()))) + app.main.insertResource(FixedTime(deltaTime: 1.0 / 60)) + await app.main.runScheduler(.physicsSync) + for _ in 0..<4800 { + await app.main.runScheduler(.update) + await app.main.runScheduler(.physicsStep) + await app.main.runScheduler(.physicsWriteback) + if robot.components[NavigationDemoPatrolComponent.self]?.completedGoals == 4 { break } + } + guard robot.components[NavigationDemoPatrolComponent.self]?.completedGoals == 4, script.diagnostics.isEmpty else { + throw DemoFailure.didNotArrive + } + print("PASS: NavigationRobot.ada completed four goals through the navigation and physics systems") + } + + /// Runs the demo's actual bake/file load/target requests/physical movement without a GPU. + private static func validate() async throws { + let app = AppWorlds(main: World()) + app.addPlugin(MainSchedulerPlugin()).addPlugin(Physics3DPlugin()).addPlugin(Navigation3DPlugin()) + try await app.build() + let robot = NavigationDemoFixture.installPhysics(in: app.main) + let mesh = try await NavigationMesh(data: NavigationDemoFixture.bakedAsset()) + app.insertResource(NavigationMap3D(mesh: mesh)) + app.main.insertResource(FixedTime(deltaTime: 1.0 / 60)) + await app.main.runScheduler(.physicsSync) + for goal in NavigationDemoFixture.goals { + robot.components[NavigationTarget3DComponent.self] = NavigationTarget3DComponent(destination: goal) + for _ in 0..<1200 { + await app.main.runScheduler(.update) + await app.main.runScheduler(.physicsStep) + await app.main.runScheduler(.physicsWriteback) + if robot.components[NavigationAgent3DComponent.self]?.follower.state == .arrived { break } + } + guard robot.components[NavigationAgent3DComponent.self]?.follower.state == .arrived else { + throw DemoFailure.didNotArrive + } + print("PASS: reached \(goal)") + } + print("PASS: saved/loaded \(mesh.data.polygonCount) polygons; four goals reached through the physics controller") + } + + private static func capture(to path: String) async throws { + weak var capturedApp: AppWorlds? + let runtime = OffscreenSceneRuntime(label: "NavigationDemo", size: [1100, 760], useSceneCameras: true) { app in + configureNavigationDemo(&app, session: NavigationDemoSession()) + capturedApp = app + } + try await runtime.start(timeout: .seconds(30)) + var completed = false + defer { + if !completed, let app = capturedApp { + let status = app.main.getResource(NavigationDemoSession.self)?.status ?? "missing" + report("Capture diagnostics: frame=\(runtime.frameSource.frameSequence), cameras=\(runtime.frameSource.activeCameraNames)") + report("Entities=\(app.main.getEntities().count), status=\(status)") + if let render = app.getSubworldBuilder(by: .renderWorld) { + report("Render entities: \(render.main.getEntities().map(\.name))") + if let records = render.getResource(RenderGraphDiagnostics.self)?.recentFrames(limit: 1), + let data = try? JSONEncoder().encode(records) { report(String(decoding: data, as: UTF8.self)) } + } + } + runtime.stop() + } + var frame = try await runtime.frameSource.captureFrame(after: 0, timeout: .seconds(30)) + try write(frame.image, to: path) + for _ in 0..<20 { + frame = try await runtime.frameSource.captureFrame(after: frame.sequence, timeout: .seconds(10)) + } + try write(frame.image, to: path) + guard let world = runtime.frameSource.world, + let cameraEntity = world.getEntities().first(where: { $0.components[Camera.self] != nil }), + let camera = cameraEntity.components[Camera.self], + let transform = cameraEntity.components[GlobalTransform.self], + let session = world.getResource(NavigationDemoSession.self), + let robotID = session.robot, let robot = world.getEntityByID(robotID) else { throw DemoFailure.sceneUnavailable } + let probe = Vector3(7.5, 0, 4.5) + let clip = camera.projection.makeClipView() * (transform.matrix.inverse * Vector4(probe, 1)) + guard clip.w.isFinite, clip.w > 0 else { throw DemoFailure.sceneUnavailable } + let projected = clip.xyz / clip.w + guard projected.x.isFinite, projected.y.isFinite, projected.z >= 0, projected.z <= 1 else { + throw DemoFailure.sceneUnavailable + } + let size = camera.logicalViewport.rect.size + let pointer = Vector2((projected.x + 1) * size.width / 2, (1 - projected.y) * size.height / 2) + let window = world.getResource(PrimaryWindowId.self)?.windowId ?? RID() + runtime.frameSource.movePointer(to: pointer) + runtime.frameSource.send(MouseEvent(window: window, button: .left, mousePosition: pointer, phase: .began, modifierKeys: [], time: 1)) + for _ in 0..<10 { + frame = try await runtime.frameSource.captureFrame(after: frame.sequence, timeout: .seconds(10)) + if let selected = robot.components[NavigationTarget3DComponent.self]?.destination, (selected - probe).length < 0.02 { break } + } + runtime.frameSource.send(MouseEvent(window: window, button: .left, mousePosition: pointer, phase: .ended, modifierKeys: [], time: 2)) + for _ in 0..<8 { + frame = try await runtime.frameSource.captureFrame(after: frame.sequence, timeout: .seconds(10)) + } + guard let selected = robot.components[NavigationTarget3DComponent.self]?.destination, + (selected - probe).length < 0.02 else { throw DemoFailure.pickingFailed } + print("PASS: viewport click selected \(selected)") + try write(frame.image, to: path) + completed = true + print("PASS: captured real GPU frame \(frame.sequence) to \(path)") + } + + private static func write(_ image: Image, to path: String) throws { + var bytes = Array(image.data) + if image.format == .bgra8 || image.format == .bgra8_sRGB { + for index in stride(from: 0, to: bytes.count, by: 4) { bytes.swapAt(index, index + 2) } + } + let png = try PNGWriter().encode(width: image.width, height: image.height, rgba: bytes) + try png.write(to: URL(fileURLWithPath: path), options: .atomic) + } + + private static func report(_ message: String) { + FileHandle.standardError.write(Data((message + "\n").utf8)) + } +} + +private enum DemoFailure: Error { + case didNotArrive + case sceneUnavailable + case pickingFailed +} diff --git a/Examples/Technical/Navigation/NavigationDemoScript.swift b/Examples/Technical/Navigation/NavigationDemoScript.swift new file mode 100644 index 0000000..45d9479 --- /dev/null +++ b/Examples/Technical/Navigation/NavigationDemoScript.swift @@ -0,0 +1,24 @@ +import AdaEngine +import Foundation + +@Component +struct NavigationDemoPatrolComponent { + var enabled: Bool = true + var completedGoals: Int = 0 +} + +@MainActor +enum NavigationDemoScript { + static func install(in app: AppWorlds) throws -> AdaScriptPlugin { + RuntimeTypeRegistry.registerComponent( + NavigationDemoPatrolComponent.self, names: ["NavigationDemoPatrolComponent"], + makeDefault: { NavigationDemoPatrolComponent() } + ) + guard let file = Bundle.module.url(forResource: "NavigationRobot", withExtension: "ada") else { + throw CocoaError(.fileNoSuchFile) + } + let script = try AdaScriptPlugin(source: String(contentsOf: file, encoding: .utf8), name: "NavigationRobot") + script.setup(in: app) + return script + } +} diff --git a/Examples/Technical/Navigation/NavigationRobot.ada b/Examples/Technical/Navigation/NavigationRobot.ada new file mode 100644 index 0000000..5e48891 --- /dev/null +++ b/Examples/Technical/Navigation/NavigationRobot.ada @@ -0,0 +1,20 @@ +// Navigation runs in the engine. This script chooses goals and reads the agent's state. +@system(id: "navigation.demo.patrol") +class RobotPatrol { + @query(NavigationAgent3DComponent, NavigationTarget3DComponent, NavigationDemoPatrolComponent) var robots; + var goals = [[8.0, 0.0, 4.0], [-8.0, 0.0, 5.0], [8.0, 0.0, -5.0], [0.0, 0.0, 5.0]]; + + func update(context) { + for (var row in robots) { + if (!row.navigationDemoPatrolComponent.enabled) { continue; } + if (row.navigationAgent3DComponent.hasArrived) { + row.navigationDemoPatrolComponent.completedGoals = row.navigationDemoPatrolComponent.completedGoals + 1; + row.navigationTarget3DComponent.destination = null; + } + if (row.navigationTarget3DComponent.destination == null) { + var next = row.navigationDemoPatrolComponent.completedGoals % 4; + row.navigationTarget3DComponent.destination = goals[next]; + } + } + } +} diff --git a/Examples/Technical/Navigation/Package.swift b/Examples/Technical/Navigation/Package.swift new file mode 100644 index 0000000..77615a2 --- /dev/null +++ b/Examples/Technical/Navigation/Package.swift @@ -0,0 +1,32 @@ +// swift-tools-version: 6.2 +import Foundation +import PackageDescription + +let package = Package( + name: "NavigationDemo", + platforms: [.macOS(.v15), .iOS(.v18)], + products: [.executable(name: "NavigationDemo", targets: ["NavigationDemo"])], + dependencies: [ + .package(url: "https://github.com/AdaEngine/AdaEngine.git", revision: "b43d7e8f2f03e124a62b77499f7c2949a078dc27") + ], + targets: [ + .executableTarget( + name: "NavigationDemo", + dependencies: [ + .product(name: "AdaEngine", package: "adaengine"), + .product(name: "AdaNavigationBaking", package: "adaengine"), + .product(name: "AdaApp", package: "adaengine") + ], + path: ".", + exclude: ["README.md", "script"] + (FileManager.default.fileExists(atPath: "dist") ? ["dist"] : []), + sources: [ + "NavigationDemoApp.swift", + "NavigationDemoFixture.swift", + "NavigationDemoMain.swift", + "NavigationDemoScript.swift" + ], + resources: [.copy("NavigationRobot.ada")], + swiftSettings: [.enableUpcomingFeature("MemberImportVisibility"), .strictMemorySafety()] + ) + ] +) diff --git a/Examples/Technical/Navigation/README.md b/Examples/Technical/Navigation/README.md new file mode 100644 index 0000000..632c057 --- /dev/null +++ b/Examples/Technical/Navigation/README.md @@ -0,0 +1,18 @@ +# Navigation playground + +From the AdaExamples root: + +```sh +swift run --package-path Examples/Technical/Navigation NavigationDemo +swift run --package-path Examples/Technical/Navigation NavigationDemo --validate +swift run --package-path Examples/Technical/Navigation NavigationDemo --validate-script +``` + +The robot patrols goals using the bundled NavigationRobot.ada. Click to choose a +manual destination, rebake the navmesh, or resume the patrol. `--capture ` +uses the actual native renderer and checks picking. For Windows set ADAENGINE_ROOT +to an engine checkout, then use `Examples/Technical/Navigation/script/run_windows.ps1`; +`-ValidateScript` selects headless script validation and `-CapturePath` saves a frame. +The launcher prepares Windows Gravity/Tint from the selected engine's scripts. + +See the [navigation guide](https://github.com/AdaEngine/Ada/blob/main/Sources/AdaNavigation/AdaNavigation.docc/AdaNavigation.md). diff --git a/Examples/Technical/Navigation/script/run_windows.ps1 b/Examples/Technical/Navigation/script/run_windows.ps1 new file mode 100644 index 0000000..5e43437 --- /dev/null +++ b/Examples/Technical/Navigation/script/run_windows.ps1 @@ -0,0 +1,43 @@ +# Run the navigation playground with the same Windows AdaScript dependency used by Studio. +[CmdletBinding()] +param( + [switch]$ValidateScript, + [string]$CapturePath, + [string]$ScratchPath +) + +$ErrorActionPreference = 'Stop' +$demoRoot = Split-Path -Parent $PSScriptRoot +$engineRoot = $env:ADAENGINE_ROOT +if (-not $engineRoot) { throw 'Set ADAENGINE_ROOT to the engine checkout for Windows dependency preparation.' } +$engineScripts = Join-Path $engineRoot 'script' +$demoEnvironment = @{} +$demoVariables = @('ADAENGINE_HEADLESS', 'ADAENGINE_DISABLE_SWAN', 'ADAENGINE_GRAVITY_PACKAGE_PATH', 'TINT_EXECUTABLE') +foreach ($name in $demoVariables) { $demoEnvironment[$name] = [Environment]::GetEnvironmentVariable($name, 'Process') } +try { + if (-not $env:ADAENGINE_GRAVITY_PACKAGE_PATH) { + $demoGravity = & python (Join-Path $engineScripts 'ensure_windows_gravity.py') + if ($LASTEXITCODE -ne 0) { throw 'Windows AdaScript dependency preparation failed.' } + $env:ADAENGINE_GRAVITY_PACKAGE_PATH = ($demoGravity | Select-Object -Last 1).Trim() + } + $env:ADAENGINE_HEADLESS = if ($ValidateScript) { '1' } else { '0' } + if (-not $ValidateScript) { + $env:ADAENGINE_DISABLE_SWAN = '0' + if (-not $env:TINT_EXECUTABLE) { + $demoTint = & python (Join-Path $engineScripts 'ensure_tint.py') --jobs 2 + if ($LASTEXITCODE -ne 0) { throw 'Tint preparation failed.' } + $env:TINT_EXECUTABLE = ($demoTint | Select-Object -Last 1).Trim() + } + } + $demoArguments = @('run', '--package-path', $demoRoot) + if ($ScratchPath) { $demoArguments += @('--scratch-path', $ScratchPath) } + $demoArguments += 'NavigationDemo' + if ($ValidateScript) { $demoArguments += '--validate-script' } + elseif ($CapturePath) { + $demoArguments += @('--capture', $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($CapturePath)) + } + & swift @demoArguments + if ($LASTEXITCODE -ne 0) { throw "Navigation demo failed with exit code $LASTEXITCODE." } +} finally { + foreach ($name in $demoVariables) { [Environment]::SetEnvironmentVariable($name, $demoEnvironment[$name], 'Process') } +} diff --git a/Examples/Technical/Physics2D/.gitignore b/Examples/Technical/Physics2D/.gitignore new file mode 100644 index 0000000..fd14c91 --- /dev/null +++ b/Examples/Technical/Physics2D/.gitignore @@ -0,0 +1,6 @@ +.build/ +.swiftpm/ +dist/ +*.xcodeproj/ +__pycache__/ +Package.resolved diff --git a/Examples/Technical/Physics2D/Package.swift b/Examples/Technical/Physics2D/Package.swift new file mode 100644 index 0000000..c7626aa --- /dev/null +++ b/Examples/Technical/Physics2D/Package.swift @@ -0,0 +1,38 @@ +// swift-tools-version: 6.2 +import Foundation +import PackageDescription + +let package = Package( + name: "Physics2DDemo", + platforms: [.macOS(.v15), .iOS(.v18)], + products: [.executable(name: "Physics2DDemo", targets: ["Physics2DDemo"])], + dependencies: [ + .package(url: "https://github.com/AdaEngine/AdaEngine.git", revision: "b43d7e8f2f03e124a62b77499f7c2949a078dc27") + ], + targets: [ + .executableTarget( + name: "Physics2DDemo", + dependencies: [ + .product(name: "AdaEngine", package: "adaengine"), + .product(name: "AdaApp", package: "adaengine"), + .product(name: "AdaPlatform", package: "adaengine"), + .product(name: "Math", package: "adaengine") + ], + path: ".", + exclude: ["README.md", "script"] + (FileManager.default.fileExists(atPath: "dist") ? ["dist"] : []), + sources: [ + "Physics2DAdvancedChecks.swift", + "Physics2DAdvancedDemo.swift", + "Physics2DCharactersDemo.swift", + "Physics2DDemoMain.swift", + "Physics2DDemoScenes.swift", + "Physics2DDemoView.swift", + "Physics2DLargeWorldChecks.swift", + "Physics2DLargeWorldDemo.swift", + "Physics2DMechanismsDemo.swift", + "Physics2DQueriesDemo.swift" + ], + swiftSettings: [.enableUpcomingFeature("MemberImportVisibility"), .strictMemorySafety()] + ) + ] +) diff --git a/Examples/Technical/Physics2D/Physics2DAdvancedChecks.swift b/Examples/Technical/Physics2D/Physics2DAdvancedChecks.swift new file mode 100644 index 0000000..1a045f0 --- /dev/null +++ b/Examples/Technical/Physics2D/Physics2DAdvancedChecks.swift @@ -0,0 +1,81 @@ +import AdaEngine + +extension Physics2DDemoMain { + static func validateAdvanced(_ app: AppWorlds, _ session: PhysicsDemoSession) async throws { + let state = session.advanced + guard state.pointCount > 0, let air = state.air, let projectile = state.projectile else { throw Failure.advanced } + state.windMode = 1; state.dirty = true + await advance(app, steps: 30) + let speed = air.components[PhysicsBody2DComponent.self]?.linearVelocity.x ?? 0 + guard speed > 0.2 else { throw Failure.advanced } + state.windMode = 2; state.dirty = true + await advance(app, steps: 20) + guard (air.components[PhysicsBody2DComponent.self]?.linearVelocity.x ?? 0) < speed else { throw Failure.advanced } + state.locked = true; state.dirty = true + await advance(app, steps: 2) + guard abs(air.components[PhysicsBody2DComponent.self]?.linearVelocity.x ?? 1) < 0.01 else { throw Failure.advanced } + state.locked = false; state.damping = true; state.softSolver = true + state.reverseBelt = true; state.rolling = false; state.lowGrip = true; state.dirty = true + await advance(app, steps: 2) + guard app.main.physicsWorld2D?.solverSettings.restitutionIterations == 8, + state.belt?.components[Collision2DComponent.self]?.material.surfaceSpeed == -1.8, + state.circle?.components[PhysicsBody2DComponent.self]?.material.mixing.friction == .minimum else { throw Failure.advanced } + air.components[PhysicsBody2DComponent.self]?.setAwake(true) + state.sleepRequested = true + await advance(app, steps: 1) + guard air.components[PhysicsBody2DComponent.self]?.isAwake == false else { throw Failure.advanced } + state.sleepRequested = true; state.bullet = false; state.dirty = true; state.refireRequested = true + await advance(app, steps: 30) + guard (projectile.components[PhysicsBody2DComponent.self]?.worldCenter.x ?? -1) > 0 else { throw Failure.advanced } + state.bullet = true; state.dirty = true; state.refireRequested = true + await advance(app, steps: 30) + guard (projectile.components[PhysicsBody2DComponent.self]?.worldCenter.x ?? 1) < 0, state.hitPoints > 0 else { throw Failure.advanced } + report("PASS: advanced · wind / drag / locks / sleep / materials / CCD / contacts / solver") + } + + static func verifyAdvanced(to directory: String, tap: (String) throws -> Void) async throws { + try tap("physics-demo.advanced") + let source = try await waitForSource("Physics2D Advanced") + guard let session = source.world?.getResource(PhysicsDemoSession.self), let air = session.advanced.air else { throw Failure.advanced } + let state = session.advanced + try tap("physics-demo.advanced-wind") + _ = try await nextFrames(source, count: 30) + let speed = air.components[PhysicsBody2DComponent.self]?.linearVelocity.x ?? 0 + guard speed > 0.2 else { throw Failure.advanced } + try tap("physics-demo.advanced-wind") + _ = try await nextFrames(source, count: 20) + guard (air.components[PhysicsBody2DComponent.self]?.linearVelocity.x ?? 0) < speed else { throw Failure.advanced } + try tap("physics-demo.advanced-lock") + _ = try await nextFrames(source) + guard air.components[PhysicsBody2DComponent.self]?.motion.lockTranslationX == true, + abs(air.components[PhysicsBody2DComponent.self]?.linearVelocity.x ?? 1) < 0.01 else { throw Failure.advanced } + try tap("physics-demo.advanced-lock") + _ = try await nextFrames(source) + if air.components[PhysicsBody2DComponent.self]?.isAwake == false { try tap("physics-demo.advanced-sleep"); _ = try await nextFrames(source) } + try tap("physics-demo.advanced-sleep") + _ = try await nextFrames(source) + guard air.components[PhysicsBody2DComponent.self]?.isAwake == false else { throw Failure.advanced } + try tap("physics-demo.advanced-sleep") + try tap("physics-demo.advanced-damping") + try tap("physics-demo.advanced-belt") + try tap("physics-demo.advanced-rolling") + try tap("physics-demo.advanced-grip") + try tap("physics-demo.advanced-solver") + _ = try await nextFrames(source) + guard source.world?.physicsWorld2D?.solverSettings.contactHertz == 8, + air.components[PhysicsBody2DComponent.self]?.dynamics.linearDamping == 2, + state.circle?.components[PhysicsBody2DComponent.self]?.material.rollingResistance == 0, + state.belt?.components[Collision2DComponent.self]?.material.surfaceSpeed == -1.8 else { throw Failure.advanced } + try tap("physics-demo.advanced-bullet") + _ = try await nextFrames(source, count: 30) + guard (state.projectile?.components[PhysicsBody2DComponent.self]?.worldCenter.x ?? -1) > 0 else { throw Failure.advanced } + try tap("physics-demo.advanced-bullet") + let frame = try await nextFrames(source, count: 30) + guard (state.projectile?.components[PhysicsBody2DComponent.self]?.worldCenter.x ?? 1) < 0, + state.pointCount > 0, state.hitPoints > 0 else { throw Failure.advanced } + try write(frame.image, to: directory + "/advanced-physics.png") + try tap("physics-demo.advanced-reset") + _ = try await nextFrames(source) + report("PASS: native advanced · wind / drag / locks / sleep / materials / CCD / contact points / solver controls") + } +} diff --git a/Examples/Technical/Physics2D/Physics2DAdvancedDemo.swift b/Examples/Technical/Physics2D/Physics2DAdvancedDemo.swift new file mode 100644 index 0000000..ba90de1 --- /dev/null +++ b/Examples/Technical/Physics2D/Physics2DAdvancedDemo.swift @@ -0,0 +1,202 @@ +import AdaEngine +import Foundation +import Math +import Observation + +@MainActor +@Observable +final class PhysicsAdvancedState { + var windMode = 0 + var reverseBelt = false + var rolling = true + var lowGrip = false + var damping = false + var bullet = true + var locked = false + var softSolver = false + var dirty = true + var sleepRequested = false + var resetRequested = false + var refireRequested = false + var belt: Entity? + var box: Entity? + var circle: Entity? + var air: Entity? + var projectile: Entity? + var markers: [Entity] = [] + var defaults: PhysicsSolver2DSettings? + var pointCount = 0 + var hitPoints = 0 + var status = "Waiting for contacts" +} + +@MainActor +func setupAdvanced(in world: World, session: PhysicsDemoSession) throws { + let state = session.advanced + state.defaults = world.physicsWorld2D?.solverSettings + world.insertResource(PhysicsDebugOptions([.showPhysicsShapes])) + let beltMaterial = try PhysicsMaterial.generate2D(surfaceSpeed: 1.8) + state.belt = world.spawn("Conveyor") { + Collision2DComponent(shapes: [.generateBox(width: 17, height: 0.4)], material: beltMaterial) + Sprite(tintColor: Color(0.24, 0.35, 0.5, 1), size: [17, 0.4]) + Transform(position: [0, -3.3, 0]) + } + for x: Float in [-8.5, 8.5] { + world.spawn("Boundary") { Collision2DComponent(shapes: [.generateBox(width: 0.25, height: 8)]); Transform(position: [x, 0, 0]) } + } + state.box = world.spawn("Conveyor box") { + PhysicsBody2DComponent(shapes: [.generateBox(width: 0.8, height: 0.8)], mass: 1) + Sprite(tintColor: Color(1, 0.65, 0.25, 1), size: [0.8, 0.8]) + Transform(position: [-3, -2.7, 0]) + } + var circle = PhysicsBody2DComponent(shapes: [.generateCircle(radius: 1.2)], mass: 1) + circle.debugColor = Color(0.3, 1, 0.5, 1) + circle.linearVelocity = [2, 0]; circle.angularVelocity = -2 / 0.6 + state.circle = world.spawn("Rolling circle") { circle; Transform(position: [-6, -2.5, 0]) } + let capsule = try Shape2DResource.generateCapsule(from: [0, -0.35], to: [0, 0.35], radius: 0.25) + var air = PhysicsBody2DComponent(shapes: [capsule], mass: 2) + air.gravityScale = 0; air.debugColor = Color(0.2, 0.85, 1, 1) + state.air = world.spawn("Wind capsule") { air; PhysicsWind2DComponent(.init(drag: 0)); Transform(position: [0, 0.7, 0]) } + world.spawn("Thin kinematic CCD target") { + PhysicsBody2DComponent(shapes: [.generateBox(width: 0.04, height: 1.5)], mode: .kinematic) + Sprite(tintColor: .white, size: [0.04, 1.5]) + Transform(position: [0, 2.5, 0]) + } + var projectile = PhysicsBody2DComponent(shapes: [.generateBox(width: 0.2, height: 0.2)], mass: 1) + projectile.gravityScale = 0; projectile.fixedRotation = true + state.projectile = world.spawn("CCD box") { + projectile + Sprite(tintColor: Color(1, 0.3, 0.3, 1), size: [0.2, 0.2]) + Transform(position: [-6, 2.5, 0]) + } + state.refireRequested = true + for _ in 0..<4 { + state.markers.append(world.spawn("Contact point") { Sprite(tintColor: Color(1, 0.2, 0.55, 1), size: [0.1, 0.1]); Transform(position: [0, 50, 3]) }) + } +} + +@MainActor +func controlAdvanced(in world: World, session: PhysicsDemoSession) { + let state = session.advanced + do { + if state.dirty { + if let belt = state.belt, belt.components[Collision2DComponent.self]?.material.surfaceSpeed != (state.reverseBelt ? -1.8 : 1.8) { + belt.components[Collision2DComponent.self]?.material = try .generate2D(surfaceSpeed: state.reverseBelt ? -1.8 : 1.8) + } + var mixing = PhysicsMaterialMixing() + mixing.friction = state.lowGrip ? .minimum : .maximum; mixing.priority = 10 + let friction: Float = state.lowGrip ? 0.05 : 0.8 + let rolling: Float = state.rolling ? 0.2 : 0 + if let circle = state.circle, let current = circle.components[PhysicsBody2DComponent.self]?.material, + current.friction != friction || current.rollingResistance != rolling || current.mixing != mixing { + circle.components[PhysicsBody2DComponent.self]?.material = try .generate2D(friction: friction, rollingResistance: rolling, mixing: mixing) + } + var dynamics = PhysicsBody2DDynamics() + dynamics.linearDamping = state.damping ? 2 : 0; dynamics.angularDamping = state.damping ? 3 : 0 + try state.air?.components[PhysicsBody2DComponent.self]?.configureDynamics(dynamics) + var motion = PhysicsBody2DMotion() + motion.lockTranslationX = state.locked; motion.lockTranslationY = state.locked; motion.lockRotation = state.locked + try state.air?.components[PhysicsBody2DComponent.self]?.configureMotion(motion) + state.air?.components[PhysicsWind2DComponent.self]?.settings = .init(velocity: state.windMode == 1 ? [6, 0] : .zero, drag: state.windMode == 0 ? 0 : 1) + if state.windMode == 1 { state.air?.components[PhysicsBody2DComponent.self]?.setAwake(true) } + dynamics = .init(); dynamics.isBullet = state.bullet; dynamics.safetyFactor = 0.01 + try state.projectile?.components[PhysicsBody2DComponent.self]?.configureDynamics(dynamics) + if var solver = state.defaults { + if state.softSolver { + solver.contactHertz = 8; solver.contactDampingRatio = 1; solver.contactPushSpeed = 1 + solver.restitutionIterations = 8; solver.isRestitutionPropagationEnabled = true + } + try world.physicsWorld2D?.configureSolver(solver) + } + state.dirty = false + } + if state.resetRequested { + state.box?.components[PhysicsBody2DComponent.self]?.setPosition([-3, -2.7]) + state.box?.components[PhysicsBody2DComponent.self]?.clearForces() + state.circle?.components[PhysicsBody2DComponent.self]?.setPosition([-6, -2.5]) + state.circle?.components[PhysicsBody2DComponent.self]?.linearVelocity = [2, 0] + state.circle?.components[PhysicsBody2DComponent.self]?.angularVelocity = -2 / 0.6 + state.air?.components[PhysicsBody2DComponent.self]?.setPosition([0, 0.7]) + state.air?.components[PhysicsBody2DComponent.self]?.clearForces() + state.air?.components[PhysicsBody2DComponent.self]?.setAwake(true) + state.refireRequested = true; state.resetRequested = false + } + if state.refireRequested { + state.projectile?.components[PhysicsBody2DComponent.self]?.setPosition([-6, 2.5]) + state.projectile?.components[PhysicsBody2DComponent.self]?.linearVelocity = [50, 0] + state.refireRequested = false + } + if state.sleepRequested { + if let entity = state.air, let body = entity.components[PhysicsBody2DComponent.self] { entity.components[PhysicsBody2DComponent.self]?.setAwake(!body.isAwake) } + state.sleepRequested = false + } + } catch { state.status = "Control failed: \(error)" } +} + +@MainActor +func frameAdvanced(in world: World, session: PhysicsDemoSession) { + let state = session.advanced + guard let physics = world.physicsWorld2D, let box = state.box else { + return + } + let contacts = physics.contacts(for: box) + let points = contacts.flatMap { $0.manifold.points } + state.pointCount = points.count + let impulse = points.reduce(Float(0)) { $0 + $1.totalNormalImpulse } + let separation = points.first?.separation ?? 0 + let identifier = contacts.first.map { String(UInt(bitPattern: $0.id.hashValue), radix: 16).suffix(6) } ?? "none" + let velocity = state.air?.components[PhysicsBody2DComponent.self]?.linearVelocity.x ?? 0 + let awake = state.air?.components[PhysicsBody2DComponent.self]?.isAwake == true + state.status = String( + format: "Contact #%@ · %d points · separation %.3f · impulse %.3f · wind vx %.2f · %@ · hit points %d", + String(identifier), + points.count, + separation, + impulse, + velocity, + awake ? "awake" : "sleeping", + state.hitPoints + ) + for (index, marker) in state.markers.enumerated() { + marker.components[Transform.self]?.position = index < points.count ? Vector3(points[index].point, 3) : [0, 50, 3] + } +} + +struct PhysicsAdvancedDemoPane: View { + let session: PhysicsDemoSession + var body: some View { + let state = session.advanced + VStack(spacing: 8) { + HStack(spacing: 14) { + Button(["Wind: off", "Wind: airflow", "Wind: still-air drag"][state.windMode]) { state.windMode = (state.windMode + 1) % 3; state.dirty = true } + .accessibilityIdentifier("physics-demo.advanced-wind") + Button(state.reverseBelt ? "Belt: left" : "Belt: right") { state.reverseBelt.toggle(); state.dirty = true } + .accessibilityIdentifier("physics-demo.advanced-belt") + Button(state.rolling ? "Rolling resistance: on" : "Rolling resistance: off") { state.rolling.toggle(); state.dirty = true } + .accessibilityIdentifier("physics-demo.advanced-rolling") + Button(state.lowGrip ? "Mixing: minimum grip" : "Mixing: maximum grip") { state.lowGrip.toggle(); state.dirty = true } + .accessibilityIdentifier("physics-demo.advanced-grip") + } + HStack(spacing: 14) { + Button(state.damping ? "Damping: high" : "Damping: off") { state.damping.toggle(); state.dirty = true } + .accessibilityIdentifier("physics-demo.advanced-damping") + Button(state.bullet ? "CCD bullet: on" : "CCD bullet: off") { state.bullet.toggle(); state.dirty = true; state.refireRequested = true } + .accessibilityIdentifier("physics-demo.advanced-bullet") + Button(state.locked ? "Axes: locked" : "Axes: free") { state.locked.toggle(); state.dirty = true } + .accessibilityIdentifier("physics-demo.advanced-lock") + Button("Sleep / wake capsule") { state.sleepRequested = true } + .accessibilityIdentifier("physics-demo.advanced-sleep") + Button(state.softSolver ? "Solver: soft / 8 restitution" : "Solver: default") { state.softSolver.toggle(); state.dirty = true } + .accessibilityIdentifier("physics-demo.advanced-solver") + Button("Reset") { state.resetRequested = true } + .accessibilityIdentifier("physics-demo.advanced-reset") + } + Text("Green: rolling + grip mixing · Cyan: wind + damping · Red: fast box vs thin kinematic wall · Pink: contact points") + Text(state.status).font(.system(size: 12)) + SceneView(useSceneCameras: true, make: { configurePhysicsDemo(&$0, session: session) }, updateContent: { _, _ in }) + .frameCaptureLabel("Physics2D Advanced").id(PhysicsDemoScene.advanced) + .frame(maxWidth: .infinity, maxHeight: .infinity) + } + .frame(maxWidth: .infinity, maxHeight: .infinity) + } +} diff --git a/Examples/Technical/Physics2D/Physics2DCharactersDemo.swift b/Examples/Technical/Physics2D/Physics2DCharactersDemo.swift new file mode 100644 index 0000000..ce8fff3 --- /dev/null +++ b/Examples/Technical/Physics2D/Physics2DCharactersDemo.swift @@ -0,0 +1,93 @@ +import AdaEngine +import Math + +@MainActor +func setupCharacters(in world: World, session: PhysicsDemoSession) throws { + world.insertResource(PhysicsDebugOptions.showPhysicsShapes) + world.spawn("Floor") { + Sprite(tintColor: Color(0.25, 0.35, 0.5, 1), size: [18, 0.4]) + Collision2DComponent(shapes: [.generateBox(width: 18, height: 0.4)]) + Transform(position: [0, -2.2, 0]) + } + let ramp = try Shape2DResource.generateChain(points: [[7, -1.4], [5, -2], [3, -2]]) + world.spawn("Ramp") { Collision2DComponent(shapes: [ramp]); Transform() } + world.spawn("Right wall") { Collision2DComponent(shapes: [.generateBox(width: 0.2, height: 4)]); Transform(position: [7.7, -0.2, 0]) } + session.sensor = world.spawn("Sensor") { + Sprite(tintColor: Color(0.1, 0.6, 0.4, 0.35), size: [0.5, 2]) + Collision2DComponent(shapes: [.generateBox(width: 0.5, height: 2)], mode: .trigger) + Transform(position: [-4, -1, -1]) + } + var controller = CharacterController2DComponent() + controller.mode = session.characterMode + session.character = world.spawn("Character") { controller; Transform(position: [-5, 0, 1]) } + session.crate = world.spawn("Light crate") { + Sprite(tintColor: Color(1, 0.57, 0.2, 1), size: [0.8, 0.8]) + PhysicsBody2DComponent(shapes: [.generateBox(width: 0.8, height: 0.8)], massProperties: .init(mass: 0.2, inertia: [0, 0, 0.2])) + Transform(position: [-1, -1.6, 0]) + } + var platform = PhysicsBody2DComponent(shapes: [.generateBox(width: 3, height: 0.4)], mass: 1, mode: .kinematic) + platform.linearVelocity = [0.8, 0] + session.platform = world.spawn("Moving platform") { + Sprite(tintColor: Color(0.25, 0.6, 1, 1), size: [3, 0.4]) + platform + Transform(position: [2, -1.3, 0]) + } +} + +@MainActor +func controlCharacter(_ session: PhysicsDemoSession) { + guard let character = session.character else { + return + } + character.components[CharacterController2DComponent.self]?.mode = session.characterMode + character.components[CharacterController2DComponent.self]?.desiredVelocity = [2.5 * session.moveDirection, 0] + if session.jumpRequest { + session.jumpRequest = false + character.components[CharacterController2DComponent.self]?.jumpRequested = true + } + if session.resetRequested { + session.resetRequested = false; session.moveDirection = 0 + character.components[Transform.self]?.position = [-5, 0, 1] + character.components[CharacterController2DComponent.self]?.desiredVelocity = .zero + character.components[CharacterController2DComponent.self]?.resetMotion = true + session.crate?.components[PhysicsBody2DComponent.self]?.setPosition([-1, -1.6], angle: .radians(0)) + session.crate?.components[PhysicsBody2DComponent.self]?.linearVelocity = .zero + session.crate?.components[PhysicsBody2DComponent.self]?.angularVelocity = 0 + } + let x = session.platform?.components[Transform.self]?.position.x ?? 2 + if x > 3.2 { session.platformDirection = -1 } + if x < 1.2 { session.platformDirection = 1 } + session.platform?.components[PhysicsBody2DComponent.self]?.linearVelocity = [0.8 * session.platformDirection, 0] +} + +@MainActor +func updateCharacterStatus(_ session: PhysicsDemoSession) { + guard let controller = session.character?.components[CharacterController2DComponent.self] else { + return + } + let velocity = Vector2((controller.velocity.x * 10).rounded() / 10, (controller.velocity.y * 10).rounded() / 10) + session.rayStatus = "\(controller.mode.rawValue) · \(controller.isGrounded ? "grounded" : "airborne") · velocity \(velocity.x), \(velocity.y)" +} + +struct PhysicsCharactersDemoPane: View { + let session: PhysicsDemoSession + var body: some View { + VStack(spacing: 12) { + HStack(spacing: 14) { + Button("Left") { session.moveDirection = -1 }.accessibilityIdentifier("physics-demo.left") + Button("Stop") { session.moveDirection = 0 }.accessibilityIdentifier("physics-demo.stop") + Button("Right") { session.moveDirection = 1 }.accessibilityIdentifier("physics-demo.right") + Button("Jump") { session.jumpRequest = true }.accessibilityIdentifier("physics-demo.jump") + Button(session.characterMode == .query ? "Mode: Query" : "Mode: Dynamic") { session.characterMode = session.characterMode == .query ? .dynamic : .query } + .accessibilityIdentifier("physics-demo.character-mode") + Button("Reset") { session.resetRequested = true }.accessibilityIdentifier("physics-demo.character-reset") + } + Text("Move and jump onto the moving platform. Dynamic mode pushes the orange crate; query mode is virtual.") + Text(session.rayStatus) + SceneView(useSceneCameras: true, make: { configurePhysicsDemo(&$0, session: session) }, updateContent: { _, _ in }) + .frameCaptureLabel("Physics2D Characters").id(PhysicsDemoScene.characters) + .frame(maxWidth: .infinity, maxHeight: .infinity) + } + .frame(maxWidth: .infinity, maxHeight: .infinity) + } +} diff --git a/Examples/Technical/Physics2D/Physics2DDemoMain.swift b/Examples/Technical/Physics2D/Physics2DDemoMain.swift new file mode 100644 index 0000000..d7497f5 --- /dev/null +++ b/Examples/Technical/Physics2D/Physics2DDemoMain.swift @@ -0,0 +1,364 @@ +@_spi(Internal) import AdaApp +import AdaEngine +@_spi(Internal) import AdaPlatform +import Foundation + +@main +@MainActor +struct Physics2DDemoMain { + static func main() async throws { + if CommandLine.arguments.contains("--validate") { + try await validate() + return + } + if CommandLine.arguments.contains("--verify") { + Task { @MainActor in + do { + let path = argument(after: "--proof-directory") ?? "/tmp/ada-physics2d-proof" + try FileManager.default.createDirectory(atPath: path, withIntermediateDirectories: true) + try await verifyWindow(to: path) + report("Physics2DDemo verification PASS") + } catch { + report("Physics2DDemo verification FAIL: \(error)") + } + } + } + try await AppRuntime.run(Physics2DDemoApp()) + } + + private static func argument(after flag: String) -> String? { + guard let index = CommandLine.arguments.firstIndex(of: flag), CommandLine.arguments.indices.contains(index + 1) else { + return nil + } + return CommandLine.arguments[index + 1] + } + + private static func validate() async throws { + for scene in PhysicsDemoScene.allCases { + let session = PhysicsDemoSession(scene: scene, rendering: false) + session.scan = false + let app = AppWorlds(main: World()) + app.addPlugin(MainSchedulerPlugin()).addPlugin(TransformPlugin()) + .addPlugin(Physics2DPlugin(gravity: scene.gravity)) + .addPlugin(PhysicsDemoPlugin(session: session)) + try await app.build() + app.main.insertResource(FixedTime(deltaTime: 1.0 / 60)) + await app.main.runScheduler(.startup) + await advance(app, steps: 240) + if scene == .largeWorld { + try await validateLargeWorld(app, session) + } else if scene == .advanced { + try await validateAdvanced(app, session) + } else if scene == .mechanisms { + guard session.connectedJoints == 9 else { throw Failure.mechanisms } + session.reverseRequested = true + await advance(app, steps: 30) + guard (session.targets[4].components[PhysicsBody2DComponent.self]?.angularVelocity ?? 0) < -1 else { throw Failure.mechanisms } + session.breakRequested = true + await advance(app, steps: 5) + guard session.jointBreaks > 0, session.connectedJoints == 8 else { throw Failure.mechanisms } + session.resetRequested = true + await advance(app, steps: 5) + guard session.connectedJoints == 9 else { throw Failure.mechanisms } + report("PASS: mechanisms · nine joint kinds / live reverse / break / repair") + } else if scene == .characters { + guard session.character?.components[CharacterController2DComponent.self]?.isGrounded == true else { throw Failure.character } + session.characterMode = .dynamic + await advance(app, steps: 90) + session.moveDirection = 1 + await advance(app, steps: 150) + session.moveDirection = 0 + await advance(app, steps: 30) + guard (session.crate?.components[Transform.self]?.position.x ?? -1) > -0.8 else { throw Failure.character } + session.jumpRequest = true + await advance(app, steps: 1) + guard session.character?.components[CharacterController2DComponent.self]?.isGrounded == false else { throw Failure.character } + report("PASS: characters · query ground / dynamic push / jump") + } else if scene == .queries { + guard session.queryEntities.count == 4 else { throw Failure.queries } + session.querySensors = false + await app.main.runScheduler(.postUpdate) + guard session.queryEntities.count == 3 else { throw Failure.queries } + session.probeMode = .overlap + await app.main.runScheduler(.postUpdate) + guard session.queryEntities.count == 1 else { throw Failure.queries } + session.probeMode = .area + await app.main.runScheduler(.postUpdate) + guard session.queryEntities.count == 3 else { throw Failure.queries } + report("PASS: geometry/query scene · cast / sensor exclusion / exact overlap / area") + } else if scene == .raycast { + guard session.lastHits.count == 3, session.lastHits[0].distance < session.lastHits[1].distance else { throw Failure.raycast } + session.allHits = false + await app.main.runScheduler(.postUpdate) + guard session.lastHits.count == 1 else { throw Failure.raycast } + session.allHits = true + session.blueOnly = true + await app.main.runScheduler(.postUpdate) + guard session.lastHits.count == 2 else { throw Failure.raycast } + report("PASS: raycast scene · 3 ordered hits / nearest / 2 blue-layer hits") + } else { + try requireEvents(session) + report("PASS: event scene · contacts=\(session.contactBegins)/\(session.contactEnds), sensors=\(session.sensorBegins)/\(session.sensorEnds), impacts=\(session.impacts)") + } + } + } + + static func advance(_ app: AppWorlds, steps: Int) async { + for _ in 0.. SceneViewFrameSource { + for _ in 0..<100 { + if let source = SceneViewFrameRegistry.latest(label: label), source.frameSequence > 2, source !== previous { + return source + } + try await Task.sleep(for: .milliseconds(100)) + } + report("No ready source for \(label); labels: \(SceneViewFrameRegistry.sources.map(\.label))") + throw Failure.sceneUnavailable + } + + static func nextFrames(_ source: SceneViewFrameSource, count: Int = 5) async throws -> SceneViewCapturedFrame { + var frame = try await source.captureFrame(after: source.frameSequence, timeout: .seconds(10)) + for _ in 1.. 0 && events.contactBegins > 0 && events.contactEnds > 0 && events.impacts > 0 { break } + } + try requireEvents(events) + let eventFrame = try await nextFrames(eventSource) + try write(eventFrame.image, to: directory + "/events.png") + let initialImpacts = events.impacts + try tap("physics-demo.drop") + var observedDrop = false + for _ in 0..<20 { + _ = try await nextFrames(eventSource, count: 1) + if (events.falling?.components[Transform.self]?.position.y ?? 0) > 2 { + observedDrop = true + break + } + } + guard observedDrop else { throw Failure.events } + for _ in 0..<150 { + _ = try await nextFrames(eventSource, count: 1) + if events.impacts > initialImpacts { break } + } + guard events.impacts > initialImpacts else { throw Failure.events } + var verification: [String: Any] = [ + "passed": true, "backend": String(describing: unsafe RenderEngine.shared.type), "raycastAll": 3, "raycastNearest": 1, "raycastBlueMask": 2, + "contactBegins": events.contactBegins, "contactEnds": events.contactEnds, + "sensorBegins": events.sensorBegins, "sensorEnds": events.sensorEnds, "impacts": events.impacts, + "lastImpactSpeed": events.lastImpactSpeed, "sceneReentry": true, "dropButton": true, "rayFrame": rayFrame.sequence, "eventFrame": eventFrame.sequence, + ] + try tap("physics-demo.raycasts") + let rebuiltRay = try await waitForSource("Physics2D Raycasts", excluding: raySource) + _ = try await nextFrames(rebuiltRay) + guard let rebuilt = rebuiltRay.world?.getResource(PhysicsDemoSession.self), + rebuilt.lastHits.count == 3, rebuilt.markers.count == 3 else { throw Failure.raycast } + try tap("physics-demo.events") + _ = try await waitForSource("Physics2D Events", excluding: eventSource) + report("PASS: native events · sensor entry/exit, contact begin/end, impact, re-drop, scene re-entry") + try tap("physics-demo.queries") + let queriesSource = try await waitForSource("Physics2D Geometry & queries") + guard let queries = queriesSource.world?.getResource(PhysicsDemoSession.self) else { throw Failure.sceneUnavailable } + try tap("physics-demo.query-scan") + _ = try await nextFrames(queriesSource) + guard queries.queryEntities.count == 4 else { throw Failure.queries } + try tap("physics-demo.query-sensors") + _ = try await nextFrames(queriesSource) + guard queries.queryEntities.count == 3 else { throw Failure.queries } + try tap("physics-demo.query-mask") + _ = try await nextFrames(queriesSource) + guard queries.queryEntities.count == 2 else { throw Failure.queries } + try tap("physics-demo.query-order") + _ = try await nextFrames(queriesSource) + guard queries.queryEntities.count == 1 else { throw Failure.queries } + try tap("physics-demo.query-order") + try tap("physics-demo.query-mask") + try tap("physics-demo.query-sensors") + let geometryFrame = try await nextFrames(queriesSource) + report("Geometry debug \(queries.debugDrawState), options=\(queriesSource.world?.getResource(PhysicsDebugOptions.self)?.rawValue ?? 0)") + try write(geometryFrame.image, to: directory + "/geometry-cast.png") + try tap("physics-demo.query-kind") + _ = try await nextFrames(queriesSource) + guard queries.queryEntities.count == 1 else { throw Failure.queries } + try tap("physics-demo.query-kind") + let areaFrame = try await nextFrames(queriesSource) + guard queries.queryEntities.count == 4 else { throw Failure.queries } + try write(areaFrame.image, to: directory + "/geometry-area.png") + try tap("physics-demo.query-kind") + try tap("physics-demo.raycasts") + _ = try await waitForSource("Physics2D Raycasts", excluding: rebuiltRay) + try tap("physics-demo.queries") + let rebuiltQueries = try await waitForSource("Physics2D Geometry & queries", excluding: queriesSource) + _ = try await nextFrames(rebuiltQueries) + guard queries.queryEntities.count == 4, queries.targets.count == 8 else { throw Failure.queries } + verification["querySceneReentry"] = true + verification["geometryQueries"] = true + report("PASS: native geometry · convex cast / overlap / area / masks / sensors / nearest") + try tap("physics-demo.mechanisms") + let mechanismSource = try await waitForSource("Physics2D Mechanisms") + guard let mechanisms = mechanismSource.world?.getResource(PhysicsDemoSession.self), mechanisms.connectedJoints == 9 else { throw Failure.mechanisms } + try tap("physics-demo.reverse") + _ = try await nextFrames(mechanismSource, count: 30) + guard mechanisms.driveDirection < 0, (mechanisms.targets[4].components[PhysicsBody2DComponent.self]?.angularVelocity ?? 0) < -1 else { throw Failure.mechanisms } + let mechanismFrame = try await nextFrames(mechanismSource) + try write(mechanismFrame.image, to: directory + "/mechanisms.png") + try tap("physics-demo.break") + for _ in 0..<30 { + _ = try await nextFrames(mechanismSource, count: 1) + if mechanisms.jointBreaks > 0 { break } + } + guard mechanisms.jointBreaks > 0, mechanisms.connectedJoints == 8 else { throw Failure.mechanisms } + try tap("physics-demo.repair") + _ = try await nextFrames(mechanismSource) + guard mechanisms.connectedJoints == 9 else { throw Failure.mechanisms } + verification["mechanisms"] = true + verification["jointBreaks"] = mechanisms.jointBreaks + report("PASS: native mechanisms · nine constraints / reverse / break / repair") + try tap("physics-demo.characters") + let characterSource = try await waitForSource("Physics2D Characters") + guard let characters = characterSource.world?.getResource(PhysicsDemoSession.self) else { throw Failure.character } + try await waitForGround(characterSource, characters) + guard !hasCharacterCollider(characterSource, characters) else { throw Failure.character } + let startX = characters.character?.components[Transform.self]?.position.x ?? -5 + try tap("physics-demo.right") + _ = try await nextFrames(characterSource, count: 25) + guard (characters.character?.components[Transform.self]?.position.x ?? -5) > startX + 0.2 else { throw Failure.character } + try tap("physics-demo.stop") + _ = try await nextFrames(characterSource, count: 15) + try tap("physics-demo.jump") + try await waitForJump(characterSource, characters) + let queryFrame = try await nextFrames(characterSource, count: 10) + try write(queryFrame.image, to: directory + "/character-query.png") + try await waitForGround(characterSource, characters) + try tap("physics-demo.character-mode") + _ = try await nextFrames(characterSource) + guard characters.characterMode == .dynamic, hasCharacterCollider(characterSource, characters) else { throw Failure.character } + try tap("physics-demo.right") + _ = try await nextFrames(characterSource, count: 120) + try tap("physics-demo.stop") + _ = try await nextFrames(characterSource, count: 15) + guard (characters.crate?.components[Transform.self]?.position.x ?? -1) > -0.8 else { throw Failure.character } + let dynamicFrame = try await nextFrames(characterSource) + try write(dynamicFrame.image, to: directory + "/character-dynamic.png") + try tap("physics-demo.jump") + try await waitForJump(characterSource, characters) + try await waitForGround(characterSource, characters) + try tap("physics-demo.character-mode") + _ = try await nextFrames(characterSource) + guard !hasCharacterCollider(characterSource, characters) else { throw Failure.character } + let oldPlayer = characters.character + try tap("physics-demo.mechanisms") + _ = try await waitForSource("Physics2D Mechanisms", excluding: mechanismSource) + try tap("physics-demo.characters") + let rebuiltCharacter = try await waitForSource("Physics2D Characters", excluding: characterSource) + try await waitForGround(rebuiltCharacter, characters) + guard characters.character !== oldPlayer else { throw Failure.character } + verification["characterModes"] = ["query", "dynamic"] + verification["dynamicPush"] = true + verification["characterJumpBothModes"] = true + verification["characterColliderCleanup"] = true + verification["characterSceneReentry"] = true + report("PASS: native characters · move / stop / both jumps / physical push / mode cleanup / re-entry") + try await verifyAdvanced(to: directory, tap: tap) + verification["advancedPhysics"] = true + try await verifyLargeWorld(to: directory, tap: tap) + verification["largeWorldPrecision"] = true + verification["largeWorldMillimeterNudge"] = true + verification["largeWorldOriginShift"] = true + verification["largeWorldCharacters"] = true + verification["largeWorldSceneReentry"] = true + try JSONSerialization.data(withJSONObject: verification, options: [.prettyPrinted, .sortedKeys]) + .write(to: URL(fileURLWithPath: directory + "/verification.json"), options: .atomic) + } + + static func waitForGround(_ source: SceneViewFrameSource, _ session: PhysicsDemoSession) async throws { + for _ in 0..<150 { + if session.character?.components[CharacterController2DComponent.self]?.isGrounded == true { + return + } + _ = try await nextFrames(source, count: 1) + } + throw Failure.character + } + + static func waitForJump(_ source: SceneViewFrameSource, _ session: PhysicsDemoSession) async throws { + for _ in 0..<30 { + _ = try await nextFrames(source, count: 1) + if session.character?.components[CharacterController2DComponent.self]?.isGrounded == false { + return + } + } + throw Failure.character + } + + static func hasCharacterCollider(_ source: SceneViewFrameSource, _ session: PhysicsDemoSession) -> Bool { + guard let player = session.character, let bottom = player.components[Transform.self]?.position.xy, let physics = source.world?.physicsWorld2D else { + return false + } + return physics.overlap(at: bottom + [0, 0.9]).contains { $0.entity === player } + } + + private static func requireEvents(_ session: PhysicsDemoSession) throws { + guard session.contactBegins > 0, session.contactEnds > 0, session.sensorBegins > 0, + session.sensorEnds > 0, session.impacts > 0, session.lastImpactSpeed > 0 else { throw Failure.events } + } + + static func write(_ image: Image, to path: String) throws { + guard image.width > 0, image.height > 0, !image.data.isEmpty else { throw Failure.emptyFrame } + var bytes = Array(image.data) + if image.format == .bgra8 || image.format == .bgra8_sRGB { + for index in stride(from: 0, to: bytes.count, by: 4) { bytes.swapAt(index, index + 2) } + } + var colors = Set() + for offset in stride(from: 0, to: bytes.count - 3, by: 64) { + colors.insert(UInt32(bytes[offset]) << 16 | UInt32(bytes[offset + 1]) << 8 | UInt32(bytes[offset + 2])) + } + let png = try PNGWriter().encode(width: image.width, height: image.height, rgba: bytes) + try png.write(to: URL(fileURLWithPath: path), options: .atomic) + guard image.width > 200, image.height > 200, colors.count > 3 else { report("Frame \(path) contains \(colors.count) sampled colors"); throw Failure.emptyFrame } + } + + static func report(_ message: String) { + FileHandle.standardOutput.write(Data((message + "\n").utf8)) + } + + enum Failure: Error { + case raycast, events, queries, mechanisms, character, advanced, largeWorld, sceneUnavailable, emptyFrame + } +} diff --git a/Examples/Technical/Physics2D/Physics2DDemoScenes.swift b/Examples/Technical/Physics2D/Physics2DDemoScenes.swift new file mode 100644 index 0000000..f902f0d --- /dev/null +++ b/Examples/Technical/Physics2D/Physics2DDemoScenes.swift @@ -0,0 +1,302 @@ +import AdaEngine +import Math +import Observation + +/// The same scenes run in the interactive window, offscreen capture and deterministic validation. +enum PhysicsDemoScene: String, CaseIterable { + case raycast, events, queries, mechanisms, characters, advanced, largeWorld + var gravity: Vector2 { self == .raycast || self == .queries ? .zero : [0, -9.81] } +} + +@MainActor +@Observable +final class PhysicsDemoSession: Resource { + let scene: PhysicsDemoScene + let rendering: Bool + var largeWorld = PhysicsLargeWorldState() + var advanced = PhysicsAdvancedState() + var mechanismOwners: [Entity] = [] + var mechanismStarts: [Vector2] = [] + var reverseRequested = false + var breakRequested = false + var driveDirection: Float = 1 + var moverDirection: Float = 1 + var connectedJoints = 0 + var jointBreaks = 0 + var character: Entity? + var crate: Entity? + var platform: Entity? + var characterMode = CharacterController2DMode.query + var moveDirection: Float = 0 + var jumpRequest = false + var platformDirection: Float = 1 + var debugDrawState = "extract pending" + var probeMode = PhysicsProbeMode.cast + var querySensors = true + var queryShape: Shape2DResource? + var queryEntities: [Entity] = [] + var queryPoints: [Vector2] = [] + var probeY: Float = 1.6 + var probeContact: Vector2? + var allHits = true + var blueOnly = false + var scan = true + var elapsed: Float = 0 + var resetRequested = false + var rayStatus = "Waiting for physics sync" + var contactBegins = 0 + var contactEnds = 0 + var sensorBegins = 0 + var sensorEnds = 0 + var impacts = 0 + var lastImpactSpeed: Float = 0 + var sensorOccupied = false + var targets: [Entity] = [] + var markers: [Entity] = [] + var beam: Entity? + var sensor: Entity? + var visitor: Entity? + var falling: Entity? + var lastHits: [Raycast2DHit] = [] + + func resetScene() { + largeWorld = PhysicsLargeWorldState() + advanced = PhysicsAdvancedState() + elapsed = 0 + mechanismOwners.removeAll(); mechanismStarts.removeAll() + reverseRequested = false; breakRequested = false; driveDirection = 1; moverDirection = 1 + connectedJoints = 0; jointBreaks = 0 + character = nil; crate = nil; platform = nil; moveDirection = 0; jumpRequest = false; platformDirection = 1 + resetRequested = false + rayStatus = "Waiting for physics sync" + contactBegins = 0 + contactEnds = 0 + sensorBegins = 0 + sensorEnds = 0 + impacts = 0 + lastImpactSpeed = 0 + sensorOccupied = false + targets.removeAll() + markers.removeAll() + beam = nil + sensor = nil + visitor = nil + falling = nil + lastHits.removeAll() + queryEntities.removeAll(); queryPoints.removeAll(); queryShape = nil; probeContact = nil + } + + init(scene: PhysicsDemoScene, rendering: Bool = true) { + self.scene = scene + self.rendering = rendering + } +} + +@MainActor +func configurePhysicsDemo(_ app: inout AppWorlds, session: PhysicsDemoSession) { + app.addPlugin(TransformPlugin()).addPlugin(InputPlugin()).addPlugin(RenderWorldPlugin()) + .addPlugin(CameraPlugin()).addPlugin(AssetsPlugin()).addPlugin(VisibilityPlugin()) + .addPlugin(SpritePlugin()).addPlugin(Core2DPlugin()).addPlugin(UpscalePlugin()) + .addPlugin(Physics2DPlugin(gravity: session.scene.gravity)) + .addPlugin(PhysicsDemoPlugin(session: session)) +} + +struct PhysicsDemoPlugin: Plugin { + let session: PhysicsDemoSession + + func setup(in app: AppWorlds) { + app.insertResource(session) + .addSystem(PhysicsDemoStartupSystem.self, on: .startup) + .addSystem(PhysicsDemoControlsSystem.self, on: .fixedPreUpdate) + .addSystem(PhysicsDemoFrameSystem.self, on: .postUpdate) + app.getSubworldBuilder(by: .renderWorld)?.addSystem(PhysicsDemoProbeExtractSystem.self, on: .extract) + } +} + +@System +@MainActor +func PhysicsDemoStartup(_ context: WorldUpdateContext, _ state: Res) { + let session = state.wrappedValue + session.resetScene() + let world = context.world + if session.rendering { + var camera = Camera() + camera.backgroundColor = Color(0.035, 0.055, 0.10, 1) + let entity = world.spawn("Physics camera", bundle: Camera2D(camera: camera, orthographicProjection: OrthographicProjection(scale: 48))) + if session.scene == .largeWorld { entity.components[PhysicsPosition2DComponent.self] = .init(session.largeWorld.base) } + } + if session.scene == .largeWorld { + do { try setupLargeWorld(in: world, session: session) } catch { session.rayStatus = "Large-world setup failed: \(error)" } + return + } + if session.scene == .advanced { + do { try setupAdvanced(in: world, session: session) } catch { session.rayStatus = "Advanced setup failed: \(error)" } + return + } + if session.scene == .mechanisms || session.scene == .characters { + do { + if session.scene == .mechanisms { try setupMechanisms(in: world, session: session) } else { try setupCharacters(in: world, session: session) } + } catch { session.rayStatus = "Setup failed: \(error)" } + return + } + if session.scene == .queries { + do { try setupGeometryQueries(in: world, session: session) } catch { session.rayStatus = "Geometry failed: \(error)" } + return + } + if session.scene == .raycast { + for (index, x) in [Float(-3), 0, 3].enumerated() { + let color: Color = index == 1 ? Color(1, 0.57, 0.20, 1) : Color(0.25, 0.55, 1, 1) + let entity = world.spawn("Target \(index + 1)") { + Sprite(tintColor: color, size: [0.8, 3]) + Collision2DComponent( + shapes: [.generateBox(width: 0.8, height: 3)], + filter: CollisionFilter(categoryBitMask: CollisionGroup(rawValue: index == 1 ? 2 : 1)) + ) + Transform(position: [x, 0, 0]) + } + session.targets.append(entity) + } + session.beam = world.spawn("Ray") { + Sprite(tintColor: Color(0.3, 1, 0.8, 1), size: [12, 0.035]) + Transform(position: [0, 0, 1]) + } + for _ in 0..<3 { + session.markers.append(world.spawn("Hit marker") { + Sprite(tintColor: .white, size: [0.16, 0.16]) + Transform(position: [0, 50, 2]) + }) + } + } else { + world.spawn("Floor") { + Sprite(tintColor: Color(0.3, 0.4, 0.55, 1), size: [14, 0.5]) + Collision2DComponent(shapes: [.generateBox(width: 14, height: 0.5)]) + Transform(position: [0, -2, 0]) + } + session.sensor = world.spawn("Sensor") { + Sprite(tintColor: Color(0.15, 0.6, 0.4, 0.45), size: [3, 3]) + Collision2DComponent(shapes: [.generateBox(width: 3, height: 3)], mode: .trigger) + Transform(position: [-2, 0.5, -1]) + } + var visitorBody = PhysicsBody2DComponent(shapes: [.generateBox(width: 0.5, height: 0.5)], mass: 1) + visitorBody.gravityScale = 0 + visitorBody.linearVelocity = [2.5, 0] + session.visitor = world.spawn("Sensor visitor") { + Sprite(tintColor: Color(0.3, 0.75, 1, 1), size: [0.5, 0.5]) + visitorBody + Transform(position: [-5, 0.5, 1]) + } + session.falling = world.spawn("Bouncing box") { + Sprite(tintColor: Color(1, 0.57, 0.2, 1), size: [0.8, 0.8]) + PhysicsBody2DComponent( + shapes: [.generateBox(width: 0.8, height: 0.8)], + mass: 1, + material: .generate(friction: 0.4, restitution: 0.65, density: 1) + ) + Transform(position: [3, 3, 1]) + } + } +} + +@System +@MainActor +func PhysicsDemoControls(_ context: WorldUpdateContext, _ state: Res, _ time: Res) { + let session = state.wrappedValue + session.elapsed += Float(time.deltaTime) + if session.scene == .largeWorld { + controlLargeWorld(in: context.world, session: session) + return + } + if session.scene == .advanced { + controlAdvanced(in: context.world, session: session) + return + } + if session.scene == .mechanisms { + controlMechanisms(session) + return + } + if session.scene == .characters { + controlCharacter(session) + return + } + guard session.scene == .events else { + return + } + if let visitor = session.visitor, (visitor.components[Transform.self]?.position.x ?? 0) > 1.5 { + visitor.components[PhysicsBody2DComponent.self]?.setPosition([-5, 0.5]) + visitor.components[PhysicsBody2DComponent.self]?.linearVelocity = [2.5, 0] + } + if session.resetRequested { + session.resetRequested = false + session.falling?.components[PhysicsBody2DComponent.self]?.setPosition([3, 3]) + session.falling?.components[PhysicsBody2DComponent.self]?.linearVelocity = [0, -0.1] + } +} + +@System +@MainActor +func PhysicsDemoFrame( + _ context: WorldUpdateContext, + _ state: Res, + _ begins: Events, + _ ends: Events, + _ hits: Events, + _ jointEvents: Events +) { + let session = state.wrappedValue + for event in begins { + if event.isSensor { session.sensorBegins += 1; session.sensorOccupied = true } else { session.contactBegins += 1 } + } + for event in ends { + if event.isSensor { session.sensorEnds += 1; session.sensorOccupied = false } else { session.contactEnds += 1 } + } + for _ in jointEvents { session.jointBreaks += 1 } + for event in hits { + session.impacts += 1; session.lastImpactSpeed = event.approachSpeed + if session.scene == .advanced { session.advanced.hitPoints = event.contact?.manifold.points.count ?? 0 } + } + session.sensor?.components[Sprite.self]?.tintColor = session.sensorOccupied ? Color(0.2, 1, 0.5, 0.8) : Color(0.15, 0.6, 0.4, 0.45) + if session.scene == .largeWorld { + frameLargeWorld(in: context.world, session: session) + return + } + if session.scene == .advanced { + frameAdvanced(in: context.world, session: session) + return + } + if session.scene == .mechanisms { + session.connectedJoints = session.mechanismOwners.filter { $0.components[PhysicsJoint2DComponent.self]?.isConnected == true }.count + session.rayStatus = "\(session.connectedJoints) / 9 connected · \(session.jointBreaks) break events · filter box passes through its block" + return + } + if session.scene == .characters { + updateCharacterStatus(session) + return + } + if session.scene == .queries { + updateGeometryQueries(in: context.world, session: session) + return + } + guard session.scene == .raycast, let physics = context.world.physicsWorld2D else { + return + } + let start = Vector2(-6, 0) + let end = Vector2(6, session.scan ? Math.sin(session.elapsed * 0.7) * 3 : 0) + let hits = physics.raycast( + from: start, + to: end, + query: session.allHits ? .all : .first, + mask: session.blueOnly ? .default : .all + ) + session.lastHits = hits + let description = hits.map { "\($0.entity.name): \((($0.distance * 100).rounded()) / 100) m" }.joined(separator: " · ") + session.rayStatus = hits.isEmpty ? "No hits" : description + let translation = end - start + session.beam?.components[Sprite.self]?.size = Size(width: translation.squaredLength.squareRoot(), height: 0.035) + session.beam?.components[Transform.self] = Transform( + rotation: Quat(axis: [0, 0, 1], angle: Math.atan2(translation.y, translation.x)), + position: Vector3((start + end) / 2, 1) + ) + for (index, marker) in session.markers.enumerated() { + marker.components[Transform.self]?.position = index < hits.count ? Vector3(hits[index].point, 2) : [0, 50, 2] + } +} diff --git a/Examples/Technical/Physics2D/Physics2DDemoView.swift b/Examples/Technical/Physics2D/Physics2DDemoView.swift new file mode 100644 index 0000000..849a59b --- /dev/null +++ b/Examples/Technical/Physics2D/Physics2DDemoView.swift @@ -0,0 +1,70 @@ +import AdaEngine +import Observation + +struct Physics2DDemoApp: App { + var body: some AppScene { + WindowGroup { Physics2DDemoView() } + .window(with: UIWindow.Configuration(title: "AdaEngine · Box2D playground", frame: Rect(x: 100, y: 100, width: 1000, height: 700))) + } +} + +private struct Physics2DDemoView: View { + @State private var scene = PhysicsDemoScene.raycast + @State private var raycast = PhysicsDemoSession(scene: .raycast) + @State private var events = PhysicsDemoSession(scene: .events) + @State private var queries = PhysicsDemoSession(scene: .queries) + @State private var mechanisms = PhysicsDemoSession(scene: .mechanisms) + @State private var characters = PhysicsDemoSession(scene: .characters) + @State private var advanced = PhysicsDemoSession(scene: .advanced) + @State private var largeWorld = PhysicsDemoSession(scene: .largeWorld) + + var body: some View { + VStack(spacing: 12) { + Text("Box2D playground").font(.system(size: 26)) + HStack(spacing: 20) { + Button("Raycasts") { scene = .raycast }.accessibilityIdentifier("physics-demo.raycasts") + Button("Collisions & sensors") { scene = .events }.accessibilityIdentifier("physics-demo.events") + Button("Geometry & queries") { scene = .queries }.accessibilityIdentifier("physics-demo.queries") + Button("Mechanisms") { scene = .mechanisms }.accessibilityIdentifier("physics-demo.mechanisms") + Button("Characters") { scene = .characters }.accessibilityIdentifier("physics-demo.characters") + Button("Advanced") { scene = .advanced }.accessibilityIdentifier("physics-demo.advanced") + Button("Large worlds") { scene = .largeWorld }.accessibilityIdentifier("physics-demo.large-world") + } + if scene == .raycast { + HStack(spacing: 18) { + Button(raycast.allHits ? "All hits" : "Nearest hit") { raycast.allHits.toggle() }.accessibilityIdentifier("physics-demo.mode") + Button(raycast.blueOnly ? "Blue targets only" : "All layers") { raycast.blueOnly.toggle() }.accessibilityIdentifier("physics-demo.mask") + Button(raycast.scan ? "Hold horizontal ray" : "Animate ray") { raycast.scan.toggle() }.accessibilityIdentifier("physics-demo.scan") + } + Text("White markers show hits in distance order. Toggle the orange layer or nearest hit.") + Text(raycast.rayStatus) + SceneView(useSceneCameras: true, make: { configurePhysicsDemo(&$0, session: raycast) }, updateContent: { _, _ in }) + .frameCaptureLabel("Physics2D Raycasts") + .id(PhysicsDemoScene.raycast) + .frame(maxWidth: .infinity, maxHeight: .infinity) + } else if scene == .largeWorld { + PhysicsLargeWorldDemoPane(session: largeWorld) + } else if scene == .advanced { + PhysicsAdvancedDemoPane(session: advanced) + } else if scene == .mechanisms { + PhysicsMechanismsDemoPane(session: mechanisms) + } else if scene == .characters { + PhysicsCharactersDemoPane(session: characters) + } else if scene == .queries { + PhysicsQueriesDemoPane(session: queries) + } else { + Button("Drop box again") { events.resetRequested = true }.accessibilityIdentifier("physics-demo.drop") + Text("Blue box crosses the green sensor freely. Orange box bounces on the floor.") + Text("Contacts: \(events.contactBegins) begin / \(events.contactEnds) end · Impacts: \(events.impacts)") + Text("Sensor: \(events.sensorBegins) enter / \(events.sensorEnds) exit · \(events.sensorOccupied ? "occupied" : "empty")") + SceneView(useSceneCameras: true, make: { configurePhysicsDemo(&$0, session: events) }, updateContent: { _, _ in }) + .frameCaptureLabel("Physics2D Events") + .id(PhysicsDemoScene.events) + .frame(maxWidth: .infinity, maxHeight: .infinity) + } + } + .padding(18) + .background(Color(0.035, 0.055, 0.10, 1)) + .foregroundColor(.white) + } +} diff --git a/Examples/Technical/Physics2D/Physics2DLargeWorldChecks.swift b/Examples/Technical/Physics2D/Physics2DLargeWorldChecks.swift new file mode 100644 index 0000000..b08bb88 --- /dev/null +++ b/Examples/Technical/Physics2D/Physics2DLargeWorldChecks.swift @@ -0,0 +1,86 @@ +import AdaEngine + +extension Physics2DDemoMain { + static func validateLargeWorld(_ app: AppWorlds, _ session: PhysicsDemoSession) async throws { + let state = session.largeWorld + guard let physics = app.main.physicsWorld2D, let player = session.character, let hit = state.hit, + state.pointCount > 0, state.hinge?.components[PhysicsJoint2DComponent.self]?.isConnected == true else { throw Failure.largeWorld } + let before = hit.x + state.nudgeRequested = true + await advance(app, steps: 2) + guard let nudged = state.hit, nudged.x - before > 0.0009, nudged.x - before < 0.0011 else { throw Failure.largeWorld } + let contact = state.contactID + state.shifted = true + await advance(app, steps: 2) + guard physics.coordinateOrigin == state.base.offset(by: [1000, -500]), state.hit == nudged, + state.contactID == contact, player.components[CharacterController2DComponent.self]?.isGrounded == true else { throw Failure.largeWorld } + let start = player.components[PhysicsPosition2DComponent.self]?.position.x ?? 0 + state.direction = 1 + await advance(app, steps: 30) + state.direction = 0 + await advance(app, steps: 15) + guard (player.components[PhysicsPosition2DComponent.self]?.position.x ?? 0) > start + 0.1 else { throw Failure.largeWorld } + state.jumpRequested = true + await advance(app, steps: 1) + guard player.components[CharacterController2DComponent.self]?.isGrounded == false else { throw Failure.largeWorld } + await advance(app, steps: 90) + state.mode = .dynamic + await advance(app, steps: 60) + guard player.components[CharacterController2DComponent.self]?.isGrounded == true else { throw Failure.largeWorld } + state.jumpRequested = true + await advance(app, steps: 1) + guard player.components[CharacterController2DComponent.self]?.isGrounded == false else { throw Failure.largeWorld } + report("PASS: large worlds · exact queries / 1 mm nudge / origin shift / stable contacts and hinge / both character modes") + } + + static func verifyLargeWorld(to directory: String, tap: (String) throws -> Void) async throws { + let oldAdvanced = SceneViewFrameRegistry.latest(label: "Physics2D Advanced") + try tap("physics-demo.large-world") + let source = try await waitForSource("Physics2D Large worlds") + guard let session = source.world?.getResource(PhysicsDemoSession.self), let physics = source.world?.physicsWorld2D, + let player = session.character else { throw Failure.largeWorld } + let state = session.largeWorld + try await waitForGround(source, session) + guard let hit = state.hit, state.pointCount > 0 else { throw Failure.largeWorld } + let contact = state.contactID + try tap("physics-demo.large-nudge") + _ = try await nextFrames(source) + guard let nudged = state.hit, nudged.x - hit.x > 0.0009, nudged.x - hit.x < 0.0011 else { throw Failure.largeWorld } + let before = try await nextFrames(source) + try write(before.image, to: directory + "/large-world-before.png") + try tap("physics-demo.large-origin") + let shifted = try await nextFrames(source) + guard physics.coordinateOrigin == state.base.offset(by: [1000, -500]), state.hit == nudged, + state.contactID == contact, state.hinge?.components[PhysicsJoint2DComponent.self]?.isConnected == true else { throw Failure.largeWorld } + try write(shifted.image, to: directory + "/large-world-shifted.png") + let start = player.components[PhysicsPosition2DComponent.self]?.position.x ?? 0 + try tap("physics-demo.large-right") + _ = try await nextFrames(source, count: 30) + try tap("physics-demo.large-stop") + _ = try await nextFrames(source, count: 15) + guard (player.components[PhysicsPosition2DComponent.self]?.position.x ?? 0) > start + 0.1 else { throw Failure.largeWorld } + try tap("physics-demo.large-jump") + try await waitForJump(source, session) + try await waitForGround(source, session) + try tap("physics-demo.large-mode") + _ = try await nextFrames(source) + try await waitForGround(source, session) + guard hasCharacterCollider(source, session) else { throw Failure.largeWorld } + let dynamic = try await nextFrames(source) + try write(dynamic.image, to: directory + "/large-world-dynamic.png") + try tap("physics-demo.large-jump") + try await waitForJump(source, session) + try await waitForGround(source, session) + try tap("physics-demo.large-mode") + _ = try await nextFrames(source) + guard !hasCharacterCollider(source, session) else { throw Failure.largeWorld } + try tap("physics-demo.advanced") + _ = try await waitForSource("Physics2D Advanced", excluding: oldAdvanced) + try tap("physics-demo.large-world") + let rebuilt = try await waitForSource("Physics2D Large worlds", excluding: source) + guard let fresh = rebuilt.world?.getResource(PhysicsDemoSession.self), fresh.character !== player, + let freshPhysics = rebuilt.world?.physicsWorld2D, freshPhysics.coordinateOrigin == state.base else { throw Failure.largeWorld } + if let contact { guard !freshPhysics.isValid(contact) else { throw Failure.largeWorld } } + report("PASS: native large worlds · exact query / millimeter nudge / camera origin shift / contacts / both character jumps / re-entry") + } +} diff --git a/Examples/Technical/Physics2D/Physics2DLargeWorldDemo.swift b/Examples/Technical/Physics2D/Physics2DLargeWorldDemo.swift new file mode 100644 index 0000000..1bc7541 --- /dev/null +++ b/Examples/Technical/Physics2D/Physics2DLargeWorldDemo.swift @@ -0,0 +1,152 @@ +import AdaEngine +import Foundation +import Math +import Observation + +@MainActor +@Observable +final class PhysicsLargeWorldState { + let base = PhysicsPosition2D(x: 1_000_000_000.125, y: -999_999_999.75) + var shifted = false + var nudgeRequested = false + var mode = CharacterController2DMode.query + var direction: Float = 0 + var jumpRequested = false + var target: Entity? + var crate: Entity? + var hinge: Entity? + var marker: Entity? + var hit: PhysicsPosition2D? + var distance: Float = 0 + var probeStart = Vector2.zero + var probeEnd = Vector2.zero + var hitLocal: Vector2? + var contactID: Contact2DID? + var pointCount = 0 + var status = "Waiting for precise queries" +} + +@MainActor +func setupLargeWorld(in world: World, session: PhysicsDemoSession) throws { + let state = session.largeWorld + guard let physics = world.physicsWorld2D, physics.setCoordinateOrigin(state.base) else { + return + } + world.insertResource(PhysicsDebugOptions([.showPhysicsShapes, .showJoints])) + world.spawn("Global floor") { + Collision2DComponent(shapes: [.generateBox(width: 16, height: 0.4)]) + Sprite(tintColor: Color(0.25, 0.35, 0.5, 1), size: [16, 0.4]) + Transform() + PhysicsPosition2DComponent(state.base.offset(by: [0, -2.5])) + } + for x: Float in [-8, 8] { + world.spawn("Global boundary") { + Collision2DComponent(shapes: [.generateBox(width: 0.2, height: 4)]) + Transform() + PhysicsPosition2DComponent(state.base.offset(by: [x, -0.3])) + } + } + state.target = world.spawn("Millimeter query target") { + Collision2DComponent(shapes: [.generateBox(width: 0.4, height: 1.2)], filter: CollisionFilter(categoryBitMask: CollisionGroup(rawValue: 8))) + Sprite(tintColor: Color(0.2, 0.65, 1, 1), size: [0.4, 1.2]) + Transform() + PhysicsPosition2DComponent(state.base.offset(by: [3, 0.8])) + } + state.crate = world.spawn("Global contact box") { + PhysicsBody2DComponent(shapes: [.generateBox(width: 0.8, height: 0.8)], massProperties: .init(mass: 1, inertia: [0, 0, 1])) + Sprite(tintColor: Color(1, 0.6, 0.2, 1), size: [0.8, 0.8]) + Transform() + PhysicsPosition2DComponent(state.base.offset(by: [-1, -1.9])) + } + var bob = PhysicsBody2DComponent(shapes: [.generateCircle(radius: 0.8)], massProperties: .init(mass: 1, inertia: [0, 0, 0.2])) + bob.debugColor = Color(0.5, 1, 0.65, 1); bob.angularVelocity = 1 + let pendulum = world.spawn("Global hinge bob") { bob; Transform(); PhysicsPosition2DComponent(state.base.offset(by: [-3, 0.3])) } + let descriptor = try PhysicsJoint2DDescriptor.revolute(entity: pendulum, globalAnchor: state.base.offset(by: [-3, 2])) + state.hinge = world.spawn("Exact global pivot") { PhysicsJoint2DComponent(joint: descriptor) } + let controller = CharacterController2DComponent(radius: 0.3, height: 1.5) + session.character = world.spawn("Global character") { controller; Transform(); PhysicsPosition2DComponent(state.base.offset(by: [1, 0])) } + state.marker = world.spawn("Precise hit marker") { + Sprite(tintColor: Color(1, 0.85, 0.2, 1), size: [0.12, 0.12]) + Transform(position: [0, 0, 2]) + PhysicsPosition2DComponent(state.base.offset(by: [3, 0.8])) + } +} + +@MainActor +func controlLargeWorld(in world: World, session: PhysicsDemoSession) { + let state = session.largeWorld + let origin = state.shifted ? state.base.offset(by: [1000, -500]) : state.base + if world.physicsWorld2D?.coordinateOrigin != origin { world.physicsWorld2D?.setCoordinateOrigin(origin) } + if state.nudgeRequested, let target = state.target, let position = target.components[PhysicsPosition2DComponent.self]?.position { + target.components[PhysicsPosition2DComponent.self]?.position = .init(x: position.x + 0.001, y: position.y) + state.nudgeRequested = false + } + if let player = session.character { + if player.components[CharacterController2DComponent.self]?.mode != state.mode { + player.components[CharacterController2DComponent.self]?.mode = state.mode + player.components[CharacterController2DComponent.self]?.resetMotion = true + } + player.components[CharacterController2DComponent.self]?.desiredVelocity = [state.direction * 2, 0] + if state.jumpRequested { player.components[CharacterController2DComponent.self]?.jumpRequested = true; state.jumpRequested = false } + } +} + +@MainActor +func frameLargeWorld(in world: World, session: PhysicsDemoSession) { + let state = session.largeWorld + guard let physics = world.physicsWorld2D, let target = state.target, + let targetPosition = target.components[PhysicsPosition2DComponent.self]?.position else { + return + } + let start = state.base.offset(by: [-6, 0.8]) + let hit = physics.raycast(from: start, translation: [12, 0], query: .first, mask: CollisionGroup(rawValue: 8)).first + state.hit = hit?.point; state.distance = hit?.distance ?? 0 + state.probeStart = start.displacement(from: physics.coordinateOrigin) + state.probeEnd = start.offset(by: [12, 0]).displacement(from: physics.coordinateOrigin) + state.hitLocal = hit?.point.displacement(from: physics.coordinateOrigin) + if let marker = state.marker { + let position = hit?.point ?? state.base.offset(by: [0, 50]) + marker.components[PhysicsPosition2DComponent.self]?.position = position + marker.components[Transform.self]?.position = Vector3(position.displacement(from: physics.coordinateOrigin), 2) + } + let contact = state.crate.flatMap { physics.contacts(for: $0).first } + state.contactID = contact?.id; state.pointCount = contact?.manifold.points.count ?? 0 + let delta = targetPosition.x - state.base.x - 3 + let grounded = session.character?.components[CharacterController2DComponent.self]?.isGrounded == true + state.status = String( + format: "Global hit x %.6f · travel %.3f · target delta %.6f · %d contact points · %@ %@", + hit?.point.x ?? 0, + state.distance, + delta, + state.pointCount, + state.mode.rawValue, + grounded ? "grounded" : "airborne" + ) +} + +struct PhysicsLargeWorldDemoPane: View { + let session: PhysicsDemoSession + var body: some View { + let state = session.largeWorld + VStack(spacing: 10) { + HStack(spacing: 14) { + Button("Left") { state.direction = -1 }.accessibilityIdentifier("physics-demo.large-left") + Button("Stop") { state.direction = 0 }.accessibilityIdentifier("physics-demo.large-stop") + Button("Right") { state.direction = 1 }.accessibilityIdentifier("physics-demo.large-right") + Button("Jump") { state.jumpRequested = true }.accessibilityIdentifier("physics-demo.large-jump") + Button(state.mode == .query ? "Mode: Query" : "Mode: Dynamic") { state.mode = state.mode == .query ? .dynamic : .query } + .accessibilityIdentifier("physics-demo.large-mode") + Button(state.shifted ? "Restore render origin" : "Shift render origin 1 km") { state.shifted.toggle() } + .accessibilityIdentifier("physics-demo.large-origin") + Button("Nudge target 1 mm") { state.nudgeRequested = true }.accessibilityIdentifier("physics-demo.large-nudge") + } + Text("Exact physics at 1,000,000,000 units · Camera and tagged roots share the render frame · Yellow probe targets the blue pillar") + .font(.system(size: 12)) + Text(state.status).font(.system(size: 12)) + SceneView(useSceneCameras: true, make: { configurePhysicsDemo(&$0, session: session) }, updateContent: { _, _ in }) + .frameCaptureLabel("Physics2D Large worlds").id(PhysicsDemoScene.largeWorld) + .frame(maxWidth: .infinity, maxHeight: .infinity) + } + .frame(maxWidth: .infinity, maxHeight: .infinity) + } +} diff --git a/Examples/Technical/Physics2D/Physics2DMechanismsDemo.swift b/Examples/Technical/Physics2D/Physics2DMechanismsDemo.swift new file mode 100644 index 0000000..122199d --- /dev/null +++ b/Examples/Technical/Physics2D/Physics2DMechanismsDemo.swift @@ -0,0 +1,132 @@ +import AdaEngine +import Math + +@MainActor +func demoHinge(_ direction: Float) -> RevoluteJoint2DSettings { + .init(frameB: .init(position: [-0.7, 1]), limits: .init(lower: -0.7, upper: 0.7), motor: .init(speed: direction, maximumEffort: 20)) +} +@MainActor +func demoSlider(_ direction: Float) -> PrismaticJoint2DSettings { + .init(spring: .init(hertz: 2), limits: .init(lower: -0.6, upper: 0.6), motor: .init(speed: direction, maximumEffort: 80)) +} +@MainActor +func demoWheel(_ direction: Float) -> WheelJoint2DSettings { + .init(frameA: .init(angle: .pi / 2), limits: .init(lower: -0.8, upper: 0.25), motor: .init(speed: 3 * direction, maximumEffort: 5)) +} +@MainActor +func demoMotor(_ direction: Float) -> MotorJoint2DSettings { + .init(frameA: .init(position: [0.7, 0]), angularVelocity: direction, maximumVelocityForce: 0, maximumVelocityTorque: 3, linearSpring: .init(hertz: 2)) +} + +@MainActor +func setupMechanisms(in world: World, session: PhysicsDemoSession) throws { + world.insertResource(PhysicsDebugOptions([.showPhysicsShapes, .showJoints])) + world.physicsWorld2D?.isSleepEnabled = false + let positions: [(Vector2, Vector2)] = [ + ([-6, 2.6], [-5, 1.6]), ([0, 2.6], [0.7, 1.6]), ([5, 2.2], [5, 2.2]), + ([-6, 0.1], [-5, 0.1]), ([0, 0.1], [0, -0.4]), ([5, 0.1], [5, 0.1]), + ([-6, -2.2], [-6.7, -2.2]), ([0, -2.2], [0, -2.2]), ([5, -2.6], [5, -1.8]) + ] + for (index, pair) in positions.enumerated() { + let anchorShape = index == 6 ? Shape2DResource.generateBox(width: 1.2, height: 0.8) : .generateCircle(radius: 0.18) + var anchorBody = PhysicsBody2DComponent(shapes: [anchorShape], mass: 1, mode: .static) + anchorBody.debugColor = Color(0.65, 0.7, 0.8, 1) + let a = world.spawn("Anchor \(index)") { anchorBody; Transform(position: Vector3(pair.0, 0)) } + let shape: Shape2DResource + if index == 4 { + shape = .generateCircle(radius: 0.8) + } else if index == 8 { + shape = try .generateCapsule(from: [0, -0.25], to: [0, 0.25], radius: 0.18) + } else { + shape = .generateBox(width: 0.45, height: 0.45) + } + var body = PhysicsBody2DComponent(shapes: [shape], massProperties: .init(mass: 1, inertia: [0, 0, 0.1])) + body.debugColor = index == 0 ? Color(1, 0.57, 0.2, 1) : Color(0.3, 0.7, 1, 1) + if index == 6 { body.gravityScale = 0; body.linearVelocity = [0.5, 0] } + if index == 3 { body.linearVelocity = [0, 1]; body.angularVelocity = 1 } + let b = world.spawn("Mechanism body \(index)") { body; Transform(position: Vector3(pair.1, 0)) } + let descriptor: PhysicsJoint2DDescriptor + switch index { + case 0: descriptor = try PhysicsJoint2DDescriptor.rope(entityA: a, entityB: b).withBreakSettings(.init(forceThreshold: 40)) + case 1: descriptor = try .revolute(entityA: a, entityB: b, settings: demoHinge(1)) + case 2: descriptor = try .prismatic(entityA: a, entityB: b, settings: demoSlider(1)) + case 3: + descriptor = try .weld( + entityA: a, + entityB: b, + settings: .init(frameA: .init(position: [1, 0]), linearSpring: .init(hertz: 2, dampingRatio: 0.3), angularSpring: .init(hertz: 2)) + ) + case 4: descriptor = try .wheel(entityA: a, entityB: b, settings: demoWheel(1)) + case 5: descriptor = try .motor(entityA: a, entityB: b, settings: demoMotor(1)) + case 6: descriptor = try .filter(entityA: a, entityB: b) + case 7: + descriptor = try .mover(entityA: a, entityB: b, settings: .init(linearVelocity: [1, 0], maximumVelocityForce: [20, 20], collideConnected: false)) + default: descriptor = try .pogo(entityA: a, entityB: b, settings: .init(restLength: 0.8, maximumCompressionForce: 100)) + } + session.mechanismOwners.append(world.spawn("Joint \(index)") { PhysicsJoint2DComponent(joint: descriptor) }) + session.targets.append(b) + session.mechanismStarts.append(pair.1) + } +} + +@MainActor +func controlMechanisms(_ session: PhysicsDemoSession) { + guard session.targets.count == 9, session.mechanismOwners.count == 9 else { + return + } + if session.resetRequested { + session.resetRequested = false + for (index, entity) in session.targets.enumerated() { + entity.components[PhysicsBody2DComponent.self]?.setPosition(session.mechanismStarts[index], angle: .radians(0)) + entity.components[PhysicsBody2DComponent.self]?.linearVelocity = index == 6 ? [0.5, 0] : .zero + entity.components[PhysicsBody2DComponent.self]?.angularVelocity = 0 + session.mechanismOwners[index].components[PhysicsJoint2DComponent.self]?.reconnect() + } + return + } + if session.breakRequested { + session.breakRequested = false + session.targets[0].components[PhysicsBody2DComponent.self]?.applyForceToCenter([0, -5000], wake: true) + } + do { + var retuneMover = false + if session.reverseRequested { + session.reverseRequested = false; session.driveDirection *= -1; session.moverDirection *= -1 + try session.mechanismOwners[1].components[PhysicsJoint2DComponent.self]?.updateSettings(demoHinge(session.driveDirection)) + try session.mechanismOwners[2].components[PhysicsJoint2DComponent.self]?.updateSettings(demoSlider(session.driveDirection)) + try session.mechanismOwners[4].components[PhysicsJoint2DComponent.self]?.updateSettings(demoWheel(session.driveDirection)) + try session.mechanismOwners[5].components[PhysicsJoint2DComponent.self]?.updateSettings(demoMotor(session.driveDirection)) + retuneMover = true + } + let x = session.targets[7].components[Transform.self]?.position.x ?? 0 + if (x > 0.8 && session.moverDirection > 0) || (x < -0.8 && session.moverDirection < 0) { session.moverDirection *= -1; retuneMover = true } + if retuneMover { + try session.mechanismOwners[7].components[PhysicsJoint2DComponent.self]?.updateSettings( + MoverJoint2DSettings(linearVelocity: [session.moverDirection, 0], maximumVelocityForce: [20, 20], collideConnected: false) + ) + } + } catch { session.rayStatus = "Tuning failed: \(error)" } + let filter = session.targets[6] + let x = filter.components[Transform.self]?.position.x ?? -6 + let velocity = filter.components[PhysicsBody2DComponent.self]?.linearVelocity.x ?? 0.5 + if (x > -5.2 && velocity > 0) || (x < -6.8 && velocity < 0) { filter.components[PhysicsBody2DComponent.self]?.linearVelocity = [-velocity, 0] } +} + +struct PhysicsMechanismsDemoPane: View { + let session: PhysicsDemoSession + var body: some View { + VStack(spacing: 12) { + HStack(spacing: 18) { + Button("Reverse motors") { session.reverseRequested = true }.accessibilityIdentifier("physics-demo.reverse") + Button("Break rope") { session.breakRequested = true }.accessibilityIdentifier("physics-demo.break") + Button("Repair all") { session.resetRequested = true }.accessibilityIdentifier("physics-demo.repair") + } + Text("Top: rope / hinge / slider · middle: weld / wheel / motor · bottom: filter / mover / pogo") + Text(session.rayStatus) + SceneView(useSceneCameras: true, make: { configurePhysicsDemo(&$0, session: session) }, updateContent: { _, _ in }) + .frameCaptureLabel("Physics2D Mechanisms").id(PhysicsDemoScene.mechanisms) + .frame(maxWidth: .infinity, maxHeight: .infinity) + } + .frame(maxWidth: .infinity, maxHeight: .infinity) + } +} diff --git a/Examples/Technical/Physics2D/Physics2DQueriesDemo.swift b/Examples/Technical/Physics2D/Physics2DQueriesDemo.swift new file mode 100644 index 0000000..b277210 --- /dev/null +++ b/Examples/Technical/Physics2D/Physics2DQueriesDemo.swift @@ -0,0 +1,135 @@ +import AdaEngine +import Math + +@MainActor +enum PhysicsProbeMode: String, CaseIterable { + case cast = "Shape cast", overlap = "Capsule overlap", area = "Area candidates" + var next: Self { self == .cast ? .overlap : self == .overlap ? .area : .cast } +} + +@MainActor +func setupGeometryQueries(in world: World, session: PhysicsDemoSession) throws { + world.insertResource(PhysicsDebugOptions.showPhysicsShapes) + func add(_ name: String, _ shape: Shape2DResource, at position: Vector2 = .zero, layer: UInt64 = 1, sensor: Bool = false) { + var collision = Collision2DComponent(shapes: [shape], mode: sensor ? .trigger : .default, filter: .init(categoryBitMask: CollisionGroup(rawValue: layer))) + collision.debugColor = layer == 2 ? Color(1, 0.57, 0.2, 1) : sensor ? Color(0.2, 0.9, 0.5, 1) : Color(0.3, 0.65, 1, 1) + session.targets.append(world.spawn(name) { collision; Transform(position: Vector3(position, 0)) }) + } + add("Rounded box", try .generateRoundedBox(width: 1.8, height: 1.2, radius: 0.25), at: [-4, 1.6], layer: 2) + add("Capsule", try .generateCapsule(from: [0, -0.6], to: [0, 0.6], radius: 0.45), at: [0, 1.6]) + add("Sensor", .generateBox(width: 0.6, height: 2), at: [-2, 1.6], sensor: true) + add("Segment", try .generateSegment(from: [-0.8, -0.6], to: [0.8, 0.6]), at: [3.7, 1.6]) + add("Rounded triangle", try .generateRoundedPolygon(vertices: [[-0.6, -0.5], [0.6, -0.5], [0, 0.6]], radius: 0.15), at: [1.5, -0.6], layer: 2) + add("Open chain", try .generateChain(points: [[6, -1.6], [3, -2], [-1, -1.3], [-6, -2]])) + add("Loop", try .generateChain(points: [[-0.7, -0.5], [0.7, -0.5], [0.7, 0.5], [-0.7, 0.5]], isLoop: true), at: [5, -0.5]) + add("Loose chain segment", try .generateChainSegment(from: [1, 0], to: [-1, 0], ghostStart: [2, 0], ghostEnd: [-2, 0]), at: [-4, -0.6]) + session.queryShape = try .generateCapsule(from: [0, -0.25], to: [0, 0.25], radius: 0.2) +} + +@MainActor +func updateGeometryQueries(in world: World, session: PhysicsDemoSession) { + guard let physics = world.physicsWorld2D, let shape = session.queryShape else { + return + } + session.probeY = 1.6 + (session.scan ? Math.sin(session.elapsed * 0.7) : 0) + session.probeContact = nil + do { + let mask: CollisionGroup = session.blueOnly ? .default : .all + switch session.probeMode { + case .cast: + let hits = try physics.shapeCast( + shape, + from: Transform(position: [-7, session.probeY, 0]), + to: [7, session.probeY], + query: session.allHits ? .all : .first, + mask: mask, + includeSensors: session.querySensors + ) + session.queryEntities = hits.map(\.entity) + session.queryPoints = hits.map(\.point) + session.probeContact = hits.first.map { [-7 + $0.distance, session.probeY] } + case .overlap: + session.queryEntities = try physics.overlap(shape, at: Transform(position: [0, session.probeY, 0]), mask: mask, includeSensors: session.querySensors).map(\.entity) + session.queryPoints = session.queryEntities.compactMap { $0.components[Transform.self]?.position.xy } + case .area: + session.queryEntities = physics.overlap(in: Rect(x: -6, y: 0.5, width: 12, height: 2.2), mask: mask, includeSensors: session.querySensors).map(\.entity) + session.queryPoints = session.queryEntities.compactMap { $0.components[Transform.self]?.position.xy } + } + session.rayStatus = "\(session.probeMode.rawValue) · \(session.queryEntities.count) hits: " + session.queryEntities.map(\.name).joined(separator: " · ") + } catch { + session.queryEntities.removeAll(); session.queryPoints.removeAll() + session.rayStatus = "Query failed: \(error)" + } +} + +@System(dependencies: [.after(ExtractPhysicsDebugSystem.self)]) +@MainActor +func PhysicsDemoProbeExtract( + _ state: Extract>, + _ shapes: ResMut, + _ data: Res, + _ sorted: Res?> +) { + let session = state.wrappedValue.wrappedValue + if session.scene == .largeWorld { + let state = session.largeWorld + shapes.wrappedValue.addLine(from: state.probeStart, to: state.probeEnd, color: Color(1, 0.8, 0.2, 1)) + } + if session.scene == .characters || session.scene == .largeWorld { + if let character = session.character, let controller = character.components[CharacterController2DComponent.self], + controller.mode == .query, let bottom = character.components[Transform.self]?.position.xy { + shapes.wrappedValue.addCapsule( + from: bottom + [0, controller.settings.radius], + to: bottom + [0, controller.settings.height - controller.settings.radius], + radius: controller.settings.radius, + color: .white + ) + } + return + } + guard session.scene == .queries else { + return + } + if session.probeMode == .area { + let corners: [Vector2] = [[-6, 0.5], [6, 0.5], [6, 2.7], [-6, 2.7]] + for index in 0..<4 { shapes.wrappedValue.addLine(from: corners[index], to: corners[(index + 1) % 4], color: .white) } + } else { + let x: Float = session.probeMode == .cast ? -7 : 0 + shapes.wrappedValue.addCapsule(from: [x, session.probeY - 0.25], to: [x, session.probeY + 0.25], radius: 0.2, color: .white) + if session.probeMode == .cast { + shapes.wrappedValue.addLine(from: [-7, session.probeY], to: [7, session.probeY], color: Color(0.5, 0.6, 0.7, 1)) + if let contact = session.probeContact { + shapes.wrappedValue.addCapsule(from: contact - [0, 0.25], to: contact + [0, 0.25], radius: 0.2, color: Color(1, 0.85, 0.3, 1)) + } + } + } + session.debugDrawState = "lines=\(shapes.lines.count), vertices=\(data.wrappedValue?.lineVertexBuffer.count ?? -1), items=\(sorted.wrappedValue?.items.items.count ?? -1)" + for point in session.queryPoints { + shapes.wrappedValue.addLine(from: point - [0.08, 0], to: point + [0.08, 0], color: .white) + shapes.wrappedValue.addLine(from: point - [0, 0.08], to: point + [0, 0.08], color: .white) + } +} + +struct PhysicsQueriesDemoPane: View { + let session: PhysicsDemoSession + var body: some View { + VStack(spacing: 12) { + HStack(spacing: 14) { + Button(session.probeMode.rawValue) { session.probeMode = session.probeMode.next }.accessibilityIdentifier("physics-demo.query-kind") + Button(session.querySensors ? "Include sensors" : "Solids only") { session.querySensors.toggle() }.accessibilityIdentifier("physics-demo.query-sensors") + Button(session.blueOnly ? "Layer 1 only" : "All layers") { session.blueOnly.toggle() }.accessibilityIdentifier("physics-demo.query-mask") + Button(session.scan ? "Hold probe" : "Animate probe") { session.scan.toggle() }.accessibilityIdentifier("physics-demo.query-scan") + if session.probeMode == .cast { + Button(session.allHits ? "All hits" : "Nearest hit") { session.allHits.toggle() }.accessibilityIdentifier("physics-demo.query-order") + } + } + Text("White probe queries colored colliders. Area mode shows broad-phase AABB candidates.") + Text(session.rayStatus) + SceneView(useSceneCameras: true, make: { configurePhysicsDemo(&$0, session: session) }, updateContent: { _, _ in }) + .frameCaptureLabel("Physics2D Geometry & queries") + .id(PhysicsDemoScene.queries) + .frame(maxWidth: .infinity, maxHeight: .infinity) + } + .frame(maxWidth: .infinity, maxHeight: .infinity) + } +} diff --git a/Examples/Technical/Physics2D/README.md b/Examples/Technical/Physics2D/README.md new file mode 100644 index 0000000..2b85fa9 --- /dev/null +++ b/Examples/Technical/Physics2D/README.md @@ -0,0 +1,61 @@ +# Box2D playground + +Five interactive AdaEngine scenes, using the same physics systems as games: + +- **Raycasts:** a scanning ray, distance-ordered white hit markers, nearest/all + selection and a blue-only collision mask. The orange block is on another layer. +- **Collisions & sensors:** an orange box bounces on a floor while a blue box + crosses a green sensor without a physical response. Live counters distinguish + solid contacts, sensor enter/exit and impact events delivered through ECS. + “Drop box again” repeats the impact. + +- **Geometry & queries:** capsule, rounded box/polygon, segment, open/closed chains + and a loose chain segment. A white capsule sweeps or overlaps the colored + colliders; area mode draws broad-phase candidates. Toggle sensor inclusion, + layer mask, nearest/all and animation. The outlines follow native geometry. + +- **Mechanisms:** a 3x3 grid of rope, hinge, slider, weld, suspension wheel, + pose/velocity motor, pair filter, mover and pogo rigs. Reverse live motors, + overload the rope to emit a break event, and repair the connections. Pogo is + experimental in upstream Box2D 3.2. +- **Characters:** left/stop/right, jump, reset and query/dynamic mode controls. + The query capsule is virtual; the native dynamic capsule pushes the orange + crate. A moving platform and ramp exercise support and slope behavior. + +On macOS run `./Examples/Technical/Physics2D/script/build_and_run.sh`. Use `--verify` to launch +all scenes, exercise query/character/motor controls, check live event counters and +save real GPU frames plus `verification.json` in `Examples/Technical/Physics2D/dist/proof/`. + +Verification also checks both jumps, physical crate movement, native collider +cleanup after a mode switch, repair, and scene re-entry. GPU frames include +`geometry-cast.png`, `geometry-area.png`, `mechanisms.png`, +`character-query.png`, and `character-dynamic.png`. + +Deterministic simulation without a window: + +```sh +swift run --package-path Examples/Technical/Physics2D --scratch-path /tmp/adaengine-box2d-3.2-build Physics2DDemo --validate +``` + +## Query and event semantics + +`raycast(from:to:)` casts a finite segment and returns distance-sorted hits. +`.first` means nearest. Invalid/zero-length input and misses return an empty +array. Initial overlaps are ignored. `raycast(from: Ray, maxDistance:)` uses +its origin and normalized XY direction; the default range is 10,000 world units. +Masks select shape categories; the native Box2D query filter also applies. + +`CollisionEvents.Began` / `.Ended` include `isSensor`; for sensors `entityA` +is the sensor and the impulse is zero. `.Hit` contains the impact point, normal, +approach speed and the contact's total normal impulse for the current step. +Native shape pairs produce separate events, including compound bodies. +End events whose entities/shapes have already been destroyed are skipped. +A fast visitor swept through a sensor emits begin in that step and end in the next. + +Subscribe through `world.subscribe(to:)` for immediate delivery. `Events` +receives the same events through the world-local ECS buffer on the next frame. +The physics plugin installs the event lifecycle if it has not already been set up. + +The Advanced tab exercises live body settings, native CCD, conveyors, rolling and material mixing, wind/still-air drag, contact point snapshots and solver presets. `--validate` and native `--verify` include these controls; the latter writes `proof/advanced-physics.png` from the actual scene camera. + +The Large worlds tab demonstrates exact Double physics at 1e9, a one-millimeter target nudge, camera/render-origin shifts, stable contacts/global hinges and both character modes. Native `--verify` captures before/after origin frames and the dynamic character, and checks scene re-entry without stale contact handles. diff --git a/Examples/Technical/Physics2D/script/build_and_run.sh b/Examples/Technical/Physics2D/script/build_and_run.sh new file mode 100755 index 0000000..70232af --- /dev/null +++ b/Examples/Technical/Physics2D/script/build_and_run.sh @@ -0,0 +1,68 @@ +#!/usr/bin/env bash +set -euo pipefail +MODE="${1:-run}" +DEMO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +REPO_ROOT="$DEMO_ROOT" +BUILD_PATH="${ADAENGINE_PHYSICS2D_BUILD_PATH:-/tmp/adaengine-box2d-3.2-build}" +mkdir -p "$BUILD_PATH" +APP="$DEMO_ROOT/dist/Physics2DDemo.app" +export ADAENGINE_DISABLE_SWAN=1 +export ADAENGINE_SKIP_SWIFTLINT=1 +case "$MODE" in run|--verify|--debug|--logs|--telemetry) ;; *) echo "usage: $0 [run|--verify|--debug|--logs|--telemetry]" >&2; exit 2 ;; esac +for demo_pid in $(pgrep -f "$APP/Contents/MacOS/Physics2DDemo" || true); do + demo_command="$(ps -p "$demo_pid" -o command= || true)" + if [[ "$demo_command" == "$APP/Contents/MacOS/Physics2DDemo" || "$demo_command" == "$APP/Contents/MacOS/Physics2DDemo "* ]]; then + kill "$demo_pid" + fi +done +mkdir -p "$DEMO_ROOT/dist" +if ! swift build --package-path "$REPO_ROOT" --scratch-path "$BUILD_PATH" --disable-sandbox --product Physics2DDemo > "$DEMO_ROOT/dist/build.log" 2>&1; then + tail -60 "$DEMO_ROOT/dist/build.log" + exit 1 +fi +BIN="$(swift build --package-path "$REPO_ROOT" --scratch-path "$BUILD_PATH" --disable-sandbox --show-bin-path)" +mkdir -p "$APP/Contents/MacOS" "$APP/Contents/Resources" +cp "$BIN/Physics2DDemo" "$APP/Contents/MacOS/" +for resource in "$BIN"/*.bundle; do + [[ -d "$resource" ]] && cp -R "$resource" "$APP/" +done +cat > "$APP/Contents/Info.plist" <<'PLIST' + + + +CFBundleExecutablePhysics2DDemo +CFBundleIdentifierorg.adaengine.demo.physics2d +CFBundleNameAdaEngine Box2D playground +CFBundlePackageTypeAPPL +LSMinimumSystemVersion15.0 +NSPrincipalClassNSApplication + +PLIST +: > "$DEMO_ROOT/dist/runtime.log" +rm -f "$DEMO_ROOT/dist/proof/verification.json" +if [[ "$MODE" == --debug ]]; then + /usr/bin/lldb -- "$APP/Contents/MacOS/Physics2DDemo" + exit +fi +OPEN_ARGS=(-n "$APP" --stdout "$DEMO_ROOT/dist/runtime.log" --stderr "$DEMO_ROOT/dist/runtime.log" --args) +if [[ "$MODE" == --verify ]]; then OPEN_ARGS+=(--verify --proof-directory "$DEMO_ROOT/dist/proof"); fi +/usr/bin/open "${OPEN_ARGS[@]}" +case "$MODE" in + --verify) + for attempt in {1..60}; do + if rg -q 'Physics2DDemo verification PASS' "$DEMO_ROOT/dist/runtime.log"; then + cat "$DEMO_ROOT/dist/runtime.log" + exit 0 + fi + if rg -q 'verification FAIL|Fatal error|BOX2D ASSERTION' "$DEMO_ROOT/dist/runtime.log"; then + tail -40 "$DEMO_ROOT/dist/runtime.log" + exit 1 + fi + sleep 1 + done + tail -40 "$DEMO_ROOT/dist/runtime.log" + echo 'Physics2DDemo verification timed out' >&2 + exit 1 + ;; + --logs|--telemetry) /usr/bin/log stream --info --style compact --predicate 'process == "Physics2DDemo"' ;; +esac diff --git a/Examples/Technical/README.md b/Examples/Technical/README.md index 8e081d1..1b6fe44 100644 --- a/Examples/Technical/README.md +++ b/Examples/Technical/README.md @@ -1,11 +1,22 @@ # Technical examples -Developer studies and acceptance projects live here. Clone the repository and open -the desired project directly; these are not beginner recommendations or sample games. +Developer studies and acceptance projects live here. Clone the repository and follow each README to run its SwiftPM package, XcodeGen +app or Studio project. These are not beginner recommendations or sample games; +not every technical tool is an editable Studio game project. | Project | Focus | | --- | --- | | [Procedural Skeleton](ProceduralSkeleton/README.md) | Explicit AdaScript rig, vertex weights and a walk clip; precompiled builder and interpreted VM | +| [A2UIForm](A2UIForm/README.md) | Streamed agent forms and native control validation | +| [AndroidDemo](AndroidDemo/README.md) | Native Android window, input and resource smoke test | +| [LinuxSmoke](LinuxSmoke/README.md) | Linux X11/Vulkan window and input smoke test | +| [MovieMaker](MovieMaker/README.md) | Native frame and audio recording | +| [Navigation](Navigation/README.md) | Navmesh baking, patrol scripting and physics movement | +| [Physics2D](Physics2D/README.md) | Box2D queries, mechanisms, characters and large worlds | +| [SpineNative](SpineNative/README.md) | Native Spine rendering and MCP GPU capture | +| [SpinePreview](SpinePreview/README.md) | Headless Spine pose export and browser inspection | +| [Sponza](Sponza/README.md) | External-dataset renderer and lighting diagnostics | +| [SpriteInstancingValidation](SpriteInstancingValidation/README.md) | Portable GPU sprite readback validation | This section is intentionally separate from `catalog.json`. Studio and website catalogs consume only its `items`, and the release workflow packages only those @@ -15,3 +26,7 @@ new public catalog schema or changes to catalog consumers. Commit the small assets needed to open a project. Keep build outputs, per-frame captures, logs, workspace state and generated distributions ignored locally. + +Swift packages pin a compatible engine revision. Their README commands run from the AdaExamples root. No engine checkout is required for normal SwiftPM dependency resolution; platform preparation tools, optional asset preparation and Windows capture overrides may require `ADAENGINE_ROOT`. + +Developer checks: `python scripts/validate_catalog.py`, `python -m unittest discover -s scripts -p "test_*.py"` and `python scripts/validate_technical_packages.py --engine-root /path/to/Ada`. The last command checks package manifests, source/resource paths and declared engine products without downloading dependencies or proving a native app launch. diff --git a/Examples/Technical/SpineNative/.gitignore b/Examples/Technical/SpineNative/.gitignore new file mode 100644 index 0000000..fd14c91 --- /dev/null +++ b/Examples/Technical/SpineNative/.gitignore @@ -0,0 +1,6 @@ +.build/ +.swiftpm/ +dist/ +*.xcodeproj/ +__pycache__/ +Package.resolved diff --git a/Examples/Technical/SpineNative/Package.swift b/Examples/Technical/SpineNative/Package.swift new file mode 100644 index 0000000..0a82cc2 --- /dev/null +++ b/Examples/Technical/SpineNative/Package.swift @@ -0,0 +1,37 @@ +// swift-tools-version: 6.2 +import Foundation +import PackageDescription + +let enginePath = ProcessInfo.processInfo.environment["ADAENGINE_PACKAGE_PATH"] +let engineDependency: Package.Dependency = enginePath.map { .package(name: "AdaEngine", path: $0) } + ?? .package(url: "https://github.com/AdaEngine/AdaEngine.git", revision: "b43d7e8f2f03e124a62b77499f7c2949a078dc27") + +let mcpPath = ProcessInfo.processInfo.environment["ADA_MCP_LOCAL_PATH"] +let mcpDependency: Package.Dependency = mcpPath.map { .package(name: "AdaMCP", path: $0) } + ?? .package(url: "https://github.com/AdaEngine/AdaMCP.git", exact: "0.2.0") + +let package = Package( + name: "SpineNative", + platforms: [.macOS(.v15), .iOS(.v18)], + products: [.executable(name: "SpineNative", targets: ["SpineNative"])], + dependencies: [ + engineDependency, + mcpDependency + ], + targets: [ + .executableTarget( + name: "SpineNative", + dependencies: [ + .product(name: "AdaEngine", package: "adaengine"), + .product(name: "AdaSpine", package: "adaengine"), + .product(name: "AdaMCPPlugin", package: "AdaMCP") + ], + path: ".", + exclude: ["README.md", "capture.py"] + (FileManager.default.fileExists(atPath: "dist") ? ["dist"] : []), + sources: [ + "SpineNativeApp.swift" + ], + swiftSettings: [.enableUpcomingFeature("MemberImportVisibility"), .strictMemorySafety()] + ) + ] +) diff --git a/Examples/Technical/SpineNative/README.md b/Examples/Technical/SpineNative/README.md new file mode 100644 index 0000000..73ee7dd --- /dev/null +++ b/Examples/Technical/SpineNative/README.md @@ -0,0 +1,41 @@ +# Native Spine demo + +This separate Swift package runs `SpinePlugin` in an AdaEngine native window. +It uses the licensed example assets beside `../SpinePreview/Assets`. + +Run from an AdaExamples checkout: + +``` +swift run --package-path Examples/Technical/SpineNative SpineNative +``` + +On Windows use the native toolchain/dependencies prepared by +`$ADAENGINE_ROOT/script/build_studio_windows.ps1`. Set `TINT_EXECUTABLE` to the verified Tint +binary and `ADA_MCP_LOCAL_PATH` to the Windows AdaMCP package prepared by +`$ADAENGINE_ROOT/script/ensure_windows_mcp.py`. `ADAENGINE_PACKAGE_PATH` must point to this +engine checkout, and `ADAENGINE_GRAVITY_PACKAGE_PATH` can select the prepared +Windows Gravity package. Do not enable `ADAENGINE_HEADLESS`. + +Windows capture requires the AdaMCP compatibility package with asynchronous +GPU readback; unpatched AdaMCP 0.2.0 uses the unsupported synchronous texture +accessor. The compatible MCP holds exclusive world access during capture, since a +native frame must not replace the target while its readback is pending. + +AdaMCP listens at `http://127.0.0.1:2511/mcp` so Studio can keep port 2510. +Discovery is disabled because the endpoint is explicit. +Use `spine.pose` (`animation`, `time`, `playing`) followed by +`render.capture_screenshot` for repeatable captures from the actual engine GPU +output. `runtime.resume` resumes the engine after capture pauses it. + +With the app running, capture three poses and optionally a walk sequence: + +``` +python Examples/Technical/SpineNative/capture.py --frames 30 +``` + +The capture report includes backend/render-graph metadata, camera, native +dimensions, original GPU capture paths and exact pose times. + +Validated on Windows with NVIDIA RTX 4070 / D3D12: native 1000×760 PNGs for +walk, run and jump, followed by 32-frame and 90-frame capture sequences. These +use the actual Spine render systems, GPU textures and AdaMCP capture service. diff --git a/Examples/Technical/SpineNative/SpineNativeApp.swift b/Examples/Technical/SpineNative/SpineNativeApp.swift new file mode 100644 index 0000000..0e57370 --- /dev/null +++ b/Examples/Technical/SpineNative/SpineNativeApp.swift @@ -0,0 +1,141 @@ +import AdaEngine +import AdaMCPCore +import AdaMCPPlugin +import AdaSpine +import Foundation +import MCP + +/// Runs the production Spine render systems in a native window, with AdaMCP GPU capture. +@main +struct SpineNativeApp: App { + var body: some AppScene { + DefaultAppWindow() + .addPlugins(SpinePlugin(), SpineDemoPlugin()) + .window(with: UIWindow.Configuration( + title: "AdaEngine · Spine 4.2 · native GPU", + frame: Rect(x: 100, y: 80, width: 1000, height: 760) + )) + } +} + +private struct SpineDemoPlugin: Plugin { + func setup(in app: borrowing AppWorlds) { + app.addSystem(StartupSpineDemoSystem.self, on: .startup) + let worlds = copy app + app.addPlugin(MCPPlugin(configuration: .init( + port: 2511, + serverName: "AdaEngine Spine native demo", + additionalTools: { + [Tool( + name: "spine.pose", + description: "Select a Spine animation and exact time, optionally continuing playback.", + inputSchema: .object([ + "type": "object", + "properties": .object([ + "animation": .object(["type": "string"]), + "time": .object(["type": "number", "minimum": 0]), + "playing": .object(["type": "boolean"]), + ]), + "required": ["animation"], + ]) + )] + }, + additionalToolHandler: { name, arguments in + guard name == "spine.pose" else { return nil } + do { + let message = try await worlds.withWorldAccess { + try selectSpinePose(in: worlds.main, arguments: arguments) + } + return .init(content: [.text(text: message, annotations: nil, _meta: nil)]) + } catch { + return .init(content: [.text(text: String(describing: error), annotations: nil, _meta: nil)], isError: true) + } + }, + enableDiscovery: false + ))) + } +} + +@MainActor +private func selectSpinePose(in world: World, arguments: [String: Value]) throws -> String { + guard case let .string(clip)? = arguments["animation"], + let entity = world.getEntities().first(where: { $0.components[SpineAnimation.self] != nil }), + var animation = entity.components[SpineAnimation.self] else { + throw SpineError.invalidData("Spine character is not ready.") + } + let time: Float + switch arguments["time"] { + case let .double(value): time = Float(value) + case let .int(value): time = Float(value) + default: time = 0 + } + guard time.isFinite, time >= 0, animation.player.animationNames.contains(clip) else { + throw SpineError.invalidData("Select an existing animation and a finite, non-negative time.") + } + animation.player.resetToSetupPose() + try animation.player.play(clip, repeats: clip != "jump", transitionDuration: 0) + animation.player.advance(by: time) + animation.isPaused = arguments["playing"] != .bool(true) + entity.components[SpineAnimation.self] = animation + let vertices = animation.player.snapshot().flatMap(\.vertices) + if let minX = vertices.map(\.x).min(), let maxX = vertices.map(\.x).max(), + let minY = vertices.map(\.y).min(), let maxY = vertices.map(\.y).max(), + let owner = entity.components[Transform.self], + let cameraEntity = world.getEntities().first(where: { $0.components[Camera.self] != nil }), + var camera = cameraEntity.components[Camera.self] { + camera.projection = .custom(SpineDemoProjection(center: [ + owner.position.x + (minX + maxX) / 2, owner.position.y + (minY + maxY) / 2, + ])) + cameraEntity.components[Camera.self] = camera + } + return "\(clip) at \(time)s; bones=\(animation.player.boneSnapshot().count)" +} + +@System +@MainActor +func StartupSpineDemo(_ context: WorldUpdateContext) async { + do { + let demoDirectory = URL(fileURLWithPath: #filePath).deletingLastPathComponent() + let assets = demoDirectory.appendingPathComponent("../SpinePreview/Assets").standardizedFileURL + let image = try await AssetsManager.load(Image.self, at: assets.appendingPathComponent("spineboy.png").path) + guard let sourceImage = image.asset else { throw SpineError.invalidData("Atlas image is not loaded.") } + let texture = AssetHandle(Texture2D(image: sourceImage, samplerDescription: .init(minFilter: .linear, magFilter: .linear))) + let skeleton = try SpineSkeleton( + skeleton: Data(contentsOf: assets.appendingPathComponent("spineboy-pro.skel")), + atlas: String(contentsOf: assets.appendingPathComponent("spineboy.atlas"), encoding: .utf8), + textures: [texture], + format: .binary + ) + let animation = try SpineAnimation(skeleton: skeleton) + try animation.player.play("walk", transitionDuration: 0) + context.world.spawn("Spineboy") { + animation + Transform(position: [-50, -280, 0]) + NoFrustumCulling() + } + var camera = Camera() + camera.projection = .custom(SpineDemoProjection()) + camera.backgroundColor = Color(0.035, 0.055, 0.10, 1) + context.world.spawn("Spine Camera") { + camera + Transform() + GlobalViewUniform() + VisibleEntities() + Visibility.visible + CameraRenderGraph(subgraphLabel: .main2D, inputSlot: Main2DRenderNode.InputNode.view) + } + print("[SpineNative] Ready: native renderer; AdaMCP http://127.0.0.1:2511/mcp") + } catch { + print("[SpineNative] Failed to load character: \(error)") + } +} + +private struct SpineDemoProjection: CameraProjection { + var center: Vector2 = [15, 60] + var near: Float { -1 } + var far: Float { 1000 } + func makeClipView() -> Transform3D { + Transform3D(scale: [2 / 1000, 2 / 760, 0.001]) * Transform3D(translation: [-center.x, -center.y, 0]) + } + mutating func updateView(width: Float, height: Float) {} +} diff --git a/Examples/Technical/SpineNative/capture.py b/Examples/Technical/SpineNative/capture.py new file mode 100644 index 0000000..c96f4fb --- /dev/null +++ b/Examples/Technical/SpineNative/capture.py @@ -0,0 +1,85 @@ +"""Capture native engine pixels through AdaMCP, with no browser renderer.""" +import argparse +import json +from pathlib import Path +import shutil +from time import sleep +import urllib.request + + +class MCP: + def __init__(self, endpoint): + self.endpoint = endpoint + self.session = None + self.sequence = 0 + self.request("initialize", { + "protocolVersion": "2024-11-05", "capabilities": {}, + "clientInfo": {"name": "SpineNative capture", "version": "1.0"}, + }) + + def request(self, method, params): + self.sequence += 1 + headers = {"Content-Type": "application/json", "Accept": "application/json, text/event-stream"} + if self.session: + headers["Mcp-Session-Id"] = self.session + request = urllib.request.Request(self.endpoint, headers=headers, data=json.dumps({ + "jsonrpc": "2.0", "id": self.sequence, "method": method, "params": params, + }).encode()) + with urllib.request.urlopen(request, timeout=60) as response: + self.session = response.headers.get("Mcp-Session-Id", self.session) + body = response.read().decode() + if body.startswith("event:") or body.startswith("data:"): + body = next(line[5:].strip() for line in body.splitlines() if line.startswith("data:")) + reply = json.loads(body) + if "error" in reply: + raise RuntimeError(reply["error"]) + return reply["result"] + + def tool(self, name, **arguments): + result = self.request("tools/call", {"name": name, "arguments": arguments}) + if result.get("isError"): + raise RuntimeError(result) + text = next(item["text"] for item in result["content"] if item["type"] == "text") + try: + return json.loads(text) + except json.JSONDecodeError: + return text + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("output", type=Path) + parser.add_argument("--endpoint", default="http://127.0.0.1:2511/mcp") + parser.add_argument("--frames", type=int, default=0, help="Also capture this many walk frames at 20 fps.") + args = parser.parse_args() + args.output.mkdir(parents=True, exist_ok=True) + client = MCP(args.endpoint) + report = {"renderGraph": client.tool("render_graph.get"), "captures": []} + cameras = [camera for camera in report["renderGraph"]["cameras"] if camera["isActive"]] + if len(cameras) != 1: + raise RuntimeError("This demo expects exactly one active render camera.") + camera_id = cameras[0]["entityId"] + client.tool("runtime.pause", reason="Repeatable native Spine capture") + poses = [("walk", 0.3), ("run", 0.2), ("jump", 0.35)] + poses += [("walk", index / 20) for index in range(args.frames)] + try: + for index, (animation, time) in enumerate(poses): + client.tool("spine.pose", animation=animation, time=time, playing=False) + # Transform propagation and camera preparation run in successive phases. + client.tool("runtime.step_frame", frames=2) + capture = client.tool("render.capture_screenshot", cameraEntityId=camera_id) + if capture["width"] <= 1 or capture["height"] <= 1: + raise RuntimeError(f"Empty native capture: {capture}") + name = f"{animation}.png" if index < 3 else f"frame-{index - 3:03d}.png" + shutil.copy2(capture["path"], args.output / name) + report["captures"].append(dict(capture, animation=animation, time=time, savedAs=name)) + print(f"{name}: {capture['width']}x{capture['height']}", flush=True) + sleep(0.15) + finally: + (args.output / "capture-report.json").write_text(json.dumps(report, indent=2), encoding="utf-8") + client.tool("spine.pose", animation="walk", time=0, playing=True) + client.tool("runtime.resume") + + +if __name__ == "__main__": + main() diff --git a/Examples/Technical/SpinePreview/.gitignore b/Examples/Technical/SpinePreview/.gitignore new file mode 100644 index 0000000..fd14c91 --- /dev/null +++ b/Examples/Technical/SpinePreview/.gitignore @@ -0,0 +1,6 @@ +.build/ +.swiftpm/ +dist/ +*.xcodeproj/ +__pycache__/ +Package.resolved diff --git a/Examples/Technical/SpinePreview/Assets/SpineRuntime-LICENSE.txt b/Examples/Technical/SpinePreview/Assets/SpineRuntime-LICENSE.txt new file mode 100644 index 0000000..517ff9f --- /dev/null +++ b/Examples/Technical/SpinePreview/Assets/SpineRuntime-LICENSE.txt @@ -0,0 +1,26 @@ +Spine Runtimes License Agreement +Last updated April 5, 2025. Replaces all prior versions. + +Copyright (c) 2013-2025, Esoteric Software LLC + +Integration of the Spine Runtimes into software or otherwise creating +derivative works of the Spine Runtimes is permitted under the terms and +conditions of Section 2 of the Spine Editor License Agreement: +https://esotericsoftware.com/spine-editor-license + +Otherwise, it is permitted to integrate the Spine Runtimes into software +or otherwise create derivative works of the Spine Runtimes (collectively, +"Products"), provided that each user of the Products must obtain their own +Spine Editor license and redistribution of the Products in any form must +include this license and copyright notice. + +THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, +BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Examples/Technical/SpinePreview/Assets/UPSTREAM.md b/Examples/Technical/SpinePreview/Assets/UPSTREAM.md new file mode 100644 index 0000000..432fdd3 --- /dev/null +++ b/Examples/Technical/SpinePreview/Assets/UPSTREAM.md @@ -0,0 +1,5 @@ +Spineboy binary skeleton, atlas and image are unmodified official Spine 4.2 example assets. + +https://github.com/EsotericSoftware/spine-runtimes/tree/e7dc1435fa4a0083ab431f1b28e083c14a1f5c68/examples/spineboy/export + +Copyright Esoteric Software LLC. See SpineRuntime-LICENSE.txt. diff --git a/Examples/Technical/SpinePreview/Assets/preview.html b/Examples/Technical/SpinePreview/Assets/preview.html new file mode 100644 index 0000000..ab2726d --- /dev/null +++ b/Examples/Technical/SpinePreview/Assets/preview.html @@ -0,0 +1,75 @@ + + + + + +AdaEngine · Spine 2D + + + +

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