@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,542 @@
1
+ # Analytic Ray Tracing
2
+
3
+ ## Use Cases
4
+
5
+ - Rendering scenes composed of geometric primitives (spheres, planes, boxes, cylinders, ellipsoids, etc.)
6
+ - Requiring precise surface intersection points, normals, and distance calculations (no iterative approximation)
7
+ - Building the underlying geometry engine for ray tracers / path tracers
8
+ - Scenes requiring accurate shadows, reflections, and refractions
9
+
10
+ ## Core Principles
11
+
12
+ Substitute the ray equation `P(t) = O + tD` into the geometric body's implicit equation to obtain an algebraic equation in `t`, then solve it in closed form.
13
+
14
+ **Unified intersection workflow**: Build equation -> Simplify to standard form -> Discriminant test -> Take smallest positive root -> Compute gradient at intersection for normal
15
+
16
+ **Key formulas**:
17
+ - **Sphere** `|P-C|^2 = r^2` -> Quadratic equation
18
+ - **Plane** `N·P + d = 0` -> Linear equation
19
+ - **Box** Intersection of three pairs of parallel planes -> Slab Method
20
+ - **Ellipsoid** `|P/R|^2 = 1` -> Sphere intersection in scaled space
21
+ - **Torus** `(|P_xy| - R)^2 + P_z^2 = r^2` -> Quartic equation
22
+
23
+ ## Implementation Steps
24
+
25
+ ### Step 1: Ray Generation
26
+
27
+ ```glsl
28
+ vec3 generateRay(vec2 fragCoord, vec2 resolution, vec3 ro, vec3 ta) {
29
+ vec2 p = (2.0 * fragCoord - resolution) / resolution.y;
30
+ vec3 cw = normalize(ta - ro);
31
+ vec3 cu = normalize(cross(cw, vec3(0, 1, 0)));
32
+ vec3 cv = cross(cu, cw);
33
+ float fov = 1.5;
34
+ return normalize(p.x * cu + p.y * cv + fov * cw);
35
+ }
36
+ ```
37
+
38
+ ### Step 2: Ray-Sphere Intersection
39
+
40
+ ```glsl
41
+ // Optimized version with sphere center at origin
42
+ float iSphere(vec3 ro, vec3 rd, vec2 distBound, inout vec3 normal, float r) {
43
+ float b = dot(ro, rd);
44
+ float c = dot(ro, ro) - r * r;
45
+ float h = b * b - c;
46
+ if (h < 0.0) return MAX_DIST;
47
+ h = sqrt(h);
48
+ float d1 = -b - h;
49
+ float d2 = -b + h;
50
+ if (d1 >= distBound.x && d1 <= distBound.y) {
51
+ normal = normalize(ro + rd * d1);
52
+ return d1;
53
+ } else if (d2 >= distBound.x && d2 <= distBound.y) {
54
+ normal = normalize(ro + rd * d2);
55
+ return d2;
56
+ }
57
+ return MAX_DIST;
58
+ }
59
+ ```
60
+
61
+ ```glsl
62
+ // General version, supports arbitrary sphere center (sph = vec4(center.xyz, radius))
63
+ float sphIntersect(vec3 ro, vec3 rd, vec4 sph) {
64
+ vec3 oc = ro - sph.xyz;
65
+ float b = dot(oc, rd);
66
+ float c = dot(oc, oc) - sph.w * sph.w;
67
+ float h = b * b - c;
68
+ if (h < 0.0) return -1.0;
69
+ return -b - sqrt(h);
70
+ }
71
+ ```
72
+
73
+ ### Step 3: Ray-Plane Intersection
74
+
75
+ ```glsl
76
+ float iPlane(vec3 ro, vec3 rd, vec2 distBound, inout vec3 normal,
77
+ vec3 planeNormal, float planeDist) {
78
+ float denom = dot(rd, planeNormal);
79
+ if (denom > 0.0) return MAX_DIST;
80
+ float d = -(dot(ro, planeNormal) + planeDist) / denom;
81
+ if (d < distBound.x || d > distBound.y) return MAX_DIST;
82
+ normal = planeNormal;
83
+ return d;
84
+ }
85
+
86
+ // fast horizontal ground plane
87
+ float iGroundPlane(vec3 ro, vec3 rd, float height) {
88
+ return -(ro.y - height) / rd.y;
89
+ }
90
+ ```
91
+
92
+ ### Step 4: Ray-Box Intersection (Slab Method)
93
+
94
+ ```glsl
95
+ float iBox(vec3 ro, vec3 rd, vec2 distBound, inout vec3 normal, vec3 boxSize) {
96
+ vec3 m = sign(rd) / max(abs(rd), 1e-8);
97
+ vec3 n = m * ro;
98
+ vec3 k = abs(m) * boxSize;
99
+ vec3 t1 = -n - k;
100
+ vec3 t2 = -n + k;
101
+ float tN = max(max(t1.x, t1.y), t1.z);
102
+ float tF = min(min(t2.x, t2.y), t2.z);
103
+ if (tN > tF || tF <= 0.0) return MAX_DIST;
104
+ if (tN >= distBound.x && tN <= distBound.y) {
105
+ normal = -sign(rd) * step(t1.yzx, t1.xyz) * step(t1.zxy, t1.xyz);
106
+ return tN;
107
+ } else if (tF >= distBound.x && tF <= distBound.y) {
108
+ normal = -sign(rd) * step(t1.yzx, t1.xyz) * step(t1.zxy, t1.xyz);
109
+ return tF;
110
+ }
111
+ return MAX_DIST;
112
+ }
113
+ ```
114
+
115
+ ### Step 5: Ray-Ellipsoid Intersection
116
+
117
+ ```glsl
118
+ // Transform to unit sphere space for intersection, transform normal back to original space
119
+ float iEllipsoid(vec3 ro, vec3 rd, vec2 distBound, inout vec3 normal, vec3 rad) {
120
+ vec3 ocn = ro / rad;
121
+ vec3 rdn = rd / rad;
122
+ float a = dot(rdn, rdn);
123
+ float b = dot(ocn, rdn);
124
+ float c = dot(ocn, ocn);
125
+ float h = b * b - a * (c - 1.0);
126
+ if (h < 0.0) return MAX_DIST;
127
+ float d = (-b - sqrt(h)) / a;
128
+ if (d < distBound.x || d > distBound.y) return MAX_DIST;
129
+ normal = normalize((ro + d * rd) / rad);
130
+ return d;
131
+ }
132
+ ```
133
+
134
+ ### Step 6: Ray-Cylinder Intersection (With End Caps)
135
+
136
+ ```glsl
137
+ // pa, pb: cylinder axis endpoints, ra: radius
138
+ float iCylinder(vec3 ro, vec3 rd, vec2 distBound, inout vec3 normal,
139
+ vec3 pa, vec3 pb, float ra) {
140
+ vec3 ca = pb - pa;
141
+ vec3 oc = ro - pa;
142
+ float caca = dot(ca, ca);
143
+ float card = dot(ca, rd);
144
+ float caoc = dot(ca, oc);
145
+ float a = caca - card * card;
146
+ float b = caca * dot(oc, rd) - caoc * card;
147
+ float c = caca * dot(oc, oc) - caoc * caoc - ra * ra * caca;
148
+ float h = b * b - a * c;
149
+ if (h < 0.0) return MAX_DIST;
150
+ h = sqrt(h);
151
+ float d = (-b - h) / a;
152
+ float y = caoc + d * card;
153
+ if (y > 0.0 && y < caca && d >= distBound.x && d <= distBound.y) {
154
+ normal = (oc + d * rd - ca * y / caca) / ra;
155
+ return d;
156
+ }
157
+ d = ((y < 0.0 ? 0.0 : caca) - caoc) / card;
158
+ if (abs(b + a * d) < h && d >= distBound.x && d <= distBound.y) {
159
+ normal = normalize(ca * sign(y) / caca);
160
+ return d;
161
+ }
162
+ return MAX_DIST;
163
+ }
164
+ ```
165
+
166
+ ### Step 7: Scene Intersection and Shading
167
+
168
+ ```glsl
169
+ #define MAX_DIST 1e10
170
+
171
+ vec3 worldHit(vec3 ro, vec3 rd, vec2 dist, out vec3 normal) {
172
+ vec3 d = vec3(dist, 0.0);
173
+ vec3 tmpNormal;
174
+ float t;
175
+
176
+ t = iPlane(ro, rd, d.xy, normal, vec3(0, 1, 0), 0.0);
177
+ if (t < d.y) { d.y = t; d.z = 1.0; }
178
+
179
+ t = iSphere(ro - vec3(0, 0.5, 0), rd, d.xy, tmpNormal, 0.5);
180
+ if (t < d.y) { d.y = t; d.z = 2.0; normal = tmpNormal; }
181
+
182
+ t = iBox(ro - vec3(2, 0.5, 0), rd, d.xy, tmpNormal, vec3(0.5));
183
+ if (t < d.y) { d.y = t; d.z = 3.0; normal = tmpNormal; }
184
+
185
+ return d;
186
+ }
187
+
188
+ vec3 shade(vec3 pos, vec3 normal, vec3 rd, vec3 albedo) {
189
+ vec3 lightDir = normalize(vec3(-1.0, 0.75, 1.0));
190
+ float diff = max(dot(normal, lightDir), 0.0);
191
+ float amb = 0.5 + 0.5 * normal.y;
192
+ return albedo * (amb * 0.2 + diff * 0.8);
193
+ }
194
+ ```
195
+
196
+ > **IMPORTANT: Critical pitfall**: `d.xy` must be passed as distBound, and `d.y` must be updated each time a closer intersection is found! If the deployed code passes the original `dist` directly without updating, the intersection logic will fail (all object distance tests become invalid), resulting in a completely black screen.
197
+
198
+ ```glsl
199
+ #define MAX_BOUNCES 4
200
+ #define EPSILON 0.001
201
+
202
+ float schlickFresnel(float cosTheta, float F0) {
203
+ return F0 + (1.0 - F0) * pow(1.0 - cosTheta, 5.0);
204
+ }
205
+
206
+ vec3 radiance(vec3 ro, vec3 rd) {
207
+ vec3 color = vec3(0.0);
208
+ vec3 mask = vec3(1.0);
209
+ vec3 normal;
210
+ for (int i = 0; i < MAX_BOUNCES; i++) {
211
+ vec3 res = worldHit(ro, rd, vec2(EPSILON, MAX_DIST), normal);
212
+ if (res.z < 0.5) {
213
+ color += mask * vec3(0.6, 0.8, 1.0);
214
+ break;
215
+ }
216
+ vec3 hitPos = ro + rd * res.y;
217
+ vec3 albedo = getAlbedo(res.z);
218
+ float F = schlickFresnel(max(0.0, dot(normal, -rd)), 0.04);
219
+ color += mask * (1.0 - F) * shade(hitPos, normal, rd, albedo);
220
+ mask *= F * albedo;
221
+ rd = reflect(rd, normal);
222
+ ro = hitPos + EPSILON * rd;
223
+ }
224
+ return color;
225
+ }
226
+ ```
227
+
228
+ ## Complete Code Template
229
+
230
+ Runs directly on ShaderToy, includes sphere, plane, and box primitives with reflection and Blinn-Phong shading.
231
+
232
+ > **IMPORTANT: Must follow**: All intersection function calls must use `d.xy` as the `distBound` parameter, and update `d.y` after each closer intersection is found. Incorrect usage: `iSphere(ro, rd, dist, ...)` (always using the original dist). Correct usage: `iSphere(ro, rd, d.xy, ...)` followed by `if (t < d.y) { d.y = t; ... }` to update.
233
+
234
+ ```glsl
235
+ // Analytic Ray Tracing - Complete ShaderToy Template
236
+ #define MAX_DIST 1e10
237
+ #define EPSILON 0.001
238
+ #define MAX_BOUNCES 3
239
+ #define FOV 1.5
240
+ #define GAMMA 2.2
241
+ #define SHADOW_ENABLED true
242
+
243
+ float iSphere(vec3 ro, vec3 rd, vec2 distBound, inout vec3 normal, float r) {
244
+ float b = dot(ro, rd);
245
+ float c = dot(ro, ro) - r * r;
246
+ float h = b * b - c;
247
+ if (h < 0.0) return MAX_DIST;
248
+ h = sqrt(h);
249
+ float d1 = -b - h, d2 = -b + h;
250
+ if (d1 >= distBound.x && d1 <= distBound.y) { normal = normalize(ro + rd * d1); return d1; }
251
+ if (d2 >= distBound.x && d2 <= distBound.y) { normal = normalize(ro + rd * d2); return d2; }
252
+ return MAX_DIST;
253
+ }
254
+
255
+ float iPlane(vec3 ro, vec3 rd, vec2 distBound, inout vec3 normal,
256
+ vec3 planeNormal, float planeDist) {
257
+ float denom = dot(rd, planeNormal);
258
+ if (denom > 0.0) return MAX_DIST;
259
+ float d = -(dot(ro, planeNormal) + planeDist) / denom;
260
+ if (d < distBound.x || d > distBound.y) return MAX_DIST;
261
+ normal = planeNormal;
262
+ return d;
263
+ }
264
+
265
+ float iBox(vec3 ro, vec3 rd, vec2 distBound, inout vec3 normal, vec3 boxSize) {
266
+ vec3 m = sign(rd) / max(abs(rd), 1e-8);
267
+ vec3 n = m * ro;
268
+ vec3 k = abs(m) * boxSize;
269
+ vec3 t1 = -n - k, t2 = -n + k;
270
+ float tN = max(max(t1.x, t1.y), t1.z);
271
+ float tF = min(min(t2.x, t2.y), t2.z);
272
+ if (tN > tF || tF <= 0.0) return MAX_DIST;
273
+ if (tN >= distBound.x && tN <= distBound.y) {
274
+ normal = -sign(rd) * step(t1.yzx, t1.xyz) * step(t1.zxy, t1.xyz); return tN;
275
+ }
276
+ if (tF >= distBound.x && tF <= distBound.y) {
277
+ normal = -sign(rd) * step(t1.yzx, t1.xyz) * step(t1.zxy, t1.xyz); return tF;
278
+ }
279
+ return MAX_DIST;
280
+ }
281
+
282
+ struct Material { vec3 albedo; float specular; float roughness; };
283
+
284
+ Material getMaterial(float matId, vec3 pos) {
285
+ if (matId < 1.5) {
286
+ float checker = mod(floor(pos.x) + floor(pos.z), 2.0);
287
+ return Material(vec3(0.4 + 0.4 * checker), 0.02, 0.8);
288
+ } else if (matId < 2.5) { return Material(vec3(1.0, 0.2, 0.2), 0.5, 0.3); }
289
+ else if (matId < 3.5) { return Material(vec3(0.2, 0.4, 1.0), 0.1, 0.6); }
290
+ else if (matId < 4.5) { return Material(vec3(1.0, 1.0, 1.0), 0.8, 0.05); }
291
+ else { return Material(vec3(0.8, 0.6, 0.2), 0.3, 0.4); }
292
+ }
293
+
294
+ vec3 worldHit(vec3 ro, vec3 rd, vec2 dist, out vec3 normal) {
295
+ vec3 d = vec3(dist, 0.0); vec3 tmp; float t;
296
+ t = iPlane(ro, rd, d.xy, tmp, vec3(0, 1, 0), 0.0);
297
+ if (t < d.y) { d.y = t; d.z = 1.0; normal = tmp; }
298
+ t = iSphere(ro - vec3(-2.0, 1.0, 0.0), rd, d.xy, tmp, 1.0);
299
+ if (t < d.y) { d.y = t; d.z = 2.0; normal = tmp; }
300
+ t = iSphere(ro - vec3(0.0, 0.6, 2.0), rd, d.xy, tmp, 0.6);
301
+ if (t < d.y) { d.y = t; d.z = 3.0; normal = tmp; }
302
+ t = iSphere(ro - vec3(2.0, 0.8, -1.0), rd, d.xy, tmp, 0.8);
303
+ if (t < d.y) { d.y = t; d.z = 4.0; normal = tmp; }
304
+ t = iBox(ro - vec3(0.0, 0.5, -2.0), rd, d.xy, tmp, vec3(0.5));
305
+ if (t < d.y) { d.y = t; d.z = 5.0; normal = tmp; }
306
+ return d;
307
+ }
308
+
309
+ float shadow(vec3 ro, vec3 rd, float maxDist) {
310
+ vec3 normal;
311
+ vec3 res = worldHit(ro, rd, vec2(EPSILON, maxDist), normal);
312
+ return res.z > 0.5 ? 0.3 : 1.0;
313
+ }
314
+
315
+ float schlick(float cosTheta, float F0) {
316
+ return F0 + (1.0 - F0) * pow(1.0 - cosTheta, 5.0);
317
+ }
318
+
319
+ vec3 skyColor(vec3 rd) {
320
+ vec3 col = mix(vec3(1.0), vec3(0.5, 0.7, 1.0), 0.5 + 0.5 * rd.y);
321
+ vec3 sunDir = normalize(vec3(-0.4, 0.7, -0.6));
322
+ float sun = clamp(dot(sunDir, rd), 0.0, 1.0);
323
+ col += vec3(1.0, 0.6, 0.1) * (pow(sun, 4.0) + 10.0 * pow(sun, 32.0));
324
+ return col;
325
+ }
326
+
327
+ vec3 render(vec3 ro, vec3 rd) {
328
+ vec3 color = vec3(0.0), mask = vec3(1.0), normal;
329
+ for (int bounce = 0; bounce < MAX_BOUNCES; bounce++) {
330
+ vec3 res = worldHit(ro, rd, vec2(EPSILON, 100.0), normal);
331
+ if (res.z < 0.5) { color += mask * skyColor(rd); break; }
332
+ vec3 hitPos = ro + rd * res.y;
333
+ Material mat = getMaterial(res.z, hitPos);
334
+ vec3 lightDir = normalize(vec3(-0.4, 0.7, -0.6));
335
+ float diff = max(dot(normal, lightDir), 0.0);
336
+ float amb = 0.5 + 0.5 * normal.y;
337
+ float sha = SHADOW_ENABLED ? shadow(hitPos + normal * EPSILON, lightDir, 50.0) : 1.0;
338
+ vec3 halfVec = normalize(lightDir - rd);
339
+ float spec = pow(max(dot(normal, halfVec), 0.0), 1.0 / max(mat.roughness, 0.001));
340
+ float F = schlick(max(0.0, dot(normal, -rd)), 0.04 + 0.96 * mat.specular);
341
+ vec3 diffCol = mat.albedo * (amb * 0.15 + diff * sha * 0.85);
342
+ vec3 specCol = vec3(spec * sha);
343
+ color += mask * mix(diffCol, specCol, F * mat.specular);
344
+ mask *= F * mat.albedo;
345
+ if (length(mask) < 0.01) break;
346
+ rd = reflect(rd, normal);
347
+ ro = hitPos + normal * EPSILON;
348
+ }
349
+ return color;
350
+ }
351
+
352
+ void mainImage(out vec4 fragColor, in vec2 fragCoord) {
353
+ vec2 p = (2.0 * fragCoord - iResolution.xy) / iResolution.y;
354
+ float angle = 0.3 * iTime;
355
+ vec3 ro = vec3(4.0 * cos(angle), 2.5, 4.0 * sin(angle));
356
+ vec3 ta = vec3(0.0, 0.5, 0.0);
357
+ vec3 cw = normalize(ta - ro);
358
+ vec3 cu = normalize(cross(cw, vec3(0, 1, 0)));
359
+ vec3 cv = cross(cu, cw);
360
+ vec3 rd = normalize(p.x * cu + p.y * cv + FOV * cw);
361
+ vec3 col = render(ro, rd);
362
+ col = col / (1.0 + col);
363
+ col = pow(col, vec3(1.0 / GAMMA));
364
+ fragColor = vec4(col, 1.0);
365
+ }
366
+ ```
367
+
368
+ ## Common Variants
369
+
370
+ ### Variant 1: Path Tracing
371
+
372
+ ```glsl
373
+ vec3 cosWeightedRandomHemisphereDirection(vec3 n, inout uint seed) {
374
+ uint ri = seed * 1103515245u + 12345u;
375
+ seed = ri;
376
+ float r1 = float(ri) / float(0xFFFFFFFFu);
377
+ ri = seed * 1103515245u + 12345u;
378
+ seed = ri;
379
+ float r2 = float(ri) / float(0xFFFFFFFFu);
380
+ vec3 uu = normalize(cross(n, abs(n.y) > 0.5 ? vec3(1,0,0) : vec3(0,1,0)));
381
+ vec3 vv = cross(uu, n);
382
+ float ra = sqrt(r1);
383
+ float rx = ra * cos(6.2831 * r2);
384
+ float ry = ra * sin(6.2831 * r2);
385
+ float rz = sqrt(1.0 - r1);
386
+ return normalize(rx * uu + ry * vv + rz * n);
387
+ }
388
+ // In the bounce loop, replace reflect with:
389
+ // rd = cosWeightedRandomHemisphereDirection(normal, seed);
390
+ // ro = hitPos + EPSILON * rd;
391
+ // mask *= mat.albedo;
392
+ ```
393
+
394
+ ### Variant 2: Analytic Soft Shadow
395
+
396
+ ```glsl
397
+ float sphSoftShadow(vec3 ro, vec3 rd, vec4 sph) {
398
+ vec3 oc = ro - sph.xyz;
399
+ float b = dot(oc, rd);
400
+ float c = dot(oc, oc) - sph.w * sph.w;
401
+ float h = b * b - c;
402
+ float d = sqrt(max(0.0, sph.w * sph.w - h)) - sph.w;
403
+ float t = -b - sqrt(max(h, 0.0));
404
+ return (t > 0.0) ? max(d, 0.0) / t : 1.0;
405
+ }
406
+ ```
407
+
408
+ ### Variant 3: Analytic Anti-Aliasing
409
+
410
+ ```glsl
411
+ vec2 sphDistances(vec3 ro, vec3 rd, vec4 sph) {
412
+ vec3 oc = ro - sph.xyz;
413
+ float b = dot(oc, rd);
414
+ float c = dot(oc, oc) - sph.w * sph.w;
415
+ float h = b * b - c;
416
+ float d = sqrt(max(0.0, sph.w * sph.w - h)) - sph.w;
417
+ return vec2(d, -b - sqrt(max(h, 0.0)));
418
+ }
419
+ // float px = 2.0 / iResolution.y;
420
+ // vec2 dt = sphDistances(ro, rd, sph);
421
+ // float coverage = 1.0 - clamp(dt.x / (dt.y * px), 0.0, 1.0);
422
+ // col = mix(bgColor, sphereColor, coverage);
423
+ ```
424
+
425
+ ### Variant 4: Refraction (Snell's Law)
426
+
427
+ ```glsl
428
+ // Requires a random number function defined first
429
+ float hash1(float p) {
430
+ return fract(sin(p) * 43758.5453);
431
+ }
432
+
433
+ // Add refraction branch in the render loop:
434
+ float refrIndex = 1.5; // glass ~ 1.5, water ~ 1.33
435
+ bool inside = dot(rd, normal) > 0.0;
436
+ vec3 n = inside ? -normal : normal;
437
+ float eta = inside ? refrIndex : 1.0 / refrIndex;
438
+ vec3 refracted = refract(rd, n, eta);
439
+ float cosI = abs(dot(rd, n));
440
+ float F = schlick(cosI, pow((1.0 - eta) / (1.0 + eta), 2.0));
441
+ // Use bounce count as random seed
442
+ float randSeed = float(bounce) + 1.0;
443
+ if (refracted != vec3(0.0) && hash1(randSeed * 12.9898) > F) {
444
+ rd = refracted;
445
+ } else {
446
+ rd = reflect(rd, n);
447
+ }
448
+ ro = hitPos + rd * EPSILON;
449
+ ```
450
+
451
+ ### Variant 5: Higher-Order Algebraic Surface (Sphere4)
452
+
453
+ ```glsl
454
+ float iSphere4(vec3 ro, vec3 rd, vec2 distBound, inout vec3 normal, float ra) {
455
+ float r2 = ra * ra;
456
+ vec3 d2 = rd*rd, d3 = d2*rd;
457
+ vec3 o2 = ro*ro, o3 = o2*ro;
458
+ float ka = 1.0 / dot(d2, d2);
459
+ float k0 = ka * dot(ro, d3);
460
+ float k1 = ka * dot(o2, d2);
461
+ float k2 = ka * dot(o3, rd);
462
+ float k3 = ka * (dot(o2, o2) - r2 * r2);
463
+ float c0 = k1 - k0 * k0;
464
+ float c1 = k2 + 2.0 * k0 * (k0 * k0 - 1.5 * k1);
465
+ float c2 = k3 - 3.0 * k0 * (k0 * (k0 * k0 - 2.0 * k1) + 4.0/3.0 * k2);
466
+ float p = c0 * c0 * 3.0 + c2;
467
+ float q = c0 * c0 * c0 - c0 * c2 + c1 * c1;
468
+ float h = q * q - p * p * p * (1.0/27.0);
469
+ if (h < 0.0) return MAX_DIST;
470
+ h = sqrt(h);
471
+ float s = sign(q+h) * pow(abs(q+h), 1.0/3.0);
472
+ float t = sign(q-h) * pow(abs(q-h), 1.0/3.0);
473
+ vec2 v = vec2((s+t) + c0*4.0, (s-t) * sqrt(3.0)) * 0.5;
474
+ float r = length(v);
475
+ float d = -abs(v.y) / sqrt(r + v.x) - c1/r - k0;
476
+ if (d >= distBound.x && d <= distBound.y) {
477
+ vec3 pos = ro + rd * d;
478
+ normal = normalize(pos * pos * pos);
479
+ return d;
480
+ }
481
+ return MAX_DIST;
482
+ }
483
+ ```
484
+
485
+ ## Common Errors and Safeguards
486
+
487
+ ### Error 1: Distance Bound Not Updated
488
+ **Symptom**: Screen is completely black or shows only background
489
+ **Cause**: `distBound.y` not updated after each intersection
490
+ **Fix**:
491
+ ```glsl
492
+ // WRONG:
493
+ t = iSphere(ro, rd, dist, tmpNormal, 1.0);
494
+
495
+ // CORRECT:
496
+ t = iSphere(ro, rd, d.xy, tmpNormal, 1.0);
497
+ if (t < d.y) { d.y = t; d.z = matId; normal = tmpNormal; }
498
+ ```
499
+
500
+ ### Error 2: EPSILON Too Small Causing Self-Intersection Artifacts
501
+ **Symptom**: Black spots or artifacts on object surfaces
502
+ **Cause**: `EPSILON` value too small, ray still intersects with itself
503
+ **Fix**: Adjust EPSILON based on scene scale; typical values 1e-3 ~ 1e-2
504
+
505
+ ### Error 3: Variable Used as Loop Upper Bound
506
+ **Symptom**: WebGL2 compilation failure or shader crash
507
+ **Cause**: In GLSL ES 3.0, `for` loop upper bounds must be constants
508
+ **Fix**: Use `#define` for loop upper bounds, and keep bounds to 4-5 iterations max
509
+
510
+ ### Error 4: Division by Zero Causing NaN
511
+ **Symptom**: Stripe patterns from NaN propagation across the screen
512
+ **Cause**: Division not protected when ray direction components are zero
513
+ **Fix**: Always use `max(abs(x), 1e-8)` or similar protection
514
+
515
+ ### Error 5: Missing Hash Function in Refraction Variant
516
+ **Symptom**: Compilation error "undefined function 'hash1'"
517
+ **Fix**: Add the function definition when using the refraction variant:
518
+ ```glsl
519
+ float hash1(float p) {
520
+ return fract(sin(p) * 43758.5453);
521
+ }
522
+ ```
523
+
524
+ ## Performance & Composition
525
+
526
+ **Performance tips**:
527
+ - **Distance bound clipping**: Shorten `distBound.y` after each closer intersection; subsequent objects are automatically skipped
528
+ - **Bounding sphere pre-test**: Pre-screen with bounding sphere for complex geometry (torus, etc.)
529
+ - **Shadow ray simplification**: Only need to determine occlusion, no normal calculation needed
530
+ - **Avoid unnecessary sqrt**: Return early when discriminant is negative; `c > 0.0 && b > 0.0` for fast rejection
531
+ - **Grid acceleration**: Use 3D DDA grid traversal for large numbers of similar primitives
532
+
533
+ **Composition approaches**:
534
+ - **+ Raymarching SDF**: Analytic primitives define major structures, SDF handles complex details
535
+ - **+ Volume effects**: Analytic intersection provides precise entry/exit distances for volume sampling within the range
536
+ - **+ PBR materials**: Precise normals plug directly into Cook-Torrance and other BRDFs
537
+ - **+ Spatial transforms**: Rotate/translate rays to reuse the same intersection functions
538
+ - **+ Analytic AA/AO/soft shadows**: Fully analytic pipeline, zero noise
539
+
540
+ ## Further Reading
541
+
542
+ For complete step-by-step tutorials, mathematical derivations, and advanced usage, see [reference](../reference/analytic-ray-tracing.md)
@@ -0,0 +1,124 @@
1
+ # Anti-Aliasing Techniques
2
+
3
+ ## Use Cases
4
+ - Eliminating jagged edges (staircase artifacts) in ray-marched or SDF-rendered scenes
5
+ - Smooth 2D SDF shape rendering
6
+ - Post-process edge smoothing for any shader output
7
+ - Temporal smoothing for noise reduction
8
+
9
+ ## Core Principles
10
+
11
+ Anti-aliasing in shaders differs from rasterization pipelines. Without hardware MSAA on procedural geometry, we rely on analytical or post-process approaches.
12
+
13
+ ## Techniques
14
+
15
+ ### 1. Supersampling (SSAA) for Ray Marching
16
+
17
+ Render multiple sub-pixel samples and average:
18
+ ```glsl
19
+ #define AA 2 // 1=off, 2=4x, 3=9x
20
+ void mainImage(out vec4 fragColor, in vec2 fragCoord) {
21
+ vec3 totalColor = vec3(0.0);
22
+ for (int m = 0; m < AA; m++)
23
+ for (int n = 0; n < AA; n++) {
24
+ vec2 offset = vec2(float(m), float(n)) / float(AA) - 0.5;
25
+ vec2 uv = (2.0 * (fragCoord + offset) - iResolution.xy) / iResolution.y;
26
+ vec3 col = render(uv);
27
+ totalColor += col;
28
+ }
29
+ fragColor = vec4(totalColor / float(AA * AA), 1.0);
30
+ }
31
+ ```
32
+ Cost: AA^2 × full render. Use AA=2 for quality, AA=1 for development.
33
+
34
+ ### 2. SDF Analytical Anti-Aliasing
35
+
36
+ For 2D SDF shapes, use pixel width to compute smooth edges:
37
+ ```glsl
38
+ float d = sdShape(uv);
39
+ float fw = fwidth(d); // screen-space derivative of SDF
40
+ float alpha = smoothstep(fw, -fw, d); // smooth edge over exactly 1 pixel
41
+
42
+ // Alternative: manual pixel width for more control
43
+ float pixelWidth = 2.0 / iResolution.y; // approximate pixel size in UV space
44
+ float alpha2 = smoothstep(pixelWidth, -pixelWidth, d);
45
+ ```
46
+
47
+ For 3D SDF scenes, apply anti-aliasing at the edge of geometry:
48
+ ```glsl
49
+ // After ray marching, at the surface:
50
+ float edgeFade = 1.0 - smoothstep(0.0, 0.01 * t, lastSdfValue);
51
+ // t = ray distance — scales threshold with distance for consistent edge width
52
+ ```
53
+
54
+ ### 3. Temporal Anti-Aliasing (TAA) Basics
55
+
56
+ Blend current frame with previous frame using a multipass buffer:
57
+ ```glsl
58
+ // Buffer A: render with sub-pixel jitter
59
+ vec2 jitter = (hash22(vec2(iFrame)) - 0.5) / iResolution.xy;
60
+ vec2 uv = (fragCoord + jitter) / iResolution.xy;
61
+ vec3 currentColor = render(uv);
62
+
63
+ // Buffer A output: store current render
64
+ fragColor = vec4(currentColor, 1.0);
65
+
66
+ // Image shader: blend with history
67
+ vec3 current = texture(iChannel0, fragCoord / iResolution.xy).rgb; // this frame
68
+ vec3 history = texture(iChannel1, fragCoord / iResolution.xy).rgb; // previous frame
69
+ float blend = 0.9; // higher = smoother but more ghosting
70
+ fragColor = vec4(mix(current, history, blend), 1.0);
71
+ ```
72
+ Note: Full TAA also needs motion vectors and neighborhood clamping to avoid ghosting.
73
+
74
+ ### 4. FXAA (Fast Approximate Anti-Aliasing)
75
+
76
+ Simplified post-process edge detection and smoothing:
77
+ ```glsl
78
+ vec3 fxaa(sampler2D tex, vec2 uv, vec2 texelSize) {
79
+ // Sample center and 4 neighbors
80
+ vec3 rgbM = texture(tex, uv).rgb;
81
+ vec3 rgbN = texture(tex, uv + vec2(0.0, texelSize.y)).rgb;
82
+ vec3 rgbS = texture(tex, uv - vec2(0.0, texelSize.y)).rgb;
83
+ vec3 rgbE = texture(tex, uv + vec2(texelSize.x, 0.0)).rgb;
84
+ vec3 rgbW = texture(tex, uv - vec2(texelSize.x, 0.0)).rgb;
85
+
86
+ // Luma for edge detection
87
+ vec3 lumaCoeff = vec3(0.299, 0.587, 0.114);
88
+ float lumaN = dot(rgbN, lumaCoeff);
89
+ float lumaS = dot(rgbS, lumaCoeff);
90
+ float lumaE = dot(rgbE, lumaCoeff);
91
+ float lumaW = dot(rgbW, lumaCoeff);
92
+ float lumaM = dot(rgbM, lumaCoeff);
93
+
94
+ float lumaMin = min(lumaM, min(min(lumaN, lumaS), min(lumaE, lumaW)));
95
+ float lumaMax = max(lumaM, max(max(lumaN, lumaS), max(lumaE, lumaW)));
96
+ float lumaRange = lumaMax - lumaMin;
97
+
98
+ // Skip if edge contrast is low
99
+ if (lumaRange < max(0.0312, lumaMax * 0.125)) return rgbM;
100
+
101
+ // Blend along edge direction
102
+ vec2 dir;
103
+ dir.x = -((lumaN + lumaS) - 2.0 * lumaM);
104
+ dir.y = ((lumaE + lumaW) - 2.0 * lumaM);
105
+ float dirReduce = max(lumaRange * 0.25, 1.0 / 128.0);
106
+ float rcpDirMin = 1.0 / (min(abs(dir.x), abs(dir.y)) + dirReduce);
107
+ dir = clamp(dir * rcpDirMin, -8.0, 8.0) * texelSize;
108
+
109
+ vec3 rgbA = 0.5 * (texture(tex, uv + dir * (1.0/3.0 - 0.5)).rgb +
110
+ texture(tex, uv + dir * (2.0/3.0 - 0.5)).rgb);
111
+ return rgbA;
112
+ }
113
+ ```
114
+
115
+ ## Choosing the Right Approach
116
+
117
+ | Method | Cost | Quality | Best For |
118
+ |--------|------|---------|----------|
119
+ | SSAA 2x2 | 4× render | Excellent | Final quality renders |
120
+ | SDF analytical | Minimal | Great for SDF | 2D shapes, UI elements |
121
+ | TAA | 1× + blend | Good + temporal | Animated scenes with multipass |
122
+ | FXAA | 1 pass post | Good | Any scene, post-process only |
123
+
124
+ → For deeper details, see [reference/anti-aliasing.md](../reference/anti-aliasing.md)