@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,589 @@
1
+ # 3D Signed Distance Fields (3D SDF) Skill
2
+
3
+ ## Use Cases
4
+
5
+ - Real-time rendering of 3D geometry in ShaderToy / fragment shaders (no traditional meshes needed)
6
+ - Complex scenes composed from basic primitives (sphere, box, cylinder, torus, etc.)
7
+ - Smooth organic blending (character modeling, fluid blobs, biological forms)
8
+ - Infinitely repeating architectural/pattern structures (corridors, gear arrays, grids)
9
+ - Precise boolean operations (drilling holes, cutting, intersection) for sculpting geometry
10
+
11
+ ## Core Principles
12
+
13
+ An SDF returns the **signed distance** from any point in space to the nearest surface: positive = outside, negative = inside, zero = surface.
14
+
15
+ **Sphere Tracing**: advance along a ray, stepping by the current SDF value (the safe marching distance) at each step. The SDF guarantees no surface exists within that radius. A hit is registered when the distance falls below epsilon.
16
+
17
+ Key math:
18
+ - Sphere: `f(p) = |p| - r`
19
+ - Box: `f(p) = |max(|p|-b, 0)| + min(max(|p-b|), 0)`
20
+ - Union: `min(d1, d2)` / Subtraction: `max(d1, -d2)`
21
+ - Smooth union: `min(d1,d2) - h^2/4k`, `h = max(k-|d1-d2|, 0)`
22
+ - Normal = SDF gradient: `n = normalize(gradient of f(p))` (finite difference approximation)
23
+
24
+ ## Rendering Pipeline Overview
25
+
26
+ 1. **SDF Primitive Library** -- `sdSphere`, `sdBox`, `sdEllipsoid`, `sdTorus`, `sdCapsule`, `sdCylinder`
27
+ 2. **Boolean Operations** -- `opUnion`/`opSubtraction`/`opIntersection` + smooth variants `smin`/`smax`
28
+ 3. **Scene Definition** -- `map(p)` returns `vec2(distance, materialID)`, combining all primitives
29
+ 4. **Ray Marching** -- `raycast(ro, rd)` sphere tracing loop (128 steps, adaptive threshold `SURF_DIST * t`)
30
+ 5. **Normal Calculation** -- tetrahedral differencing (4 map calls, ZERO macro to prevent inlining)
31
+ 6. **Soft Shadows** -- quadratic stepping with `k*h/t` to estimate occlusion softness, Hermite smoothing
32
+ 7. **Ambient Occlusion** -- 5-layer sampling along the normal, comparing SDF values with expected distances
33
+ 8. **Camera + Rendering** -- look-at matrix, multiple lights (sun + sky + SSS), gamma correction, fog
34
+
35
+ ## Full Code Template
36
+
37
+ Runs directly in ShaderToy. Includes multi-primitive scene, smooth blending, soft shadows, AO, and material system.
38
+
39
+ **IMPORTANT:** When using the `vec2(distance, materialID)` material system, `smin` needs to handle `vec2` types. The template includes a `vec2 smin(vec2 a, vec2 b, float k)` overload that ensures the material ID is correctly passed through during smooth blending (taking the material of the closer distance).
40
+
41
+ ```glsl
42
+ // 3D SDF Full Rendering Pipeline Template - Runs in ShaderToy
43
+ #define AA 1 // Anti-aliasing (1=off, 2=4xAA, 3=9xAA)
44
+ #define MAX_STEPS 128
45
+ #define MAX_DIST 40.0
46
+ #define SURF_DIST 0.0001
47
+ #define SHADOW_STEPS 24
48
+ #define SHADOW_SOFTNESS 8.0
49
+ #define SMOOTH_K 0.3
50
+ #define ZERO (min(iFrame, 0))
51
+
52
+ // === SDF Primitives ===
53
+ float sdSphere(vec3 p, float r) { return length(p) - r; }
54
+ float sdBox(vec3 p, vec3 b) {
55
+ vec3 d = abs(p) - b;
56
+ return min(max(d.x, max(d.y, d.z)), 0.0) + length(max(d, 0.0));
57
+ }
58
+ float sdEllipsoid(vec3 p, vec3 r) {
59
+ float k0 = length(p / r); float k1 = length(p / (r * r));
60
+ return k0 * (k0 - 1.0) / k1;
61
+ }
62
+ float sdTorus(vec3 p, vec2 t) {
63
+ return length(vec2(length(p.xz) - t.x, p.y)) - t.y;
64
+ }
65
+ float sdCapsule(vec3 p, vec3 a, vec3 b, float r) {
66
+ vec3 pa = p - a, ba = b - a;
67
+ float h = clamp(dot(pa, ba) / dot(ba, ba), 0.0, 1.0);
68
+ return length(pa - ba * h) - r;
69
+ }
70
+ float sdCylinder(vec3 p, vec2 h) {
71
+ vec2 d = abs(vec2(length(p.xz), p.y)) - h;
72
+ return min(max(d.x, d.y), 0.0) + length(max(d, 0.0));
73
+ }
74
+
75
+ // === Extended SDF Primitives ===
76
+ float sdRoundBox(vec3 p, vec3 b, float r) {
77
+ vec3 q = abs(p) - b + r;
78
+ return length(max(q, 0.0)) + min(max(q.x, max(q.y, q.z)), 0.0) - r;
79
+ }
80
+
81
+ float sdBoxFrame(vec3 p, vec3 b, float e) {
82
+ p = abs(p) - b;
83
+ vec3 q = abs(p + e) - e;
84
+ return min(min(
85
+ length(max(vec3(p.x, q.y, q.z), 0.0)) + min(max(p.x, max(q.y, q.z)), 0.0),
86
+ length(max(vec3(q.x, p.y, q.z), 0.0)) + min(max(q.x, max(p.y, q.z)), 0.0)),
87
+ length(max(vec3(q.x, q.y, p.z), 0.0)) + min(max(q.x, max(q.y, p.z)), 0.0));
88
+ }
89
+
90
+ float sdCone(vec3 p, vec2 c, float h) {
91
+ vec2 q = h * vec2(c.x / c.y, -1.0);
92
+ vec2 w = vec2(length(p.xz), p.y);
93
+ vec2 a = w - q * clamp(dot(w, q) / dot(q, q), 0.0, 1.0);
94
+ vec2 b = w - q * vec2(clamp(w.x / q.x, 0.0, 1.0), 1.0);
95
+ float k = sign(q.y);
96
+ float d = min(dot(a, a), dot(b, b));
97
+ float s = max(k * (w.x * q.y - w.y * q.x), k * (w.y - q.y));
98
+ return sqrt(d) * sign(s);
99
+ }
100
+
101
+ float sdCappedCone(vec3 p, float h, float r1, float r2) {
102
+ vec2 q = vec2(length(p.xz), p.y);
103
+ vec2 k1 = vec2(r2, h);
104
+ vec2 k2 = vec2(r2 - r1, 2.0 * h);
105
+ vec2 ca = vec2(q.x - min(q.x, (q.y < 0.0) ? r1 : r2), abs(q.y) - h);
106
+ vec2 cb = q - k1 + k2 * clamp(dot(k1 - q, k2) / dot(k2, k2), 0.0, 1.0);
107
+ float s = (cb.x < 0.0 && ca.y < 0.0) ? -1.0 : 1.0;
108
+ return s * sqrt(min(dot(ca, ca), dot(cb, cb)));
109
+ }
110
+
111
+ float sdRoundCone(vec3 p, float r1, float r2, float h) {
112
+ float b = (r1 - r2) / h;
113
+ float a = sqrt(1.0 - b * b);
114
+ vec2 q = vec2(length(p.xz), p.y);
115
+ float k = dot(q, vec2(-b, a));
116
+ if (k < 0.0) return length(q) - r1;
117
+ if (k > a * h) return length(q - vec2(0.0, h)) - r2;
118
+ return dot(q, vec2(a, b)) - r1;
119
+ }
120
+
121
+ float sdSolidAngle(vec3 p, vec2 c, float ra) {
122
+ vec2 q = vec2(length(p.xz), p.y);
123
+ float l = length(q) - ra;
124
+ float m = length(q - c * clamp(dot(q, c), 0.0, ra));
125
+ return max(l, m * sign(c.y * q.x - c.x * q.y));
126
+ }
127
+
128
+ float sdOctahedron(vec3 p, float s) {
129
+ p = abs(p);
130
+ float m = p.x + p.y + p.z - s;
131
+ vec3 q;
132
+ if (3.0 * p.x < m) q = p.xyz;
133
+ else if (3.0 * p.y < m) q = p.yzx;
134
+ else if (3.0 * p.z < m) q = p.zxy;
135
+ else return m * 0.57735027;
136
+ float k = clamp(0.5 * (q.z - q.y + s), 0.0, s);
137
+ return length(vec3(q.x, q.y - s + k, q.z - k));
138
+ }
139
+
140
+ float sdPyramid(vec3 p, float h) {
141
+ float m2 = h * h + 0.25;
142
+ p.xz = abs(p.xz);
143
+ p.xz = (p.z > p.x) ? p.zx : p.xz;
144
+ p.xz -= 0.5;
145
+ vec3 q = vec3(p.z, h * p.y - 0.5 * p.x, h * p.x + 0.5 * p.y);
146
+ float s = max(-q.x, 0.0);
147
+ float t = clamp((q.y - 0.5 * p.z) / (m2 + 0.25), 0.0, 1.0);
148
+ float a = m2 * (q.x + s) * (q.x + s) + q.y * q.y;
149
+ float b = m2 * (q.x + 0.5 * t) * (q.x + 0.5 * t) + (q.y - m2 * t) * (q.y - m2 * t);
150
+ float d2 = min(q.y, -q.x * m2 - q.y * 0.5) > 0.0 ? 0.0 : min(a, b);
151
+ return sqrt((d2 + q.z * q.z) / m2) * sign(max(q.z, -p.y));
152
+ }
153
+
154
+ float sdHexPrism(vec3 p, vec2 h) {
155
+ const vec3 k = vec3(-0.8660254, 0.5, 0.57735);
156
+ p = abs(p);
157
+ p.xy -= 2.0 * min(dot(k.xy, p.xy), 0.0) * k.xy;
158
+ vec2 d = vec2(length(p.xy - vec2(clamp(p.x, -k.z * h.x, k.z * h.x), h.x)) * sign(p.y - h.x), p.z - h.y);
159
+ return min(max(d.x, d.y), 0.0) + length(max(d, 0.0));
160
+ }
161
+
162
+ float sdCutSphere(vec3 p, float r, float h) {
163
+ float w = sqrt(r * r - h * h);
164
+ vec2 q = vec2(length(p.xz), p.y);
165
+ float s = max((h - r) * q.x * q.x + w * w * (h + r - 2.0 * q.y), h * q.x - w * q.y);
166
+ return (s < 0.0) ? length(q) - r : (q.x < w) ? h - q.y : length(q - vec2(w, h));
167
+ }
168
+
169
+ float sdCappedTorus(vec3 p, vec2 sc, float ra, float rb) {
170
+ p.x = abs(p.x);
171
+ float k = (sc.y * p.x > sc.x * p.y) ? dot(p.xy, sc) : length(p.xy);
172
+ return sqrt(dot(p, p) + ra * ra - 2.0 * ra * k) - rb;
173
+ }
174
+
175
+ float sdLink(vec3 p, float le, float r1, float r2) {
176
+ vec3 q = vec3(p.x, max(abs(p.y) - le, 0.0), p.z);
177
+ return length(vec2(length(q.xy) - r1, q.z)) - r2;
178
+ }
179
+
180
+ float sdPlane(vec3 p, vec3 n, float h) {
181
+ return dot(p, n) + h;
182
+ }
183
+
184
+ float sdRhombus(vec3 p, float la, float lb, float h, float ra) {
185
+ p = abs(p);
186
+ vec2 b = vec2(la, lb);
187
+ float f = clamp((dot(b, b - 2.0 * p.xz)) / dot(b, b), -1.0, 1.0);
188
+ vec2 q = vec2(length(p.xz - 0.5 * b * vec2(1.0 - f, 1.0 + f)) * sign(p.x * b.y + p.z * b.x - b.x * b.y) - ra, p.y - h);
189
+ return min(max(q.x, q.y), 0.0) + length(max(q, 0.0));
190
+ }
191
+
192
+ // Unsigned distance (exact)
193
+ float udTriangle(vec3 p, vec3 a, vec3 b, vec3 c) {
194
+ vec3 ba = b - a; vec3 pa = p - a;
195
+ vec3 cb = c - b; vec3 pb = p - b;
196
+ vec3 ac = a - c; vec3 pc = p - c;
197
+ vec3 nor = cross(ba, ac);
198
+ return sqrt(
199
+ (sign(dot(cross(ba, nor), pa)) +
200
+ sign(dot(cross(cb, nor), pb)) +
201
+ sign(dot(cross(ac, nor), pc)) < 2.0)
202
+ ? min(min(
203
+ dot(ba * clamp(dot(ba, pa) / dot(ba, ba), 0.0, 1.0) - pa,
204
+ ba * clamp(dot(ba, pa) / dot(ba, ba), 0.0, 1.0) - pa),
205
+ dot(cb * clamp(dot(cb, pb) / dot(cb, cb), 0.0, 1.0) - pb,
206
+ cb * clamp(dot(cb, pb) / dot(cb, cb), 0.0, 1.0) - pb)),
207
+ dot(ac * clamp(dot(ac, pc) / dot(ac, ac), 0.0, 1.0) - pc,
208
+ ac * clamp(dot(ac, pc) / dot(ac, ac), 0.0, 1.0) - pc))
209
+ : dot(nor, pa) * dot(nor, pa) / dot(nor, nor));
210
+ }
211
+
212
+ // === Boolean Operations ===
213
+ vec2 opU(vec2 d1, vec2 d2) { return (d1.x < d2.x) ? d1 : d2; }
214
+ float smin(float a, float b, float k) {
215
+ float h = max(k - abs(a - b), 0.0);
216
+ return min(a, b) - h * h * 0.25 / k;
217
+ }
218
+ vec2 smin(vec2 a, vec2 b, float k) {
219
+ // vec2 smin: x=distance (smooth blend), y=materialID (take material of closer distance)
220
+ float h = max(k - abs(a.x - b.x), 0.0);
221
+ float d = min(a.x, b.x) - h * h * 0.25 / k;
222
+ float m = (a.x < b.x) ? a.y : b.y;
223
+ return vec2(d, m);
224
+ }
225
+ float smax(float a, float b, float k) {
226
+ float h = max(k - abs(a - b), 0.0);
227
+ return max(a, b) + h * h * 0.25 / k;
228
+ }
229
+
230
+ // === Deformation Operators ===
231
+
232
+ // Round: soften edges of any SDF
233
+ // Usage: sdRound(sdBox(p, vec3(1.0)), 0.1)
234
+ float opRound(float d, float r) { return d - r; }
235
+
236
+ // Onion: hollow out any SDF into a shell
237
+ // Usage: opOnion(sdSphere(p, 1.0), 0.1) — sphere shell of thickness 0.1
238
+ float opOnion(float d, float t) { return abs(d) - t; }
239
+
240
+ // Elongate: stretch a shape along axes
241
+ // Usage: elongate a sphere into a capsule-like shape
242
+ float opElongate(in vec3 p, in vec3 h, in vec3 center, in vec3 size) {
243
+ // Generic elongation: subtract h from abs(p), clamp to 0
244
+ vec3 q = abs(p) - h;
245
+ // Then evaluate original SDF with max(q, 0.0)
246
+ // Return: sdOriginal(max(q, 0.0)) + min(max(q.x, max(q.y, q.z)), 0.0)
247
+ return sdBox(max(q, 0.0), size) + min(max(q.x, max(q.y, q.z)), 0.0); // example with box
248
+ }
249
+
250
+ // Twist: rotate around Y axis based on height
251
+ vec3 opTwist(vec3 p, float k) {
252
+ float c = cos(k * p.y);
253
+ float s = sin(k * p.y);
254
+ mat2 m = mat2(c, -s, s, c);
255
+ return vec3(m * p.xz, p.y);
256
+ }
257
+
258
+ // Cheap Bend: bend along X axis based on X position
259
+ vec3 opCheapBend(vec3 p, float k) {
260
+ float c = cos(k * p.x);
261
+ float s = sin(k * p.x);
262
+ mat2 m = mat2(c, -s, s, c);
263
+ vec2 q = m * p.xy;
264
+ return vec3(q, p.z);
265
+ }
266
+
267
+ // Displacement: add procedural detail to surface
268
+ float opDisplace(float d, vec3 p) {
269
+ float displacement = sin(20.0 * p.x) * sin(20.0 * p.y) * sin(20.0 * p.z);
270
+ return d + displacement * 0.02;
271
+ }
272
+
273
+ // === 2D-to-3D Constructors ===
274
+
275
+ // Revolution: rotate a 2D SDF around the Y axis to create a 3D solid of revolution
276
+ // sdf2d: any 2D SDF function, o: offset from axis
277
+ float opRevolution(vec3 p, float sdf2d_result, float o) {
278
+ vec2 q = vec2(length(p.xz) - o, p.y);
279
+ // Example: revolve a 2D circle to make a torus
280
+ // float d2d = length(q) - 0.3; // 2D circle as cross-section
281
+ // return d2d;
282
+ return sdf2d_result; // pass pre-computed 2D SDF of vec2(length(p.xz)-o, p.y)
283
+ }
284
+
285
+ // Extrusion: extend a 2D SDF along the Z axis with finite height
286
+ float opExtrusion(vec3 p, float d2d, float h) {
287
+ vec2 w = vec2(d2d, abs(p.z) - h);
288
+ return min(max(w.x, w.y), 0.0) + length(max(w, 0.0));
289
+ }
290
+
291
+ // Usage example: extruded 2D star
292
+ // float d2d = sdStar2D(p.xy, 0.5, 5, 2.0); // any 2D SDF
293
+ // float d3d = opExtrusion(p, d2d, 0.2); // extrude 0.2 units
294
+
295
+ // === Symmetry Operators ===
296
+
297
+ // Mirror across X axis (most common — bilateral symmetry)
298
+ // Place this at the beginning of map() to model only one half
299
+ vec3 opSymX(vec3 p) { p.x = abs(p.x); return p; }
300
+
301
+ // Mirror across X and Z (four-fold symmetry)
302
+ vec3 opSymXZ(vec3 p) { p.xz = abs(p.xz); return p; }
303
+
304
+ // Mirror across arbitrary direction
305
+ vec3 opMirror(vec3 p, vec3 dir) {
306
+ return p - 2.0 * dir * max(dot(p, dir), 0.0);
307
+ }
308
+
309
+ // === Scene ===
310
+ vec2 map(vec3 pos) {
311
+ vec2 res = vec2(pos.y, 0.0);
312
+ // Animated blob cluster
313
+ float dBlob = 2.0;
314
+ for (int i = 0; i < 8; i++) {
315
+ float fi = float(i);
316
+ float t = iTime * (fract(fi * 412.531 + 0.513) - 0.5) * 2.0;
317
+ vec3 offset = sin(t + fi * vec3(52.5126, 64.627, 632.25)) * vec3(2.0, 2.0, 0.8);
318
+ float radius = mix(0.3, 0.6, fract(fi * 412.531 + 0.5124));
319
+ dBlob = smin(dBlob, sdSphere(pos + offset, radius), SMOOTH_K);
320
+ }
321
+ res = opU(res, vec2(dBlob, 1.0));
322
+ float dBox = sdBox(pos - vec3(3.0, 0.4, 0.0), vec3(0.3, 0.4, 0.3));
323
+ res = opU(res, vec2(dBox, 2.0));
324
+ float dTorus = sdTorus((pos - vec3(-3.0, 0.5, 0.0)).xzy, vec2(0.4, 0.1));
325
+ res = opU(res, vec2(dTorus, 3.0));
326
+ // CSG subtraction: sphere minus box
327
+ float dCSG = sdSphere(pos - vec3(0.0, 0.5, 3.0), 0.5);
328
+ dCSG = max(dCSG, -sdBox(pos - vec3(0.0, 0.5, 3.0), vec3(0.3)));
329
+ res = opU(res, vec2(dCSG, 4.0));
330
+ return res;
331
+ }
332
+
333
+ // === Normals ===
334
+ vec3 calcNormal(vec3 pos) {
335
+ vec3 n = vec3(0.0);
336
+ for (int i = ZERO; i < 4; i++) {
337
+ vec3 e = 0.5773 * (2.0 * vec3((((i+3)>>1)&1), ((i>>1)&1), (i&1)) - 1.0);
338
+ n += e * map(pos + 0.0005 * e).x;
339
+ }
340
+ return normalize(n);
341
+ }
342
+
343
+ // === Shadows ===
344
+ float calcSoftshadow(vec3 ro, vec3 rd, float mint, float tmax) {
345
+ float res = 1.0, t = mint;
346
+ for (int i = ZERO; i < SHADOW_STEPS; i++) {
347
+ float h = map(ro + rd * t).x;
348
+ float s = clamp(SHADOW_SOFTNESS * h / t, 0.0, 1.0);
349
+ res = min(res, s);
350
+ t += clamp(h, 0.01, 0.2);
351
+ if (res < 0.004 || t > tmax) break;
352
+ }
353
+ res = clamp(res, 0.0, 1.0);
354
+ return res * res * (3.0 - 2.0 * res);
355
+ }
356
+
357
+ // === AO ===
358
+ float calcAO(vec3 pos, vec3 nor) {
359
+ float occ = 0.0, sca = 1.0;
360
+ for (int i = ZERO; i < 5; i++) {
361
+ float h = 0.01 + 0.12 * float(i) / 4.0;
362
+ float d = map(pos + h * nor).x;
363
+ occ += (h - d) * sca;
364
+ sca *= 0.95;
365
+ if (occ > 0.35) break;
366
+ }
367
+ return clamp(1.0 - 3.0 * occ, 0.0, 1.0) * (0.5 + 0.5 * nor.y);
368
+ }
369
+
370
+ // === Ray Marching ===
371
+ vec2 raycast(vec3 ro, vec3 rd) {
372
+ vec2 res = vec2(-1.0);
373
+ float t = 0.01;
374
+ for (int i = 0; i < MAX_STEPS && t < MAX_DIST; i++) {
375
+ vec2 h = map(ro + rd * t);
376
+ if (abs(h.x) < SURF_DIST * t) { res = vec2(t, h.y); break; }
377
+ t += h.x;
378
+ }
379
+ return res;
380
+ }
381
+
382
+ // === Camera ===
383
+ mat3 setCamera(vec3 ro, vec3 ta, float cr) {
384
+ vec3 cw = normalize(ta - ro);
385
+ vec3 cp = vec3(sin(cr), cos(cr), 0.0);
386
+ vec3 cu = normalize(cross(cw, cp));
387
+ vec3 cv = cross(cu, cw);
388
+ return mat3(cu, cv, cw);
389
+ }
390
+
391
+ // === Rendering ===
392
+ vec3 render(vec3 ro, vec3 rd) {
393
+ vec3 col = vec3(0.7, 0.7, 0.9) - max(rd.y, 0.0) * 0.3;
394
+ vec2 res = raycast(ro, rd);
395
+ float t = res.x, m = res.y;
396
+ if (m > -0.5) {
397
+ vec3 pos = ro + t * rd;
398
+ vec3 nor = (m < 0.5) ? vec3(0.0, 1.0, 0.0) : calcNormal(pos);
399
+ vec3 ref = reflect(rd, nor);
400
+ vec3 mate = 0.2 + 0.2 * sin(m * 2.0 + vec3(0.0, 1.0, 2.0));
401
+ if (m < 0.5) mate = vec3(0.15);
402
+ float occ = calcAO(pos, nor);
403
+ vec3 lin = vec3(0.0);
404
+ // Key light
405
+ {
406
+ vec3 lig = normalize(vec3(-0.5, 0.4, -0.6));
407
+ vec3 hal = normalize(lig - rd);
408
+ float dif = clamp(dot(nor, lig), 0.0, 1.0);
409
+ dif *= calcSoftshadow(pos, lig, 0.02, 2.5);
410
+ float spe = pow(clamp(dot(nor, hal), 0.0, 1.0), 16.0);
411
+ spe *= dif * (0.04 + 0.96 * pow(clamp(1.0 - dot(hal, lig), 0.0, 1.0), 5.0));
412
+ lin += mate * 2.20 * dif * vec3(1.30, 1.00, 0.70);
413
+ lin += 5.00 * spe * vec3(1.30, 1.00, 0.70);
414
+ }
415
+ // Sky light
416
+ {
417
+ float dif = sqrt(clamp(0.5 + 0.5 * nor.y, 0.0, 1.0)) * occ;
418
+ lin += mate * 0.60 * dif * vec3(0.40, 0.60, 1.15);
419
+ }
420
+ // Subsurface scattering approximation
421
+ {
422
+ float dif = pow(clamp(1.0 + dot(nor, rd), 0.0, 1.0), 2.0) * occ;
423
+ lin += mate * 0.25 * dif;
424
+ }
425
+ col = lin;
426
+ col = mix(col, vec3(0.7, 0.7, 0.9), 1.0 - exp(-0.0001 * t * t * t));
427
+ }
428
+ return clamp(col, 0.0, 1.0);
429
+ }
430
+
431
+ // === Main Function ===
432
+ void mainImage(out vec4 fragColor, in vec2 fragCoord) {
433
+ vec2 mo = iMouse.xy / iResolution.xy;
434
+ float time = 32.0 + iTime * 1.5;
435
+ vec3 ta = vec3(0.0, 0.0, 0.0);
436
+ vec3 ro = ta + vec3(4.5 * cos(0.1 * time + 7.0 * mo.x), 2.2,
437
+ 4.5 * sin(0.1 * time + 7.0 * mo.x));
438
+ mat3 ca = setCamera(ro, ta, 0.0);
439
+ vec3 tot = vec3(0.0);
440
+ #if AA > 1
441
+ for (int m = ZERO; m < AA; m++)
442
+ for (int n = ZERO; n < AA; n++) {
443
+ vec2 o = vec2(float(m), float(n)) / float(AA) - 0.5;
444
+ vec2 p = (2.0 * (fragCoord + o) - iResolution.xy) / iResolution.y;
445
+ #else
446
+ vec2 p = (2.0 * fragCoord - iResolution.xy) / iResolution.y;
447
+ #endif
448
+ vec3 rd = ca * normalize(vec3(p, 2.5));
449
+ vec3 col = render(ro, rd);
450
+ col = pow(col, vec3(0.4545));
451
+ tot += col;
452
+ #if AA > 1
453
+ }
454
+ tot /= float(AA * AA);
455
+ #endif
456
+ fragColor = vec4(tot, 1.0);
457
+ }
458
+ ```
459
+
460
+ ## Common Variants
461
+
462
+ ### Variant 1: Dynamic Organic Body (Smooth Blob Animation)
463
+
464
+ ```glsl
465
+ vec2 map(vec3 p) {
466
+ float d = 2.0;
467
+ for (int i = 0; i < 16; i++) {
468
+ float fi = float(i);
469
+ float t = iTime * (fract(fi * 412.531 + 0.513) - 0.5) * 2.0;
470
+ d = smin(sdSphere(p + sin(t + fi * vec3(52.5126, 64.627, 632.25)) * vec3(2.0, 2.0, 0.8),
471
+ mix(0.5, 1.0, fract(fi * 412.531 + 0.5124))), d, 0.4);
472
+ }
473
+ return vec2(d, 1.0);
474
+ }
475
+ ```
476
+
477
+ ### Variant 2: Infinite Repeating Corridor (Domain Repetition)
478
+
479
+ ```glsl
480
+ float repeat(float v, float c) { return mod(v, c) - c * 0.5; }
481
+
482
+ float amod(inout vec2 p, float count) {
483
+ float an = 6.283185 / count;
484
+ float a = atan(p.y, p.x) + an * 0.5;
485
+ float c = floor(a / an);
486
+ a = mod(a, an) - an * 0.5;
487
+ p = vec2(cos(a), sin(a)) * length(p);
488
+ return c;
489
+ }
490
+
491
+ vec2 map(vec3 p) {
492
+ p.z = repeat(p.z, 4.0);
493
+ p.x += 2.0 * sin(p.z * 0.1);
494
+ float d = -sdBox(p, vec3(2.0, 2.0, 20.0));
495
+ d = max(d, -sdBox(p, vec3(1.8, 1.8, 1.9)));
496
+ d = min(d, sdCylinder(p - vec3(1.5, -2.0, 0.0), vec2(0.1, 2.0)));
497
+ return vec2(d, 1.0);
498
+ }
499
+ ```
500
+
501
+ ### Variant 3: Character/Creature Modeling
502
+
503
+ ```glsl
504
+ vec2 sdStick(vec3 p, vec3 a, vec3 b, float r1, float r2) {
505
+ vec3 pa = p - a, ba = b - a;
506
+ float h = clamp(dot(pa, ba) / dot(ba, ba), 0.0, 1.0);
507
+ return vec2(length(pa - ba * h) - mix(r1, r2, h * h * (3.0 - 2.0 * h)), h);
508
+ }
509
+
510
+ vec2 map(vec3 pos) {
511
+ float d = sdEllipsoid(pos, vec3(0.25, 0.3, 0.25)); // body
512
+ d = smin(d, sdEllipsoid(pos - vec3(0.0, 0.35, 0.02),
513
+ vec3(0.12, 0.15, 0.13)), 0.1); // head
514
+ vec2 arm = sdStick(abs(pos.x) > 0.0 ? vec3(abs(pos.x), pos.yz) : pos,
515
+ vec3(0.18, 0.2, -0.05), vec3(0.35, -0.1, -0.15), 0.03, 0.05);
516
+ d = smin(d, arm.x, 0.04); // arms
517
+ d = smax(d, -sdEllipsoid(pos - vec3(0.0, 0.3, 0.15),
518
+ vec3(0.08, 0.03, 0.1)), 0.03); // mouth carving
519
+ return vec2(d, 1.0);
520
+ }
521
+ ```
522
+
523
+ ### Variant 4: Symmetry Optimization
524
+
525
+ ```glsl
526
+ vec2 rot45(vec2 v) { return vec2(v.x - v.y, v.y + v.x) * 0.707107; }
527
+
528
+ vec2 map(vec3 p) {
529
+ float d = sdSphere(p, 0.12);
530
+ // Octahedral symmetry: 18-gear evaluations reduced to 4
531
+ vec3 qx = vec3(rot45(p.zy), p.x);
532
+ if (abs(qx.x) > abs(qx.y)) qx = qx.zxy;
533
+ vec3 qy = vec3(rot45(p.xz), p.y);
534
+ if (abs(qy.x) > abs(qy.y)) qy = qy.zxy;
535
+ vec3 qz = vec3(rot45(p.yx), p.z);
536
+ if (abs(qz.x) > abs(qz.y)) qz = qz.zxy;
537
+ vec3 qa = abs(p);
538
+ qa = (qa.x > qa.y && qa.x > qa.z) ? p.zxy : (qa.z > qa.y) ? p.yzx : p.xyz;
539
+ d = min(d, min(min(gear(qa, 0.0), gear(qx, 1.0)), min(gear(qy, 1.0), gear(qz, 1.0))));
540
+ return vec2(d, 1.0);
541
+ }
542
+ ```
543
+
544
+ ### Variant 5: PBR Material Rendering
545
+
546
+ ```glsl
547
+ float D_GGX(float NoH, float roughness) {
548
+ float a = roughness * roughness; float a2 = a * a;
549
+ float d = NoH * NoH * (a2 - 1.0) + 1.0;
550
+ return a2 / (3.14159 * d * d);
551
+ }
552
+ vec3 F_Schlick(float VoH, vec3 f0) {
553
+ return f0 + (1.0 - f0) * pow(1.0 - VoH, 5.0);
554
+ }
555
+ vec3 pbrLighting(vec3 pos, vec3 nor, vec3 rd, vec3 albedo, float roughness, float metallic) {
556
+ vec3 lig = normalize(vec3(-0.5, 0.4, -0.6));
557
+ vec3 hal = normalize(lig - rd);
558
+ vec3 f0 = mix(vec3(0.04), albedo, metallic);
559
+ float NoL = max(dot(nor, lig), 0.0);
560
+ float NoH = max(dot(nor, hal), 0.0);
561
+ float VoH = max(dot(-rd, hal), 0.0);
562
+ vec3 spec = D_GGX(NoH, roughness) * F_Schlick(VoH, f0) * 0.25;
563
+ vec3 diff = albedo * (1.0 - metallic) / 3.14159;
564
+ float shadow = calcSoftshadow(pos, lig, 0.02, 2.5);
565
+ return (diff + spec) * NoL * shadow * vec3(1.3, 1.0, 0.7) * 3.0;
566
+ }
567
+ ```
568
+
569
+ ## Performance & Composition
570
+
571
+ ### Performance Optimization Tips
572
+
573
+ - **Bounding volume acceleration**: test ray against AABB first to narrow `tmin/tmax`, avoiding wasted steps in empty regions
574
+ - **Sub-scene bounding**: in `map()`, use a cheap `sdBox` to check proximity before computing the precise SDF
575
+ - **Adaptive step size**: `abs(h.x) < SURF_DIST * t` -- looser tolerance at distance, stricter up close
576
+ - **Prevent compiler inlining**: `#define ZERO (min(iFrame, 0))` + loop prevents `calcNormal` from inlining map 4 times
577
+ - **Exploit symmetry**: fold into the fundamental domain, reducing 18 evaluations to 4
578
+
579
+ ### Common Composition Techniques
580
+
581
+ - **Noise displacement**: `d += 0.05 * sin(p.x*10.)*sin(p.y*10.)*sin(p.z*10.)` adds organic detail; breaks the Lipschitz condition, so step size should be multiplied by 0.5~0.7
582
+ - **Bump mapping**: perturb only during normal calculation, leaving ray marching unaffected for better performance
583
+ - **Domain transforms**: warp coordinates before entering map (bending, polar coordinate transforms, etc.)
584
+ - **Procedural animation**: bone angles driven by time to position primitives, `smin` ensures smooth joints
585
+ - **Motion blur**: multi-frame temporal sampling averaged
586
+
587
+ ## Further Reading
588
+
589
+ Full step-by-step tutorials, mathematical derivations, and advanced usage in [reference](../reference/sdf-3d.md)
@@ -0,0 +1,100 @@
1
+ # SDF Advanced Tricks & Optimization
2
+
3
+ ## Use Cases
4
+ - Optimizing complex SDF scenes for real-time performance
5
+ - Adding fine detail to SDF surfaces without increasing geometric complexity
6
+ - Creating special effects with SDF manipulation (hollowing, layered edges, interior structures)
7
+ - Debugging and visualizing SDF fields
8
+
9
+ ## Core Techniques
10
+
11
+ ### Hollowing (Shell Creation)
12
+ Convert any solid SDF into a thin shell:
13
+ ```glsl
14
+ float hollowed = abs(sdf) - thickness;
15
+ // Example: hollow sphere with 0.02 wall thickness
16
+ float d = abs(sdSphere(p, 1.0)) - 0.02;
17
+ ```
18
+
19
+ ### Layered Edges (Concentric Contour Lines)
20
+ Create equidistant contour rings from any SDF:
21
+ ```glsl
22
+ float spacing = 0.2;
23
+ float thickness = 0.02;
24
+ float layered = abs(mod(d + spacing * 0.5, spacing) - spacing * 0.5) - thickness;
25
+ ```
26
+ Useful for: topographic map effects, neon outlines, energy shields, wireframe-like rendering.
27
+
28
+ ### FBM Detail on SDF (Distance-Based LOD)
29
+ Add procedural noise detail only where it's visible — near the camera:
30
+ ```glsl
31
+ float map(vec3 p) {
32
+ float d = sdBasicShape(p);
33
+ // Only add expensive FBM detail when close to surface
34
+ if (d < 1.0) {
35
+ d += 0.02 * fbm(p * 8.0) * smoothstep(1.0, 0.0, d);
36
+ }
37
+ return d;
38
+ }
39
+ ```
40
+ **Critical**: The `smoothstep` fade prevents the FBM from disrupting the SDF's Lipschitz continuity far from the surface, which would cause ray marching to overshoot.
41
+
42
+ ### SDF Bounding Volumes (Performance Optimization)
43
+ Skip expensive SDF evaluation when the point is far from the object:
44
+ ```glsl
45
+ float map(vec3 p) {
46
+ // Cheap bounding sphere test first
47
+ float bound = sdSphere(p - objectCenter, boundingRadius);
48
+ if (bound > 0.1) return bound; // far away — return bounding distance
49
+ // Expensive detailed SDF only when close
50
+ return complexSDF(p);
51
+ }
52
+ ```
53
+ For scenes with multiple distant objects, this can provide 5-10x speedup.
54
+
55
+ ### Binary Search Refinement
56
+ After ray marching finds an approximate hit, refine with binary search for sub-pixel precision:
57
+ ```glsl
58
+ // After ray march loop finds t where map(ro+rd*t) < epsilon:
59
+ for (int i = 0; i < 6; i++) {
60
+ float mid = map(ro + rd * t);
61
+ t += mid * 0.5; // or use proper bisection:
62
+ // float dt = step * 0.5^i;
63
+ // t += (map(ro+rd*t) > 0.0) ? dt : -dt;
64
+ }
65
+ ```
66
+ Especially useful for: sharp edge rendering, precise shadow termination, accurate reflection points.
67
+
68
+ ### XOR Boolean Operation
69
+ Create interesting geometric patterns by combining SDFs with XOR:
70
+ ```glsl
71
+ float opXor(float d1, float d2) {
72
+ return max(min(d1, d2), -max(d1, d2));
73
+ }
74
+ // Creates a "difference of unions" — geometry exists where exactly one shape is present
75
+ ```
76
+
77
+ ### Interior SDF Structures
78
+ Use the sign of the SDF to create interior geometry:
79
+ ```glsl
80
+ float interiorPattern(vec3 p) {
81
+ float outer = sdSphere(p, 1.0);
82
+ float inner = sdBox(fract(p * 4.0) - 0.5, vec3(0.1)); // repeating inner pattern
83
+ return (outer < 0.0) ? max(outer, inner) : outer; // inner visible only inside
84
+ }
85
+ ```
86
+
87
+ ## SDF Debugging Visualization
88
+
89
+ ```glsl
90
+ // Visualize SDF distance as color bands
91
+ vec3 debugSDF(float d) {
92
+ vec3 col = (d > 0.0) ? vec3(0.9, 0.6, 0.3) : vec3(0.4, 0.7, 0.85); // outside/inside
93
+ col *= 1.0 - exp(-6.0 * abs(d)); // darken near surface
94
+ col *= 0.8 + 0.2 * cos(150.0 * d); // distance bands
95
+ col = mix(col, vec3(1.0), 1.0 - smoothstep(0.0, 0.01, abs(d))); // white at surface
96
+ return col;
97
+ }
98
+ ```
99
+
100
+ → For deeper details, see [reference/sdf-tricks.md](../reference/sdf-tricks.md)