@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,408 @@
1
+ # Heightfield Ray Marching Terrain Rendering
2
+
3
+ ## Use Cases
4
+
5
+ - Procedural generation of natural landscapes (mountains, canyons, dunes, etc.) in ShaderToy / Fragment Shaders
6
+ - Complete 3D terrain flythrough scenes in a single pixel shader, without geometry
7
+ - Cinematic aerial perspective, soft shadows, and layered material effects
8
+
9
+ ## Core Principles
10
+
11
+ Rendering pipeline: height field definition → ray marching intersection → normals & materials → lighting → atmospheric effects
12
+
13
+ - **FBM**: `f(p) = Σ (aⁿ × noise(2ⁿ × R × p))`, a=0.5, R=rotation matrix, 2ⁿ=frequency doubling
14
+ - **Derivative erosion**: `f(p) = Σ (aⁿ × noise(p) / (1 + dot(d,d)))`, d=accumulated gradient, suppresses detail on steep slopes
15
+ - **Adaptive step size**: `step = factor × (ray.y - terrain_height)`
16
+
17
+ ## Implementation Steps
18
+
19
+ 1. **Noise & hash** — sin-free hash + Value Noise with analytic derivatives (`noised` returns value + partial derivatives)
20
+ 2. **FBM terrain** — derivative erosion FBM, `mat2(0.8,-0.6,0.6,0.8)` per-layer rotation to eliminate banding; LOD tiers (L=3/M=9/H=16 octaves)
21
+ 3. **Ray marching** — upper bound clipping + adaptive step `STEP_FACTOR * h` + distance-adaptive precision `abs(h) < 0.0015*t`
22
+ 4. **Normals** — finite differences, epsilon increases with distance to avoid distant aliasing, using high-precision `terrainH`
23
+ 5. **Soft shadows** — march toward sun, track `min(k*h/t)` to estimate penumbra
24
+ 6. **Materials** — blend rock/grass/snow/sand by height + slope + noise
25
+ 7. **Lighting** — Lambert diffuse + hemisphere ambient + backlight + Fresnel rim light + Blinn-Phong specular
26
+ 8. **Atmospheric fog** — wavelength-dependent attenuation `exp(-t*k*vec3(1,1.5,4))` + sun scatter fog color
27
+ 9. **Sky** — zenith-to-horizon gradient + sun disk/halo
28
+ 10. **Camera** — Look-At matrix + path-following flight, height tracks terrain
29
+
30
+ ## Complete Code Template
31
+
32
+ ```glsl
33
+ // =====================================================
34
+ // Heightfield Terrain Rendering - Complete Template
35
+ // =====================================================
36
+ #define TERRAIN_OCTAVES 9 // FBM octave count (3~16)
37
+ #define TERRAIN_SCALE 0.003 // Terrain spatial frequency
38
+ #define TERRAIN_HEIGHT 120.0 // Terrain elevation scale
39
+ #define MAX_STEPS 300 // Ray march step count (80~400)
40
+ #define MAX_DIST 5000.0 // Maximum render distance
41
+ #define STEP_FACTOR 0.4 // March conservative factor (0.3~0.8)
42
+ #define SHADOW_STEPS 80 // Shadow step count (32~128)
43
+ #define SHADOW_K 16.0 // Penumbra softness (8~64)
44
+ #define FOG_DENSITY 0.00025 // Fog density
45
+ #define SNOW_HEIGHT 80.0 // Snow line height
46
+ #define CAM_ALTITUDE 20.0 // Camera height above ground
47
+ #define SUN_DIR normalize(vec3(0.8, 0.4, -0.6))
48
+ #define SUN_COL vec3(8.0, 5.0, 3.0)
49
+ #define SKY_COL vec3(0.5, 0.7, 1.0)
50
+
51
+ // ---- Hash & Noise ----
52
+ float hash(vec2 p) {
53
+ vec3 p3 = fract(vec3(p.xyx) * 0.1031);
54
+ p3 += dot(p3, p3.yzx + 19.19);
55
+ return fract((p3.x + p3.y) * p3.z);
56
+ }
57
+
58
+ vec3 noised(in vec2 p) {
59
+ vec2 i = floor(p);
60
+ vec2 f = fract(p);
61
+ vec2 u = f * f * (3.0 - 2.0 * f);
62
+ vec2 du = 6.0 * f * (1.0 - f);
63
+ float a = hash(i + vec2(0.0, 0.0));
64
+ float b = hash(i + vec2(1.0, 0.0));
65
+ float c = hash(i + vec2(0.0, 1.0));
66
+ float d = hash(i + vec2(1.0, 1.0));
67
+ float v = a + (b - a) * u.x + (c - a) * u.y + (a - b - c + d) * u.x * u.y;
68
+ vec2 g = du * (vec2(b - a, c - a) + (a - b - c + d) * u.yx);
69
+ return vec3(v, g);
70
+ }
71
+
72
+ float noise(in vec2 p) { return noised(p).x; }
73
+
74
+ // ---- FBM Terrain (derivative erosion) + LOD ----
75
+ const mat2 m2 = mat2(0.8, -0.6, 0.6, 0.8);
76
+
77
+ float terrainFBM(in vec2 p, int octaves) {
78
+ p *= TERRAIN_SCALE;
79
+ float a = 0.0, b = 1.0;
80
+ vec2 d = vec2(0.0);
81
+ for (int i = 0; i < 16; i++) {
82
+ if (i >= octaves) break;
83
+ vec3 n = noised(p);
84
+ d += n.yz;
85
+ a += b * n.x / (1.0 + dot(d, d));
86
+ b *= 0.5;
87
+ p = m2 * p * 2.0;
88
+ }
89
+ return a * TERRAIN_HEIGHT;
90
+ }
91
+
92
+ float terrainL(vec2 p) { return terrainFBM(p, 3); }
93
+ float terrainM(vec2 p) { return terrainFBM(p, TERRAIN_OCTAVES); }
94
+ float terrainH(vec2 p) { return terrainFBM(p, 16); }
95
+
96
+ // ---- Ray Marching ----
97
+ float raymarch(in vec3 ro, in vec3 rd) {
98
+ float t = 0.0;
99
+ if (ro.y > TERRAIN_HEIGHT && rd.y >= 0.0) return -1.0;
100
+ if (ro.y > TERRAIN_HEIGHT) t = (ro.y - TERRAIN_HEIGHT) / (-rd.y);
101
+ for (int i = 0; i < MAX_STEPS; i++) {
102
+ vec3 pos = ro + t * rd;
103
+ float h = pos.y - terrainM(pos.xz);
104
+ if (abs(h) < 0.0015 * t) break;
105
+ if (t > MAX_DIST) return -1.0;
106
+ t += STEP_FACTOR * h;
107
+ }
108
+ return t;
109
+ }
110
+
111
+ // ---- Normals ----
112
+ vec3 calcNormal(in vec3 pos, float t) {
113
+ float eps = 0.02 + 0.00005 * t * t;
114
+ float hC = terrainH(pos.xz);
115
+ float hR = terrainH(pos.xz + vec2(eps, 0.0));
116
+ float hU = terrainH(pos.xz + vec2(0.0, eps));
117
+ return normalize(vec3(hC - hR, eps, hC - hU));
118
+ }
119
+
120
+ // ---- Soft Shadows ----
121
+ float calcShadow(in vec3 pos, in vec3 sunDir) {
122
+ float res = 1.0, t = 1.0;
123
+ for (int i = 0; i < SHADOW_STEPS; i++) {
124
+ vec3 p = pos + t * sunDir;
125
+ float h = p.y - terrainM(p.xz);
126
+ if (h < 0.001) return 0.0;
127
+ res = min(res, SHADOW_K * h / t);
128
+ t += clamp(h, 2.0, 100.0);
129
+ }
130
+ return clamp(res, 0.0, 1.0);
131
+ }
132
+
133
+ // ---- Materials ----
134
+ vec3 getMaterial(in vec3 pos, in vec3 nor) {
135
+ float slope = nor.y, h = pos.y;
136
+ float nz = noise(pos.xz * 0.04) * noise(pos.xz * 0.005);
137
+ vec3 rock = vec3(0.10, 0.09, 0.08);
138
+ vec3 grass = mix(vec3(0.10, 0.08, 0.04), vec3(0.05, 0.09, 0.02), nz);
139
+ vec3 snow = vec3(0.62, 0.65, 0.70);
140
+ vec3 sand = vec3(0.50, 0.45, 0.35);
141
+ vec3 col = rock;
142
+ col = mix(col, grass, smoothstep(0.5, 0.8, slope));
143
+ float snowMask = smoothstep(SNOW_HEIGHT - 20.0 * nz, SNOW_HEIGHT + 10.0, h)
144
+ * smoothstep(0.3, 0.7, slope);
145
+ col = mix(col, snow, snowMask);
146
+ float beachMask = smoothstep(2.5, 0.0, h) * smoothstep(0.5, 0.9, slope);
147
+ col = mix(col, sand, beachMask);
148
+ return col;
149
+ }
150
+
151
+ // ---- Lighting ----
152
+ vec3 calcLighting(in vec3 pos, in vec3 nor, in vec3 rd, float shadow) {
153
+ float dif = clamp(dot(nor, SUN_DIR), 0.0, 1.0);
154
+ float amb = 0.5 + 0.5 * nor.y;
155
+ vec3 backDir = normalize(vec3(-SUN_DIR.x, 0.0, -SUN_DIR.z));
156
+ float bac = clamp(0.2 + 0.8 * dot(nor, backDir), 0.0, 1.0);
157
+ float fre = pow(clamp(1.0 + dot(rd, nor), 0.0, 1.0), 2.0);
158
+ vec3 hal = normalize(SUN_DIR - rd);
159
+ float spe = pow(clamp(dot(nor, hal), 0.0, 1.0), 16.0)
160
+ * (0.04 + 0.96 * pow(1.0 + dot(hal, rd), 5.0));
161
+ vec3 lin = vec3(0.0);
162
+ lin += dif * shadow * SUN_COL * 0.1;
163
+ lin += amb * SKY_COL * 0.2;
164
+ lin += bac * vec3(0.15, 0.05, 0.04);
165
+ lin += fre * SKY_COL * 0.3;
166
+ lin += spe * shadow * SUN_COL * 0.05;
167
+ return lin;
168
+ }
169
+
170
+ // ---- Atmosphere ----
171
+ vec3 applyFog(in vec3 col, float t, in vec3 rd) {
172
+ vec3 ext = exp(-t * FOG_DENSITY * vec3(1.0, 1.5, 4.0));
173
+ float sundot = clamp(dot(rd, SUN_DIR), 0.0, 1.0);
174
+ vec3 fogCol = mix(vec3(0.55, 0.55, 0.58), vec3(1.0, 0.7, 0.3), 0.3 * pow(sundot, 8.0));
175
+ return col * ext + fogCol * (1.0 - ext);
176
+ }
177
+
178
+ // ---- Sky ----
179
+ vec3 getSky(in vec3 rd) {
180
+ vec3 col = vec3(0.3, 0.5, 0.85) - rd.y * vec3(0.2, 0.15, 0.0);
181
+ float horizon = pow(1.0 - max(rd.y, 0.0), 4.0);
182
+ col = mix(col, vec3(0.8, 0.75, 0.7), 0.5 * horizon);
183
+ float sundot = clamp(dot(rd, SUN_DIR), 0.0, 1.0);
184
+ col += vec3(1.0, 0.7, 0.3) * 0.3 * pow(sundot, 8.0);
185
+ col += vec3(1.0, 0.9, 0.7) * 0.5 * pow(sundot, 64.0);
186
+ col += vec3(1.0, 1.0, 0.9) * min(pow(sundot, 1150.0), 0.3);
187
+ return col;
188
+ }
189
+
190
+ // ---- Camera ----
191
+ vec3 cameraPath(float t) {
192
+ return vec3(100.0 * sin(0.2 * t), 0.0, -100.0 * t);
193
+ }
194
+
195
+ mat3 setCamera(in vec3 ro, in vec3 ta) {
196
+ vec3 cw = normalize(ta - ro);
197
+ vec3 cu = normalize(cross(cw, vec3(0.0, 1.0, 0.0)));
198
+ vec3 cv = cross(cu, cw);
199
+ return mat3(cu, cv, cw);
200
+ }
201
+
202
+ // ======== Main Function ========
203
+ void mainImage(out vec4 fragColor, in vec2 fragCoord) {
204
+ vec2 uv = (2.0 * fragCoord - iResolution.xy) / iResolution.y;
205
+ float time = iTime * 0.5;
206
+ vec3 ro = cameraPath(time);
207
+ ro.y = terrainL(ro.xz) + CAM_ALTITUDE;
208
+ vec3 ta = cameraPath(time + 2.0);
209
+ ta.y = terrainL(ta.xz) + CAM_ALTITUDE * 0.5;
210
+ mat3 cam = setCamera(ro, ta);
211
+ vec3 rd = cam * normalize(vec3(uv, 1.5));
212
+
213
+ float t = raymarch(ro, rd);
214
+ vec3 col;
215
+ if (t > 0.0) {
216
+ vec3 pos = ro + t * rd;
217
+ vec3 nor = calcNormal(pos, t);
218
+ vec3 mate = getMaterial(pos, nor);
219
+ float sha = calcShadow(pos + nor * 0.5, SUN_DIR);
220
+ vec3 lin = calcLighting(pos, nor, rd, sha);
221
+ col = mate * lin;
222
+ col = applyFog(col, t, rd);
223
+ } else {
224
+ col = getSky(rd);
225
+ }
226
+ col = 1.0 - exp(-col * 2.0);
227
+ col = pow(col, vec3(1.0 / 2.2));
228
+ fragColor = vec4(col, 1.0);
229
+ }
230
+ ```
231
+
232
+ ### Binary Refinement (optional, called after raymarch)
233
+
234
+ ```glsl
235
+ float bisect(in vec3 ro, in vec3 rd, float tNear, float tFar) {
236
+ for (int i = 0; i < 5; i++) {
237
+ float tMid = 0.5 * (tNear + tFar);
238
+ vec3 pos = ro + tMid * rd;
239
+ float h = pos.y - terrainM(pos.xz);
240
+ if (h > 0.0) tNear = tMid; else tFar = tMid;
241
+ }
242
+ return 0.5 * (tNear + tFar);
243
+ }
244
+ ```
245
+
246
+ ## Common Variants
247
+
248
+ ### Relaxation Marching
249
+
250
+ Automatically increases step size at far distances, covering greater range in 90 steps.
251
+
252
+ ```glsl
253
+ float raymarchRelax(in vec3 ro, in vec3 rd) {
254
+ float t = 0.0;
255
+ float d = (ro + rd * t).y - terrainM((ro + rd * t).xz);
256
+ for (int i = 0; i < 90; i++) {
257
+ if (abs(d) < t * 0.0001 || t > 400.0) break;
258
+ float rl = max(t * 0.02, 1.0);
259
+ t += d * rl;
260
+ vec3 pos = ro + t * rd;
261
+ d = (pos.y - terrainM(pos.xz)) * 0.7;
262
+ }
263
+ return t;
264
+ }
265
+ ```
266
+
267
+ ### Sign-Alternating FBM
268
+
269
+ Amplitude flips sign each layer, producing rugged alternating ridge/valley patterns.
270
+
271
+ ```glsl
272
+ float terrainSignFlip(in vec2 p) {
273
+ p *= TERRAIN_SCALE;
274
+ float a = 0.0, w = 1.0;
275
+ for (int i = 0; i < TERRAIN_OCTAVES; i++) {
276
+ a += w * noise(p);
277
+ w = -w * 0.4;
278
+ p = m2 * p * 2.0;
279
+ }
280
+ return a * TERRAIN_HEIGHT;
281
+ }
282
+ ```
283
+
284
+ ### Canyon Style (Texture-Driven + 3D Displacement)
285
+
286
+ Texture sampling + 3D FBM displacement, supporting cliffs/caves and other non-heightfield formations.
287
+
288
+ ```glsl
289
+ float noise3D(in vec3 x) {
290
+ vec3 p = floor(x); vec3 f = fract(x);
291
+ f = f * f * (3.0 - 2.0 * f);
292
+ vec2 uv = (p.xy + vec2(37.0, 17.0) * p.z) + f.xy;
293
+ vec2 rg = textureLod(iChannel0, (uv + 0.5) / 256.0, 0.0).yx;
294
+ return mix(rg.x, rg.y, f.z);
295
+ }
296
+
297
+ const mat3 m3 = mat3(0.00, 0.80, 0.60, -0.80, 0.36,-0.48, -0.60,-0.48, 0.64);
298
+
299
+ float displacement(vec3 p) {
300
+ float f = 0.5 * noise3D(p); p = m3 * p * 2.02;
301
+ f += 0.25 * noise3D(p); p = m3 * p * 2.03;
302
+ f += 0.125 * noise3D(p); p = m3 * p * 2.01;
303
+ f += 0.0625 * noise3D(p);
304
+ return f;
305
+ }
306
+
307
+ float mapCanyon(vec3 p) {
308
+ float h = terrainM(p.xz);
309
+ float dis = displacement(0.25 * p * vec3(1.0, 4.0, 1.0)) * 3.0;
310
+ return (dis + p.y - h) * 0.25;
311
+ }
312
+ ```
313
+
314
+ ### Directional Erosion Noise
315
+
316
+ Slope direction drives Gabor noise projection, producing realistic dendritic drainage patterns.
317
+
318
+ ```glsl
319
+ #define EROSION_BRANCH 1.5
320
+
321
+ vec3 erosionNoise(vec2 p, vec2 dir) {
322
+ vec2 ip = floor(p); vec2 fp = fract(p) - 0.5;
323
+ float va = 0.0, wt = 0.0; vec2 dva = vec2(0.0);
324
+ for (int i = -2; i <= 1; i++)
325
+ for (int j = -2; j <= 1; j++) {
326
+ vec2 o = vec2(float(i), float(j));
327
+ vec2 h = hash2(ip - o) * 0.5;
328
+ vec2 pp = fp + o + h;
329
+ float d = dot(pp, pp);
330
+ float w = exp(-d * 2.0);
331
+ float mag = dot(pp, dir);
332
+ va += cos(mag * 6.283) * w;
333
+ dva += -sin(mag * 6.283) * dir * w;
334
+ wt += w;
335
+ }
336
+ return vec3(va, dva) / wt;
337
+ }
338
+
339
+ float terrainErosion(vec2 p, vec2 baseSlope) {
340
+ float e = 0.0, a = 0.5;
341
+ vec2 dir = normalize(baseSlope + vec2(0.001));
342
+ for (int i = 0; i < 5; i++) {
343
+ vec3 n = erosionNoise(p * 4.0, dir);
344
+ e += a * n.x;
345
+ dir = normalize(dir + n.zy * vec2(1.0, -1.0) * EROSION_BRANCH);
346
+ a *= 0.5; p *= 2.0;
347
+ }
348
+ return e;
349
+ }
350
+ ```
351
+
352
+ ### Volumetric Clouds + God Rays
353
+
354
+ Front-to-back alpha compositing of cloud slabs, accumulating god ray factor.
355
+
356
+ ```glsl
357
+ #define CLOUD_BASE 200.0
358
+ #define CLOUD_TOP 300.0
359
+
360
+ vec4 raymarchClouds(vec3 ro, vec3 rd) {
361
+ float tmin = (CLOUD_BASE - ro.y) / rd.y;
362
+ float tmax = (CLOUD_TOP - ro.y) / rd.y;
363
+ if (tmin > tmax) { float tmp = tmin; tmin = tmp; tmax = tmp; }
364
+ if (tmin < 0.0) tmin = 0.0;
365
+ float t = tmin;
366
+ vec4 sum = vec4(0.0); float rays = 0.0;
367
+ for (int i = 0; i < 64; i++) {
368
+ if (sum.a > 0.99 || t > tmax) break;
369
+ vec3 pos = ro + t * rd;
370
+ float hFrac = (pos.y - CLOUD_BASE) / (CLOUD_TOP - CLOUD_BASE);
371
+ float shape = 1.0 - 2.0 * abs(hFrac - 0.5);
372
+ float den = shape - 1.6 * (1.0 - noise(pos.xz * 0.01));
373
+ if (den > 0.0) {
374
+ float shadowDen = shape - 1.6 * (1.0 - noise((pos.xz + SUN_DIR.xz * 30.0) * 0.01));
375
+ float shadow = clamp(1.0 - shadowDen * 2.0, 0.0, 1.0);
376
+ vec3 cloudCol = mix(vec3(0.4, 0.4, 0.45), vec3(1.0, 0.95, 0.8), shadow);
377
+ float alpha = clamp(den * 0.4, 0.0, 1.0);
378
+ rays += 0.02 * shadow * (1.0 - sum.a);
379
+ cloudCol *= alpha;
380
+ sum += vec4(cloudCol, alpha) * (1.0 - sum.a);
381
+ }
382
+ t += max(0.5, 0.05 * t);
383
+ }
384
+ sum.rgb += pow(rays, 3.0) * 0.4 * vec3(1.0, 0.8, 0.7);
385
+ return sum;
386
+ }
387
+ ```
388
+
389
+ ## Performance & Composition
390
+
391
+ **Performance:**
392
+ - LOD tiers: low octaves for marching (3-9), high octaves for normals (16), lowest for camera (3)
393
+ - Upper bound clipping: intersect ray with terrain max height plane before marching
394
+ - Adaptive precision: hit threshold `abs(h) < k * t`, tolerates larger error at distance
395
+ - Texture instead of noise: `textureLod` sampling of pre-baked noise, 2-3x speed
396
+ - Early exit: `t > MAX_DIST`, `alpha > 0.99`, shadow `h < 0`
397
+ - Dithered start: `t += hash(fragCoord) * step_size` to eliminate banding artifacts
398
+
399
+ **Composition:**
400
+ - Terrain + water: water at a fixed y-plane, multi-frequency noise perturbing normals, Fresnel controlling reflection/refraction
401
+ - Terrain + volumetric clouds: render terrain first, then march cloud slab, front-to-back alpha compositing
402
+ - Terrain + volumetric fog: additionally sample 3D FBM density field along ray, decay with distance
403
+ - Terrain + SDF objects: `floor(p.xz/gridSize)` grid placement, `hash(cell)` randomization
404
+ - Terrain + TAA: inter-frame reprojection blending, ~10% new frame + 90% history frame
405
+
406
+ ## Further Reading
407
+
408
+ For full step-by-step tutorials, mathematical derivations, and advanced usage, see [reference](../reference/terrain-rendering.md)
@@ -0,0 +1,121 @@
1
+ # Advanced Texture Mapping Techniques
2
+
3
+ ## Use Cases
4
+ - Texturing 3D surfaces without UV seams (triplanar/biplanar mapping)
5
+ - Eliminating visible tiling repetition on large surfaces
6
+ - Proper texture filtering in ray-marched scenes (mip-level selection)
7
+ - Combining procedural and sampled textures
8
+
9
+ ## Techniques
10
+
11
+ ### 1. Biplanar Mapping (Optimized Triplanar)
12
+
13
+ Uses only 2 texture fetches instead of 3, selecting the two most relevant projection axes:
14
+
15
+ ```glsl
16
+ vec4 biplanar(sampler2D sam, vec3 p, vec3 n, float k) {
17
+ vec3 dpdx = dFdx(p);
18
+ vec3 dpdy = dFdy(p);
19
+ n = abs(n);
20
+
21
+ // Determine major, minor, median axes
22
+ ivec3 ma = (n.x > n.y && n.x > n.z) ? ivec3(0,1,2) :
23
+ (n.y > n.z) ? ivec3(1,2,0) : ivec3(2,0,1);
24
+ ivec3 mi = (n.x < n.y && n.x < n.z) ? ivec3(0,1,2) :
25
+ (n.y < n.z) ? ivec3(1,2,0) : ivec3(2,0,1);
26
+ ivec3 me = ivec3(3) - mi - ma;
27
+
28
+ // Two texture fetches (major and median projections)
29
+ vec4 x = textureGrad(sam, vec2(p[ma.y], p[ma.z]),
30
+ vec2(dpdx[ma.y], dpdx[ma.z]),
31
+ vec2(dpdy[ma.y], dpdy[ma.z]));
32
+ vec4 y = textureGrad(sam, vec2(p[me.y], p[me.z]),
33
+ vec2(dpdx[me.y], dpdx[me.z]),
34
+ vec2(dpdy[me.y], dpdy[me.z]));
35
+
36
+ // Blend weights with local support
37
+ vec2 w = vec2(n[ma.x], n[me.x]);
38
+ w = clamp((w - 0.5773) / (1.0 - 0.5773), 0.0, 1.0); // 0.5773 = 1/sqrt(3)
39
+ w = pow(w, vec2(k / 8.0));
40
+
41
+ return (x * w.x + y * w.y) / (w.x + w.y);
42
+ }
43
+ // Usage: vec4 col = biplanar(tex, worldPos * scale, worldNormal, 8.0);
44
+ ```
45
+
46
+ **Why biplanar over triplanar**: Saves one texture fetch (bandwidth-bound advantage), with k=8 visually equivalent to triplanar. The `dFdx/dFdy` gradient propagation prevents mipmap seams at axis-switching boundaries.
47
+
48
+ ### 2. Texture Repetition Avoidance
49
+
50
+ Three approaches to eliminate visible tiling patterns:
51
+
52
+ #### Method A: Per-Tile Random Offset (4 fetches)
53
+ ```glsl
54
+ vec4 textureNoTile(sampler2D sam, vec2 uv) {
55
+ vec2 iuv = floor(uv);
56
+ vec2 fuv = fract(uv);
57
+
58
+ // Generate 4 random offsets for the 4 surrounding tiles
59
+ vec4 ofa = hash42(iuv + vec2(0, 0));
60
+ vec4 ofb = hash42(iuv + vec2(1, 0));
61
+ vec4 ofc = hash42(iuv + vec2(0, 1));
62
+ vec4 ofd = hash42(iuv + vec2(1, 1));
63
+
64
+ // Transform UVs per tile
65
+ vec2 uva = uv + ofa.xy;
66
+ vec2 uvb = uv + ofb.xy;
67
+ vec2 uvc = uv + ofc.xy;
68
+ vec2 uvd = uv + ofd.xy;
69
+
70
+ // Blend near borders with smooth weights
71
+ vec2 b = smoothstep(0.25, 0.75, fuv);
72
+ return mix(mix(texture(sam, uva), texture(sam, uvb), b.x),
73
+ mix(texture(sam, uvc), texture(sam, uvd), b.x), b.y);
74
+ }
75
+ ```
76
+
77
+ #### Method B: Virtual Pattern (2 fetches, cheapest)
78
+ ```glsl
79
+ vec4 textureNoTileCheap(sampler2D sam, vec2 uv) {
80
+ float k = texture(iChannel1, 0.005 * uv).x; // low-freq variation index
81
+ float index = k * 8.0;
82
+ float i = floor(index);
83
+ float f = fract(index);
84
+
85
+ // Two offset lookups based on index
86
+ vec2 offa = sin(vec2(3.0, 7.0) * (i + 0.0));
87
+ vec2 offb = sin(vec2(3.0, 7.0) * (i + 1.0));
88
+
89
+ return mix(texture(sam, uv + offa), texture(sam, uv + offb), smoothstep(0.2, 0.8, f));
90
+ }
91
+ ```
92
+
93
+ ### 3. Ray Differential Texture Filtering
94
+
95
+ For ray-marched scenes, compute proper mip levels using ray differentials:
96
+ ```glsl
97
+ // After finding hit point pos with normal nor:
98
+ // 1. Compute neighbor pixel ray directions
99
+ vec3 rdx = normalize(rd + dFdx(rd)); // x-neighbor ray
100
+ vec3 rdy = normalize(rd + dFdy(rd)); // y-neighbor ray
101
+
102
+ // 2. Intersect neighbors with tangent plane at hit point
103
+ float dt_dx = -dot(pos - ro, nor) / dot(rdx, nor);
104
+ float dt_dy = -dot(pos - ro, nor) / dot(rdy, nor);
105
+ vec3 posDx = ro + rdx * dt_dx;
106
+ vec3 posDy = ro + rdy * dt_dy;
107
+
108
+ // 3. World-space position derivatives = pixel footprint
109
+ vec3 dposdx = posDx - pos;
110
+ vec3 dposdy = posDy - pos;
111
+
112
+ // 4. Transform to texture derivatives and use textureGrad
113
+ // For simple planar mapping (e.g. ground plane):
114
+ vec2 duvdx = dposdx.xz * textureScale;
115
+ vec2 duvdy = dposdy.xz * textureScale;
116
+ vec4 color = textureGrad(tex, pos.xz * textureScale, duvdx, duvdy);
117
+ ```
118
+
119
+ This provides correct mip-level selection for procedural and sampled textures on ray-marched surfaces, eliminating shimmer and aliasing at distance.
120
+
121
+ → For deeper details, see [reference/texture-mapping-advanced.md](../reference/texture-mapping-advanced.md)