@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,651 @@
1
+ # Analytic Ray Tracing - Detailed Reference
2
+
3
+ This document is a detailed supplement to [SKILL.md](SKILL.md), covering prerequisite knowledge, step-by-step tutorial, mathematical derivations, and advanced usage.
4
+
5
+ ## Prerequisites
6
+
7
+ - **Vector math fundamentals**: Dot product `dot()`, cross product `cross()`, vector normalization `normalize()`
8
+ - **Quadratic equation solving**: Discriminant `b²-4ac`, meaning of the two roots
9
+ - **Ray parametric representation**: `P(t) = ro + t * rd`, where `ro` is the ray origin, `rd` is the direction, `t` is the distance
10
+ - **GLSL fundamentals**: `struct`, `inout` parameters, `vec3`/`vec4` operations
11
+ - **ShaderToy framework**: `mainImage()` function, `iResolution`, `iTime`, and other uniforms
12
+
13
+ ## Use Cases (Complete List)
14
+
15
+ - When rendering scenes composed of geometric primitives (spheres, planes, boxes, cylinders, tori, etc.)
16
+ - When precise surface intersection points, normals, and distances are needed (no iterative approximation required)
17
+ - When efficient ray intersection is needed in real-time rendering (several times faster than ray marching)
18
+ - Building the underlying geometric engine for ray tracers and path tracers
19
+ - Creating visualization effects for hard-surface modeling (jewelry, mechanical parts, chess scenes, etc.)
20
+ - Scenes requiring precise shadows, reflections, and refractions (analytic solutions have no sampling error)
21
+
22
+ ## Core Principles in Detail
23
+
24
+ The core idea of analytic ray tracing is: substitute the ray equation `P(t) = O + tD` into the implicit equation of the geometric body, obtaining an algebraic equation in `t`, then solve it using closed-form formulas.
25
+
26
+ ### Unified Framework
27
+
28
+ All analytic intersection functions follow the same pattern:
29
+
30
+ 1. **Set up equation**: Substitute the ray parametric form into the geometry's implicit equation
31
+ 2. **Simplify and solve**: Use algebraic identities to reduce to a standard form (quadratic/quartic equation)
32
+ 3. **Discriminant check**: Discriminant < 0 indicates no intersection
33
+ 4. **Select nearest intersection**: Take the smallest positive root satisfying distance constraints
34
+ 5. **Compute normal**: Evaluate the gradient of the implicit equation at the intersection point
35
+
36
+ ### Key Mathematical Formulas
37
+
38
+ **Sphere** `|P-C|² = r²` → quadratic equation: `t² + 2bt + c = 0`
39
+
40
+ **Plane** `N·P + d = 0` → linear equation: `t = -(N·O + d) / (N·D)`
41
+
42
+ **Box** Intersection of three pairs of parallel planes → Slab Method: `tN = max(t1.x, t1.y, t1.z), tF = min(t2.x, t2.y, t2.z)`
43
+
44
+ **Ellipsoid** `|P/R|² = 1` → sphere intersection in scaled space
45
+
46
+ **Torus** `(|P_xy| - R)² + P_z² = r²` → quartic equation, solved via resolvent cubic
47
+
48
+ ## Implementation Steps in Detail
49
+
50
+ ### Step 1: Ray Generation
51
+
52
+ **What**: Generate a ray from the camera position through each pixel.
53
+
54
+ **Why**: This is the starting point of ray tracing. Each pixel corresponds to a ray from the camera through the near plane. The standard approach is to construct a camera coordinate system (right, up, forward) and map normalized screen coordinates to world-space directions.
55
+
56
+ ```glsl
57
+ // Construct camera ray
58
+ vec3 generateRay(vec2 fragCoord, vec2 resolution, vec3 ro, vec3 ta) {
59
+ vec2 p = (2.0 * fragCoord - resolution) / resolution.y;
60
+
61
+ // Build camera coordinate system
62
+ vec3 cw = normalize(ta - ro); // forward
63
+ vec3 cu = normalize(cross(cw, vec3(0, 1, 0))); // right
64
+ vec3 cv = cross(cu, cw); // up
65
+
66
+ float fov = 1.5; // Adjustable: field of view control (larger = narrower angle)
67
+ vec3 rd = normalize(p.x * cu + p.y * cv + fov * cw);
68
+ return rd;
69
+ }
70
+ ```
71
+
72
+ ### Step 2: Ray-Sphere Intersection
73
+
74
+ **What**: Compute the exact intersection of a ray with a sphere. This is the most fundamental and commonly used intersection function.
75
+
76
+ **Why**: Substituting the ray `P = O + tD` into the sphere equation `|P - C|² = r²` and expanding yields a quadratic equation in `t`. The discriminant `h = b² - c` determines the number of intersections (0, 1, or 2); the smallest positive root is the nearest intersection.
77
+
78
+ This is a ubiquitous technique, with two common variants:
79
+
80
+ **Code (optimized version, assumes sphere centered at origin)**:
81
+ ```glsl
82
+ // Ray-sphere intersection (optimized version for sphere at origin)
83
+ // ro: ray origin (sphere center offset already subtracted)
84
+ // rd: ray direction (must be normalized)
85
+ // r: sphere radius
86
+ // Returns: intersection distance, MAX_DIST if no intersection
87
+ float iSphere(vec3 ro, vec3 rd, vec2 distBound, inout vec3 normal, float r) {
88
+ float b = dot(ro, rd);
89
+ float c = dot(ro, ro) - r * r;
90
+ float h = b * b - c; // Discriminant (optimized: 4a factor omitted)
91
+ if (h < 0.0) return MAX_DIST; // No intersection
92
+
93
+ h = sqrt(h);
94
+ float d1 = -b - h; // Near intersection
95
+ float d2 = -b + h; // Far intersection
96
+
97
+ // Select the nearest intersection within valid range
98
+ if (d1 >= distBound.x && d1 <= distBound.y) {
99
+ normal = normalize(ro + rd * d1);
100
+ return d1;
101
+ } else if (d2 >= distBound.x && d2 <= distBound.y) {
102
+ normal = normalize(ro + rd * d2);
103
+ return d2;
104
+ }
105
+ return MAX_DIST;
106
+ }
107
+ ```
108
+
109
+ **Code (general version, arbitrary sphere center)**:
110
+ ```glsl
111
+ // Ray-sphere intersection (general version, supports arbitrary sphere center)
112
+ // sph: vec4(center.xyz, radius)
113
+ float sphIntersect(vec3 ro, vec3 rd, vec4 sph) {
114
+ vec3 oc = ro - sph.xyz;
115
+ float b = dot(oc, rd);
116
+ float c = dot(oc, oc) - sph.w * sph.w;
117
+ float h = b * b - c;
118
+ if (h < 0.0) return -1.0;
119
+ return -b - sqrt(h); // Returns only the near intersection
120
+ }
121
+ ```
122
+
123
+ ### Step 3: Ray-Plane Intersection
124
+
125
+ **What**: Compute the intersection of a ray with an infinite plane.
126
+
127
+ **Why**: The plane equation `N·P + d = 0` substituted with the ray yields a linear equation, solved directly by division. This is the simplest intersection primitive, commonly used for floors, walls, Cornell Boxes, etc. Note: when `N·D ≈ 0`, the ray is parallel to the plane.
128
+
129
+ ```glsl
130
+ // Ray-plane intersection
131
+ // planeNormal: plane normal (must be normalized)
132
+ // planeDist: distance from plane to origin (N·P + planeDist = 0)
133
+ float iPlane(vec3 ro, vec3 rd, vec2 distBound, inout vec3 normal,
134
+ vec3 planeNormal, float planeDist) {
135
+ float denom = dot(rd, planeNormal);
136
+ // Only intersects when ray hits the front face of the plane
137
+ if (denom > 0.0) return MAX_DIST;
138
+
139
+ float d = -(dot(ro, planeNormal) + planeDist) / denom;
140
+
141
+ if (d < distBound.x || d > distBound.y) return MAX_DIST;
142
+
143
+ normal = planeNormal;
144
+ return d;
145
+ }
146
+
147
+ // Quick version: horizontal ground plane (y-axis aligned)
148
+ float iGroundPlane(vec3 ro, vec3 rd, float height) {
149
+ return -(ro.y - height) / rd.y;
150
+ }
151
+ ```
152
+
153
+ ### Step 4: Ray-Box Intersection (Slab Method)
154
+
155
+ **What**: Compute the intersection of a ray with an axis-aligned bounding box (AABB).
156
+
157
+ **Why**: The Slab Method treats the box as the intersection of three pairs of parallel planes. It computes the ray's intersection with each pair of planes `(tmin, tmax)`, then takes the maximum of all `tmin` values and the minimum of all `tmax` values. If `tN > tF` or `tF < 0`, there is no intersection. The normal is determined by which face was hit first.
158
+
159
+ ```glsl
160
+ // Ray-box intersection (Slab Method, optimized version)
161
+ // boxSize: box half-size vec3(halfW, halfH, halfD)
162
+ float iBox(vec3 ro, vec3 rd, vec2 distBound, inout vec3 normal, vec3 boxSize) {
163
+ vec3 m = sign(rd) / max(abs(rd), 1e-8); // Avoid division by zero
164
+ vec3 n = m * ro;
165
+ vec3 k = abs(m) * boxSize;
166
+
167
+ vec3 t1 = -n - k; // Near plane intersections
168
+ vec3 t2 = -n + k; // Far plane intersections
169
+
170
+ float tN = max(max(t1.x, t1.y), t1.z); // Entry distance into the box
171
+ float tF = min(min(t2.x, t2.y), t2.z); // Exit distance from the box
172
+
173
+ if (tN > tF || tF <= 0.0) return MAX_DIST; // No intersection
174
+
175
+ if (tN >= distBound.x && tN <= distBound.y) {
176
+ // Normal: determine which face was hit
177
+ normal = -sign(rd) * step(t1.yzx, t1.xyz) * step(t1.zxy, t1.xyz);
178
+ return tN;
179
+ } else if (tF >= distBound.x && tF <= distBound.y) {
180
+ normal = -sign(rd) * step(t1.yzx, t1.xyz) * step(t1.zxy, t1.xyz);
181
+ return tF;
182
+ }
183
+ return MAX_DIST;
184
+ }
185
+ ```
186
+
187
+ ### Step 5: Ray-Ellipsoid Intersection
188
+
189
+ **What**: Compute the intersection of a ray with an ellipsoid.
190
+
191
+ **Why**: An ellipsoid can be viewed as a sphere scaled differently along each axis. By dividing both the ray origin and direction by the ellipsoid radii `R`, a sphere intersection is performed in scaled space, then the normal is transformed back to the original space. This "space transformation" technique is one of the core ideas of analytic intersection.
192
+
193
+ ```glsl
194
+ // Ray-ellipsoid intersection
195
+ // rad: vec3(rx, ry, rz) three-axis radii
196
+ float iEllipsoid(vec3 ro, vec3 rd, vec2 distBound, inout vec3 normal, vec3 rad) {
197
+ // Transform to unit sphere space
198
+ vec3 ocn = ro / rad;
199
+ vec3 rdn = rd / rad;
200
+
201
+ float a = dot(rdn, rdn);
202
+ float b = dot(ocn, rdn);
203
+ float c = dot(ocn, ocn);
204
+ float h = b * b - a * (c - 1.0);
205
+
206
+ if (h < 0.0) return MAX_DIST;
207
+
208
+ float d = (-b - sqrt(h)) / a;
209
+
210
+ if (d < distBound.x || d > distBound.y) return MAX_DIST;
211
+
212
+ // Normal in original space: gradient of implicit equation |P/R|²=1 → P/(R²)
213
+ normal = normalize((ro + d * rd) / rad);
214
+ return d;
215
+ }
216
+ ```
217
+
218
+ ### Step 6: Ray-Cylinder Intersection
219
+
220
+ **What**: Compute the intersection of a ray with a finite cylinder (with end caps).
221
+
222
+ **Why**: Cylinder intersection has two parts: (1) project the problem onto a plane perpendicular to the axis, solving a quadratic equation for side surface intersections; (2) check if the intersection is within the finite length, and if not, test the end cap planes.
223
+
224
+ ```glsl
225
+ // Ray-capped cylinder intersection
226
+ // pa, pb: two endpoints of the cylinder axis
227
+ // ra: cylinder radius
228
+ float iCylinder(vec3 ro, vec3 rd, vec2 distBound, inout vec3 normal,
229
+ vec3 pa, vec3 pb, float ra) {
230
+ vec3 ca = pb - pa; // Cylinder axis vector
231
+ vec3 oc = ro - pa;
232
+
233
+ float caca = dot(ca, ca);
234
+ float card = dot(ca, rd);
235
+ float caoc = dot(ca, oc);
236
+
237
+ // Project onto plane perpendicular to axis, build quadratic equation
238
+ float a = caca - card * card;
239
+ float b = caca * dot(oc, rd) - caoc * card;
240
+ float c = caca * dot(oc, oc) - caoc * caoc - ra * ra * caca;
241
+ float h = b * b - a * c;
242
+
243
+ if (h < 0.0) return MAX_DIST;
244
+
245
+ h = sqrt(h);
246
+ float d = (-b - h) / a;
247
+
248
+ // Check if side intersection is within finite length
249
+ float y = caoc + d * card;
250
+ if (y > 0.0 && y < caca && d >= distBound.x && d <= distBound.y) {
251
+ normal = (oc + d * rd - ca * y / caca) / ra;
252
+ return d;
253
+ }
254
+
255
+ // Test end caps
256
+ d = ((y < 0.0 ? 0.0 : caca) - caoc) / card;
257
+ if (abs(b + a * d) < h && d >= distBound.x && d <= distBound.y) {
258
+ normal = normalize(ca * sign(y) / caca);
259
+ return d;
260
+ }
261
+
262
+ return MAX_DIST;
263
+ }
264
+ ```
265
+
266
+ ### Step 7: Scene Intersection & Shading
267
+
268
+ **What**: Traverse all objects in the scene, find the nearest intersection, and compute lighting.
269
+
270
+ **Why**: Scene traversal in analytic ray tracing is linear — each ray tests all objects sequentially. Through the unified intersection API (`distBound` parameter), each time a nearer intersection is found, the search range is automatically shortened, achieving implicit culling.
271
+
272
+ ```glsl
273
+ #define MAX_DIST 1e10
274
+
275
+ // Unified scene intersection function
276
+ // Returns vec3(current nearest distance, final intersection distance, material ID)
277
+ vec3 worldHit(vec3 ro, vec3 rd, vec2 dist, out vec3 normal) {
278
+ vec3 d = vec3(dist, 0.0); // (distBound.x, distBound.y, matID)
279
+ vec3 tmpNormal;
280
+
281
+ // Ground plane
282
+ float t = iPlane(ro, rd, d.xy, normal, vec3(0, 1, 0), 0.0);
283
+ if (t < d.y) { d.y = t; d.z = 1.0; }
284
+
285
+ // Sphere
286
+ t = iSphere(ro - vec3(0, 0.5, 0), rd, d.xy, tmpNormal, 0.5);
287
+ if (t < d.y) { d.y = t; d.z = 2.0; normal = tmpNormal; }
288
+
289
+ // Box
290
+ t = iBox(ro - vec3(2, 0.5, 0), rd, d.xy, tmpNormal, vec3(0.5));
291
+ if (t < d.y) { d.y = t; d.z = 3.0; normal = tmpNormal; }
292
+
293
+ return d;
294
+ }
295
+
296
+ // Basic shading (Lambertian + shadow)
297
+ vec3 shade(vec3 pos, vec3 normal, vec3 rd, vec3 albedo) {
298
+ vec3 lightDir = normalize(vec3(-1.0, 0.75, 1.0));
299
+
300
+ // Diffuse
301
+ float diff = max(dot(normal, lightDir), 0.0);
302
+
303
+ // Ambient
304
+ float amb = 0.5 + 0.5 * normal.y;
305
+
306
+ return albedo * (amb * 0.2 + diff * 0.8);
307
+ }
308
+ ```
309
+
310
+ ### Step 8: Reflection & Refraction
311
+
312
+ **What**: Implement iterative reflection/refraction for non-recursive ray bounces.
313
+
314
+ **Why**: GLSL does not support recursion, so loops are used to simulate multiple bounces. At each bounce, the intersection point plus offset (epsilon) serves as the new ray origin, with the reflected/refracted direction as the new direction. The Fresnel term determines the energy distribution between reflection and refraction.
315
+
316
+ ```glsl
317
+ #define MAX_BOUNCES 4 // Adjustable: number of reflection bounces (more = more realistic but slower)
318
+ #define EPSILON 0.001 // Adjustable: self-intersection offset
319
+
320
+ // Schlick Fresnel approximation
321
+ float schlickFresnel(float cosTheta, float F0) {
322
+ return F0 + (1.0 - F0) * pow(1.0 - cosTheta, 5.0);
323
+ }
324
+
325
+ vec3 radiance(vec3 ro, vec3 rd) {
326
+ vec3 color = vec3(0.0);
327
+ vec3 mask = vec3(1.0);
328
+ vec3 normal;
329
+
330
+ for (int i = 0; i < MAX_BOUNCES; i++) {
331
+ vec3 res = worldHit(ro, rd, vec2(EPSILON, MAX_DIST), normal);
332
+
333
+ if (res.z < 0.5) {
334
+ // No object hit → sky color
335
+ color += mask * vec3(0.6, 0.8, 1.0);
336
+ break;
337
+ }
338
+
339
+ vec3 hitPos = ro + rd * res.y;
340
+ vec3 albedo = getAlbedo(res.z);
341
+
342
+ // Fresnel reflection coefficient
343
+ float F = schlickFresnel(max(0.0, dot(normal, -rd)), 0.04);
344
+
345
+ // Add diffuse contribution
346
+ color += mask * (1.0 - F) * shade(hitPos, normal, rd, albedo);
347
+
348
+ // Update mask and ray (reflection)
349
+ mask *= F * albedo;
350
+ rd = reflect(rd, normal);
351
+ ro = hitPos + EPSILON * rd;
352
+ }
353
+
354
+ return color;
355
+ }
356
+ ```
357
+
358
+ ## Complete Code Template
359
+
360
+ For a complete runnable ShaderToy template, see the "Complete Code Template" section in [SKILL.md](SKILL.md), which includes sphere, plane, and box primitives with support for reflections and Blinn-Phong shading.
361
+
362
+ The following table describes the adjustable parameters in the template:
363
+
364
+ | Parameter | Default | Description |
365
+ |-----------|---------|-------------|
366
+ | `MAX_DIST` | `1e10` | Maximum trace distance |
367
+ | `EPSILON` | `0.001` | Self-intersection offset |
368
+ | `MAX_BOUNCES` | `4` | Maximum number of reflections |
369
+ | `NUM_SPHERES` | `3` | Number of spheres |
370
+ | `FOV` | `1.5` | Field of view (larger = narrower angle) |
371
+ | `GAMMA` | `2.2` | Gamma correction value |
372
+ | `SHADOW_ENABLED` | `true` | Whether shadows are enabled |
373
+
374
+ ## Variant Details
375
+
376
+ ### Variant 1: Path Tracing
377
+
378
+ Difference from base version: Replaces deterministic reflection with random hemisphere sampling to achieve global illumination. Requires multi-frame accumulation and random number generation.
379
+
380
+ Key code:
381
+ ```glsl
382
+ // Cosine-weighted random hemisphere direction
383
+ vec3 cosWeightedRandomHemisphereDirection(vec3 n, inout float seed) {
384
+ vec2 r = hash2(seed);
385
+ vec3 uu = normalize(cross(n, abs(n.y) > 0.5 ? vec3(1,0,0) : vec3(0,1,0)));
386
+ vec3 vv = cross(uu, n);
387
+ float ra = sqrt(r.y);
388
+ float rx = ra * cos(6.2831 * r.x);
389
+ float ry = ra * sin(6.2831 * r.x);
390
+ float rz = sqrt(1.0 - r.y);
391
+ return normalize(rx * uu + ry * vv + rz * n);
392
+ }
393
+
394
+ // Replace reflect in the bounce loop:
395
+ rd = cosWeightedRandomHemisphereDirection(normal, seed);
396
+ ro = hitPos + EPSILON * rd;
397
+ mask *= mat.albedo; // No Fresnel weighting
398
+ ```
399
+
400
+ ### Variant 2: Analytical Soft Shadow
401
+
402
+ Difference from base version: Uses the analytical distance from a sphere to the ray to compute soft shadow gradients, without additional sampling.
403
+
404
+ Key code:
405
+ ```glsl
406
+ // Sphere soft shadow
407
+ float sphSoftShadow(vec3 ro, vec3 rd, vec4 sph) {
408
+ vec3 oc = ro - sph.xyz;
409
+ float b = dot(oc, rd);
410
+ float c = dot(oc, oc) - sph.w * sph.w;
411
+ float h = b * b - c;
412
+ // d: closest distance from ray to sphere surface, t: distance along ray
413
+ float d = sqrt(max(0.0, sph.w * sph.w - h)) - sph.w;
414
+ float t = -b - sqrt(max(h, 0.0));
415
+ return (t > 0.0) ? max(d, 0.0) / t : 1.0;
416
+ }
417
+ ```
418
+
419
+ ### Variant 3: Analytical Antialiasing
420
+
421
+ Difference from base version: Uses the analytical distance from a sphere to the ray to compute pixel coverage, achieving edge smoothing without multi-sampling.
422
+
423
+ Key code:
424
+ ```glsl
425
+ // Sphere distance information (for antialiasing)
426
+ vec2 sphDistances(vec3 ro, vec3 rd, vec4 sph) {
427
+ vec3 oc = ro - sph.xyz;
428
+ float b = dot(oc, rd);
429
+ float c = dot(oc, oc) - sph.w * sph.w;
430
+ float h = b * b - c;
431
+ float d = sqrt(max(0.0, sph.w * sph.w - h)) - sph.w; // Closest distance
432
+ return vec2(d, -b - sqrt(max(h, 0.0))); // (distance, depth)
433
+ }
434
+
435
+ // In rendering, use coverage instead of hard boundary:
436
+ float px = 2.0 / iResolution.y; // Pixel size
437
+ vec2 dt = sphDistances(ro, rd, sph);
438
+ float coverage = 1.0 - clamp(dt.x / (dt.y * px), 0.0, 1.0);
439
+ col = mix(bgColor, sphereColor, coverage);
440
+ ```
441
+
442
+ ### Variant 4: Refraction (with Snell's Law)
443
+
444
+ Difference from base version: Adds refracted rays; requires detecting whether the ray hits the surface from outside or inside, and flipping the normal accordingly.
445
+
446
+ Key code:
447
+ ```glsl
448
+ float refrIndex = 1.5; // Adjustable: index of refraction (glass≈1.5, water≈1.33)
449
+
450
+ // Add refraction branch in the bounce loop:
451
+ bool inside = dot(rd, normal) > 0.0;
452
+ vec3 n = inside ? -normal : normal;
453
+ float eta = inside ? refrIndex : 1.0 / refrIndex;
454
+ vec3 refracted = refract(rd, n, eta);
455
+
456
+ // Fresnel determines reflection/refraction ratio
457
+ float cosI = abs(dot(rd, n));
458
+ float F = schlick(cosI, pow((1.0 - eta) / (1.0 + eta), 2.0));
459
+
460
+ if (refracted != vec3(0.0) && hash1(seed) > F) {
461
+ rd = refracted;
462
+ } else {
463
+ rd = reflect(rd, n);
464
+ }
465
+ ro = hitPos + rd * EPSILON;
466
+ ```
467
+
468
+ ### Variant 5: Higher-Order Algebraic Surfaces (Quartic Surfaces - Sphere4, Goursat, Torus)
469
+
470
+ Difference from base version: Substitutes the ray into quartic equations, solving via the resolvent cubic method. Suitable for tori, super-ellipsoids, and similar shapes.
471
+
472
+ Key code:
473
+ ```glsl
474
+ // Ray-Sphere4 intersection (|x|⁴+|y|⁴+|z|⁴ = r⁴)
475
+ float iSphere4(vec3 ro, vec3 rd, vec2 distBound, inout vec3 normal, float ra) {
476
+ float r2 = ra * ra;
477
+ vec3 d2 = rd*rd, d3 = d2*rd;
478
+ vec3 o2 = ro*ro, o3 = o2*ro;
479
+ float ka = 1.0 / dot(d2, d2);
480
+
481
+ float k0 = ka * dot(ro, d3);
482
+ float k1 = ka * dot(o2, d2);
483
+ float k2 = ka * dot(o3, rd);
484
+ float k3 = ka * (dot(o2, o2) - r2 * r2);
485
+
486
+ // Reduce to depressed quartic, solve via resolvent cubic
487
+ float c0 = k1 - k0 * k0;
488
+ float c1 = k2 + 2.0 * k0 * (k0 * k0 - 1.5 * k1);
489
+ float c2 = k3 - 3.0 * k0 * (k0 * (k0 * k0 - 2.0 * k1) + 4.0/3.0 * k2);
490
+
491
+ float p = c0 * c0 * 3.0 + c2;
492
+ float q = c0 * c0 * c0 - c0 * c2 + c1 * c1;
493
+ float h = q * q - p * p * p * (1.0/27.0);
494
+
495
+ if (h < 0.0) return MAX_DIST; // Convex body: only need to handle 2 real roots case
496
+
497
+ h = sqrt(h);
498
+ float s = sign(q+h) * pow(abs(q+h), 1.0/3.0);
499
+ float t = sign(q-h) * pow(abs(q-h), 1.0/3.0);
500
+
501
+ vec2 v = vec2((s+t) + c0*4.0, (s-t) * sqrt(3.0)) * 0.5;
502
+ float r = length(v);
503
+ float d = -abs(v.y) / sqrt(r + v.x) - c1/r - k0;
504
+
505
+ if (d >= distBound.x && d <= distBound.y) {
506
+ vec3 pos = ro + rd * d;
507
+ normal = normalize(pos * pos * pos); // Gradient: 4x³
508
+ return d;
509
+ }
510
+ return MAX_DIST;
511
+ }
512
+ ```
513
+
514
+ ## Performance Optimization Details
515
+
516
+ ### 1. Distance Bound Pruning
517
+
518
+ The most important optimization. Each time a nearer intersection is found, `distBound.y` is shortened, and subsequent objects are automatically skipped:
519
+ ```glsl
520
+ // distBound.y continuously shrinks with opU
521
+ d = opU(d, iSphere(..., d.xy, ...), matId);
522
+ d = opU(d, iBox(..., d.xy, ...), matId); // Automatically skips objects farther than current hit
523
+ ```
524
+
525
+ ### 2. Bounding Sphere / Bounding Box Pre-Test
526
+
527
+ For complex geometry (tori, Goursat surfaces, etc.), test a simple bounding sphere first to check for possible intersection:
528
+ ```glsl
529
+ // Test bounding sphere before torus intersection
530
+ if (iSphere(ro, rd, distBound, tmpNormal, torus.x + torus.y) > distBound.y) {
531
+ return MAX_DIST; // Bounding sphere missed, skip expensive quartic equation
532
+ }
533
+ ```
534
+
535
+ ### 3. Shadow Ray Early Exit
536
+
537
+ Shadow detection only needs to know "whether there is an occluder," not the nearest intersection, so a simplified intersection function can be used:
538
+ ```glsl
539
+ // Fast sphere occlusion test (only checks for intersection, no normal computation)
540
+ float fastSphIntersect(vec3 ro, vec3 rd, vec3 center, float r) {
541
+ vec3 v = ro - center;
542
+ float b = dot(v, rd);
543
+ float c = dot(v, v) - r * r;
544
+ float d = b * b - c;
545
+ if (d > 0.0) {
546
+ float t = -b - sqrt(d);
547
+ if (t > 0.0) return t;
548
+ t = -b + sqrt(d);
549
+ if (t > 0.0) return t;
550
+ }
551
+ return -1.0;
552
+ }
553
+ ```
554
+
555
+ ### 4. Grid Acceleration Structure
556
+
557
+ For large numbers of identical primitives (e.g., hundreds of spheres), use a spatial grid to accelerate ray traversal:
558
+ ```glsl
559
+ // 3D DDA grid traversal (for scenes with many spheres)
560
+ vec3 pos = floor(ro / GRIDSIZE) * GRIDSIZE;
561
+ vec3 ri = 1.0 / rd;
562
+ vec3 rs = sign(rd) * GRIDSIZE;
563
+ vec3 dis = (pos - ro + 0.5 * GRIDSIZE + rs * 0.5) * ri;
564
+
565
+ for (int i = 0; i < MAX_STEPS; i++) {
566
+ // Test spheres in current cell
567
+ testSphereInGrid(pos.xz, ro, rd, ...);
568
+ // DDA step to next cell
569
+ vec3 mm = step(dis.xyz, dis.zyx);
570
+ dis += mm * rs * ri;
571
+ pos += mm * rs;
572
+ }
573
+ ```
574
+
575
+ ### 5. Avoiding Unnecessary sqrt
576
+
577
+ Return early when the discriminant is negative, avoiding `sqrt()` on negative numbers. In some scenarios, the discriminant's sign can be used for coarse pre-filtering:
578
+ ```glsl
579
+ // Check if ray is heading toward sphere and not inside it
580
+ if (c > 0.0 && b > 0.0) return MAX_DIST; // Fast cull
581
+ ```
582
+
583
+ ## Combination Suggestions in Detail
584
+
585
+ ### 1. Analytic Intersection + Raymarching SDF
586
+
587
+ Use analytic primitives for large simple geometry (ground, bounding boxes), and SDF raymarching for complex details (fractals, smooth boolean operations). Analytic intersection provides precise start/end distances, accelerating marching convergence:
588
+ ```glsl
589
+ float d = iBox(ro, rd, distBound, normal, boxSize); // Analytic box
590
+ if (d < MAX_DIST) {
591
+ // Refine with SDF inside the box
592
+ float t = d;
593
+ for (int i = 0; i < 64; i++) {
594
+ float h = sdfScene(ro + t * rd);
595
+ if (h < 0.001) break;
596
+ t += h;
597
+ }
598
+ }
599
+ ```
600
+
601
+ ### 2. Analytic Intersection + Volumetric Effects
602
+
603
+ Use analytic intersection to obtain precise entry/exit distances, then perform volumetric sampling (clouds, fog, subsurface scattering) within that range:
604
+ ```glsl
605
+ // Use analytic ellipsoid intersection to obtain volume bounds
606
+ float tEnter = (-b - sqrt(h)) / a;
607
+ float tExit = (-b + sqrt(h)) / a;
608
+ float thickness = tExit - tEnter; // Analytic thickness
609
+
610
+ // Sample volume within [tEnter, tExit]
611
+ vec3 volumeColor = vec3(0.0);
612
+ float dt = (tExit - tEnter) / float(VOLUME_STEPS);
613
+ for (int i = 0; i < VOLUME_STEPS; i++) {
614
+ vec3 p = ro + rd * (tEnter + float(i) * dt);
615
+ volumeColor += sampleVolume(p) * dt;
616
+ }
617
+ ```
618
+
619
+ ### 3. Analytic Intersection + PBR Material System
620
+
621
+ Analytic intersection provides precise normals and intersection positions, feeding directly into Cook-Torrance and other PBR shading models:
622
+ ```glsl
623
+ // Cook-Torrance BRDF (requires precise normals)
624
+ float D = beckmannDistribution(NdotH, roughness);
625
+ float G = geometricAttenuation(NdotV, NdotL, VdotH, NdotH);
626
+ float F = fresnelSchlick(VdotH, F0);
627
+ vec3 specular = vec3(D * G * F) / (4.0 * NdotV * NdotL);
628
+ ```
629
+
630
+ ### 4. Analytic Intersection + Spatial Transforms
631
+
632
+ Reuse the same intersection function for transformed geometry by rotating/translating/scaling the ray:
633
+ ```glsl
634
+ // Rotate object: rotate the ray instead of the object
635
+ vec3 localRo = rotateY(ro - objectPos, angle);
636
+ vec3 localRd = rotateY(rd, angle);
637
+ float t = iBox(localRo, localRd, distBound, localNormal, boxSize);
638
+ // Transform normal back to world space
639
+ normal = rotateY(localNormal, -angle);
640
+ ```
641
+
642
+ ### 5. Analytic Intersection + Analytical AO / Soft Shadow / Antialiasing
643
+
644
+ A fully analytic rendering pipeline: intersection, shadows, occlusion, and edge smoothing all use closed-form formulas, producing zero noise:
645
+ ```glsl
646
+ // Fully analytic pipeline (no random sampling, no noise)
647
+ float t = sphIntersect(ro, rd, sph); // Analytic intersection
648
+ float shadow = sphSoftShadow(hitPos, ld, sph); // Analytic soft shadow
649
+ float ao = sphOcclusion(hitPos, normal, sph); // Analytic ambient occlusion
650
+ float coverage = sphAntiAlias(ro, rd, sph, px); // Analytic antialiasing
651
+ ```