@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,522 @@
1
+ # Atmospheric & Subsurface Scattering
2
+
3
+ ## Use Cases
4
+ - Sky rendering (sunrise/sunset/noon/night)
5
+ - Aerial perspective
6
+ - Sun halo (Mie scattering haze)
7
+ - Planetary atmosphere rim glow
8
+ - Translucent material SSS (candles, skin, jelly)
9
+ - Volumetric light (God rays)
10
+
11
+ ## Core Principles
12
+
13
+ Three physical mechanisms:
14
+
15
+ **Rayleigh scattering** — molecular-scale particles, β_R(λ) ∝ 1/λ⁴, shorter wavelengths scatter more strongly (blue sky / red sunset).
16
+ Sea-level values: `vec3(5.5e-6, 13.0e-6, 22.4e-6)` m⁻¹.
17
+ Phase function: `P_R(θ) = 3/(16π) × (1 + cos²θ)`, symmetric forward-backward.
18
+
19
+ **Mie scattering** — aerosol particles, wavelength-independent, strong forward scattering (sun halo).
20
+ Sea-level value: `vec3(21e-6)` m⁻¹.
21
+ Phase function: Henyey-Greenstein, `g ≈ 0.76~0.88`.
22
+
23
+ **Beer-Lambert attenuation** — `T(A→B) = exp(-∫ σ_e(s) ds)`, exponential decay of light through a medium.
24
+
25
+ **Algorithm flow**: ray march along the view ray; at each sample point: compute density → compute optical depth toward the sun → Beer-Lambert attenuation → phase function weighting → accumulate.
26
+
27
+ ## Implementation Steps
28
+
29
+ ### Step 1: Ray-Sphere Intersection
30
+
31
+ ```glsl
32
+ // Returns (t_near, t_far); no intersection when t_near > t_far
33
+ vec2 raySphereIntersect(vec3 p, vec3 dir, float r) {
34
+ float b = dot(p, dir);
35
+ float c = dot(p, p) - r * r;
36
+ float d = b * b - c;
37
+ if (d < 0.0) return vec2(1e5, -1e5);
38
+ d = sqrt(d);
39
+ return vec2(-b - d, -b + d);
40
+ }
41
+ ```
42
+
43
+ ### Step 2: Atmospheric Physical Constants
44
+
45
+ ```glsl
46
+ #define PLANET_RADIUS 6371e3
47
+ #define ATMOS_RADIUS 6471e3
48
+ #define PLANET_CENTER vec3(0.0)
49
+
50
+ #define BETA_RAY vec3(5.5e-6, 13.0e-6, 22.4e-6) // Rayleigh scattering coefficients
51
+ #define BETA_MIE vec3(21e-6) // Mie scattering coefficients
52
+ #define BETA_OZONE vec3(2.04e-5, 4.97e-5, 1.95e-6) // Ozone absorption
53
+
54
+ #define MIE_G 0.76 // Anisotropy parameter 0.76~0.88
55
+ #define MIE_EXTINCTION 1.1 // Extinction/scattering ratio
56
+
57
+ #define H_RAY 8000.0 // Rayleigh scale height
58
+ #define H_MIE 1200.0 // Mie scale height
59
+ #define H_OZONE 30e3 // Ozone peak altitude
60
+ #define OZONE_FALLOFF 4e3 // Ozone decay width
61
+
62
+ #define PRIMARY_STEPS 32 // Primary ray steps 8(mobile)~64(high quality)
63
+ #define LIGHT_STEPS 8 // Light direction steps 4~16
64
+ ```
65
+
66
+ ### Step 3: Phase Functions
67
+
68
+ ```glsl
69
+ float phaseRayleigh(float cosTheta) {
70
+ return 3.0 / (16.0 * 3.14159265) * (1.0 + cosTheta * cosTheta);
71
+ }
72
+
73
+ // Henyey-Greenstein phase function
74
+ float phaseMie(float cosTheta, float g) {
75
+ float gg = g * g;
76
+ float num = (1.0 - gg) * (1.0 + cosTheta * cosTheta);
77
+ float denom = (2.0 + gg) * pow(1.0 + gg - 2.0 * g * cosTheta, 1.5);
78
+ return 3.0 / (8.0 * 3.14159265) * num / denom;
79
+ }
80
+ ```
81
+
82
+ ### Step 4: Atmospheric Density Sampling
83
+
84
+ ```glsl
85
+ // Returns vec3(rayleigh, mie, ozone) density
86
+ vec3 atmosphereDensity(vec3 pos, float planetRadius) {
87
+ float height = length(pos) - planetRadius;
88
+ float densityRay = exp(-height / H_RAY);
89
+ float densityMie = exp(-height / H_MIE);
90
+ float denom = (H_OZONE - height) / OZONE_FALLOFF;
91
+ float densityOzone = (1.0 / (denom * denom + 1.0)) * densityRay;
92
+ return vec3(densityRay, densityMie, densityOzone);
93
+ }
94
+ ```
95
+
96
+ ### Step 5: Light Direction Optical Depth
97
+
98
+ ```glsl
99
+ vec3 lightOpticalDepth(vec3 pos, vec3 sunDir) {
100
+ float atmoDist = raySphereIntersect(pos - PLANET_CENTER, sunDir, ATMOS_RADIUS).y;
101
+ float stepSize = atmoDist / float(LIGHT_STEPS);
102
+ float rayPos = stepSize * 0.5;
103
+ vec3 optDepth = vec3(0.0);
104
+ for (int i = 0; i < LIGHT_STEPS; i++) {
105
+ vec3 samplePos = pos + sunDir * rayPos;
106
+ float height = length(samplePos - PLANET_CENTER) - PLANET_RADIUS;
107
+ if (height < 0.0) return vec3(1e10); // Occluded by planet
108
+ optDepth += atmosphereDensity(samplePos, PLANET_RADIUS) * stepSize;
109
+ rayPos += stepSize;
110
+ }
111
+ return optDepth;
112
+ }
113
+ ```
114
+
115
+ ### Step 6: Primary Scattering Integration
116
+
117
+ ```glsl
118
+ vec3 calculateScattering(
119
+ vec3 rayOrigin, vec3 rayDir, float maxDist,
120
+ vec3 sunDir, vec3 sunIntensity
121
+ ) {
122
+ vec2 atmoHit = raySphereIntersect(rayOrigin - PLANET_CENTER, rayDir, ATMOS_RADIUS);
123
+ if (atmoHit.x > atmoHit.y) return vec3(0.0);
124
+
125
+ vec2 planetHit = raySphereIntersect(rayOrigin - PLANET_CENTER, rayDir, PLANET_RADIUS);
126
+
127
+ float tStart = max(atmoHit.x, 0.0);
128
+ float tEnd = atmoHit.y;
129
+ if (planetHit.x > 0.0) tEnd = min(tEnd, planetHit.x);
130
+ tEnd = min(tEnd, maxDist);
131
+
132
+ float stepSize = (tEnd - tStart) / float(PRIMARY_STEPS);
133
+ float cosTheta = dot(rayDir, sunDir);
134
+ float phaseR = phaseRayleigh(cosTheta);
135
+ float phaseM = phaseMie(cosTheta, MIE_G);
136
+
137
+ vec3 totalRay = vec3(0.0), totalMie = vec3(0.0), optDepthI = vec3(0.0);
138
+ float rayPos = tStart + stepSize * 0.5;
139
+
140
+ for (int i = 0; i < PRIMARY_STEPS; i++) {
141
+ vec3 samplePos = rayOrigin + rayDir * rayPos;
142
+ vec3 density = atmosphereDensity(samplePos, PLANET_RADIUS) * stepSize;
143
+ optDepthI += density;
144
+
145
+ vec3 optDepthL = lightOpticalDepth(samplePos, sunDir);
146
+ vec3 tau = BETA_RAY * (optDepthI.x + optDepthL.x)
147
+ + BETA_MIE * 1.1 * (optDepthI.y + optDepthL.y)
148
+ + BETA_OZONE * (optDepthI.z + optDepthL.z);
149
+ vec3 attenuation = exp(-tau);
150
+
151
+ totalRay += density.x * attenuation;
152
+ totalMie += density.y * attenuation;
153
+ rayPos += stepSize;
154
+ }
155
+
156
+ return sunIntensity * (totalRay * BETA_RAY * phaseR + totalMie * BETA_MIE * phaseM);
157
+ }
158
+ ```
159
+
160
+ ### Step 7: Tone Mapping
161
+
162
+ ```glsl
163
+ vec3 tonemapExposure(vec3 color) { return 1.0 - exp(-color); }
164
+
165
+ vec3 tonemapReinhard(vec3 color) {
166
+ float l = dot(color, vec3(0.2126, 0.7152, 0.0722));
167
+ vec3 tc = color / (color + 1.0);
168
+ return mix(color / (l + 1.0), tc, tc);
169
+ }
170
+
171
+ vec3 gammaCorrect(vec3 color) { return pow(color, vec3(1.0 / 2.2)); }
172
+ ```
173
+
174
+ ## Complete Code Template
175
+
176
+ Fully runnable Rayleigh + Mie atmospheric scattering for ShaderToy:
177
+
178
+ ```glsl
179
+ #define PI 3.14159265359
180
+
181
+ #define PLANET_RADIUS 6371e3
182
+ #define ATMOS_RADIUS 6471e3
183
+ #define PLANET_CENTER vec3(0.0)
184
+
185
+ #define BETA_RAY vec3(5.5e-6, 13.0e-6, 22.4e-6)
186
+ #define BETA_MIE vec3(21e-6)
187
+ #define BETA_OZONE vec3(2.04e-5, 4.97e-5, 1.95e-6)
188
+
189
+ #define MIE_G 0.76
190
+ #define MIE_EXTINCTION 1.1
191
+
192
+ #define H_RAY 8e3
193
+ #define H_MIE 1.2e3
194
+ #define H_OZONE 30e3
195
+ #define OZONE_FALLOFF 4e3
196
+
197
+ #define PRIMARY_STEPS 32
198
+ #define LIGHT_STEPS 8
199
+
200
+ #define SUN_INTENSITY vec3(40.0)
201
+
202
+ vec2 raySphereIntersect(vec3 p, vec3 dir, float r) {
203
+ float b = dot(p, dir);
204
+ float c = dot(p, p) - r * r;
205
+ float d = b * b - c;
206
+ if (d < 0.0) return vec2(1e5, -1e5);
207
+ d = sqrt(d);
208
+ return vec2(-b - d, -b + d);
209
+ }
210
+
211
+ float phaseRayleigh(float cosTheta) {
212
+ return 3.0 / (16.0 * PI) * (1.0 + cosTheta * cosTheta);
213
+ }
214
+
215
+ float phaseMie(float cosTheta, float g) {
216
+ float gg = g * g;
217
+ float num = (1.0 - gg) * (1.0 + cosTheta * cosTheta);
218
+ float denom = (2.0 + gg) * pow(1.0 + gg - 2.0 * g * cosTheta, 1.5);
219
+ return 3.0 / (8.0 * PI) * num / denom;
220
+ }
221
+
222
+ vec3 atmosphereDensity(vec3 pos) {
223
+ float height = length(pos - PLANET_CENTER) - PLANET_RADIUS;
224
+ float dRay = exp(-height / H_RAY);
225
+ float dMie = exp(-height / H_MIE);
226
+ float dOzone = (1.0 / (pow((H_OZONE - height) / OZONE_FALLOFF, 2.0) + 1.0)) * dRay;
227
+ return vec3(dRay, dMie, dOzone);
228
+ }
229
+
230
+ vec3 calculateScattering(
231
+ vec3 start, vec3 dir, float maxDist,
232
+ vec3 sceneColor, vec3 sunDir, vec3 sunIntensity
233
+ ) {
234
+ start -= PLANET_CENTER;
235
+
236
+ float a = dot(dir, dir);
237
+ float b = 2.0 * dot(dir, start);
238
+ float c = dot(start, start) - ATMOS_RADIUS * ATMOS_RADIUS;
239
+ float d = b * b - 4.0 * a * c;
240
+ if (d < 0.0) return sceneColor;
241
+
242
+ vec2 rayLen = vec2(
243
+ max((-b - sqrt(d)) / (2.0 * a), 0.0),
244
+ min((-b + sqrt(d)) / (2.0 * a), maxDist)
245
+ );
246
+ if (rayLen.x > rayLen.y) return sceneColor;
247
+
248
+ bool allowMie = maxDist > rayLen.y;
249
+ rayLen.y = min(rayLen.y, maxDist);
250
+ rayLen.x = max(rayLen.x, 0.0);
251
+
252
+ float stepSize = (rayLen.y - rayLen.x) / float(PRIMARY_STEPS);
253
+ float rayPos = rayLen.x + stepSize * 0.5;
254
+
255
+ vec3 totalRay = vec3(0.0);
256
+ vec3 totalMie = vec3(0.0);
257
+ vec3 optI = vec3(0.0);
258
+
259
+ float mu = dot(dir, sunDir);
260
+ float phaseR = phaseRayleigh(mu);
261
+ float phaseM = allowMie ? phaseMie(mu, MIE_G) : 0.0;
262
+
263
+ for (int i = 0; i < PRIMARY_STEPS; i++) {
264
+ vec3 pos = start + dir * rayPos;
265
+ float height = length(pos) - PLANET_RADIUS;
266
+
267
+ vec3 density = vec3(exp(-height / H_RAY), exp(-height / H_MIE), 0.0);
268
+ float dOzone = (H_OZONE - height) / OZONE_FALLOFF;
269
+ density.z = (1.0 / (dOzone * dOzone + 1.0)) * density.x;
270
+ density *= stepSize;
271
+ optI += density;
272
+
273
+ float la = dot(sunDir, sunDir);
274
+ float lb = 2.0 * dot(sunDir, pos);
275
+ float lc = dot(pos, pos) - ATMOS_RADIUS * ATMOS_RADIUS;
276
+ float ld = lb * lb - 4.0 * la * lc;
277
+ float lightStepSize = (-lb + sqrt(ld)) / (2.0 * la * float(LIGHT_STEPS));
278
+ float lightPos = lightStepSize * 0.5;
279
+ vec3 optL = vec3(0.0);
280
+
281
+ for (int j = 0; j < LIGHT_STEPS; j++) {
282
+ vec3 posL = pos + sunDir * lightPos;
283
+ float heightL = length(posL) - PLANET_RADIUS;
284
+ vec3 densityL = vec3(exp(-heightL / H_RAY), exp(-heightL / H_MIE), 0.0);
285
+ float dOzoneL = (H_OZONE - heightL) / OZONE_FALLOFF;
286
+ densityL.z = (1.0 / (dOzoneL * dOzoneL + 1.0)) * densityL.x;
287
+ densityL *= lightStepSize;
288
+ optL += densityL;
289
+ lightPos += lightStepSize;
290
+ }
291
+
292
+ vec3 attn = exp(
293
+ -BETA_RAY * (optI.x + optL.x)
294
+ - BETA_MIE * MIE_EXTINCTION * (optI.y + optL.y)
295
+ - BETA_OZONE * (optI.z + optL.z)
296
+ );
297
+
298
+ totalRay += density.x * attn;
299
+ totalMie += density.y * attn;
300
+
301
+ rayPos += stepSize;
302
+ }
303
+
304
+ vec3 opacity = exp(-(BETA_MIE * optI.y + BETA_RAY * optI.x + BETA_OZONE * optI.z));
305
+
306
+ return (
307
+ phaseR * BETA_RAY * totalRay +
308
+ phaseM * BETA_MIE * totalMie
309
+ ) * sunIntensity + sceneColor * opacity;
310
+ }
311
+
312
+ vec3 getCameraVector(vec3 resolution, vec2 coord) {
313
+ vec2 uv = coord.xy / resolution.xy - vec2(0.5);
314
+ uv.x *= resolution.x / resolution.y;
315
+ return normalize(vec3(uv.x, uv.y, -1.0));
316
+ }
317
+
318
+ void mainImage(out vec4 fragColor, in vec2 fragCoord) {
319
+ vec3 rayDir = getCameraVector(iResolution, fragCoord);
320
+ vec3 cameraPos = vec3(0.0, PLANET_RADIUS + 100.0, 0.0);
321
+ vec3 sunDir = normalize(vec3(0.0, cos(-iTime / 8.0), sin(-iTime / 8.0)));
322
+
323
+ vec4 scene = vec4(0.0, 0.0, 0.0, 1e12);
324
+ vec3 sunDisk = vec3(dot(rayDir, sunDir) > 0.9998 ? 3.0 : 0.0);
325
+ scene.xyz = sunDisk;
326
+
327
+ vec2 groundHit = raySphereIntersect(cameraPos - PLANET_CENTER, rayDir, PLANET_RADIUS);
328
+ if (groundHit.x > 0.0) {
329
+ scene.w = groundHit.x;
330
+ vec3 hitPos = cameraPos + rayDir * groundHit.x - PLANET_CENTER;
331
+ vec3 normal = normalize(hitPos);
332
+ float shadow = max(0.0, dot(normal, sunDir));
333
+ scene.xyz = vec3(0.1, 0.15, 0.08) * shadow;
334
+ }
335
+
336
+ vec3 col = calculateScattering(
337
+ cameraPos, rayDir, scene.w,
338
+ scene.xyz, sunDir, SUN_INTENSITY
339
+ );
340
+
341
+ col = 1.0 - exp(-col);
342
+ col = pow(col, vec3(1.0 / 2.2));
343
+
344
+ fragColor = vec4(col, 1.0);
345
+ }
346
+ ```
347
+
348
+ ## Advanced Fog Models
349
+
350
+ Three progressive fog techniques, from simple to physically motivated. These can be used standalone or combined with the full atmospheric scattering above.
351
+
352
+ ### Level 1: Basic Exponential Fog
353
+ ```glsl
354
+ vec3 applyFog(vec3 col, float t) {
355
+ float fogAmount = 1.0 - exp(-t * density);
356
+ vec3 fogColor = vec3(0.5, 0.6, 0.7);
357
+ return mix(col, fogColor, fogAmount);
358
+ }
359
+ ```
360
+
361
+ ### Level 2: Sun-Aware Fog (Scattering Tint)
362
+ Fog color shifts warm when looking toward the sun — creates a very natural light dispersion effect:
363
+ ```glsl
364
+ vec3 applyFogSun(vec3 col, float t, vec3 rd, vec3 sunDir) {
365
+ float fogAmount = 1.0 - exp(-t * density);
366
+ float sunAmount = max(dot(rd, sunDir), 0.0);
367
+ vec3 fogColor = mix(
368
+ vec3(0.5, 0.6, 0.7), // base fog (blue-grey)
369
+ vec3(1.0, 0.9, 0.7), // sun-facing fog (warm gold)
370
+ pow(sunAmount, 8.0)
371
+ );
372
+ return mix(col, fogColor, fogAmount);
373
+ }
374
+ ```
375
+
376
+ ### Level 3: Height-Based Fog (Analytical Integration)
377
+ Density decreases exponentially with altitude: `d(y) = a * exp(-b * y)`. The formula is an exact analytical integral along the ray, not an approximation — fog pools in valleys and clears at altitude:
378
+ ```glsl
379
+ vec3 applyFogHeight(vec3 col, float t, vec3 ro, vec3 rd) {
380
+ float a = 0.5; // density multiplier
381
+ float b = 0.3; // density falloff with height
382
+ float fogAmount = (a / b) * exp(-ro.y * b) * (1.0 - exp(-t * rd.y * b)) / rd.y;
383
+ fogAmount = clamp(fogAmount, 0.0, 1.0);
384
+ vec3 fogColor = vec3(0.5, 0.6, 0.7);
385
+ return mix(col, fogColor, fogAmount);
386
+ }
387
+ ```
388
+
389
+ ### Level 4: Extinction + Inscattering Separation
390
+ Independent RGB coefficients for absorption and scattering — allows chromatic fog effects where different wavelengths scatter differently:
391
+ ```glsl
392
+ vec3 applyFogPhysical(vec3 col, float t, vec3 fogCol) {
393
+ vec3 be = vec3(0.02, 0.025, 0.03); // extinction coefficients (RGB)
394
+ vec3 bi = vec3(0.015, 0.02, 0.025); // inscattering coefficients (RGB)
395
+ vec3 extinction = exp(-t * be);
396
+ vec3 inscatter = (1.0 - exp(-t * bi));
397
+ return col * extinction + fogCol * inscatter;
398
+ }
399
+ ```
400
+
401
+ ## Common Variants
402
+
403
+ ### Variant 1: Non-Physical Analytic Approximation (No Ray March)
404
+
405
+ Extremely low-cost analytic sky, suitable for mobile / backgrounds.
406
+
407
+ ```glsl
408
+ #define zenithDensity(x) 0.7 / pow(max(x - 0.1, 0.0035), 0.75)
409
+
410
+ vec3 getSkyAbsorption(vec3 skyColor, float zenith) {
411
+ return exp2(skyColor * -zenith) * 2.0;
412
+ }
413
+
414
+ float getMie(vec2 p, vec2 lp) {
415
+ float disk = clamp(1.0 - pow(distance(p, lp), 0.1), 0.0, 1.0);
416
+ return disk * disk * (3.0 - 2.0 * disk) * 2.0 * 3.14159;
417
+ }
418
+
419
+ vec3 getAtmosphericScattering(vec2 screenPos, vec2 lightPos) {
420
+ vec3 skyColor = vec3(0.39, 0.57, 1.0);
421
+ float zenith = zenithDensity(screenPos.y);
422
+ float rayleighMult = 1.0 + pow(1.0 - clamp(distance(screenPos, lightPos), 0.0, 1.0), 2.0) * 1.57;
423
+ vec3 absorption = getSkyAbsorption(skyColor, zenith);
424
+ vec3 sunAbsorption = getSkyAbsorption(skyColor, zenithDensity(lightPos.y + 0.1));
425
+ vec3 sky = skyColor * zenith * rayleighMult;
426
+ vec3 mie = getMie(screenPos, lightPos) * sunAbsorption;
427
+ float sunDist = clamp(length(max(lightPos.y + 0.1, 0.0)), 0.0, 1.0);
428
+ vec3 totalSky = mix(sky * absorption, sky / (sky + 0.5), sunDist);
429
+ totalSky += mie;
430
+ totalSky *= sunAbsorption * 0.5 + 0.5 * length(sunAbsorption);
431
+ return totalSky;
432
+ }
433
+ ```
434
+
435
+ ### Variant 2: Ozone Absorption Layer
436
+
437
+ Already integrated in the complete template. Set `BETA_OZONE` to a non-zero value to enable, producing a deeper blue zenith and purple tones at sunset.
438
+
439
+ ### Variant 3: Subsurface Scattering (SSS)
440
+
441
+ For translucent materials (candles/skin/jelly), using SDF-estimated thickness to control light transmission.
442
+
443
+ ```glsl
444
+ float subsurface(vec3 p, vec3 viewDir, vec3 normal) {
445
+ vec3 scatterDir = refract(viewDir, normal, 1.0 / 1.5); // IOR 1.3~2.0
446
+ vec3 samplePos = p;
447
+ float accumThickness = 0.0;
448
+ float MAX_SCATTER = 2.5;
449
+ for (float i = 0.1; i < MAX_SCATTER; i += 0.2) {
450
+ samplePos += scatterDir * i;
451
+ accumThickness += map(samplePos); // SDF function
452
+ }
453
+ float thickness = max(0.0, -accumThickness);
454
+ float SCATTER_STRENGTH = 16.0;
455
+ return SCATTER_STRENGTH * pow(MAX_SCATTER * 0.5, 3.0) / thickness;
456
+ }
457
+ // Usage: float ss = max(0.0, subsurface(hitPos, viewDir, normal));
458
+ // vec3 sssColor = albedo * smoothstep(0.0, 2.0, pow(ss, 0.6));
459
+ // finalColor = mix(lambertian, sssColor, 0.7) + specular;
460
+ ```
461
+
462
+ ### Variant 4: LUT Precomputation Pipeline (Production Grade)
463
+
464
+ Precompute Transmittance/Multiple Scattering/Sky-View into LUTs, only table lookups at runtime.
465
+
466
+ ```glsl
467
+ // Transmittance LUT query (Hillaire 2020)
468
+ vec3 getValFromTLUT(sampler2D tex, vec2 bufferRes, vec3 pos, vec3 sunDir) {
469
+ float height = length(pos);
470
+ vec3 up = pos / height;
471
+ float sunCosZenithAngle = dot(sunDir, up);
472
+ vec2 uv = vec2(
473
+ 256.0 * clamp(0.5 + 0.5 * sunCosZenithAngle, 0.0, 1.0),
474
+ 64.0 * max(0.0, min(1.0, (height - groundRadiusMM) / (atmosphereRadiusMM - groundRadiusMM)))
475
+ );
476
+ uv /= bufferRes;
477
+ return texture(tex, uv).rgb;
478
+ }
479
+ ```
480
+
481
+ ### Variant 5: Analytic Fast Atmosphere (with Aerial Perspective)
482
+
483
+ Analytic exponential approximation replacing ray march, with distance attenuation support.
484
+
485
+ ```glsl
486
+ void getRayleighMie(float opticalDepth, float densityR, float densityM, out vec3 R, out vec3 M) {
487
+ vec3 C_RAYLEIGH = vec3(5.802, 13.558, 33.100) * 1e-6;
488
+ vec3 C_MIE = vec3(3.996e-6);
489
+ R = (1.0 - exp(-opticalDepth * densityR * C_RAYLEIGH / 2.5)) * 2.5;
490
+ M = (1.0 - exp(-opticalDepth * densityM * C_MIE / 0.5)) * 0.5;
491
+ }
492
+
493
+ vec3 getLightTransmittance(vec3 lightDir) {
494
+ vec3 C_RAYLEIGH = vec3(5.802, 13.558, 33.100) * 1e-6;
495
+ vec3 C_MIE = vec3(3.996e-6);
496
+ vec3 C_OZONE = vec3(0.650, 1.881, 0.085) * 1e-6;
497
+ float extinction = exp(-clamp(lightDir.y + 0.05, 0.0, 1.0) * 40.0)
498
+ + exp(-clamp(lightDir.y + 0.5, 0.0, 1.0) * 5.0) * 0.4
499
+ + pow(clamp(1.0 - lightDir.y, 0.0, 1.0), 2.0) * 0.02
500
+ + 0.002;
501
+ return exp(-(C_RAYLEIGH + C_MIE + C_OZONE) * extinction * 1e6);
502
+ }
503
+ ```
504
+
505
+ ## Performance & Composition
506
+
507
+ ### Performance Tips
508
+ - **Nested ray march (O(N*M))**: reduce step counts (mobile: PRIMARY=12, LIGHT=4), use analytic approximation instead of light march, precompute Transmittance LUT
509
+ - **Dense exp()/pow()**: Schlick approximation replacing HG phase function — `k = 1.55*g - 0.55*g³; phase = (1-k²) / (4π*(1+k*cosθ)²)`
510
+ - **Full-screen per-pixel**: Sky-View LUT (200x200) table lookup, half-resolution rendering + bilinear upsampling
511
+ - **Banding dithering**: non-uniform step offset of 0.3, temporal blue noise dithering
512
+
513
+ ### Composition Tips
514
+ - **+ Volumetric clouds**: atmospheric transmittance determines sun color reaching the cloud layer, set `maxDist` to cloud distance
515
+ - **+ SDF scene**: SDF hit distance → `maxDist`, scene color → `sceneColor`, automatic aerial perspective
516
+ - **+ God Rays**: add occlusion to scattering integration (shadow map or additional ray march)
517
+ - **+ Terrain**: `finalColor = terrainColor * transmittance + inscattering`
518
+ - **+ PBR/SSS**: `diffuse = mix(lambert, sss, 0.7); final = ambient + albedo*diffuse + specular + fresnel*env`
519
+
520
+ ## Further Reading
521
+
522
+ For full step-by-step tutorials, mathematical derivations, and advanced usage, see [reference](../reference/atmospheric-scattering.md)
@@ -0,0 +1,115 @@
1
+ # Camera & Lens Effects
2
+
3
+ ## Use Cases
4
+ - Adding cinematic depth of field (bokeh blur)
5
+ - Motion blur for dynamic scenes
6
+ - Lens distortion and chromatic aberration
7
+ - Film grain and photographic realism
8
+
9
+ ## Techniques
10
+
11
+ ### 1. Depth of Field (Thin Lens Model)
12
+
13
+ Simulate camera aperture by jittering ray origins on a virtual lens disk:
14
+ ```glsl
15
+ // For each sample:
16
+ vec2 lens = randomDisk(seed) * apertureSize; // random point on aperture
17
+ vec3 focalPoint = ro + rd * focalDistance; // point on focal plane
18
+ vec3 newRo = ro + cameraRight * lens.x + cameraUp * lens.y; // offset origin
19
+ vec3 newRd = normalize(focalPoint - newRo); // new ray toward focal point
20
+
21
+ // Accumulate multiple samples (16-64) for smooth bokeh
22
+ // Use with AA loop or temporal accumulation
23
+
24
+ // Disk sampling helper:
25
+ vec2 randomDisk(float seed) {
26
+ float angle = hash11(seed) * 6.2831853;
27
+ float radius = sqrt(hash11(seed + 1.0));
28
+ return vec2(cos(angle), sin(angle)) * radius;
29
+ }
30
+ ```
31
+
32
+ Parameters:
33
+ - `apertureSize`: 0.0 = pinhole (sharp), 0.1-0.5 = visible bokeh
34
+ - `focalDistance`: distance to the in-focus plane
35
+
36
+ ### 2. Post-Process Depth of Field (Single Pass)
37
+
38
+ Cheaper approximation using depth buffer blur:
39
+ ```glsl
40
+ vec3 dofPostProcess(sampler2D colorTex, sampler2D depthTex, vec2 uv) {
41
+ float depth = texture(depthTex, uv).r;
42
+ float coc = abs(depth - focalDepth) * apertureSize; // circle of confusion
43
+ coc = clamp(coc, 0.0, maxBlur);
44
+
45
+ vec3 color = vec3(0.0);
46
+ float total = 0.0;
47
+ // 16-tap Poisson disk sampling
48
+ for (int i = 0; i < 16; i++) {
49
+ vec2 offset = poissonDisk[i] * coc / iResolution.xy;
50
+ color += texture(colorTex, uv + offset).rgb;
51
+ total += 1.0;
52
+ }
53
+ return color / total;
54
+ }
55
+ ```
56
+
57
+ ### 3. Motion Blur (Velocity-Based)
58
+
59
+ ```glsl
60
+ // Simple radial motion blur (camera rotation)
61
+ vec3 motionBlur(vec2 uv, float amount) {
62
+ vec3 color = vec3(0.0);
63
+ vec2 center = vec2(0.5);
64
+ int samples = 8;
65
+ for (int i = 0; i < samples; i++) {
66
+ float t = float(i) / float(samples - 1) - 0.5;
67
+ vec2 sampleUV = mix(uv, center, t * amount);
68
+ color += texture(iChannel0, sampleUV).rgb;
69
+ }
70
+ return color / float(samples);
71
+ }
72
+
73
+ // Time-based motion blur for ray marching
74
+ // Sample multiple time offsets within the frame:
75
+ // float t_shutter = iTime + (hash11(seed) - 0.5) * shutterSpeed;
76
+ // Use t_shutter instead of iTime for scene animation
77
+ ```
78
+
79
+ ### 4. Lens Distortion
80
+
81
+ ```glsl
82
+ // Barrel/pincushion distortion
83
+ vec2 lensDistortion(vec2 uv, float k1, float k2) {
84
+ vec2 centered = uv - 0.5;
85
+ float r2 = dot(centered, centered);
86
+ float distortion = 1.0 + k1 * r2 + k2 * r2 * r2;
87
+ return centered * distortion + 0.5;
88
+ // k1 > 0: pincushion, k1 < 0: barrel
89
+ }
90
+ ```
91
+
92
+ ### 5. Film Grain
93
+
94
+ ```glsl
95
+ vec3 filmGrain(vec3 color, vec2 uv, float time, float intensity) {
96
+ float grain = hash12(uv * iResolution.xy + fract(time) * 1000.0) - 0.5;
97
+ // Apply more grain in darker areas (realistic film response)
98
+ float luminance = dot(color, vec3(0.299, 0.587, 0.114));
99
+ float grainAmount = intensity * (1.0 - luminance * 0.5);
100
+ return color + grain * grainAmount;
101
+ }
102
+ ```
103
+
104
+ ### 6. Vignette
105
+
106
+ ```glsl
107
+ vec3 vignette(vec3 color, vec2 uv, float intensity, float smoothness) {
108
+ vec2 centered = uv - 0.5;
109
+ float dist = length(centered);
110
+ float vig = smoothstep(0.5, 0.5 - smoothness, dist);
111
+ return color * mix(1.0 - intensity, 1.0, vig);
112
+ }
113
+ ```
114
+
115
+ → For deeper details, see [reference/camera-effects.md](../reference/camera-effects.md)