@rosetears/aili-pi 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (531) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +109 -0
  3. package/THIRD_PARTY_NOTICES.md +64 -0
  4. package/extensions/index.ts +6 -0
  5. package/install.sh +5 -0
  6. package/manifests/adapter-evidence.json +45 -0
  7. package/manifests/capabilities.json +124 -0
  8. package/manifests/live-verification.json +26 -0
  9. package/manifests/provenance.json +71 -0
  10. package/manifests/roles.json +474 -0
  11. package/manifests/sbom.json +7797 -0
  12. package/manifests/skill-compatibility.json +8100 -0
  13. package/manifests/subagent-provenance.json +37 -0
  14. package/package.json +91 -0
  15. package/prompts/build.md +8 -0
  16. package/prompts/define.md +8 -0
  17. package/prompts/ideate.md +8 -0
  18. package/prompts/local-review.md +8 -0
  19. package/prompts/ship.md +8 -0
  20. package/roles/agent-evaluator.md +47 -0
  21. package/roles/ai-regression-scout.md +47 -0
  22. package/roles/browser-qa-runner.md +47 -0
  23. package/roles/code-reviewer.md +47 -0
  24. package/roles/code-scout.md +47 -0
  25. package/roles/convergence-reviewer.md +55 -0
  26. package/roles/doc-researcher.md +47 -0
  27. package/roles/e2e-artifact-runner.md +47 -0
  28. package/roles/implementer.md +47 -0
  29. package/roles/opensource-sanitizer.md +47 -0
  30. package/roles/plan-auditor.md +47 -0
  31. package/roles/pr-test-analyzer.md +47 -0
  32. package/roles/security-auditor.md +47 -0
  33. package/roles/silent-failure-reviewer.md +47 -0
  34. package/roles/spec-miner.md +47 -0
  35. package/roles/test-coverage-reviewer.md +47 -0
  36. package/roles/test-engineer.md +48 -0
  37. package/roles/web-performance-auditor.md +47 -0
  38. package/roles/web-researcher.md +47 -0
  39. package/scripts/apply-adapter-evidence.ts +73 -0
  40. package/scripts/bootstrap.sh +180 -0
  41. package/scripts/generate-provenance.ts +143 -0
  42. package/scripts/local-package-e2e.ts +51 -0
  43. package/scripts/sync-roles.ts +213 -0
  44. package/scripts/sync-skills.ts +356 -0
  45. package/scripts/validate-runtime.ts +11 -0
  46. package/skills/academic-paper-review/SKILL.md +81 -0
  47. package/skills/agents-md-initialization/SKILL.md +121 -0
  48. package/skills/agents-md-initialization/references/agents-template.md +83 -0
  49. package/skills/agents-md-initialization/references/agents_md.py +215 -0
  50. package/skills/ai-regression-scout/SKILL.md +24 -0
  51. package/skills/aili-delivery-flow/SKILL.md +125 -0
  52. package/skills/aili-delivery-flow/references/artifact-contracts.md +138 -0
  53. package/skills/aili-delivery-flow/references/backend-routing.md +40 -0
  54. package/skills/aili-delivery-flow/references/build-execution-loop.md +113 -0
  55. package/skills/aili-delivery-flow/references/build-goal-mode.md +3 -0
  56. package/skills/aili-delivery-flow/references/direct-vs-delegated-work.md +38 -0
  57. package/skills/aili-delivery-flow/references/implementation-packages.md +54 -0
  58. package/skills/aili-delivery-flow/references/lifecycle.md +127 -0
  59. package/skills/aili-delivery-flow/references/protocols/acceptance-test-plan.md +18 -0
  60. package/skills/aili-delivery-flow/references/protocols/alignment-questionnaire.md +10 -0
  61. package/skills/aili-delivery-flow/references/protocols/closeout-report.md +101 -0
  62. package/skills/aili-delivery-flow/references/protocols/compact-evidence-pack.md +46 -0
  63. package/skills/aili-delivery-flow/references/protocols/idea-brief.md +10 -0
  64. package/skills/aili-delivery-flow/references/protocols/implementation-package.md +53 -0
  65. package/skills/aili-delivery-flow/references/protocols/research-evidence-pack.md +19 -0
  66. package/skills/aili-delivery-flow/references/protocols/review-report.md +7 -0
  67. package/skills/aili-delivery-flow/references/protocols/spec-draft.md +12 -0
  68. package/skills/aili-delivery-flow/references/protocols/subagent-result.md +60 -0
  69. package/skills/aili-delivery-flow/references/protocols/subagent-task-packet.md +29 -0
  70. package/skills/aili-delivery-flow/references/protocols/worktree-context.md +109 -0
  71. package/skills/aili-delivery-flow/references/questionnaire-policy.md +62 -0
  72. package/skills/aili-delivery-flow/references/review-repair-loop.md +16 -0
  73. package/skills/aili-delivery-flow/references/test-document-policy.md +35 -0
  74. package/skills/android-native-dev/SKILL.md +722 -0
  75. package/skills/android-native-dev/references/accessibility.md +209 -0
  76. package/skills/android-native-dev/references/adaptive-screens.md +231 -0
  77. package/skills/android-native-dev/references/design-style-guide.md +365 -0
  78. package/skills/android-native-dev/references/functional-requirements.md +229 -0
  79. package/skills/android-native-dev/references/motion-system.md +203 -0
  80. package/skills/android-native-dev/references/performance-stability.md +223 -0
  81. package/skills/android-native-dev/references/privacy-security.md +244 -0
  82. package/skills/android-native-dev/references/testing.md +554 -0
  83. package/skills/android-native-dev/references/visual-design.md +246 -0
  84. package/skills/api-and-interface-design/SKILL.md +318 -0
  85. package/skills/browser-qa/SKILL.md +32 -0
  86. package/skills/browser-testing-with-devtools/SKILL.md +323 -0
  87. package/skills/build-failure-repair/SKILL.md +49 -0
  88. package/skills/chart-visualization/SKILL.md +73 -0
  89. package/skills/ci-cd-and-automation/SKILL.md +353 -0
  90. package/skills/code-review-and-quality/SKILL.md +375 -0
  91. package/skills/code-review-quality-gates/SKILL.md +132 -0
  92. package/skills/code-simplification/SKILL.md +371 -0
  93. package/skills/comment-accuracy-review/SKILL.md +37 -0
  94. package/skills/consulting-analysis/SKILL.md +69 -0
  95. package/skills/context-engineering/SKILL.md +375 -0
  96. package/skills/coverage-review/SKILL.md +24 -0
  97. package/skills/data-analysis/SKILL.md +74 -0
  98. package/skills/deprecation-and-migration/SKILL.md +222 -0
  99. package/skills/documentation-and-adrs/SKILL.md +330 -0
  100. package/skills/e2e-artifact-handling/SKILL.md +30 -0
  101. package/skills/evidence-scoped-retrospective/SKILL.md +156 -0
  102. package/skills/explain-by-allegory/SKILL.md +99 -0
  103. package/skills/flutter-dev/SKILL.md +162 -0
  104. package/skills/flutter-dev/references/animations.md +497 -0
  105. package/skills/flutter-dev/references/bloc-state.md +281 -0
  106. package/skills/flutter-dev/references/forms.md +656 -0
  107. package/skills/flutter-dev/references/gorouter-navigation.md +257 -0
  108. package/skills/flutter-dev/references/localization.md +510 -0
  109. package/skills/flutter-dev/references/networking.md +566 -0
  110. package/skills/flutter-dev/references/performance.md +305 -0
  111. package/skills/flutter-dev/references/platform-specific.md +417 -0
  112. package/skills/flutter-dev/references/project-structure.md +273 -0
  113. package/skills/flutter-dev/references/riverpod-state.md +232 -0
  114. package/skills/flutter-dev/references/testing.md +364 -0
  115. package/skills/flutter-dev/references/widget-patterns.md +233 -0
  116. package/skills/frontend-dev/SKILL.md +468 -0
  117. package/skills/frontend-dev/canvas-fonts/ArsenalSC-OFL.txt +93 -0
  118. package/skills/frontend-dev/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
  119. package/skills/frontend-dev/canvas-fonts/BigShoulders-Bold.ttf +0 -0
  120. package/skills/frontend-dev/canvas-fonts/BigShoulders-OFL.txt +93 -0
  121. package/skills/frontend-dev/canvas-fonts/BigShoulders-Regular.ttf +0 -0
  122. package/skills/frontend-dev/canvas-fonts/Boldonse-OFL.txt +93 -0
  123. package/skills/frontend-dev/canvas-fonts/Boldonse-Regular.ttf +0 -0
  124. package/skills/frontend-dev/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
  125. package/skills/frontend-dev/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
  126. package/skills/frontend-dev/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
  127. package/skills/frontend-dev/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
  128. package/skills/frontend-dev/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
  129. package/skills/frontend-dev/canvas-fonts/CrimsonPro-OFL.txt +93 -0
  130. package/skills/frontend-dev/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
  131. package/skills/frontend-dev/canvas-fonts/DMMono-OFL.txt +93 -0
  132. package/skills/frontend-dev/canvas-fonts/DMMono-Regular.ttf +0 -0
  133. package/skills/frontend-dev/canvas-fonts/EricaOne-OFL.txt +94 -0
  134. package/skills/frontend-dev/canvas-fonts/EricaOne-Regular.ttf +0 -0
  135. package/skills/frontend-dev/canvas-fonts/GeistMono-Bold.ttf +0 -0
  136. package/skills/frontend-dev/canvas-fonts/GeistMono-OFL.txt +93 -0
  137. package/skills/frontend-dev/canvas-fonts/GeistMono-Regular.ttf +0 -0
  138. package/skills/frontend-dev/canvas-fonts/Gloock-OFL.txt +93 -0
  139. package/skills/frontend-dev/canvas-fonts/Gloock-Regular.ttf +0 -0
  140. package/skills/frontend-dev/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
  141. package/skills/frontend-dev/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
  142. package/skills/frontend-dev/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
  143. package/skills/frontend-dev/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
  144. package/skills/frontend-dev/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
  145. package/skills/frontend-dev/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
  146. package/skills/frontend-dev/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
  147. package/skills/frontend-dev/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
  148. package/skills/frontend-dev/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
  149. package/skills/frontend-dev/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
  150. package/skills/frontend-dev/canvas-fonts/InstrumentSans-OFL.txt +93 -0
  151. package/skills/frontend-dev/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
  152. package/skills/frontend-dev/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
  153. package/skills/frontend-dev/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
  154. package/skills/frontend-dev/canvas-fonts/Italiana-OFL.txt +93 -0
  155. package/skills/frontend-dev/canvas-fonts/Italiana-Regular.ttf +0 -0
  156. package/skills/frontend-dev/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
  157. package/skills/frontend-dev/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
  158. package/skills/frontend-dev/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
  159. package/skills/frontend-dev/canvas-fonts/Jura-Light.ttf +0 -0
  160. package/skills/frontend-dev/canvas-fonts/Jura-Medium.ttf +0 -0
  161. package/skills/frontend-dev/canvas-fonts/Jura-OFL.txt +93 -0
  162. package/skills/frontend-dev/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
  163. package/skills/frontend-dev/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
  164. package/skills/frontend-dev/canvas-fonts/Lora-Bold.ttf +0 -0
  165. package/skills/frontend-dev/canvas-fonts/Lora-BoldItalic.ttf +0 -0
  166. package/skills/frontend-dev/canvas-fonts/Lora-Italic.ttf +0 -0
  167. package/skills/frontend-dev/canvas-fonts/Lora-OFL.txt +93 -0
  168. package/skills/frontend-dev/canvas-fonts/Lora-Regular.ttf +0 -0
  169. package/skills/frontend-dev/canvas-fonts/NationalPark-Bold.ttf +0 -0
  170. package/skills/frontend-dev/canvas-fonts/NationalPark-OFL.txt +93 -0
  171. package/skills/frontend-dev/canvas-fonts/NationalPark-Regular.ttf +0 -0
  172. package/skills/frontend-dev/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
  173. package/skills/frontend-dev/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
  174. package/skills/frontend-dev/canvas-fonts/Outfit-Bold.ttf +0 -0
  175. package/skills/frontend-dev/canvas-fonts/Outfit-OFL.txt +93 -0
  176. package/skills/frontend-dev/canvas-fonts/Outfit-Regular.ttf +0 -0
  177. package/skills/frontend-dev/canvas-fonts/PixelifySans-Medium.ttf +0 -0
  178. package/skills/frontend-dev/canvas-fonts/PixelifySans-OFL.txt +93 -0
  179. package/skills/frontend-dev/canvas-fonts/PoiretOne-OFL.txt +93 -0
  180. package/skills/frontend-dev/canvas-fonts/PoiretOne-Regular.ttf +0 -0
  181. package/skills/frontend-dev/canvas-fonts/RedHatMono-Bold.ttf +0 -0
  182. package/skills/frontend-dev/canvas-fonts/RedHatMono-OFL.txt +93 -0
  183. package/skills/frontend-dev/canvas-fonts/RedHatMono-Regular.ttf +0 -0
  184. package/skills/frontend-dev/canvas-fonts/Silkscreen-OFL.txt +93 -0
  185. package/skills/frontend-dev/canvas-fonts/Silkscreen-Regular.ttf +0 -0
  186. package/skills/frontend-dev/canvas-fonts/SmoochSans-Medium.ttf +0 -0
  187. package/skills/frontend-dev/canvas-fonts/SmoochSans-OFL.txt +93 -0
  188. package/skills/frontend-dev/canvas-fonts/Tektur-Medium.ttf +0 -0
  189. package/skills/frontend-dev/canvas-fonts/Tektur-OFL.txt +93 -0
  190. package/skills/frontend-dev/canvas-fonts/Tektur-Regular.ttf +0 -0
  191. package/skills/frontend-dev/canvas-fonts/WorkSans-Bold.ttf +0 -0
  192. package/skills/frontend-dev/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
  193. package/skills/frontend-dev/canvas-fonts/WorkSans-Italic.ttf +0 -0
  194. package/skills/frontend-dev/canvas-fonts/WorkSans-OFL.txt +93 -0
  195. package/skills/frontend-dev/canvas-fonts/WorkSans-Regular.ttf +0 -0
  196. package/skills/frontend-dev/canvas-fonts/YoungSerif-OFL.txt +93 -0
  197. package/skills/frontend-dev/canvas-fonts/YoungSerif-Regular.ttf +0 -0
  198. package/skills/frontend-dev/references/asset-prompt-guide.md +43 -0
  199. package/skills/frontend-dev/references/env-setup.md +33 -0
  200. package/skills/frontend-dev/references/minimax-cli-reference.md +133 -0
  201. package/skills/frontend-dev/references/minimax-image-guide.md +65 -0
  202. package/skills/frontend-dev/references/minimax-music-guide.md +216 -0
  203. package/skills/frontend-dev/references/minimax-tts-guide.md +78 -0
  204. package/skills/frontend-dev/references/minimax-video-guide.md +82 -0
  205. package/skills/frontend-dev/references/minimax-voice-catalog.md +685 -0
  206. package/skills/frontend-dev/references/motion-recipes.md +407 -0
  207. package/skills/frontend-dev/references/troubleshooting.md +85 -0
  208. package/skills/frontend-dev/scripts/minimax_image.py +137 -0
  209. package/skills/frontend-dev/scripts/minimax_music.py +157 -0
  210. package/skills/frontend-dev/scripts/minimax_tts.py +127 -0
  211. package/skills/frontend-dev/scripts/minimax_video.py +187 -0
  212. package/skills/frontend-dev/templates/generator_template.js +223 -0
  213. package/skills/frontend-dev/templates/viewer.html +599 -0
  214. package/skills/frontend-ui-engineering/SKILL.md +367 -0
  215. package/skills/fullstack-dev/SKILL.md +819 -0
  216. package/skills/fullstack-dev/references/api-design.md +444 -0
  217. package/skills/fullstack-dev/references/auth-flow.md +165 -0
  218. package/skills/fullstack-dev/references/db-schema.md +706 -0
  219. package/skills/fullstack-dev/references/django-best-practices.md +466 -0
  220. package/skills/fullstack-dev/references/environment-management.md +78 -0
  221. package/skills/fullstack-dev/references/release-checklist.md +278 -0
  222. package/skills/fullstack-dev/references/technology-selection.md +254 -0
  223. package/skills/fullstack-dev/references/testing-strategy.md +404 -0
  224. package/skills/git-workflow-and-versioning/SKILL.md +446 -0
  225. package/skills/github-evidence-triage/SKILL.md +115 -0
  226. package/skills/harness-evolution/SKILL.md +59 -0
  227. package/skills/harness-evolution/references/activation-matrix.md +13 -0
  228. package/skills/harness-evolution/references/approval-policy.md +20 -0
  229. package/skills/harness-evolution/references/change-report-template.md +33 -0
  230. package/skills/harness-evolution/references/component-taxonomy.md +19 -0
  231. package/skills/harness-evolution/references/verdict-policy.md +13 -0
  232. package/skills/harness-issue-triage/SKILL.md +72 -0
  233. package/skills/harness-issue-triage/references/component-diagnosis.md +25 -0
  234. package/skills/harness-issue-triage/references/triage-report-template.md +34 -0
  235. package/skills/harness-optimization-audit/SKILL.md +125 -0
  236. package/skills/idea-refine/SKILL.md +191 -0
  237. package/skills/idea-refine/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/LICENSE +21 -0
  238. package/skills/idea-refine/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/NOTICE.md +9 -0
  239. package/skills/idea-refine/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/idea-refine/SKILL.upstream.md +178 -0
  240. package/skills/idea-refine/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/idea-refine/examples.md +238 -0
  241. package/skills/idea-refine/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/idea-refine/frameworks.md +99 -0
  242. package/skills/idea-refine/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/idea-refine/refinement-criteria.md +113 -0
  243. package/skills/idea-refine/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/idea-refine/scripts/idea-refine.upstream.sh +15 -0
  244. package/skills/incremental-implementation/SKILL.md +252 -0
  245. package/skills/ios-application-dev/SKILL.md +212 -0
  246. package/skills/ios-application-dev/references/accessibility.md +259 -0
  247. package/skills/ios-application-dev/references/graphics-animation.md +350 -0
  248. package/skills/ios-application-dev/references/layout-system.md +199 -0
  249. package/skills/ios-application-dev/references/metal-shader.md +178 -0
  250. package/skills/ios-application-dev/references/navigation-patterns.md +175 -0
  251. package/skills/ios-application-dev/references/swift-coding-standards.md +757 -0
  252. package/skills/ios-application-dev/references/swiftui-design-guidelines.md +1167 -0
  253. package/skills/ios-application-dev/references/system-integration.md +401 -0
  254. package/skills/ios-application-dev/references/uikit-components.md +297 -0
  255. package/skills/local-review-gate/SKILL.md +207 -0
  256. package/skills/local-review-gate/references/addyosmani-code-review-rubric.md +33 -0
  257. package/skills/local-review-gate/references/codex-github-compatibility.md +26 -0
  258. package/skills/local-review-gate/references/ecc-code-review-adaptation.md +40 -0
  259. package/skills/local-review-gate/references/graphify-local-review.md +33 -0
  260. package/skills/local-review-gate/references/orchestration-adaptation.md +51 -0
  261. package/skills/local-review-gate/references/review-repair-lane-adaptation.md +46 -0
  262. package/skills/local-review-gate/references/upstream-provenance.md +61 -0
  263. package/skills/mature-project-pattern-research/SKILL.md +155 -0
  264. package/skills/mature-project-pattern-research/references/research-rubric.md +45 -0
  265. package/skills/minimax-docx/LICENSE +21 -0
  266. package/skills/minimax-docx/SKILL.md +273 -0
  267. package/skills/minimax-docx/assets/styles/academic_styles.xml +250 -0
  268. package/skills/minimax-docx/assets/styles/corporate_styles.xml +284 -0
  269. package/skills/minimax-docx/assets/styles/default_styles.xml +449 -0
  270. package/skills/minimax-docx/assets/xsd/aesthetic-rules.xsd +470 -0
  271. package/skills/minimax-docx/assets/xsd/business-rules.xsd +130 -0
  272. package/skills/minimax-docx/assets/xsd/common-types.xsd +159 -0
  273. package/skills/minimax-docx/assets/xsd/wml-subset.xsd +589 -0
  274. package/skills/minimax-docx/references/cjk_typography.md +357 -0
  275. package/skills/minimax-docx/references/cjk_university_template_guide.md +184 -0
  276. package/skills/minimax-docx/references/comments_guide.md +191 -0
  277. package/skills/minimax-docx/references/design_good_bad_examples.md +829 -0
  278. package/skills/minimax-docx/references/design_principles.md +819 -0
  279. package/skills/minimax-docx/references/openxml_element_order.md +308 -0
  280. package/skills/minimax-docx/references/openxml_encyclopedia_part1.md +4061 -0
  281. package/skills/minimax-docx/references/openxml_encyclopedia_part2.md +2820 -0
  282. package/skills/minimax-docx/references/openxml_encyclopedia_part3.md +3381 -0
  283. package/skills/minimax-docx/references/openxml_namespaces.md +82 -0
  284. package/skills/minimax-docx/references/openxml_units.md +72 -0
  285. package/skills/minimax-docx/references/scenario_a_create.md +284 -0
  286. package/skills/minimax-docx/references/scenario_b_edit_content.md +295 -0
  287. package/skills/minimax-docx/references/scenario_c_apply_template.md +456 -0
  288. package/skills/minimax-docx/references/track_changes_guide.md +200 -0
  289. package/skills/minimax-docx/references/troubleshooting.md +506 -0
  290. package/skills/minimax-docx/references/typography_guide.md +294 -0
  291. package/skills/minimax-docx/references/xsd_validation_guide.md +158 -0
  292. package/skills/minimax-docx/scripts/doc_to_docx.sh +40 -0
  293. package/skills/minimax-docx/scripts/docx_preview.sh +37 -0
  294. package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Cli/MiniMaxAIDocx.Cli.csproj +19 -0
  295. package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Cli/Program.cs +18 -0
  296. package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/AnalyzeCommand.cs +147 -0
  297. package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/ApplyTemplateCommand.cs +322 -0
  298. package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/CreateCommand.cs +324 -0
  299. package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/DiffCommand.cs +155 -0
  300. package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/EditContentCommand.cs +487 -0
  301. package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/FixOrderCommand.cs +108 -0
  302. package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/MergeRunsCommand.cs +122 -0
  303. package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/ValidateCommand.cs +107 -0
  304. package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/MiniMaxAIDocx.Core.csproj +15 -0
  305. package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/CommentSynchronizer.cs +169 -0
  306. package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/ElementOrder.cs +80 -0
  307. package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/NamespaceConstants.cs +42 -0
  308. package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/RunMerger.cs +81 -0
  309. package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/StyleAnalyzer.cs +81 -0
  310. package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/TrackChangesHelper.cs +99 -0
  311. package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/UnitConverter.cs +23 -0
  312. package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples.cs +1832 -0
  313. package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch1.cs +910 -0
  314. package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch2.cs +999 -0
  315. package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch3.cs +1048 -0
  316. package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch4.cs +1038 -0
  317. package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/CharacterFormattingSamples.cs +1020 -0
  318. package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/DocumentCreationSamples.cs +1121 -0
  319. package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/FieldAndTocSamples.cs +624 -0
  320. package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/FootnoteAndCommentSamples.cs +675 -0
  321. package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/HeaderFooterSamples.cs +838 -0
  322. package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/ImageSamples.cs +917 -0
  323. package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/ListAndNumberingSamples.cs +826 -0
  324. package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/ParagraphFormattingSamples.cs +1199 -0
  325. package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/StyleSystemSamples.cs +1487 -0
  326. package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/TableSamples.cs +1163 -0
  327. package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/TrackChangesSamples.cs +595 -0
  328. package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Typography/CjkHelper.cs +39 -0
  329. package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Typography/FontDefaults.cs +24 -0
  330. package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Typography/PageSizes.cs +20 -0
  331. package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Validation/BusinessRuleValidator.cs +224 -0
  332. package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Validation/GateCheckValidator.cs +148 -0
  333. package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Validation/ValidationResult.cs +23 -0
  334. package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Validation/XsdValidator.cs +69 -0
  335. package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.slnx +4 -0
  336. package/skills/minimax-docx/scripts/env_check.sh +196 -0
  337. package/skills/minimax-docx/scripts/setup.ps1 +274 -0
  338. package/skills/minimax-docx/scripts/setup.sh +504 -0
  339. package/skills/minimax-pdf/README.md +222 -0
  340. package/skills/minimax-pdf/SKILL.md +218 -0
  341. package/skills/minimax-pdf/design/design.md +381 -0
  342. package/skills/minimax-pdf/scripts/cover.py +1579 -0
  343. package/skills/minimax-pdf/scripts/fill_inspect.py +200 -0
  344. package/skills/minimax-pdf/scripts/fill_write.py +242 -0
  345. package/skills/minimax-pdf/scripts/make.sh +491 -0
  346. package/skills/minimax-pdf/scripts/merge.py +112 -0
  347. package/skills/minimax-pdf/scripts/palette.py +521 -0
  348. package/skills/minimax-pdf/scripts/reformat_parse.py +374 -0
  349. package/skills/minimax-pdf/scripts/render_body.py +1052 -0
  350. package/skills/minimax-pdf/scripts/render_cover.js +111 -0
  351. package/skills/minimax-xlsx/SKILL.md +156 -0
  352. package/skills/minimax-xlsx/references/create.md +691 -0
  353. package/skills/minimax-xlsx/references/edit.md +684 -0
  354. package/skills/minimax-xlsx/references/fix.md +37 -0
  355. package/skills/minimax-xlsx/references/format.md +768 -0
  356. package/skills/minimax-xlsx/references/ooxml-cheatsheet.md +231 -0
  357. package/skills/minimax-xlsx/references/read-analyze.md +97 -0
  358. package/skills/minimax-xlsx/references/validate.md +772 -0
  359. package/skills/minimax-xlsx/scripts/formula_check.py +422 -0
  360. package/skills/minimax-xlsx/scripts/libreoffice_recalc.py +248 -0
  361. package/skills/minimax-xlsx/scripts/shared_strings_builder.py +163 -0
  362. package/skills/minimax-xlsx/scripts/style_audit.py +575 -0
  363. package/skills/minimax-xlsx/scripts/xlsx_add_column.py +395 -0
  364. package/skills/minimax-xlsx/scripts/xlsx_insert_row.py +274 -0
  365. package/skills/minimax-xlsx/scripts/xlsx_pack.py +87 -0
  366. package/skills/minimax-xlsx/scripts/xlsx_reader.py +362 -0
  367. package/skills/minimax-xlsx/scripts/xlsx_shift_rows.py +396 -0
  368. package/skills/minimax-xlsx/scripts/xlsx_unpack.py +130 -0
  369. package/skills/minimax-xlsx/templates/minimal_xlsx/[Content_Types].xml +9 -0
  370. package/skills/minimax-xlsx/templates/minimal_xlsx/_rels/.rels +6 -0
  371. package/skills/minimax-xlsx/templates/minimal_xlsx/xl/_rels/workbook.xml.rels +19 -0
  372. package/skills/minimax-xlsx/templates/minimal_xlsx/xl/sharedStrings.xml +33 -0
  373. package/skills/minimax-xlsx/templates/minimal_xlsx/xl/styles.xml +160 -0
  374. package/skills/minimax-xlsx/templates/minimal_xlsx/xl/workbook.xml +30 -0
  375. package/skills/minimax-xlsx/templates/minimal_xlsx/xl/worksheets/sheet1.xml +70 -0
  376. package/skills/newsletter-generation/SKILL.md +71 -0
  377. package/skills/oss-release-readiness/SKILL.md +47 -0
  378. package/skills/parallel-subagent-dispatch/SKILL.md +58 -0
  379. package/skills/performance-optimization/SKILL.md +364 -0
  380. package/skills/planning-and-task-breakdown/SKILL.md +290 -0
  381. package/skills/pptx-generator/SKILL.md +275 -0
  382. package/skills/pptx-generator/references/design-system.md +392 -0
  383. package/skills/pptx-generator/references/editing.md +162 -0
  384. package/skills/pptx-generator/references/pitfalls.md +112 -0
  385. package/skills/pptx-generator/references/pptxgenjs.md +420 -0
  386. package/skills/pptx-generator/references/slide-types.md +413 -0
  387. package/skills/pr-test-analysis/SKILL.md +24 -0
  388. package/skills/react-native-dev/SKILL.md +180 -0
  389. package/skills/react-native-dev/references/animations.md +254 -0
  390. package/skills/react-native-dev/references/components.md +124 -0
  391. package/skills/react-native-dev/references/engineering.md +527 -0
  392. package/skills/react-native-dev/references/forms.md +300 -0
  393. package/skills/react-native-dev/references/native-capabilities.md +163 -0
  394. package/skills/react-native-dev/references/navigation.md +271 -0
  395. package/skills/react-native-dev/references/networking.md +346 -0
  396. package/skills/react-native-dev/references/performance.md +215 -0
  397. package/skills/react-native-dev/references/state-management.md +230 -0
  398. package/skills/react-native-dev/references/styling.md +117 -0
  399. package/skills/react-native-dev/references/testing.md +341 -0
  400. package/skills/requirements-grilling/SKILL.md +447 -0
  401. package/skills/requirements-grilling/references/ADR-FORMAT.md +46 -0
  402. package/skills/requirements-grilling/references/CONTEXT-FORMAT.md +41 -0
  403. package/skills/requirements-grilling/references/INTERVIEW-PACKET-FORMAT.md +62 -0
  404. package/skills/requirements-grilling/references/MIT-LICENSE-MATT-POCOCK.md +25 -0
  405. package/skills/requirements-grilling/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/LICENSE +21 -0
  406. package/skills/requirements-grilling/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/NOTICE.md +9 -0
  407. package/skills/requirements-grilling/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/interview-me/SKILL.upstream.md +225 -0
  408. package/skills/requirements-grilling/references/upstream/mattpocock-skills/9603c1cc8118d08bc1b3bf34cf714f62178dea3b/LICENSE +21 -0
  409. package/skills/requirements-grilling/references/upstream/mattpocock-skills/9603c1cc8118d08bc1b3bf34cf714f62178dea3b/NOTICE.md +12 -0
  410. package/skills/requirements-grilling/references/upstream/mattpocock-skills/9603c1cc8118d08bc1b3bf34cf714f62178dea3b/batch-grill-me/SKILL.upstream.md +15 -0
  411. package/skills/requirements-grilling/references/upstream/mattpocock-skills/9603c1cc8118d08bc1b3bf34cf714f62178dea3b/grill-me/SKILL.upstream.md +7 -0
  412. package/skills/requirements-grilling/references/upstream/mattpocock-skills/9603c1cc8118d08bc1b3bf34cf714f62178dea3b/grilling/SKILL.upstream.md +12 -0
  413. package/skills/review-pipeline/SKILL.md +38 -0
  414. package/skills/rose-memory/SKILL.md +210 -0
  415. package/skills/rose-memory/references/README.md +48 -0
  416. package/skills/rose-memory/references/memory_cli.py +2384 -0
  417. package/skills/rose-memory/references/schema.sql +315 -0
  418. package/skills/security-and-hardening/SKILL.md +369 -0
  419. package/skills/session-handoff/SKILL.md +88 -0
  420. package/skills/session-handoff/references/upstream/mattpocock-skills/391a2701dd948f94f56a39f7533f8eea9a859c87/LICENSE +21 -0
  421. package/skills/session-handoff/references/upstream/mattpocock-skills/391a2701dd948f94f56a39f7533f8eea9a859c87/NOTICE.md +9 -0
  422. package/skills/session-handoff/references/upstream/mattpocock-skills/391a2701dd948f94f56a39f7533f8eea9a859c87/productivity/handoff/SKILL.upstream.md +16 -0
  423. package/skills/session-handoff/scripts/session_handoff.py +764 -0
  424. package/skills/shader-dev/SKILL.md +316 -0
  425. package/skills/shader-dev/reference/ambient-occlusion.md +382 -0
  426. package/skills/shader-dev/reference/analytic-ray-tracing.md +651 -0
  427. package/skills/shader-dev/reference/anti-aliasing.md +71 -0
  428. package/skills/shader-dev/reference/atmospheric-scattering.md +571 -0
  429. package/skills/shader-dev/reference/camera-effects.md +80 -0
  430. package/skills/shader-dev/reference/cellular-automata.md +635 -0
  431. package/skills/shader-dev/reference/color-palette.md +481 -0
  432. package/skills/shader-dev/reference/csg-boolean-operations.md +466 -0
  433. package/skills/shader-dev/reference/domain-repetition.md +436 -0
  434. package/skills/shader-dev/reference/domain-warping.md +419 -0
  435. package/skills/shader-dev/reference/fluid-simulation.md +425 -0
  436. package/skills/shader-dev/reference/fractal-rendering.md +525 -0
  437. package/skills/shader-dev/reference/lighting-model.md +639 -0
  438. package/skills/shader-dev/reference/matrix-transform.md +535 -0
  439. package/skills/shader-dev/reference/multipass-buffer.md +571 -0
  440. package/skills/shader-dev/reference/normal-estimation.md +418 -0
  441. package/skills/shader-dev/reference/particle-system.md +589 -0
  442. package/skills/shader-dev/reference/path-tracing-gi.md +602 -0
  443. package/skills/shader-dev/reference/polar-uv-manipulation.md +521 -0
  444. package/skills/shader-dev/reference/post-processing.md +375 -0
  445. package/skills/shader-dev/reference/procedural-2d-pattern.md +439 -0
  446. package/skills/shader-dev/reference/procedural-noise.md +551 -0
  447. package/skills/shader-dev/reference/ray-marching.md +396 -0
  448. package/skills/shader-dev/reference/sdf-2d.md +724 -0
  449. package/skills/shader-dev/reference/sdf-3d.md +805 -0
  450. package/skills/shader-dev/reference/sdf-tricks.md +63 -0
  451. package/skills/shader-dev/reference/shadow-techniques.md +476 -0
  452. package/skills/shader-dev/reference/simulation-physics.md +644 -0
  453. package/skills/shader-dev/reference/sound-synthesis.md +578 -0
  454. package/skills/shader-dev/reference/terrain-rendering.md +839 -0
  455. package/skills/shader-dev/reference/texture-mapping-advanced.md +87 -0
  456. package/skills/shader-dev/reference/texture-sampling.md +553 -0
  457. package/skills/shader-dev/reference/volumetric-rendering.md +608 -0
  458. package/skills/shader-dev/reference/voronoi-cellular-noise.md +486 -0
  459. package/skills/shader-dev/reference/voxel-rendering.md +701 -0
  460. package/skills/shader-dev/reference/water-ocean.md +445 -0
  461. package/skills/shader-dev/reference/webgl-pitfalls.md +41 -0
  462. package/skills/shader-dev/techniques/ambient-occlusion.md +364 -0
  463. package/skills/shader-dev/techniques/analytic-ray-tracing.md +542 -0
  464. package/skills/shader-dev/techniques/anti-aliasing.md +124 -0
  465. package/skills/shader-dev/techniques/atmospheric-scattering.md +522 -0
  466. package/skills/shader-dev/techniques/camera-effects.md +115 -0
  467. package/skills/shader-dev/techniques/cellular-automata.md +531 -0
  468. package/skills/shader-dev/techniques/color-palette.md +380 -0
  469. package/skills/shader-dev/techniques/csg-boolean-operations.md +491 -0
  470. package/skills/shader-dev/techniques/domain-repetition.md +333 -0
  471. package/skills/shader-dev/techniques/domain-warping.md +414 -0
  472. package/skills/shader-dev/techniques/fluid-simulation.md +1175 -0
  473. package/skills/shader-dev/techniques/fractal-rendering.md +436 -0
  474. package/skills/shader-dev/techniques/lighting-model.md +527 -0
  475. package/skills/shader-dev/techniques/matrix-transform.md +455 -0
  476. package/skills/shader-dev/techniques/multipass-buffer.md +922 -0
  477. package/skills/shader-dev/techniques/normal-estimation.md +318 -0
  478. package/skills/shader-dev/techniques/particle-system.md +1203 -0
  479. package/skills/shader-dev/techniques/path-tracing-gi.md +623 -0
  480. package/skills/shader-dev/techniques/polar-uv-manipulation.md +373 -0
  481. package/skills/shader-dev/techniques/post-processing.md +788 -0
  482. package/skills/shader-dev/techniques/procedural-2d-pattern.md +346 -0
  483. package/skills/shader-dev/techniques/procedural-noise.md +554 -0
  484. package/skills/shader-dev/techniques/ray-marching.md +467 -0
  485. package/skills/shader-dev/techniques/sdf-2d.md +631 -0
  486. package/skills/shader-dev/techniques/sdf-3d.md +589 -0
  487. package/skills/shader-dev/techniques/sdf-tricks.md +100 -0
  488. package/skills/shader-dev/techniques/shadow-techniques.md +776 -0
  489. package/skills/shader-dev/techniques/simulation-physics.md +1542 -0
  490. package/skills/shader-dev/techniques/sound-synthesis.md +490 -0
  491. package/skills/shader-dev/techniques/terrain-rendering.md +408 -0
  492. package/skills/shader-dev/techniques/texture-mapping-advanced.md +121 -0
  493. package/skills/shader-dev/techniques/texture-sampling.md +382 -0
  494. package/skills/shader-dev/techniques/volumetric-rendering.md +375 -0
  495. package/skills/shader-dev/techniques/voronoi-cellular-noise.md +458 -0
  496. package/skills/shader-dev/techniques/voxel-rendering.md +985 -0
  497. package/skills/shader-dev/techniques/water-ocean.md +490 -0
  498. package/skills/shader-dev/techniques/webgl-pitfalls.md +170 -0
  499. package/skills/shipping-and-launch/SKILL.md +334 -0
  500. package/skills/silent-failure-hunting/SKILL.md +24 -0
  501. package/skills/source-driven-development/SKILL.md +223 -0
  502. package/skills/spec-driven-development/SKILL.md +235 -0
  503. package/skills/spec-driven-development/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/LICENSE +21 -0
  504. package/skills/spec-driven-development/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/NOTICE.md +9 -0
  505. package/skills/spec-driven-development/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/spec-driven-development/SKILL.upstream.md +206 -0
  506. package/skills/strategy-stress-test/SKILL.md +185 -0
  507. package/skills/systematic-literature-review/SKILL.md +77 -0
  508. package/skills/test-document-generator/SKILL.md +152 -0
  509. package/skills/test-document-generator/references/test-document-template.md +45 -0
  510. package/skills/test-driven-development/SKILL.md +399 -0
  511. package/skills/write-skills/GLOSSARY.md +113 -0
  512. package/skills/write-skills/SKILL.md +133 -0
  513. package/skills/write-skills/references/upstream/mattpocock-skills/391a2701dd948f94f56a39f7533f8eea9a859c87/LICENSE +21 -0
  514. package/skills/write-skills/references/upstream/mattpocock-skills/391a2701dd948f94f56a39f7533f8eea9a859c87/NOTICE.md +9 -0
  515. package/skills/write-skills/references/upstream/mattpocock-skills/391a2701dd948f94f56a39f7533f8eea9a859c87/productivity/writing-great-skills/GLOSSARY.md +201 -0
  516. package/skills/write-skills/references/upstream/mattpocock-skills/391a2701dd948f94f56a39f7533f8eea9a859c87/productivity/writing-great-skills/SKILL.upstream.md +83 -0
  517. package/src/runtime/child-guard.ts +70 -0
  518. package/src/runtime/conflicts.ts +25 -0
  519. package/src/runtime/contracts.ts +9 -0
  520. package/src/runtime/doctor.ts +134 -0
  521. package/src/runtime/global-resources.ts +152 -0
  522. package/src/runtime/index.ts +23 -0
  523. package/src/runtime/lifecycle.ts +19 -0
  524. package/src/runtime/native-integrations.ts +44 -0
  525. package/src/runtime/path-boundaries.ts +69 -0
  526. package/src/runtime/registry.ts +213 -0
  527. package/src/runtime/roles.ts +64 -0
  528. package/src/runtime/rose-context.ts +24 -0
  529. package/src/runtime/subagents.ts +426 -0
  530. package/templates/APPEND_SYSTEM.md +12 -0
  531. package/upstream/aili-workflows.lock.json +3226 -0
@@ -0,0 +1,644 @@
1
+ # GPU Physics Simulation — Detailed Reference
2
+
3
+ This document is the complete reference material for [SKILL.md](SKILL.md), containing step-by-step tutorials, mathematical derivations, and advanced usage.
4
+
5
+ ## Prerequisites
6
+
7
+ - **GLSL Basics**: uniforms, texture sampling (`texture`/`texelFetch`), `fragCoord`/`iResolution` coordinate system
8
+ - **ShaderToy Multi-Pass Mechanism**: Buffer A/B/C/D read/write between each other, `iChannel0~3` binding, Common pass for shared code
9
+ - **Vector Calculus Basics**: gradient, divergence, curl, Laplacian
10
+ - **Numerical Integration**: Forward Euler, semi-implicit methods (Semi-implicit / Verlet)
11
+ - **Textures as Data Storage**: Encoding physical quantities such as position/velocity/density into RGBA channels of texture pixels
12
+
13
+ ## Core Principles in Detail
14
+
15
+ The core paradigm of GPU physics simulation is **Buffer Feedback**: leveraging ShaderToy's multi-pass architecture to store physical state (position, velocity, density, pressure, etc.) in texture buffers. Each frame reads the previous frame's state, computes new state, and writes it back. Each pixel computes independently in parallel, achieving GPU-level massively parallel physics solving.
16
+
17
+ ### Key Mathematical Tools in Detail
18
+
19
+ **1. Discrete Laplacian Operator** (used for wave equation, viscous force, diffusion):
20
+ ```
21
+ ∇²f ≈ f(x+1,y) + f(x-1,y) + f(x,y+1) + f(x,y-1) - 4·f(x,y)
22
+ ```
23
+ The Laplacian measures the difference between a point's value and the average of its neighbors. In the wave equation, it drives wave propagation; in fluid simulation, it provides viscous force (velocity diffusion); in the heat equation, it drives temperature equalization.
24
+
25
+ **2. Semi-Lagrangian Advection** (used for fluid solving):
26
+ ```
27
+ f_new(x) = f_old(x - v·dt) // backward tracing along the velocity field
28
+ ```
29
+ Advection is the most critical step in fluid simulation. The semi-Lagrangian method achieves unconditionally stable advection through "backward tracing" — starting from the target position, tracing backward along the velocity field to find the source position, then sampling the value at the source. This avoids the CFL condition limitation of forward Euler advection.
30
+
31
+ **3. Spring-Damper Force** (used for cloth, soft bodies):
32
+ ```
33
+ F_spring = k · (|Δx| - L₀) · normalize(Δx)
34
+ F_damper = c · dot(normalize(Δx), Δv) · normalize(Δx)
35
+ ```
36
+ Spring force pulls two mass points back to the rest length L₀; stiffness k determines the restoring force strength. Damper force attenuates relative velocity along the connection direction; coefficient c determines the energy dissipation rate. Combined, they produce stable elastic motion.
37
+
38
+ **4. Vorticity Confinement** (used for preserving fluid detail):
39
+ ```
40
+ curl = ∂v_x/∂y - ∂v_y/∂x
41
+ vorticity_force = ε · (∇|curl| × curl) / |∇|curl||
42
+ ```
43
+ Numerical viscosity over-smooths small-scale vortices. Vorticity confinement compensates for this artificial dissipation by applying an additional force in high-vorticity regions, pushing small vortices into more concentrated rotational structures and preserving the visual richness of the fluid.
44
+
45
+ ## Implementation Steps in Detail
46
+
47
+ ### Step 1: Ping-Pong Double Buffer Structure
48
+
49
+ **What**: Create two Buffers (A and B) that alternate read/write to achieve state persistence.
50
+
51
+ **Why**: GPU shaders cannot simultaneously read and write the same buffer. The ping-pong strategy reads from one buffer (previous frame's data) and writes to the other each frame, then swaps on the next frame.
52
+
53
+ **IMPORTANT: Key Difference Between ShaderToy and WebGL2**: In ShaderToy, Buffer A/B are two independent passes with separate write targets, so `iChannel0=self, iChannel1=other` doesn't conflict. However, in WebGL2 there's only one shader program doing ping-pong, and the write target texture cannot be simultaneously read. The solution is **dual-channel encoding** (R=current height, G=previous frame height).
54
+
55
+ **Code** (WebGL2-safe version, reads only from iChannel0, with RGBA8-compatible encoding):
56
+ ```glsl
57
+ // IMPORTANT: Only use iChannel0 (read currentBuf), write to nextBuf (must be different!)
58
+ // IMPORTANT: encode/decode ensure signed values aren't clipped on RGBA8 (no float textures/SwiftShader)
59
+ uniform int useFloatTex;
60
+ float decode(float v) { return useFloatTex == 1 ? v : v * 2.0 - 1.0; }
61
+ float encode(float v) { return useFloatTex == 1 ? v : v * 0.5 + 0.5; }
62
+
63
+ void mainImage(out vec4 fragColor, in vec2 fragCoord)
64
+ {
65
+ vec2 uv = fragCoord / iResolution.xy;
66
+ vec2 texel = 1.0 / iResolution.xy;
67
+
68
+ float current = decode(texture(iChannel0, uv).x);
69
+ float previous = decode(texture(iChannel0, uv).y);
70
+
71
+ float left = decode(texture(iChannel0, uv - vec2(texel.x, 0.0)).x);
72
+ float right = decode(texture(iChannel0, uv + vec2(texel.x, 0.0)).x);
73
+ float down = decode(texture(iChannel0, uv - vec2(0.0, texel.y)).x);
74
+ float up = decode(texture(iChannel0, uv + vec2(0.0, texel.y)).x);
75
+
76
+ float laplacian = left + right + down + up - 4.0 * current;
77
+ float next = 2.0 * current - previous + 0.25 * laplacian;
78
+
79
+ next *= 0.995; // damping decay
80
+ next *= min(1.0, float(iFrame)); // zero on frame 0
81
+
82
+ fragColor = vec4(encode(next), encode(current), 0.0, 0.0);
83
+ }
84
+ ```
85
+
86
+ ### Step 2: Interaction-Driven (External Force Injection)
87
+
88
+ **What**: Inject energy into the simulation through mouse clicks or programmatic generation.
89
+
90
+ **Why**: Physics simulations need external excitation to start and sustain. Mouse interaction is the most intuitive driving method; programmatic methods can simulate raindrops, explosions, etc.
91
+
92
+ **Code** (insert before wave equation computation):
93
+ ```glsl
94
+ float d = 0.0;
95
+
96
+ if (iMouse.z > 0.0)
97
+ {
98
+ // Mouse click: create ripple at mouse position
99
+ d = smoothstep(4.5, 0.5, length(iMouse.xy - fragCoord));
100
+ }
101
+ else
102
+ {
103
+ // Programmatic raindrop: pseudo-random position + impulse
104
+ float t = iTime * 2.0;
105
+ vec2 pos = fract(floor(t) * vec2(0.456665, 0.708618)) * iResolution.xy;
106
+ float amp = 1.0 - step(0.05, fract(t));
107
+ d = -amp * smoothstep(2.5, 0.5, length(pos - fragCoord));
108
+ }
109
+ ```
110
+
111
+ ### Step 3: Rendering Layer (Height Field Visualization)
112
+
113
+ **What**: Read simulation results in the Image Pass, compute normals via gradient calculation, and render lighting effects.
114
+
115
+ **Why**: The simulation result is a height field texture that needs to be transformed into a visible surface effect. Computing gradients via finite differences as normals enables refraction, diffuse reflection, specular highlights, and other water surface effects.
116
+
117
+ **Code** (Image Pass):
118
+ ```glsl
119
+ void mainImage(out vec4 fragColor, in vec2 fragCoord)
120
+ {
121
+ vec2 uv = fragCoord / iResolution.xy;
122
+ vec3 e = vec3(vec2(1.0) / iResolution.xy, 0.0);
123
+
124
+ // Read four-neighbor height values from Buffer A
125
+ float left = texture(iChannel0, uv - e.xz).x;
126
+ float right = texture(iChannel0, uv + e.xz).x;
127
+ float down = texture(iChannel0, uv - e.zy).x;
128
+ float up = texture(iChannel0, uv + e.zy).x;
129
+
130
+ // Construct normal from gradient
131
+ vec3 normal = normalize(vec3(right - left, up - down, 1.0));
132
+
133
+ // Lighting computation
134
+ vec3 light = normalize(vec3(0.2, -0.5, 0.7));
135
+ float diffuse = max(dot(normal, light), 0.0);
136
+ float spec = pow(max(-reflect(light, normal).z, 0.0), 32.0);
137
+
138
+ // Refraction-offset background texture sampling
139
+ vec4 bg = texture(iChannel1, uv + normal.xy * 0.35);
140
+ vec3 waterTint = vec3(0.7, 0.8, 1.0);
141
+
142
+ fragColor = mix(bg, vec4(waterTint, 1.0), 0.25) * diffuse + spec;
143
+ }
144
+ ```
145
+
146
+ ### Step 4: Chained Multi-Buffer Iteration (Improving Accuracy)
147
+
148
+ **What**: Chain multiple Buffers together to execute the same solver multiple times per frame.
149
+
150
+ **Why**: Many physics solvers (fluid pressure projection, constraint solving) require multiple iterations to converge. In ShaderToy, you can chain Buffer A → B → C to execute the same code, equivalent to 3 iterations per frame. This is critical for Eulerian fluid (pressure-divergence elimination) and rigid bodies (impulse constraint solving).
151
+
152
+ **Full Euler fluid solver code** (Buffer A/B/C share Common pass):
153
+ ```glsl
154
+ // === Common Pass ===
155
+ #define dt 0.15 // adjustable: time step
156
+ #define viscosityThreshold 0.64 // adjustable: viscosity coefficient (larger = thinner)
157
+ #define vorticityThreshold 0.25 // adjustable: vorticity confinement strength
158
+
159
+ vec4 fluidSolver(sampler2D field, vec2 uv, vec2 step,
160
+ vec4 mouse, vec4 prevMouse)
161
+ {
162
+ float k = 0.2, s = k / dt;
163
+
164
+ // Sample center and four neighbors
165
+ vec4 c = textureLod(field, uv, 0.0);
166
+ vec4 fr = textureLod(field, uv + vec2(step.x, 0.0), 0.0);
167
+ vec4 fl = textureLod(field, uv - vec2(step.x, 0.0), 0.0);
168
+ vec4 ft = textureLod(field, uv + vec2(0.0, step.y), 0.0);
169
+ vec4 fd = textureLod(field, uv - vec2(0.0, step.y), 0.0);
170
+
171
+ // Divergence and density gradient
172
+ vec3 ddx = (fr - fl).xyz * 0.5;
173
+ vec3 ddy = (ft - fd).xyz * 0.5;
174
+ float divergence = ddx.x + ddy.y;
175
+ vec2 densityDiff = vec2(ddx.z, ddy.z);
176
+
177
+ // Density solve
178
+ c.z -= dt * dot(vec3(densityDiff, divergence), c.xyz);
179
+
180
+ // Viscous force (Laplacian)
181
+ vec2 laplacian = fr.xy + fl.xy + ft.xy + fd.xy - 4.0 * c.xy;
182
+ vec2 viscosity = viscosityThreshold * laplacian;
183
+
184
+ // Semi-Lagrangian advection
185
+ vec2 densityInv = s * densityDiff;
186
+ vec2 uvHistory = uv - dt * c.xy * step;
187
+ c.xyw = textureLod(field, uvHistory, 0.0).xyw;
188
+
189
+ // Mouse external force
190
+ vec2 extForce = vec2(0.0);
191
+ if (mouse.z > 1.0 && prevMouse.z > 1.0)
192
+ {
193
+ vec2 drag = clamp((mouse.xy - prevMouse.xy) * step * 600.0,
194
+ -10.0, 10.0);
195
+ vec2 p = uv - mouse.xy * step;
196
+ extForce += 0.001 / dot(p, p) * drag;
197
+ }
198
+
199
+ c.xy += dt * (viscosity - densityInv + extForce);
200
+
201
+ // Velocity decay
202
+ c.xy = max(vec2(0.0), abs(c.xy) - 5e-6) * sign(c.xy);
203
+
204
+ // Vorticity confinement
205
+ c.w = (fd.x - ft.x + fr.y - fl.y); // curl
206
+ vec2 vorticity = vec2(abs(ft.w) - abs(fd.w),
207
+ abs(fl.w) - abs(fr.w));
208
+ vorticity *= vorticityThreshold / (length(vorticity) + 1e-5) * c.w;
209
+ c.xy += vorticity;
210
+
211
+ // Boundary conditions
212
+ c.y *= smoothstep(0.5, 0.48, abs(uv.y - 0.5));
213
+ c.x *= smoothstep(0.5, 0.49, abs(uv.x - 0.5));
214
+
215
+ // Stability clamping
216
+ c = clamp(c, vec4(-24.0, -24.0, 0.5, -0.25),
217
+ vec4( 24.0, 24.0, 3.0, 0.25));
218
+
219
+ return c;
220
+ }
221
+
222
+ // === Buffer A / B / C (identical code) ===
223
+ void mainImage(out vec4 fragColor, in vec2 fragCoord)
224
+ {
225
+ vec2 uv = fragCoord / iResolution.xy;
226
+ vec2 stepSize = 1.0 / iResolution.xy;
227
+ vec4 prevMouse = textureLod(iChannel0, vec2(0.0), 0.0);
228
+ fragColor = fluidSolver(iChannel0, uv, stepSize, iMouse, prevMouse);
229
+
230
+ // Bottom row stores mouse state
231
+ if (fragCoord.y < 1.0) fragColor = iMouse;
232
+ }
233
+ ```
234
+
235
+ ### Step 5: Texture Data Layout for Particle/Mass-Point Systems
236
+
237
+ **What**: Encode particle positions, velocities, and other attributes at specific pixel locations in a texture.
238
+
239
+ **Why**: In GPU physics simulation, each particle/mass point needs to store multiple attributes (position, velocity, force, etc.). By partitioning the texture into regions (e.g., left half for positions, right half for velocities), or encoding different attributes into different RGBA channels, a compact data layout is achieved.
240
+
241
+ **Code** (cloth simulation data layout example):
242
+ ```glsl
243
+ #define SIZX 128.0 // adjustable: cloth width (particle count)
244
+ #define SIZY 64.0 // adjustable: cloth height (particle count)
245
+
246
+ // Left half [0, SIZX) stores positions, right half [SIZX, 2*SIZX) stores velocities
247
+ // IMPORTANT: In WebGL2, getpos/getvel both read from iChannel0 (currentBuf, read-only),
248
+ // write target is nextBuf (separate buffer), avoiding read-write conflict
249
+ vec3 getpos(vec2 id)
250
+ {
251
+ return texture(iChannel0, (id + 0.5) / iResolution.xy).xyz;
252
+ }
253
+
254
+ vec3 getvel(vec2 id)
255
+ {
256
+ return texture(iChannel0, (id + 0.5 + vec2(SIZX, 0.0)) / iResolution.xy).xyz;
257
+ }
258
+
259
+ // In mainImage, decide whether to output position or velocity based on fragCoord
260
+ void mainImage(out vec4 fragColor, in vec2 fragCoord)
261
+ {
262
+ vec2 fc = floor(fragCoord);
263
+ vec2 c = fc;
264
+ c.x = fract(c.x / SIZX) * SIZX; // mass point ID
265
+
266
+ vec3 pos = getpos(c);
267
+ vec3 vel = getvel(c);
268
+
269
+ // ... physics computation ...
270
+
271
+ // Output: left half stores position, right half stores velocity
272
+ fragColor = vec4(fc.x >= SIZX ? vel : pos, 0.0);
273
+ }
274
+ ```
275
+
276
+ ### Step 6: Spring-Damper Constraint System
277
+
278
+ **What**: Implement spring forces and damping forces between mass points.
279
+
280
+ **Why**: Spring-dampers are the core of cloth and soft body simulation. Each mass point is connected to neighbors via springs — spring force maintains structural shape, damping force dissipates oscillation energy. Using near-neighbors (structural springs) + diagonals (shear springs) + skip-connections (bending springs) provides complete constraints.
281
+
282
+ **Full code**:
283
+ ```glsl
284
+ const float SPRING_K = 0.15; // adjustable: spring stiffness
285
+ const float DAMPER_C = 0.10; // adjustable: damping coefficient
286
+ const float GRAVITY = 0.0022; // adjustable: gravitational acceleration
287
+
288
+ vec3 pos, vel, ovel;
289
+ vec2 c; // current mass point ID
290
+
291
+ void edge(vec2 dif)
292
+ {
293
+ // Boundary check
294
+ if ((dif + c).x < 0.0 || (dif + c).x >= SIZX ||
295
+ (dif + c).y < 0.0 || (dif + c).y >= SIZY) return;
296
+
297
+ float restLen = length(dif); // rest length = initial distance
298
+ vec3 posdif = getpos(dif + c) - pos;
299
+ vec3 veldif = getvel(dif + c) - ovel;
300
+
301
+ // IMPORTANT: Must check for zero length, otherwise normalize(vec3(0)) produces NaN
302
+ float plen = length(posdif);
303
+ if (plen < 0.0001) return;
304
+ vec3 dir = posdif / plen;
305
+
306
+ // Spring force: restore to rest length
307
+ vel += dir
308
+ * clamp(plen - restLen, -1.0, 1.0)
309
+ * SPRING_K;
310
+
311
+ // Damping force: attenuate relative velocity along connection direction
312
+ vel += dir
313
+ * dot(dir, veldif)
314
+ * DAMPER_C;
315
+ }
316
+
317
+ // In mainImage, call 12 edges (near-neighbors + diagonals + skip-connections)
318
+ void mainImage(out vec4 fragColor, in vec2 fragCoord)
319
+ {
320
+ // ... initialize pos, vel, c ...
321
+ ovel = vel;
322
+
323
+ // Structural springs (4 near-neighbors)
324
+ edge(vec2( 0.0, 1.0));
325
+ edge(vec2( 0.0,-1.0));
326
+ edge(vec2( 1.0, 0.0));
327
+ edge(vec2(-1.0, 0.0));
328
+
329
+ // Shear/bending springs (diagonals + skip-connections)
330
+ edge(vec2( 1.0, 1.0));
331
+ edge(vec2(-1.0,-1.0));
332
+ edge(vec2( 0.0, 2.0));
333
+ edge(vec2( 0.0,-2.0));
334
+ edge(vec2( 2.0, 0.0));
335
+ edge(vec2(-2.0, 0.0));
336
+ edge(vec2( 2.0,-2.0));
337
+ edge(vec2(-2.0, 2.0));
338
+
339
+ // Collision detection (sphere)
340
+ // ... ballcollis() ...
341
+
342
+ // Integration
343
+ pos += vel;
344
+ vel.y += GRAVITY;
345
+
346
+ // Air resistance (normal wind force)
347
+ vec3 norm = findnormal(c);
348
+ vec3 windvel = vec3(0.01, 0.0, -0.005); // adjustable: wind direction and speed
349
+ vel -= norm * (dot(norm, vel - windvel) * 0.05);
350
+
351
+ // Fixed boundary (top row pinned as curtain rod)
352
+ if (c.y == 0.0)
353
+ {
354
+ pos = vec3(fc.x * 0.85, fc.y, fc.y * 0.01);
355
+ vel = vec3(0.0);
356
+ }
357
+
358
+ fragColor = vec4(fc.x >= SIZX ? vel : pos, 0.0);
359
+ }
360
+ ```
361
+
362
+ ### Step 7: N-Body Particle Interaction (Biot-Savart Vortex Method)
363
+
364
+ **What**: Implement all-pairs interaction forces between all particles.
365
+
366
+ **Why**: Certain physical systems (such as vortex dynamics, gravitational N-body problems) require each particle to interact with all other particles. The Biot-Savart law gives the velocity field generated by vorticity, which is the core of 2D vortex simulation. Uses semi-Newton (Verlet-type) two-step integration for improved accuracy.
367
+
368
+ **Full code**:
369
+ ```glsl
370
+ #define N 20 // adjustable: N×N total particles
371
+ #define Nf float(N)
372
+ #define MARKERS 0.90 // adjustable: passive marker particle ratio
373
+
374
+ // STRENGTH automatically scales with particle count and marker ratio
375
+ float STRENGTH = 1e3 * 0.25 / (1.0 - MARKERS) * sqrt(30.0 / Nf);
376
+
377
+ #define tex(i,j) texture(iChannel1, (vec2(i,j) + 0.5) / iResolution.xy)
378
+ #define W(i,j) tex(i, j + N).z // vorticity stored in tile(0,1) z channel
379
+
380
+ void mainImage(out vec4 O, vec2 U)
381
+ {
382
+ vec2 T = floor(U / Nf); // tile index
383
+ U = mod(U, Nf); // particle ID
384
+
385
+ // Pass 1 (Buffer A): half-step integration dt*0.5
386
+ // Pass 2 (Buffer B): full-step integration using Pass 1 velocity
387
+
388
+ vec2 F = vec2(0.0);
389
+
390
+ // N×N all-pairs Biot-Savart summation
391
+ for (int j = 0; j < N; j++)
392
+ for (int i = 0; i < N; i++)
393
+ {
394
+ float w = W(i, j);
395
+ vec2 d = tex(i, j).xy - O.xy;
396
+ // Periodic boundary: take nearest image
397
+ d = (fract(0.5 + d / iResolution.xy) - 0.5) * iResolution.xy;
398
+ float l = dot(d, d);
399
+ if (l > 1e-5)
400
+ F += vec2(-d.y, d.x) * w / l; // Biot-Savart kernel
401
+ }
402
+
403
+ O.zw = STRENGTH * F; // velocity
404
+ O.xy += O.zw * dt; // integrate position
405
+ O.xy = mod(O.xy, iResolution.xy); // periodic boundary
406
+ }
407
+ ```
408
+
409
+ ### Step 8: State Storage in Specific Pixels (Global Variable Trick)
410
+
411
+ **What**: Store global state (current position, time, mouse history) at fixed pixel locations in the texture.
412
+
413
+ **Why**: GPU shaders have no global variables. By storing state at agreed-upon pixel coordinates (usually `(0,0)` or the bottom row), the next frame can read these "global variables". This is indispensable for ODE integration (e.g., Lorenz attractor) and interactions that need to track mouse history.
414
+
415
+ **Full code**:
416
+ ```glsl
417
+ void mainImage(out vec4 fragColor, in vec2 fragCoord)
418
+ {
419
+ // Pixel (0,0) stores global state (e.g., Lorenz attractor's current 3D position)
420
+ if (floor(fragCoord) == vec2(0, 0))
421
+ {
422
+ if (iFrame == 0)
423
+ {
424
+ fragColor = vec4(0.1, 0.001, 0.0, 0.0); // initial conditions
425
+ }
426
+ else
427
+ {
428
+ vec3 state = texture(iChannel0, vec2(0.0)).xyz;
429
+ // Execute multi-step ODE integration
430
+ for (float i = 0.0; i < 96.0; i++)
431
+ {
432
+ // Lorenz system: dx/dt = σ(y-x), dy/dt = x(ρ-z)-y, dz/dt = xy-βz
433
+ vec3 deriv;
434
+ deriv.x = 10.0 * (state.y - state.x); // σ = 10
435
+ deriv.y = state.x * (28.0 - state.z) - state.y; // ρ = 28
436
+ deriv.z = state.x * state.y - 8.0/3.0 * state.z; // β = 8/3
437
+ state += deriv * 0.016 * 0.2;
438
+ }
439
+ fragColor = vec4(state, 0.0);
440
+ }
441
+ return;
442
+ }
443
+
444
+ // Other pixels: accumulate trajectory distance field
445
+ vec3 last = texture(iChannel0, vec2(0.0)).xyz;
446
+ float d = 1e6;
447
+ for (float i = 0.0; i < 96.0; i++)
448
+ {
449
+ vec3 next = Integrate(last, 0.016 * 0.2);
450
+ d = min(d, dfLine(last.xz * 0.015, next.xz * 0.015, uv));
451
+ last = next;
452
+ }
453
+
454
+ float c = 0.5 * smoothstep(1.0 / iResolution.y, 0.0, d);
455
+ vec3 prev = texture(iChannel0, fragCoord / iResolution.xy).rgb;
456
+ fragColor = vec4(vec3(c) + prev * 0.99, 0.0); // decaying accumulation
457
+ }
458
+ ```
459
+
460
+ ## Common Variant Details
461
+
462
+ ### Variant 1: Eulerian Fluid Simulation (Smoke / Ink)
463
+
464
+ **Difference from base version**: Extends from scalar wave equation to full 2D velocity field solving — including advection, viscosity, vorticity confinement, and density tracking. Requires 3+ chained buffer iterations for enhanced convergence.
465
+
466
+ **Key code**:
467
+ ```glsl
468
+ // Buffer storage: xy = velocity, z = density, w = curl
469
+ // Key difference: semi-Lagrangian advection replaces simple neighborhood update
470
+ vec2 uvHistory = uv - dt * velocity.xy * stepSize;
471
+ vec4 advected = textureLod(field, uvHistory, 0.0);
472
+
473
+ // Vorticity confinement (preserve fluid detail)
474
+ float curl = (fd.x - ft.x + fr.y - fl.y);
475
+ vec2 vortGrad = vec2(abs(ft.w) - abs(fd.w), abs(fl.w) - abs(fr.w));
476
+ vec2 vortForce = vorticityThreshold / (length(vortGrad) + 1e-5) * curl * vortGrad;
477
+ velocity.xy += vortForce;
478
+ ```
479
+
480
+ ### Variant 2: Cloth Simulation (Mass-Spring-Damper)
481
+
482
+ **Difference from base version**: Changes from grid-based field equations to a discrete particle system. Each pixel represents a mass point storing 3D position and velocity. Connected to neighbors via spring-dampers, plus gravity, wind force, and collision. Multi-buffer chained iteration (4 passes) implements multiple sub-steps.
483
+
484
+ **Key code**:
485
+ ```glsl
486
+ // Data layout: left half of texture = position, right half = velocity
487
+ // Spring force core
488
+ vec3 posdif = getpos(neighbor) - pos;
489
+ vec3 veldif = getvel(neighbor) - vel;
490
+ float restLen = length(neighborOffset);
491
+ force += normalize(posdif) * clamp(length(posdif) - restLen, -1.0, 1.0) * 0.15;
492
+ force += normalize(posdif) * dot(normalize(posdif), veldif) * 0.10;
493
+
494
+ // Sphere collision response
495
+ if (length(pos - ballPos) < ballRadius) {
496
+ vel -= normalize(pos - ballPos) * dot(normalize(pos - ballPos), vel);
497
+ pos = ballPos + normalize(pos - ballPos) * ballRadius;
498
+ }
499
+ ```
500
+
501
+ > **IMPORTANT: Common Pitfalls**:
502
+ > - **Cloth Image Pass must project world coordinates to screen**: You cannot use `uv * vec2(SIZX, SIZY)` to map screen UV to grid ID, because particles have moved from their initial positions, producing scattered fragments. You must iterate over mesh faces, projecting vertex world coordinates to screen space for triangle rasterization
503
+ > - GLSL is strictly typed; you cannot write `float / vec2`. Wrong example: `length(dif) / vec2(SIZX, SIZY).x` will first execute float/vec2 causing a compile error; use `length(dif) / SIZX` instead
504
+ > - `normalize(vec3(0))` produces NaN; all `normalize()` calls must include a length check beforehand
505
+ > - In the Image Pass, `getpos`/`getvel` must use the simulation resolution (`iSimResolution`) for UV calculation, not the screen resolution `iResolution`
506
+ > - Texel center sampling should use `+0.5` offset (not `+0.01`)
507
+
508
+ ### Variant 3: Rigid Body Physics Engine (Box2D-lite on GPU)
509
+
510
+ **Difference from base version**: The most complex variant. Uses structured pixel addressing (ECS data layout) to serialize rigid body attributes, joints, contact points, etc., into textures. Buffer A handles integration + collision detection, Buffer B/C/D handle impulse constraint iteration. Requires Common pass to encapsulate a complete physics library.
511
+
512
+ **Key code**:
513
+ ```glsl
514
+ // Structured memory addressing: map structs to consecutive pixels
515
+ int bodyAddress(int b_id) {
516
+ return pixel_count_of_Globals + pixel_count_of_Body * b_id;
517
+ }
518
+ Body loadBody(sampler2D buff, int b_id) {
519
+ int addr = bodyAddress(b_id);
520
+ vec4 d0 = texelFetch(buff, address2D(res, addr), 0);
521
+ vec4 d1 = texelFetch(buff, address2D(res, addr+1), 0);
522
+ b.pos = d0.xy; b.vel = d0.zw;
523
+ b.ang = d1.x; b.ang_vel = d1.y; // ...
524
+ }
525
+
526
+ // Contact impulse solving
527
+ float v_n = dot(dv, contact.normal);
528
+ float dp_n = contact.mass_n * (-v_n + contact.bias);
529
+ dp_n = max(0.0, dp_n);
530
+ body.vel += body.inv_mass * dp_n * contact.normal;
531
+ ```
532
+
533
+ ### Variant 4: N-Body Vortex Particle Simulation
534
+
535
+ **Difference from base version**: Changes from field (Eulerian) method to particle (Lagrangian) method. Each particle carries vorticity, and the Biot-Savart law computes the full-field velocity. Uses semi-Newton two-step integration (Buffer A half-step → Buffer B full-step). O(N²) all-pairs interaction.
536
+
537
+ **Key code**:
538
+ ```glsl
539
+ // Biot-Savart kernel: velocity induced by vorticity w at distance d
540
+ // v = w * (-dy, dx) / |d|²
541
+ for (int j = 0; j < N; j++)
542
+ for (int i = 0; i < N; i++) {
543
+ float w = W(i, j);
544
+ vec2 d = tex(i, j).xy - pos;
545
+ d = (fract(0.5 + d / res) - 0.5) * res; // periodic boundary
546
+ float l = dot(d, d);
547
+ if (l > 1e-5) F += vec2(-d.y, d.x) * w / l;
548
+ }
549
+ ```
550
+
551
+ ### Variant 5: 3D SPH Particle Fluid
552
+
553
+ **Difference from base version**: Extends to 3D. Uses Particle Cluster Grid (PCG) for spatial neighborhood management, custom bit packing (5-bit exponent + 9-bit component) to compress particle data into 4 floats. Buffer A handles advection + clustering, Buffer B computes density, Buffer C computes forces + integration, Buffer D computes shadows.
554
+
555
+ **Key code**:
556
+ ```glsl
557
+ // Map 3D grid to 2D texture
558
+ vec2 dim2from3(vec3 p3d) {
559
+ float ny = floor(p3d.z / SCALE.x);
560
+ float nx = floor(p3d.z) - ny * SCALE.x;
561
+ return vec2(nx, ny) * size3d.xy + p3d.xy;
562
+ }
563
+
564
+ // SPH pressure force
565
+ float pressure = max(rho / rest_density - 1.0, 0.0);
566
+ float SPH_F = force_coef_a * GD(d, 1.5) * pressure;
567
+ // Friction + surface tension
568
+ float Friction = 0.45 * dot(dir, dvel) * GD(d, 1.5);
569
+ float F = surface_tension * GD(d, surface_tension_rad);
570
+ p.force += force_k * dir * (F + SPH_F + Friction) * irho / rest_density;
571
+ ```
572
+
573
+ ## Performance Optimization Details
574
+
575
+ ### 1. Neighborhood Sampling Optimization
576
+ - **Bottleneck**: Each pixel samples 4~12 neighbors; texture bandwidth is the main bottleneck
577
+ - **Optimization**: Use `texelFetch` instead of `texture` (skips filtering), pre-compute `1.0/iResolution.xy` to avoid repeated division
578
+
579
+ ### 2. N-Body O(N²) Loop Optimization
580
+ - **Bottleneck**: All-pairs interaction has O(N²) complexity; N=20 means 400 iterations per frame, N=50 means 2500
581
+ - **Optimization**:
582
+ - Limit N value (20~30 is enough for good visual results)
583
+ - Use "cheap" periodic boundary mode (`fract` instead of 3×3 loop traversal)
584
+ - Passive marker particles (90%) don't participate in force computation, only flow passively
585
+
586
+ ### 3. Iteration Count vs. Accuracy Balance
587
+ - **Bottleneck**: Fluid/rigid body solvers need multiple iterations, but each buffer can only execute once
588
+ - **Optimization**:
589
+ - Use 3 chained buffers (A→B→C) for 3 iterations/frame
590
+ - 4 chained buffers for cloth (4 sub-steps/frame, time step = 1/4/60)
591
+ - More buffers consume more GPU memory; balance accuracy against resources
592
+
593
+ ### 4. Adaptive Precision
594
+ - **Optimization**: Use larger step sizes for screen edges or distant regions
595
+ ```glsl
596
+ // Kelvin wave example: distant pixels use 8× step size
597
+ if (abs(U.y * R.y) > 100.0) dx *= 8.0 * abs(U.y);
598
+ ```
599
+
600
+ ### 5. Data Packing Compression
601
+ - **Optimization**: When each particle has more than 4 float attributes, use bit operations for packing
602
+ ```glsl
603
+ // 3D SPH example: 3 floats compressed into 1 uint (5-bit exponent + 3×9-bit components)
604
+ uint packvec3(vec3 v) {
605
+ int exp = clamp(int(ceil(log2(max(...)))), -15, 15);
606
+ float scale = exp2(-float(exp));
607
+ uvec3 sv = uvec3(round(clamp(v*scale, -1.0, 1.0) * 255.0) + 255.0);
608
+ return uint(exp + 15) | (sv.x << 5) | (sv.y << 14) | (sv.z << 23);
609
+ }
610
+ ```
611
+
612
+ ### 6. Stability Safeguards
613
+ - Apply `clamp` to velocity/density to prevent numerical explosion
614
+ - Use `smoothstep` for soft boundary decay instead of hard cutoff
615
+ - Keep damping coefficients in the 0.95~0.999 range
616
+
617
+ ## Combination Suggestions in Detail
618
+
619
+ ### 1. Physics Simulation + Post-Processing Rendering
620
+ The most common combination. Buffer passes handle physics computation, Image pass handles visualization:
621
+ - **Waves + Refraction/Caustics**: Height field gradient drives refraction-offset sampling
622
+ - **Fluid + Ink Coloring**: Velocity field advects colored ink particles (Buffer D), with HSV random coloring
623
+ - **Cloth + Ray Tracing**: Voxelized spatial tree accelerates cloth surface ray intersection
624
+
625
+ ### 2. Physics Simulation + SDF Rendering
626
+ Rigid body/particle position data is passed to the Image pass, rendered as geometry using SDF functions:
627
+ - `sdBox(p - bodyPos, bodySize)` renders rigid bodies
628
+ - `length(p - particlePos) - radius` renders particles
629
+ - Suitable for Box2D-lite rigid body engine visualization
630
+
631
+ ### 3. Physics Simulation + Volume Rendering
632
+ 3D simulations (e.g., SPH) require a volume rendering pipeline:
633
+ - Density field trilinear interpolation → ray marching → normal computation → lighting
634
+ - Shadows via a separate buffer accumulating optical density along light rays
635
+ - Environment map reflections + Fresnel blending
636
+
637
+ ### 4. Multiple Physics System Coupling
638
+ - **Fluid + Rigid Bodies**: Fluid velocity field drives rigid body motion; rigid body occupancy modifies fluid boundaries
639
+ - **Cloth + Colliders**: Sphere/box shapes for collision detection, cloth elastic response
640
+ - **Particles + Fields**: Particles generate fields (density/vorticity), fields in turn drive particles (SPH / Biot-Savart)
641
+
642
+ ### 5. Physics Simulation + Audio Visualization
643
+ - Bind audio texture via `iChannel`, mapping spectrum energy to external forces or parameters
644
+ - Low frequencies drive large-scale motion, high frequencies drive small-scale vortices/ripples