@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.
- package/LICENSE +21 -0
- package/README.md +109 -0
- package/THIRD_PARTY_NOTICES.md +64 -0
- package/extensions/index.ts +6 -0
- package/install.sh +5 -0
- package/manifests/adapter-evidence.json +45 -0
- package/manifests/capabilities.json +124 -0
- package/manifests/live-verification.json +26 -0
- package/manifests/provenance.json +71 -0
- package/manifests/roles.json +474 -0
- package/manifests/sbom.json +7797 -0
- package/manifests/skill-compatibility.json +8100 -0
- package/manifests/subagent-provenance.json +37 -0
- package/package.json +91 -0
- package/prompts/build.md +8 -0
- package/prompts/define.md +8 -0
- package/prompts/ideate.md +8 -0
- package/prompts/local-review.md +8 -0
- package/prompts/ship.md +8 -0
- package/roles/agent-evaluator.md +47 -0
- package/roles/ai-regression-scout.md +47 -0
- package/roles/browser-qa-runner.md +47 -0
- package/roles/code-reviewer.md +47 -0
- package/roles/code-scout.md +47 -0
- package/roles/convergence-reviewer.md +55 -0
- package/roles/doc-researcher.md +47 -0
- package/roles/e2e-artifact-runner.md +47 -0
- package/roles/implementer.md +47 -0
- package/roles/opensource-sanitizer.md +47 -0
- package/roles/plan-auditor.md +47 -0
- package/roles/pr-test-analyzer.md +47 -0
- package/roles/security-auditor.md +47 -0
- package/roles/silent-failure-reviewer.md +47 -0
- package/roles/spec-miner.md +47 -0
- package/roles/test-coverage-reviewer.md +47 -0
- package/roles/test-engineer.md +48 -0
- package/roles/web-performance-auditor.md +47 -0
- package/roles/web-researcher.md +47 -0
- package/scripts/apply-adapter-evidence.ts +73 -0
- package/scripts/bootstrap.sh +180 -0
- package/scripts/generate-provenance.ts +143 -0
- package/scripts/local-package-e2e.ts +51 -0
- package/scripts/sync-roles.ts +213 -0
- package/scripts/sync-skills.ts +356 -0
- package/scripts/validate-runtime.ts +11 -0
- package/skills/academic-paper-review/SKILL.md +81 -0
- package/skills/agents-md-initialization/SKILL.md +121 -0
- package/skills/agents-md-initialization/references/agents-template.md +83 -0
- package/skills/agents-md-initialization/references/agents_md.py +215 -0
- package/skills/ai-regression-scout/SKILL.md +24 -0
- package/skills/aili-delivery-flow/SKILL.md +125 -0
- package/skills/aili-delivery-flow/references/artifact-contracts.md +138 -0
- package/skills/aili-delivery-flow/references/backend-routing.md +40 -0
- package/skills/aili-delivery-flow/references/build-execution-loop.md +113 -0
- package/skills/aili-delivery-flow/references/build-goal-mode.md +3 -0
- package/skills/aili-delivery-flow/references/direct-vs-delegated-work.md +38 -0
- package/skills/aili-delivery-flow/references/implementation-packages.md +54 -0
- package/skills/aili-delivery-flow/references/lifecycle.md +127 -0
- package/skills/aili-delivery-flow/references/protocols/acceptance-test-plan.md +18 -0
- package/skills/aili-delivery-flow/references/protocols/alignment-questionnaire.md +10 -0
- package/skills/aili-delivery-flow/references/protocols/closeout-report.md +101 -0
- package/skills/aili-delivery-flow/references/protocols/compact-evidence-pack.md +46 -0
- package/skills/aili-delivery-flow/references/protocols/idea-brief.md +10 -0
- package/skills/aili-delivery-flow/references/protocols/implementation-package.md +53 -0
- package/skills/aili-delivery-flow/references/protocols/research-evidence-pack.md +19 -0
- package/skills/aili-delivery-flow/references/protocols/review-report.md +7 -0
- package/skills/aili-delivery-flow/references/protocols/spec-draft.md +12 -0
- package/skills/aili-delivery-flow/references/protocols/subagent-result.md +60 -0
- package/skills/aili-delivery-flow/references/protocols/subagent-task-packet.md +29 -0
- package/skills/aili-delivery-flow/references/protocols/worktree-context.md +109 -0
- package/skills/aili-delivery-flow/references/questionnaire-policy.md +62 -0
- package/skills/aili-delivery-flow/references/review-repair-loop.md +16 -0
- package/skills/aili-delivery-flow/references/test-document-policy.md +35 -0
- package/skills/android-native-dev/SKILL.md +722 -0
- package/skills/android-native-dev/references/accessibility.md +209 -0
- package/skills/android-native-dev/references/adaptive-screens.md +231 -0
- package/skills/android-native-dev/references/design-style-guide.md +365 -0
- package/skills/android-native-dev/references/functional-requirements.md +229 -0
- package/skills/android-native-dev/references/motion-system.md +203 -0
- package/skills/android-native-dev/references/performance-stability.md +223 -0
- package/skills/android-native-dev/references/privacy-security.md +244 -0
- package/skills/android-native-dev/references/testing.md +554 -0
- package/skills/android-native-dev/references/visual-design.md +246 -0
- package/skills/api-and-interface-design/SKILL.md +318 -0
- package/skills/browser-qa/SKILL.md +32 -0
- package/skills/browser-testing-with-devtools/SKILL.md +323 -0
- package/skills/build-failure-repair/SKILL.md +49 -0
- package/skills/chart-visualization/SKILL.md +73 -0
- package/skills/ci-cd-and-automation/SKILL.md +353 -0
- package/skills/code-review-and-quality/SKILL.md +375 -0
- package/skills/code-review-quality-gates/SKILL.md +132 -0
- package/skills/code-simplification/SKILL.md +371 -0
- package/skills/comment-accuracy-review/SKILL.md +37 -0
- package/skills/consulting-analysis/SKILL.md +69 -0
- package/skills/context-engineering/SKILL.md +375 -0
- package/skills/coverage-review/SKILL.md +24 -0
- package/skills/data-analysis/SKILL.md +74 -0
- package/skills/deprecation-and-migration/SKILL.md +222 -0
- package/skills/documentation-and-adrs/SKILL.md +330 -0
- package/skills/e2e-artifact-handling/SKILL.md +30 -0
- package/skills/evidence-scoped-retrospective/SKILL.md +156 -0
- package/skills/explain-by-allegory/SKILL.md +99 -0
- package/skills/flutter-dev/SKILL.md +162 -0
- package/skills/flutter-dev/references/animations.md +497 -0
- package/skills/flutter-dev/references/bloc-state.md +281 -0
- package/skills/flutter-dev/references/forms.md +656 -0
- package/skills/flutter-dev/references/gorouter-navigation.md +257 -0
- package/skills/flutter-dev/references/localization.md +510 -0
- package/skills/flutter-dev/references/networking.md +566 -0
- package/skills/flutter-dev/references/performance.md +305 -0
- package/skills/flutter-dev/references/platform-specific.md +417 -0
- package/skills/flutter-dev/references/project-structure.md +273 -0
- package/skills/flutter-dev/references/riverpod-state.md +232 -0
- package/skills/flutter-dev/references/testing.md +364 -0
- package/skills/flutter-dev/references/widget-patterns.md +233 -0
- package/skills/frontend-dev/SKILL.md +468 -0
- package/skills/frontend-dev/canvas-fonts/ArsenalSC-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/BigShoulders-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/BigShoulders-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/BigShoulders-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Boldonse-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/Boldonse-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/CrimsonPro-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/DMMono-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/DMMono-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/EricaOne-OFL.txt +94 -0
- package/skills/frontend-dev/canvas-fonts/EricaOne-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/GeistMono-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/GeistMono-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/GeistMono-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Gloock-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/Gloock-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/InstrumentSans-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Italiana-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/Italiana-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Jura-Light.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Jura-Medium.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Jura-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Lora-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Lora-BoldItalic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Lora-Italic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Lora-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/Lora-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/NationalPark-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/NationalPark-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/NationalPark-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Outfit-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Outfit-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/Outfit-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/PixelifySans-Medium.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/PixelifySans-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/PoiretOne-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/PoiretOne-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/RedHatMono-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/RedHatMono-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/RedHatMono-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Silkscreen-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/Silkscreen-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/SmoochSans-Medium.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/SmoochSans-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/Tektur-Medium.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Tektur-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/Tektur-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/WorkSans-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/WorkSans-Italic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/WorkSans-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/WorkSans-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/YoungSerif-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/YoungSerif-Regular.ttf +0 -0
- package/skills/frontend-dev/references/asset-prompt-guide.md +43 -0
- package/skills/frontend-dev/references/env-setup.md +33 -0
- package/skills/frontend-dev/references/minimax-cli-reference.md +133 -0
- package/skills/frontend-dev/references/minimax-image-guide.md +65 -0
- package/skills/frontend-dev/references/minimax-music-guide.md +216 -0
- package/skills/frontend-dev/references/minimax-tts-guide.md +78 -0
- package/skills/frontend-dev/references/minimax-video-guide.md +82 -0
- package/skills/frontend-dev/references/minimax-voice-catalog.md +685 -0
- package/skills/frontend-dev/references/motion-recipes.md +407 -0
- package/skills/frontend-dev/references/troubleshooting.md +85 -0
- package/skills/frontend-dev/scripts/minimax_image.py +137 -0
- package/skills/frontend-dev/scripts/minimax_music.py +157 -0
- package/skills/frontend-dev/scripts/minimax_tts.py +127 -0
- package/skills/frontend-dev/scripts/minimax_video.py +187 -0
- package/skills/frontend-dev/templates/generator_template.js +223 -0
- package/skills/frontend-dev/templates/viewer.html +599 -0
- package/skills/frontend-ui-engineering/SKILL.md +367 -0
- package/skills/fullstack-dev/SKILL.md +819 -0
- package/skills/fullstack-dev/references/api-design.md +444 -0
- package/skills/fullstack-dev/references/auth-flow.md +165 -0
- package/skills/fullstack-dev/references/db-schema.md +706 -0
- package/skills/fullstack-dev/references/django-best-practices.md +466 -0
- package/skills/fullstack-dev/references/environment-management.md +78 -0
- package/skills/fullstack-dev/references/release-checklist.md +278 -0
- package/skills/fullstack-dev/references/technology-selection.md +254 -0
- package/skills/fullstack-dev/references/testing-strategy.md +404 -0
- package/skills/git-workflow-and-versioning/SKILL.md +446 -0
- package/skills/github-evidence-triage/SKILL.md +115 -0
- package/skills/harness-evolution/SKILL.md +59 -0
- package/skills/harness-evolution/references/activation-matrix.md +13 -0
- package/skills/harness-evolution/references/approval-policy.md +20 -0
- package/skills/harness-evolution/references/change-report-template.md +33 -0
- package/skills/harness-evolution/references/component-taxonomy.md +19 -0
- package/skills/harness-evolution/references/verdict-policy.md +13 -0
- package/skills/harness-issue-triage/SKILL.md +72 -0
- package/skills/harness-issue-triage/references/component-diagnosis.md +25 -0
- package/skills/harness-issue-triage/references/triage-report-template.md +34 -0
- package/skills/harness-optimization-audit/SKILL.md +125 -0
- package/skills/idea-refine/SKILL.md +191 -0
- package/skills/idea-refine/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/LICENSE +21 -0
- package/skills/idea-refine/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/NOTICE.md +9 -0
- package/skills/idea-refine/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/idea-refine/SKILL.upstream.md +178 -0
- package/skills/idea-refine/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/idea-refine/examples.md +238 -0
- package/skills/idea-refine/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/idea-refine/frameworks.md +99 -0
- package/skills/idea-refine/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/idea-refine/refinement-criteria.md +113 -0
- package/skills/idea-refine/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/idea-refine/scripts/idea-refine.upstream.sh +15 -0
- package/skills/incremental-implementation/SKILL.md +252 -0
- package/skills/ios-application-dev/SKILL.md +212 -0
- package/skills/ios-application-dev/references/accessibility.md +259 -0
- package/skills/ios-application-dev/references/graphics-animation.md +350 -0
- package/skills/ios-application-dev/references/layout-system.md +199 -0
- package/skills/ios-application-dev/references/metal-shader.md +178 -0
- package/skills/ios-application-dev/references/navigation-patterns.md +175 -0
- package/skills/ios-application-dev/references/swift-coding-standards.md +757 -0
- package/skills/ios-application-dev/references/swiftui-design-guidelines.md +1167 -0
- package/skills/ios-application-dev/references/system-integration.md +401 -0
- package/skills/ios-application-dev/references/uikit-components.md +297 -0
- package/skills/local-review-gate/SKILL.md +207 -0
- package/skills/local-review-gate/references/addyosmani-code-review-rubric.md +33 -0
- package/skills/local-review-gate/references/codex-github-compatibility.md +26 -0
- package/skills/local-review-gate/references/ecc-code-review-adaptation.md +40 -0
- package/skills/local-review-gate/references/graphify-local-review.md +33 -0
- package/skills/local-review-gate/references/orchestration-adaptation.md +51 -0
- package/skills/local-review-gate/references/review-repair-lane-adaptation.md +46 -0
- package/skills/local-review-gate/references/upstream-provenance.md +61 -0
- package/skills/mature-project-pattern-research/SKILL.md +155 -0
- package/skills/mature-project-pattern-research/references/research-rubric.md +45 -0
- package/skills/minimax-docx/LICENSE +21 -0
- package/skills/minimax-docx/SKILL.md +273 -0
- package/skills/minimax-docx/assets/styles/academic_styles.xml +250 -0
- package/skills/minimax-docx/assets/styles/corporate_styles.xml +284 -0
- package/skills/minimax-docx/assets/styles/default_styles.xml +449 -0
- package/skills/minimax-docx/assets/xsd/aesthetic-rules.xsd +470 -0
- package/skills/minimax-docx/assets/xsd/business-rules.xsd +130 -0
- package/skills/minimax-docx/assets/xsd/common-types.xsd +159 -0
- package/skills/minimax-docx/assets/xsd/wml-subset.xsd +589 -0
- package/skills/minimax-docx/references/cjk_typography.md +357 -0
- package/skills/minimax-docx/references/cjk_university_template_guide.md +184 -0
- package/skills/minimax-docx/references/comments_guide.md +191 -0
- package/skills/minimax-docx/references/design_good_bad_examples.md +829 -0
- package/skills/minimax-docx/references/design_principles.md +819 -0
- package/skills/minimax-docx/references/openxml_element_order.md +308 -0
- package/skills/minimax-docx/references/openxml_encyclopedia_part1.md +4061 -0
- package/skills/minimax-docx/references/openxml_encyclopedia_part2.md +2820 -0
- package/skills/minimax-docx/references/openxml_encyclopedia_part3.md +3381 -0
- package/skills/minimax-docx/references/openxml_namespaces.md +82 -0
- package/skills/minimax-docx/references/openxml_units.md +72 -0
- package/skills/minimax-docx/references/scenario_a_create.md +284 -0
- package/skills/minimax-docx/references/scenario_b_edit_content.md +295 -0
- package/skills/minimax-docx/references/scenario_c_apply_template.md +456 -0
- package/skills/minimax-docx/references/track_changes_guide.md +200 -0
- package/skills/minimax-docx/references/troubleshooting.md +506 -0
- package/skills/minimax-docx/references/typography_guide.md +294 -0
- package/skills/minimax-docx/references/xsd_validation_guide.md +158 -0
- package/skills/minimax-docx/scripts/doc_to_docx.sh +40 -0
- package/skills/minimax-docx/scripts/docx_preview.sh +37 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Cli/MiniMaxAIDocx.Cli.csproj +19 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Cli/Program.cs +18 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/AnalyzeCommand.cs +147 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/ApplyTemplateCommand.cs +322 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/CreateCommand.cs +324 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/DiffCommand.cs +155 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/EditContentCommand.cs +487 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/FixOrderCommand.cs +108 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/MergeRunsCommand.cs +122 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/ValidateCommand.cs +107 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/MiniMaxAIDocx.Core.csproj +15 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/CommentSynchronizer.cs +169 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/ElementOrder.cs +80 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/NamespaceConstants.cs +42 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/RunMerger.cs +81 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/StyleAnalyzer.cs +81 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/TrackChangesHelper.cs +99 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/UnitConverter.cs +23 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples.cs +1832 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch1.cs +910 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch2.cs +999 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch3.cs +1048 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch4.cs +1038 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/CharacterFormattingSamples.cs +1020 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/DocumentCreationSamples.cs +1121 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/FieldAndTocSamples.cs +624 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/FootnoteAndCommentSamples.cs +675 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/HeaderFooterSamples.cs +838 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/ImageSamples.cs +917 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/ListAndNumberingSamples.cs +826 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/ParagraphFormattingSamples.cs +1199 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/StyleSystemSamples.cs +1487 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/TableSamples.cs +1163 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/TrackChangesSamples.cs +595 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Typography/CjkHelper.cs +39 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Typography/FontDefaults.cs +24 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Typography/PageSizes.cs +20 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Validation/BusinessRuleValidator.cs +224 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Validation/GateCheckValidator.cs +148 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Validation/ValidationResult.cs +23 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Validation/XsdValidator.cs +69 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.slnx +4 -0
- package/skills/minimax-docx/scripts/env_check.sh +196 -0
- package/skills/minimax-docx/scripts/setup.ps1 +274 -0
- package/skills/minimax-docx/scripts/setup.sh +504 -0
- package/skills/minimax-pdf/README.md +222 -0
- package/skills/minimax-pdf/SKILL.md +218 -0
- package/skills/minimax-pdf/design/design.md +381 -0
- package/skills/minimax-pdf/scripts/cover.py +1579 -0
- package/skills/minimax-pdf/scripts/fill_inspect.py +200 -0
- package/skills/minimax-pdf/scripts/fill_write.py +242 -0
- package/skills/minimax-pdf/scripts/make.sh +491 -0
- package/skills/minimax-pdf/scripts/merge.py +112 -0
- package/skills/minimax-pdf/scripts/palette.py +521 -0
- package/skills/minimax-pdf/scripts/reformat_parse.py +374 -0
- package/skills/minimax-pdf/scripts/render_body.py +1052 -0
- package/skills/minimax-pdf/scripts/render_cover.js +111 -0
- package/skills/minimax-xlsx/SKILL.md +156 -0
- package/skills/minimax-xlsx/references/create.md +691 -0
- package/skills/minimax-xlsx/references/edit.md +684 -0
- package/skills/minimax-xlsx/references/fix.md +37 -0
- package/skills/minimax-xlsx/references/format.md +768 -0
- package/skills/minimax-xlsx/references/ooxml-cheatsheet.md +231 -0
- package/skills/minimax-xlsx/references/read-analyze.md +97 -0
- package/skills/minimax-xlsx/references/validate.md +772 -0
- package/skills/minimax-xlsx/scripts/formula_check.py +422 -0
- package/skills/minimax-xlsx/scripts/libreoffice_recalc.py +248 -0
- package/skills/minimax-xlsx/scripts/shared_strings_builder.py +163 -0
- package/skills/minimax-xlsx/scripts/style_audit.py +575 -0
- package/skills/minimax-xlsx/scripts/xlsx_add_column.py +395 -0
- package/skills/minimax-xlsx/scripts/xlsx_insert_row.py +274 -0
- package/skills/minimax-xlsx/scripts/xlsx_pack.py +87 -0
- package/skills/minimax-xlsx/scripts/xlsx_reader.py +362 -0
- package/skills/minimax-xlsx/scripts/xlsx_shift_rows.py +396 -0
- package/skills/minimax-xlsx/scripts/xlsx_unpack.py +130 -0
- package/skills/minimax-xlsx/templates/minimal_xlsx/[Content_Types].xml +9 -0
- package/skills/minimax-xlsx/templates/minimal_xlsx/_rels/.rels +6 -0
- package/skills/minimax-xlsx/templates/minimal_xlsx/xl/_rels/workbook.xml.rels +19 -0
- package/skills/minimax-xlsx/templates/minimal_xlsx/xl/sharedStrings.xml +33 -0
- package/skills/minimax-xlsx/templates/minimal_xlsx/xl/styles.xml +160 -0
- package/skills/minimax-xlsx/templates/minimal_xlsx/xl/workbook.xml +30 -0
- package/skills/minimax-xlsx/templates/minimal_xlsx/xl/worksheets/sheet1.xml +70 -0
- package/skills/newsletter-generation/SKILL.md +71 -0
- package/skills/oss-release-readiness/SKILL.md +47 -0
- package/skills/parallel-subagent-dispatch/SKILL.md +58 -0
- package/skills/performance-optimization/SKILL.md +364 -0
- package/skills/planning-and-task-breakdown/SKILL.md +290 -0
- package/skills/pptx-generator/SKILL.md +275 -0
- package/skills/pptx-generator/references/design-system.md +392 -0
- package/skills/pptx-generator/references/editing.md +162 -0
- package/skills/pptx-generator/references/pitfalls.md +112 -0
- package/skills/pptx-generator/references/pptxgenjs.md +420 -0
- package/skills/pptx-generator/references/slide-types.md +413 -0
- package/skills/pr-test-analysis/SKILL.md +24 -0
- package/skills/react-native-dev/SKILL.md +180 -0
- package/skills/react-native-dev/references/animations.md +254 -0
- package/skills/react-native-dev/references/components.md +124 -0
- package/skills/react-native-dev/references/engineering.md +527 -0
- package/skills/react-native-dev/references/forms.md +300 -0
- package/skills/react-native-dev/references/native-capabilities.md +163 -0
- package/skills/react-native-dev/references/navigation.md +271 -0
- package/skills/react-native-dev/references/networking.md +346 -0
- package/skills/react-native-dev/references/performance.md +215 -0
- package/skills/react-native-dev/references/state-management.md +230 -0
- package/skills/react-native-dev/references/styling.md +117 -0
- package/skills/react-native-dev/references/testing.md +341 -0
- package/skills/requirements-grilling/SKILL.md +447 -0
- package/skills/requirements-grilling/references/ADR-FORMAT.md +46 -0
- package/skills/requirements-grilling/references/CONTEXT-FORMAT.md +41 -0
- package/skills/requirements-grilling/references/INTERVIEW-PACKET-FORMAT.md +62 -0
- package/skills/requirements-grilling/references/MIT-LICENSE-MATT-POCOCK.md +25 -0
- package/skills/requirements-grilling/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/LICENSE +21 -0
- package/skills/requirements-grilling/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/NOTICE.md +9 -0
- package/skills/requirements-grilling/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/interview-me/SKILL.upstream.md +225 -0
- package/skills/requirements-grilling/references/upstream/mattpocock-skills/9603c1cc8118d08bc1b3bf34cf714f62178dea3b/LICENSE +21 -0
- package/skills/requirements-grilling/references/upstream/mattpocock-skills/9603c1cc8118d08bc1b3bf34cf714f62178dea3b/NOTICE.md +12 -0
- package/skills/requirements-grilling/references/upstream/mattpocock-skills/9603c1cc8118d08bc1b3bf34cf714f62178dea3b/batch-grill-me/SKILL.upstream.md +15 -0
- package/skills/requirements-grilling/references/upstream/mattpocock-skills/9603c1cc8118d08bc1b3bf34cf714f62178dea3b/grill-me/SKILL.upstream.md +7 -0
- package/skills/requirements-grilling/references/upstream/mattpocock-skills/9603c1cc8118d08bc1b3bf34cf714f62178dea3b/grilling/SKILL.upstream.md +12 -0
- package/skills/review-pipeline/SKILL.md +38 -0
- package/skills/rose-memory/SKILL.md +210 -0
- package/skills/rose-memory/references/README.md +48 -0
- package/skills/rose-memory/references/memory_cli.py +2384 -0
- package/skills/rose-memory/references/schema.sql +315 -0
- package/skills/security-and-hardening/SKILL.md +369 -0
- package/skills/session-handoff/SKILL.md +88 -0
- package/skills/session-handoff/references/upstream/mattpocock-skills/391a2701dd948f94f56a39f7533f8eea9a859c87/LICENSE +21 -0
- package/skills/session-handoff/references/upstream/mattpocock-skills/391a2701dd948f94f56a39f7533f8eea9a859c87/NOTICE.md +9 -0
- package/skills/session-handoff/references/upstream/mattpocock-skills/391a2701dd948f94f56a39f7533f8eea9a859c87/productivity/handoff/SKILL.upstream.md +16 -0
- package/skills/session-handoff/scripts/session_handoff.py +764 -0
- package/skills/shader-dev/SKILL.md +316 -0
- package/skills/shader-dev/reference/ambient-occlusion.md +382 -0
- package/skills/shader-dev/reference/analytic-ray-tracing.md +651 -0
- package/skills/shader-dev/reference/anti-aliasing.md +71 -0
- package/skills/shader-dev/reference/atmospheric-scattering.md +571 -0
- package/skills/shader-dev/reference/camera-effects.md +80 -0
- package/skills/shader-dev/reference/cellular-automata.md +635 -0
- package/skills/shader-dev/reference/color-palette.md +481 -0
- package/skills/shader-dev/reference/csg-boolean-operations.md +466 -0
- package/skills/shader-dev/reference/domain-repetition.md +436 -0
- package/skills/shader-dev/reference/domain-warping.md +419 -0
- package/skills/shader-dev/reference/fluid-simulation.md +425 -0
- package/skills/shader-dev/reference/fractal-rendering.md +525 -0
- package/skills/shader-dev/reference/lighting-model.md +639 -0
- package/skills/shader-dev/reference/matrix-transform.md +535 -0
- package/skills/shader-dev/reference/multipass-buffer.md +571 -0
- package/skills/shader-dev/reference/normal-estimation.md +418 -0
- package/skills/shader-dev/reference/particle-system.md +589 -0
- package/skills/shader-dev/reference/path-tracing-gi.md +602 -0
- package/skills/shader-dev/reference/polar-uv-manipulation.md +521 -0
- package/skills/shader-dev/reference/post-processing.md +375 -0
- package/skills/shader-dev/reference/procedural-2d-pattern.md +439 -0
- package/skills/shader-dev/reference/procedural-noise.md +551 -0
- package/skills/shader-dev/reference/ray-marching.md +396 -0
- package/skills/shader-dev/reference/sdf-2d.md +724 -0
- package/skills/shader-dev/reference/sdf-3d.md +805 -0
- package/skills/shader-dev/reference/sdf-tricks.md +63 -0
- package/skills/shader-dev/reference/shadow-techniques.md +476 -0
- package/skills/shader-dev/reference/simulation-physics.md +644 -0
- package/skills/shader-dev/reference/sound-synthesis.md +578 -0
- package/skills/shader-dev/reference/terrain-rendering.md +839 -0
- package/skills/shader-dev/reference/texture-mapping-advanced.md +87 -0
- package/skills/shader-dev/reference/texture-sampling.md +553 -0
- package/skills/shader-dev/reference/volumetric-rendering.md +608 -0
- package/skills/shader-dev/reference/voronoi-cellular-noise.md +486 -0
- package/skills/shader-dev/reference/voxel-rendering.md +701 -0
- package/skills/shader-dev/reference/water-ocean.md +445 -0
- package/skills/shader-dev/reference/webgl-pitfalls.md +41 -0
- package/skills/shader-dev/techniques/ambient-occlusion.md +364 -0
- package/skills/shader-dev/techniques/analytic-ray-tracing.md +542 -0
- package/skills/shader-dev/techniques/anti-aliasing.md +124 -0
- package/skills/shader-dev/techniques/atmospheric-scattering.md +522 -0
- package/skills/shader-dev/techniques/camera-effects.md +115 -0
- package/skills/shader-dev/techniques/cellular-automata.md +531 -0
- package/skills/shader-dev/techniques/color-palette.md +380 -0
- package/skills/shader-dev/techniques/csg-boolean-operations.md +491 -0
- package/skills/shader-dev/techniques/domain-repetition.md +333 -0
- package/skills/shader-dev/techniques/domain-warping.md +414 -0
- package/skills/shader-dev/techniques/fluid-simulation.md +1175 -0
- package/skills/shader-dev/techniques/fractal-rendering.md +436 -0
- package/skills/shader-dev/techniques/lighting-model.md +527 -0
- package/skills/shader-dev/techniques/matrix-transform.md +455 -0
- package/skills/shader-dev/techniques/multipass-buffer.md +922 -0
- package/skills/shader-dev/techniques/normal-estimation.md +318 -0
- package/skills/shader-dev/techniques/particle-system.md +1203 -0
- package/skills/shader-dev/techniques/path-tracing-gi.md +623 -0
- package/skills/shader-dev/techniques/polar-uv-manipulation.md +373 -0
- package/skills/shader-dev/techniques/post-processing.md +788 -0
- package/skills/shader-dev/techniques/procedural-2d-pattern.md +346 -0
- package/skills/shader-dev/techniques/procedural-noise.md +554 -0
- package/skills/shader-dev/techniques/ray-marching.md +467 -0
- package/skills/shader-dev/techniques/sdf-2d.md +631 -0
- package/skills/shader-dev/techniques/sdf-3d.md +589 -0
- package/skills/shader-dev/techniques/sdf-tricks.md +100 -0
- package/skills/shader-dev/techniques/shadow-techniques.md +776 -0
- package/skills/shader-dev/techniques/simulation-physics.md +1542 -0
- package/skills/shader-dev/techniques/sound-synthesis.md +490 -0
- package/skills/shader-dev/techniques/terrain-rendering.md +408 -0
- package/skills/shader-dev/techniques/texture-mapping-advanced.md +121 -0
- package/skills/shader-dev/techniques/texture-sampling.md +382 -0
- package/skills/shader-dev/techniques/volumetric-rendering.md +375 -0
- package/skills/shader-dev/techniques/voronoi-cellular-noise.md +458 -0
- package/skills/shader-dev/techniques/voxel-rendering.md +985 -0
- package/skills/shader-dev/techniques/water-ocean.md +490 -0
- package/skills/shader-dev/techniques/webgl-pitfalls.md +170 -0
- package/skills/shipping-and-launch/SKILL.md +334 -0
- package/skills/silent-failure-hunting/SKILL.md +24 -0
- package/skills/source-driven-development/SKILL.md +223 -0
- package/skills/spec-driven-development/SKILL.md +235 -0
- package/skills/spec-driven-development/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/LICENSE +21 -0
- package/skills/spec-driven-development/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/NOTICE.md +9 -0
- package/skills/spec-driven-development/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/spec-driven-development/SKILL.upstream.md +206 -0
- package/skills/strategy-stress-test/SKILL.md +185 -0
- package/skills/systematic-literature-review/SKILL.md +77 -0
- package/skills/test-document-generator/SKILL.md +152 -0
- package/skills/test-document-generator/references/test-document-template.md +45 -0
- package/skills/test-driven-development/SKILL.md +399 -0
- package/skills/write-skills/GLOSSARY.md +113 -0
- package/skills/write-skills/SKILL.md +133 -0
- package/skills/write-skills/references/upstream/mattpocock-skills/391a2701dd948f94f56a39f7533f8eea9a859c87/LICENSE +21 -0
- package/skills/write-skills/references/upstream/mattpocock-skills/391a2701dd948f94f56a39f7533f8eea9a859c87/NOTICE.md +9 -0
- package/skills/write-skills/references/upstream/mattpocock-skills/391a2701dd948f94f56a39f7533f8eea9a859c87/productivity/writing-great-skills/GLOSSARY.md +201 -0
- package/skills/write-skills/references/upstream/mattpocock-skills/391a2701dd948f94f56a39f7533f8eea9a859c87/productivity/writing-great-skills/SKILL.upstream.md +83 -0
- package/src/runtime/child-guard.ts +70 -0
- package/src/runtime/conflicts.ts +25 -0
- package/src/runtime/contracts.ts +9 -0
- package/src/runtime/doctor.ts +134 -0
- package/src/runtime/global-resources.ts +152 -0
- package/src/runtime/index.ts +23 -0
- package/src/runtime/lifecycle.ts +19 -0
- package/src/runtime/native-integrations.ts +44 -0
- package/src/runtime/path-boundaries.ts +69 -0
- package/src/runtime/registry.ts +213 -0
- package/src/runtime/roles.ts +64 -0
- package/src/runtime/rose-context.ts +24 -0
- package/src/runtime/subagents.ts +426 -0
- package/templates/APPEND_SYSTEM.md +12 -0
- package/upstream/aili-workflows.lock.json +3226 -0
|
@@ -0,0 +1,589 @@
|
|
|
1
|
+
# 3D Signed Distance Fields (3D SDF) Skill
|
|
2
|
+
|
|
3
|
+
## Use Cases
|
|
4
|
+
|
|
5
|
+
- Real-time rendering of 3D geometry in ShaderToy / fragment shaders (no traditional meshes needed)
|
|
6
|
+
- Complex scenes composed from basic primitives (sphere, box, cylinder, torus, etc.)
|
|
7
|
+
- Smooth organic blending (character modeling, fluid blobs, biological forms)
|
|
8
|
+
- Infinitely repeating architectural/pattern structures (corridors, gear arrays, grids)
|
|
9
|
+
- Precise boolean operations (drilling holes, cutting, intersection) for sculpting geometry
|
|
10
|
+
|
|
11
|
+
## Core Principles
|
|
12
|
+
|
|
13
|
+
An SDF returns the **signed distance** from any point in space to the nearest surface: positive = outside, negative = inside, zero = surface.
|
|
14
|
+
|
|
15
|
+
**Sphere Tracing**: advance along a ray, stepping by the current SDF value (the safe marching distance) at each step. The SDF guarantees no surface exists within that radius. A hit is registered when the distance falls below epsilon.
|
|
16
|
+
|
|
17
|
+
Key math:
|
|
18
|
+
- Sphere: `f(p) = |p| - r`
|
|
19
|
+
- Box: `f(p) = |max(|p|-b, 0)| + min(max(|p-b|), 0)`
|
|
20
|
+
- Union: `min(d1, d2)` / Subtraction: `max(d1, -d2)`
|
|
21
|
+
- Smooth union: `min(d1,d2) - h^2/4k`, `h = max(k-|d1-d2|, 0)`
|
|
22
|
+
- Normal = SDF gradient: `n = normalize(gradient of f(p))` (finite difference approximation)
|
|
23
|
+
|
|
24
|
+
## Rendering Pipeline Overview
|
|
25
|
+
|
|
26
|
+
1. **SDF Primitive Library** -- `sdSphere`, `sdBox`, `sdEllipsoid`, `sdTorus`, `sdCapsule`, `sdCylinder`
|
|
27
|
+
2. **Boolean Operations** -- `opUnion`/`opSubtraction`/`opIntersection` + smooth variants `smin`/`smax`
|
|
28
|
+
3. **Scene Definition** -- `map(p)` returns `vec2(distance, materialID)`, combining all primitives
|
|
29
|
+
4. **Ray Marching** -- `raycast(ro, rd)` sphere tracing loop (128 steps, adaptive threshold `SURF_DIST * t`)
|
|
30
|
+
5. **Normal Calculation** -- tetrahedral differencing (4 map calls, ZERO macro to prevent inlining)
|
|
31
|
+
6. **Soft Shadows** -- quadratic stepping with `k*h/t` to estimate occlusion softness, Hermite smoothing
|
|
32
|
+
7. **Ambient Occlusion** -- 5-layer sampling along the normal, comparing SDF values with expected distances
|
|
33
|
+
8. **Camera + Rendering** -- look-at matrix, multiple lights (sun + sky + SSS), gamma correction, fog
|
|
34
|
+
|
|
35
|
+
## Full Code Template
|
|
36
|
+
|
|
37
|
+
Runs directly in ShaderToy. Includes multi-primitive scene, smooth blending, soft shadows, AO, and material system.
|
|
38
|
+
|
|
39
|
+
**IMPORTANT:** When using the `vec2(distance, materialID)` material system, `smin` needs to handle `vec2` types. The template includes a `vec2 smin(vec2 a, vec2 b, float k)` overload that ensures the material ID is correctly passed through during smooth blending (taking the material of the closer distance).
|
|
40
|
+
|
|
41
|
+
```glsl
|
|
42
|
+
// 3D SDF Full Rendering Pipeline Template - Runs in ShaderToy
|
|
43
|
+
#define AA 1 // Anti-aliasing (1=off, 2=4xAA, 3=9xAA)
|
|
44
|
+
#define MAX_STEPS 128
|
|
45
|
+
#define MAX_DIST 40.0
|
|
46
|
+
#define SURF_DIST 0.0001
|
|
47
|
+
#define SHADOW_STEPS 24
|
|
48
|
+
#define SHADOW_SOFTNESS 8.0
|
|
49
|
+
#define SMOOTH_K 0.3
|
|
50
|
+
#define ZERO (min(iFrame, 0))
|
|
51
|
+
|
|
52
|
+
// === SDF Primitives ===
|
|
53
|
+
float sdSphere(vec3 p, float r) { return length(p) - r; }
|
|
54
|
+
float sdBox(vec3 p, vec3 b) {
|
|
55
|
+
vec3 d = abs(p) - b;
|
|
56
|
+
return min(max(d.x, max(d.y, d.z)), 0.0) + length(max(d, 0.0));
|
|
57
|
+
}
|
|
58
|
+
float sdEllipsoid(vec3 p, vec3 r) {
|
|
59
|
+
float k0 = length(p / r); float k1 = length(p / (r * r));
|
|
60
|
+
return k0 * (k0 - 1.0) / k1;
|
|
61
|
+
}
|
|
62
|
+
float sdTorus(vec3 p, vec2 t) {
|
|
63
|
+
return length(vec2(length(p.xz) - t.x, p.y)) - t.y;
|
|
64
|
+
}
|
|
65
|
+
float sdCapsule(vec3 p, vec3 a, vec3 b, float r) {
|
|
66
|
+
vec3 pa = p - a, ba = b - a;
|
|
67
|
+
float h = clamp(dot(pa, ba) / dot(ba, ba), 0.0, 1.0);
|
|
68
|
+
return length(pa - ba * h) - r;
|
|
69
|
+
}
|
|
70
|
+
float sdCylinder(vec3 p, vec2 h) {
|
|
71
|
+
vec2 d = abs(vec2(length(p.xz), p.y)) - h;
|
|
72
|
+
return min(max(d.x, d.y), 0.0) + length(max(d, 0.0));
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// === Extended SDF Primitives ===
|
|
76
|
+
float sdRoundBox(vec3 p, vec3 b, float r) {
|
|
77
|
+
vec3 q = abs(p) - b + r;
|
|
78
|
+
return length(max(q, 0.0)) + min(max(q.x, max(q.y, q.z)), 0.0) - r;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
float sdBoxFrame(vec3 p, vec3 b, float e) {
|
|
82
|
+
p = abs(p) - b;
|
|
83
|
+
vec3 q = abs(p + e) - e;
|
|
84
|
+
return min(min(
|
|
85
|
+
length(max(vec3(p.x, q.y, q.z), 0.0)) + min(max(p.x, max(q.y, q.z)), 0.0),
|
|
86
|
+
length(max(vec3(q.x, p.y, q.z), 0.0)) + min(max(q.x, max(p.y, q.z)), 0.0)),
|
|
87
|
+
length(max(vec3(q.x, q.y, p.z), 0.0)) + min(max(q.x, max(q.y, p.z)), 0.0));
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
float sdCone(vec3 p, vec2 c, float h) {
|
|
91
|
+
vec2 q = h * vec2(c.x / c.y, -1.0);
|
|
92
|
+
vec2 w = vec2(length(p.xz), p.y);
|
|
93
|
+
vec2 a = w - q * clamp(dot(w, q) / dot(q, q), 0.0, 1.0);
|
|
94
|
+
vec2 b = w - q * vec2(clamp(w.x / q.x, 0.0, 1.0), 1.0);
|
|
95
|
+
float k = sign(q.y);
|
|
96
|
+
float d = min(dot(a, a), dot(b, b));
|
|
97
|
+
float s = max(k * (w.x * q.y - w.y * q.x), k * (w.y - q.y));
|
|
98
|
+
return sqrt(d) * sign(s);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
float sdCappedCone(vec3 p, float h, float r1, float r2) {
|
|
102
|
+
vec2 q = vec2(length(p.xz), p.y);
|
|
103
|
+
vec2 k1 = vec2(r2, h);
|
|
104
|
+
vec2 k2 = vec2(r2 - r1, 2.0 * h);
|
|
105
|
+
vec2 ca = vec2(q.x - min(q.x, (q.y < 0.0) ? r1 : r2), abs(q.y) - h);
|
|
106
|
+
vec2 cb = q - k1 + k2 * clamp(dot(k1 - q, k2) / dot(k2, k2), 0.0, 1.0);
|
|
107
|
+
float s = (cb.x < 0.0 && ca.y < 0.0) ? -1.0 : 1.0;
|
|
108
|
+
return s * sqrt(min(dot(ca, ca), dot(cb, cb)));
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
float sdRoundCone(vec3 p, float r1, float r2, float h) {
|
|
112
|
+
float b = (r1 - r2) / h;
|
|
113
|
+
float a = sqrt(1.0 - b * b);
|
|
114
|
+
vec2 q = vec2(length(p.xz), p.y);
|
|
115
|
+
float k = dot(q, vec2(-b, a));
|
|
116
|
+
if (k < 0.0) return length(q) - r1;
|
|
117
|
+
if (k > a * h) return length(q - vec2(0.0, h)) - r2;
|
|
118
|
+
return dot(q, vec2(a, b)) - r1;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
float sdSolidAngle(vec3 p, vec2 c, float ra) {
|
|
122
|
+
vec2 q = vec2(length(p.xz), p.y);
|
|
123
|
+
float l = length(q) - ra;
|
|
124
|
+
float m = length(q - c * clamp(dot(q, c), 0.0, ra));
|
|
125
|
+
return max(l, m * sign(c.y * q.x - c.x * q.y));
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
float sdOctahedron(vec3 p, float s) {
|
|
129
|
+
p = abs(p);
|
|
130
|
+
float m = p.x + p.y + p.z - s;
|
|
131
|
+
vec3 q;
|
|
132
|
+
if (3.0 * p.x < m) q = p.xyz;
|
|
133
|
+
else if (3.0 * p.y < m) q = p.yzx;
|
|
134
|
+
else if (3.0 * p.z < m) q = p.zxy;
|
|
135
|
+
else return m * 0.57735027;
|
|
136
|
+
float k = clamp(0.5 * (q.z - q.y + s), 0.0, s);
|
|
137
|
+
return length(vec3(q.x, q.y - s + k, q.z - k));
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
float sdPyramid(vec3 p, float h) {
|
|
141
|
+
float m2 = h * h + 0.25;
|
|
142
|
+
p.xz = abs(p.xz);
|
|
143
|
+
p.xz = (p.z > p.x) ? p.zx : p.xz;
|
|
144
|
+
p.xz -= 0.5;
|
|
145
|
+
vec3 q = vec3(p.z, h * p.y - 0.5 * p.x, h * p.x + 0.5 * p.y);
|
|
146
|
+
float s = max(-q.x, 0.0);
|
|
147
|
+
float t = clamp((q.y - 0.5 * p.z) / (m2 + 0.25), 0.0, 1.0);
|
|
148
|
+
float a = m2 * (q.x + s) * (q.x + s) + q.y * q.y;
|
|
149
|
+
float b = m2 * (q.x + 0.5 * t) * (q.x + 0.5 * t) + (q.y - m2 * t) * (q.y - m2 * t);
|
|
150
|
+
float d2 = min(q.y, -q.x * m2 - q.y * 0.5) > 0.0 ? 0.0 : min(a, b);
|
|
151
|
+
return sqrt((d2 + q.z * q.z) / m2) * sign(max(q.z, -p.y));
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
float sdHexPrism(vec3 p, vec2 h) {
|
|
155
|
+
const vec3 k = vec3(-0.8660254, 0.5, 0.57735);
|
|
156
|
+
p = abs(p);
|
|
157
|
+
p.xy -= 2.0 * min(dot(k.xy, p.xy), 0.0) * k.xy;
|
|
158
|
+
vec2 d = vec2(length(p.xy - vec2(clamp(p.x, -k.z * h.x, k.z * h.x), h.x)) * sign(p.y - h.x), p.z - h.y);
|
|
159
|
+
return min(max(d.x, d.y), 0.0) + length(max(d, 0.0));
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
float sdCutSphere(vec3 p, float r, float h) {
|
|
163
|
+
float w = sqrt(r * r - h * h);
|
|
164
|
+
vec2 q = vec2(length(p.xz), p.y);
|
|
165
|
+
float s = max((h - r) * q.x * q.x + w * w * (h + r - 2.0 * q.y), h * q.x - w * q.y);
|
|
166
|
+
return (s < 0.0) ? length(q) - r : (q.x < w) ? h - q.y : length(q - vec2(w, h));
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
float sdCappedTorus(vec3 p, vec2 sc, float ra, float rb) {
|
|
170
|
+
p.x = abs(p.x);
|
|
171
|
+
float k = (sc.y * p.x > sc.x * p.y) ? dot(p.xy, sc) : length(p.xy);
|
|
172
|
+
return sqrt(dot(p, p) + ra * ra - 2.0 * ra * k) - rb;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
float sdLink(vec3 p, float le, float r1, float r2) {
|
|
176
|
+
vec3 q = vec3(p.x, max(abs(p.y) - le, 0.0), p.z);
|
|
177
|
+
return length(vec2(length(q.xy) - r1, q.z)) - r2;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
float sdPlane(vec3 p, vec3 n, float h) {
|
|
181
|
+
return dot(p, n) + h;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
float sdRhombus(vec3 p, float la, float lb, float h, float ra) {
|
|
185
|
+
p = abs(p);
|
|
186
|
+
vec2 b = vec2(la, lb);
|
|
187
|
+
float f = clamp((dot(b, b - 2.0 * p.xz)) / dot(b, b), -1.0, 1.0);
|
|
188
|
+
vec2 q = vec2(length(p.xz - 0.5 * b * vec2(1.0 - f, 1.0 + f)) * sign(p.x * b.y + p.z * b.x - b.x * b.y) - ra, p.y - h);
|
|
189
|
+
return min(max(q.x, q.y), 0.0) + length(max(q, 0.0));
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
// Unsigned distance (exact)
|
|
193
|
+
float udTriangle(vec3 p, vec3 a, vec3 b, vec3 c) {
|
|
194
|
+
vec3 ba = b - a; vec3 pa = p - a;
|
|
195
|
+
vec3 cb = c - b; vec3 pb = p - b;
|
|
196
|
+
vec3 ac = a - c; vec3 pc = p - c;
|
|
197
|
+
vec3 nor = cross(ba, ac);
|
|
198
|
+
return sqrt(
|
|
199
|
+
(sign(dot(cross(ba, nor), pa)) +
|
|
200
|
+
sign(dot(cross(cb, nor), pb)) +
|
|
201
|
+
sign(dot(cross(ac, nor), pc)) < 2.0)
|
|
202
|
+
? min(min(
|
|
203
|
+
dot(ba * clamp(dot(ba, pa) / dot(ba, ba), 0.0, 1.0) - pa,
|
|
204
|
+
ba * clamp(dot(ba, pa) / dot(ba, ba), 0.0, 1.0) - pa),
|
|
205
|
+
dot(cb * clamp(dot(cb, pb) / dot(cb, cb), 0.0, 1.0) - pb,
|
|
206
|
+
cb * clamp(dot(cb, pb) / dot(cb, cb), 0.0, 1.0) - pb)),
|
|
207
|
+
dot(ac * clamp(dot(ac, pc) / dot(ac, ac), 0.0, 1.0) - pc,
|
|
208
|
+
ac * clamp(dot(ac, pc) / dot(ac, ac), 0.0, 1.0) - pc))
|
|
209
|
+
: dot(nor, pa) * dot(nor, pa) / dot(nor, nor));
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
// === Boolean Operations ===
|
|
213
|
+
vec2 opU(vec2 d1, vec2 d2) { return (d1.x < d2.x) ? d1 : d2; }
|
|
214
|
+
float smin(float a, float b, float k) {
|
|
215
|
+
float h = max(k - abs(a - b), 0.0);
|
|
216
|
+
return min(a, b) - h * h * 0.25 / k;
|
|
217
|
+
}
|
|
218
|
+
vec2 smin(vec2 a, vec2 b, float k) {
|
|
219
|
+
// vec2 smin: x=distance (smooth blend), y=materialID (take material of closer distance)
|
|
220
|
+
float h = max(k - abs(a.x - b.x), 0.0);
|
|
221
|
+
float d = min(a.x, b.x) - h * h * 0.25 / k;
|
|
222
|
+
float m = (a.x < b.x) ? a.y : b.y;
|
|
223
|
+
return vec2(d, m);
|
|
224
|
+
}
|
|
225
|
+
float smax(float a, float b, float k) {
|
|
226
|
+
float h = max(k - abs(a - b), 0.0);
|
|
227
|
+
return max(a, b) + h * h * 0.25 / k;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
// === Deformation Operators ===
|
|
231
|
+
|
|
232
|
+
// Round: soften edges of any SDF
|
|
233
|
+
// Usage: sdRound(sdBox(p, vec3(1.0)), 0.1)
|
|
234
|
+
float opRound(float d, float r) { return d - r; }
|
|
235
|
+
|
|
236
|
+
// Onion: hollow out any SDF into a shell
|
|
237
|
+
// Usage: opOnion(sdSphere(p, 1.0), 0.1) — sphere shell of thickness 0.1
|
|
238
|
+
float opOnion(float d, float t) { return abs(d) - t; }
|
|
239
|
+
|
|
240
|
+
// Elongate: stretch a shape along axes
|
|
241
|
+
// Usage: elongate a sphere into a capsule-like shape
|
|
242
|
+
float opElongate(in vec3 p, in vec3 h, in vec3 center, in vec3 size) {
|
|
243
|
+
// Generic elongation: subtract h from abs(p), clamp to 0
|
|
244
|
+
vec3 q = abs(p) - h;
|
|
245
|
+
// Then evaluate original SDF with max(q, 0.0)
|
|
246
|
+
// Return: sdOriginal(max(q, 0.0)) + min(max(q.x, max(q.y, q.z)), 0.0)
|
|
247
|
+
return sdBox(max(q, 0.0), size) + min(max(q.x, max(q.y, q.z)), 0.0); // example with box
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
// Twist: rotate around Y axis based on height
|
|
251
|
+
vec3 opTwist(vec3 p, float k) {
|
|
252
|
+
float c = cos(k * p.y);
|
|
253
|
+
float s = sin(k * p.y);
|
|
254
|
+
mat2 m = mat2(c, -s, s, c);
|
|
255
|
+
return vec3(m * p.xz, p.y);
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
// Cheap Bend: bend along X axis based on X position
|
|
259
|
+
vec3 opCheapBend(vec3 p, float k) {
|
|
260
|
+
float c = cos(k * p.x);
|
|
261
|
+
float s = sin(k * p.x);
|
|
262
|
+
mat2 m = mat2(c, -s, s, c);
|
|
263
|
+
vec2 q = m * p.xy;
|
|
264
|
+
return vec3(q, p.z);
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
// Displacement: add procedural detail to surface
|
|
268
|
+
float opDisplace(float d, vec3 p) {
|
|
269
|
+
float displacement = sin(20.0 * p.x) * sin(20.0 * p.y) * sin(20.0 * p.z);
|
|
270
|
+
return d + displacement * 0.02;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
// === 2D-to-3D Constructors ===
|
|
274
|
+
|
|
275
|
+
// Revolution: rotate a 2D SDF around the Y axis to create a 3D solid of revolution
|
|
276
|
+
// sdf2d: any 2D SDF function, o: offset from axis
|
|
277
|
+
float opRevolution(vec3 p, float sdf2d_result, float o) {
|
|
278
|
+
vec2 q = vec2(length(p.xz) - o, p.y);
|
|
279
|
+
// Example: revolve a 2D circle to make a torus
|
|
280
|
+
// float d2d = length(q) - 0.3; // 2D circle as cross-section
|
|
281
|
+
// return d2d;
|
|
282
|
+
return sdf2d_result; // pass pre-computed 2D SDF of vec2(length(p.xz)-o, p.y)
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
// Extrusion: extend a 2D SDF along the Z axis with finite height
|
|
286
|
+
float opExtrusion(vec3 p, float d2d, float h) {
|
|
287
|
+
vec2 w = vec2(d2d, abs(p.z) - h);
|
|
288
|
+
return min(max(w.x, w.y), 0.0) + length(max(w, 0.0));
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
// Usage example: extruded 2D star
|
|
292
|
+
// float d2d = sdStar2D(p.xy, 0.5, 5, 2.0); // any 2D SDF
|
|
293
|
+
// float d3d = opExtrusion(p, d2d, 0.2); // extrude 0.2 units
|
|
294
|
+
|
|
295
|
+
// === Symmetry Operators ===
|
|
296
|
+
|
|
297
|
+
// Mirror across X axis (most common — bilateral symmetry)
|
|
298
|
+
// Place this at the beginning of map() to model only one half
|
|
299
|
+
vec3 opSymX(vec3 p) { p.x = abs(p.x); return p; }
|
|
300
|
+
|
|
301
|
+
// Mirror across X and Z (four-fold symmetry)
|
|
302
|
+
vec3 opSymXZ(vec3 p) { p.xz = abs(p.xz); return p; }
|
|
303
|
+
|
|
304
|
+
// Mirror across arbitrary direction
|
|
305
|
+
vec3 opMirror(vec3 p, vec3 dir) {
|
|
306
|
+
return p - 2.0 * dir * max(dot(p, dir), 0.0);
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
// === Scene ===
|
|
310
|
+
vec2 map(vec3 pos) {
|
|
311
|
+
vec2 res = vec2(pos.y, 0.0);
|
|
312
|
+
// Animated blob cluster
|
|
313
|
+
float dBlob = 2.0;
|
|
314
|
+
for (int i = 0; i < 8; i++) {
|
|
315
|
+
float fi = float(i);
|
|
316
|
+
float t = iTime * (fract(fi * 412.531 + 0.513) - 0.5) * 2.0;
|
|
317
|
+
vec3 offset = sin(t + fi * vec3(52.5126, 64.627, 632.25)) * vec3(2.0, 2.0, 0.8);
|
|
318
|
+
float radius = mix(0.3, 0.6, fract(fi * 412.531 + 0.5124));
|
|
319
|
+
dBlob = smin(dBlob, sdSphere(pos + offset, radius), SMOOTH_K);
|
|
320
|
+
}
|
|
321
|
+
res = opU(res, vec2(dBlob, 1.0));
|
|
322
|
+
float dBox = sdBox(pos - vec3(3.0, 0.4, 0.0), vec3(0.3, 0.4, 0.3));
|
|
323
|
+
res = opU(res, vec2(dBox, 2.0));
|
|
324
|
+
float dTorus = sdTorus((pos - vec3(-3.0, 0.5, 0.0)).xzy, vec2(0.4, 0.1));
|
|
325
|
+
res = opU(res, vec2(dTorus, 3.0));
|
|
326
|
+
// CSG subtraction: sphere minus box
|
|
327
|
+
float dCSG = sdSphere(pos - vec3(0.0, 0.5, 3.0), 0.5);
|
|
328
|
+
dCSG = max(dCSG, -sdBox(pos - vec3(0.0, 0.5, 3.0), vec3(0.3)));
|
|
329
|
+
res = opU(res, vec2(dCSG, 4.0));
|
|
330
|
+
return res;
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
// === Normals ===
|
|
334
|
+
vec3 calcNormal(vec3 pos) {
|
|
335
|
+
vec3 n = vec3(0.0);
|
|
336
|
+
for (int i = ZERO; i < 4; i++) {
|
|
337
|
+
vec3 e = 0.5773 * (2.0 * vec3((((i+3)>>1)&1), ((i>>1)&1), (i&1)) - 1.0);
|
|
338
|
+
n += e * map(pos + 0.0005 * e).x;
|
|
339
|
+
}
|
|
340
|
+
return normalize(n);
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
// === Shadows ===
|
|
344
|
+
float calcSoftshadow(vec3 ro, vec3 rd, float mint, float tmax) {
|
|
345
|
+
float res = 1.0, t = mint;
|
|
346
|
+
for (int i = ZERO; i < SHADOW_STEPS; i++) {
|
|
347
|
+
float h = map(ro + rd * t).x;
|
|
348
|
+
float s = clamp(SHADOW_SOFTNESS * h / t, 0.0, 1.0);
|
|
349
|
+
res = min(res, s);
|
|
350
|
+
t += clamp(h, 0.01, 0.2);
|
|
351
|
+
if (res < 0.004 || t > tmax) break;
|
|
352
|
+
}
|
|
353
|
+
res = clamp(res, 0.0, 1.0);
|
|
354
|
+
return res * res * (3.0 - 2.0 * res);
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
// === AO ===
|
|
358
|
+
float calcAO(vec3 pos, vec3 nor) {
|
|
359
|
+
float occ = 0.0, sca = 1.0;
|
|
360
|
+
for (int i = ZERO; i < 5; i++) {
|
|
361
|
+
float h = 0.01 + 0.12 * float(i) / 4.0;
|
|
362
|
+
float d = map(pos + h * nor).x;
|
|
363
|
+
occ += (h - d) * sca;
|
|
364
|
+
sca *= 0.95;
|
|
365
|
+
if (occ > 0.35) break;
|
|
366
|
+
}
|
|
367
|
+
return clamp(1.0 - 3.0 * occ, 0.0, 1.0) * (0.5 + 0.5 * nor.y);
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
// === Ray Marching ===
|
|
371
|
+
vec2 raycast(vec3 ro, vec3 rd) {
|
|
372
|
+
vec2 res = vec2(-1.0);
|
|
373
|
+
float t = 0.01;
|
|
374
|
+
for (int i = 0; i < MAX_STEPS && t < MAX_DIST; i++) {
|
|
375
|
+
vec2 h = map(ro + rd * t);
|
|
376
|
+
if (abs(h.x) < SURF_DIST * t) { res = vec2(t, h.y); break; }
|
|
377
|
+
t += h.x;
|
|
378
|
+
}
|
|
379
|
+
return res;
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
// === Camera ===
|
|
383
|
+
mat3 setCamera(vec3 ro, vec3 ta, float cr) {
|
|
384
|
+
vec3 cw = normalize(ta - ro);
|
|
385
|
+
vec3 cp = vec3(sin(cr), cos(cr), 0.0);
|
|
386
|
+
vec3 cu = normalize(cross(cw, cp));
|
|
387
|
+
vec3 cv = cross(cu, cw);
|
|
388
|
+
return mat3(cu, cv, cw);
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
// === Rendering ===
|
|
392
|
+
vec3 render(vec3 ro, vec3 rd) {
|
|
393
|
+
vec3 col = vec3(0.7, 0.7, 0.9) - max(rd.y, 0.0) * 0.3;
|
|
394
|
+
vec2 res = raycast(ro, rd);
|
|
395
|
+
float t = res.x, m = res.y;
|
|
396
|
+
if (m > -0.5) {
|
|
397
|
+
vec3 pos = ro + t * rd;
|
|
398
|
+
vec3 nor = (m < 0.5) ? vec3(0.0, 1.0, 0.0) : calcNormal(pos);
|
|
399
|
+
vec3 ref = reflect(rd, nor);
|
|
400
|
+
vec3 mate = 0.2 + 0.2 * sin(m * 2.0 + vec3(0.0, 1.0, 2.0));
|
|
401
|
+
if (m < 0.5) mate = vec3(0.15);
|
|
402
|
+
float occ = calcAO(pos, nor);
|
|
403
|
+
vec3 lin = vec3(0.0);
|
|
404
|
+
// Key light
|
|
405
|
+
{
|
|
406
|
+
vec3 lig = normalize(vec3(-0.5, 0.4, -0.6));
|
|
407
|
+
vec3 hal = normalize(lig - rd);
|
|
408
|
+
float dif = clamp(dot(nor, lig), 0.0, 1.0);
|
|
409
|
+
dif *= calcSoftshadow(pos, lig, 0.02, 2.5);
|
|
410
|
+
float spe = pow(clamp(dot(nor, hal), 0.0, 1.0), 16.0);
|
|
411
|
+
spe *= dif * (0.04 + 0.96 * pow(clamp(1.0 - dot(hal, lig), 0.0, 1.0), 5.0));
|
|
412
|
+
lin += mate * 2.20 * dif * vec3(1.30, 1.00, 0.70);
|
|
413
|
+
lin += 5.00 * spe * vec3(1.30, 1.00, 0.70);
|
|
414
|
+
}
|
|
415
|
+
// Sky light
|
|
416
|
+
{
|
|
417
|
+
float dif = sqrt(clamp(0.5 + 0.5 * nor.y, 0.0, 1.0)) * occ;
|
|
418
|
+
lin += mate * 0.60 * dif * vec3(0.40, 0.60, 1.15);
|
|
419
|
+
}
|
|
420
|
+
// Subsurface scattering approximation
|
|
421
|
+
{
|
|
422
|
+
float dif = pow(clamp(1.0 + dot(nor, rd), 0.0, 1.0), 2.0) * occ;
|
|
423
|
+
lin += mate * 0.25 * dif;
|
|
424
|
+
}
|
|
425
|
+
col = lin;
|
|
426
|
+
col = mix(col, vec3(0.7, 0.7, 0.9), 1.0 - exp(-0.0001 * t * t * t));
|
|
427
|
+
}
|
|
428
|
+
return clamp(col, 0.0, 1.0);
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
// === Main Function ===
|
|
432
|
+
void mainImage(out vec4 fragColor, in vec2 fragCoord) {
|
|
433
|
+
vec2 mo = iMouse.xy / iResolution.xy;
|
|
434
|
+
float time = 32.0 + iTime * 1.5;
|
|
435
|
+
vec3 ta = vec3(0.0, 0.0, 0.0);
|
|
436
|
+
vec3 ro = ta + vec3(4.5 * cos(0.1 * time + 7.0 * mo.x), 2.2,
|
|
437
|
+
4.5 * sin(0.1 * time + 7.0 * mo.x));
|
|
438
|
+
mat3 ca = setCamera(ro, ta, 0.0);
|
|
439
|
+
vec3 tot = vec3(0.0);
|
|
440
|
+
#if AA > 1
|
|
441
|
+
for (int m = ZERO; m < AA; m++)
|
|
442
|
+
for (int n = ZERO; n < AA; n++) {
|
|
443
|
+
vec2 o = vec2(float(m), float(n)) / float(AA) - 0.5;
|
|
444
|
+
vec2 p = (2.0 * (fragCoord + o) - iResolution.xy) / iResolution.y;
|
|
445
|
+
#else
|
|
446
|
+
vec2 p = (2.0 * fragCoord - iResolution.xy) / iResolution.y;
|
|
447
|
+
#endif
|
|
448
|
+
vec3 rd = ca * normalize(vec3(p, 2.5));
|
|
449
|
+
vec3 col = render(ro, rd);
|
|
450
|
+
col = pow(col, vec3(0.4545));
|
|
451
|
+
tot += col;
|
|
452
|
+
#if AA > 1
|
|
453
|
+
}
|
|
454
|
+
tot /= float(AA * AA);
|
|
455
|
+
#endif
|
|
456
|
+
fragColor = vec4(tot, 1.0);
|
|
457
|
+
}
|
|
458
|
+
```
|
|
459
|
+
|
|
460
|
+
## Common Variants
|
|
461
|
+
|
|
462
|
+
### Variant 1: Dynamic Organic Body (Smooth Blob Animation)
|
|
463
|
+
|
|
464
|
+
```glsl
|
|
465
|
+
vec2 map(vec3 p) {
|
|
466
|
+
float d = 2.0;
|
|
467
|
+
for (int i = 0; i < 16; i++) {
|
|
468
|
+
float fi = float(i);
|
|
469
|
+
float t = iTime * (fract(fi * 412.531 + 0.513) - 0.5) * 2.0;
|
|
470
|
+
d = smin(sdSphere(p + sin(t + fi * vec3(52.5126, 64.627, 632.25)) * vec3(2.0, 2.0, 0.8),
|
|
471
|
+
mix(0.5, 1.0, fract(fi * 412.531 + 0.5124))), d, 0.4);
|
|
472
|
+
}
|
|
473
|
+
return vec2(d, 1.0);
|
|
474
|
+
}
|
|
475
|
+
```
|
|
476
|
+
|
|
477
|
+
### Variant 2: Infinite Repeating Corridor (Domain Repetition)
|
|
478
|
+
|
|
479
|
+
```glsl
|
|
480
|
+
float repeat(float v, float c) { return mod(v, c) - c * 0.5; }
|
|
481
|
+
|
|
482
|
+
float amod(inout vec2 p, float count) {
|
|
483
|
+
float an = 6.283185 / count;
|
|
484
|
+
float a = atan(p.y, p.x) + an * 0.5;
|
|
485
|
+
float c = floor(a / an);
|
|
486
|
+
a = mod(a, an) - an * 0.5;
|
|
487
|
+
p = vec2(cos(a), sin(a)) * length(p);
|
|
488
|
+
return c;
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
vec2 map(vec3 p) {
|
|
492
|
+
p.z = repeat(p.z, 4.0);
|
|
493
|
+
p.x += 2.0 * sin(p.z * 0.1);
|
|
494
|
+
float d = -sdBox(p, vec3(2.0, 2.0, 20.0));
|
|
495
|
+
d = max(d, -sdBox(p, vec3(1.8, 1.8, 1.9)));
|
|
496
|
+
d = min(d, sdCylinder(p - vec3(1.5, -2.0, 0.0), vec2(0.1, 2.0)));
|
|
497
|
+
return vec2(d, 1.0);
|
|
498
|
+
}
|
|
499
|
+
```
|
|
500
|
+
|
|
501
|
+
### Variant 3: Character/Creature Modeling
|
|
502
|
+
|
|
503
|
+
```glsl
|
|
504
|
+
vec2 sdStick(vec3 p, vec3 a, vec3 b, float r1, float r2) {
|
|
505
|
+
vec3 pa = p - a, ba = b - a;
|
|
506
|
+
float h = clamp(dot(pa, ba) / dot(ba, ba), 0.0, 1.0);
|
|
507
|
+
return vec2(length(pa - ba * h) - mix(r1, r2, h * h * (3.0 - 2.0 * h)), h);
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
vec2 map(vec3 pos) {
|
|
511
|
+
float d = sdEllipsoid(pos, vec3(0.25, 0.3, 0.25)); // body
|
|
512
|
+
d = smin(d, sdEllipsoid(pos - vec3(0.0, 0.35, 0.02),
|
|
513
|
+
vec3(0.12, 0.15, 0.13)), 0.1); // head
|
|
514
|
+
vec2 arm = sdStick(abs(pos.x) > 0.0 ? vec3(abs(pos.x), pos.yz) : pos,
|
|
515
|
+
vec3(0.18, 0.2, -0.05), vec3(0.35, -0.1, -0.15), 0.03, 0.05);
|
|
516
|
+
d = smin(d, arm.x, 0.04); // arms
|
|
517
|
+
d = smax(d, -sdEllipsoid(pos - vec3(0.0, 0.3, 0.15),
|
|
518
|
+
vec3(0.08, 0.03, 0.1)), 0.03); // mouth carving
|
|
519
|
+
return vec2(d, 1.0);
|
|
520
|
+
}
|
|
521
|
+
```
|
|
522
|
+
|
|
523
|
+
### Variant 4: Symmetry Optimization
|
|
524
|
+
|
|
525
|
+
```glsl
|
|
526
|
+
vec2 rot45(vec2 v) { return vec2(v.x - v.y, v.y + v.x) * 0.707107; }
|
|
527
|
+
|
|
528
|
+
vec2 map(vec3 p) {
|
|
529
|
+
float d = sdSphere(p, 0.12);
|
|
530
|
+
// Octahedral symmetry: 18-gear evaluations reduced to 4
|
|
531
|
+
vec3 qx = vec3(rot45(p.zy), p.x);
|
|
532
|
+
if (abs(qx.x) > abs(qx.y)) qx = qx.zxy;
|
|
533
|
+
vec3 qy = vec3(rot45(p.xz), p.y);
|
|
534
|
+
if (abs(qy.x) > abs(qy.y)) qy = qy.zxy;
|
|
535
|
+
vec3 qz = vec3(rot45(p.yx), p.z);
|
|
536
|
+
if (abs(qz.x) > abs(qz.y)) qz = qz.zxy;
|
|
537
|
+
vec3 qa = abs(p);
|
|
538
|
+
qa = (qa.x > qa.y && qa.x > qa.z) ? p.zxy : (qa.z > qa.y) ? p.yzx : p.xyz;
|
|
539
|
+
d = min(d, min(min(gear(qa, 0.0), gear(qx, 1.0)), min(gear(qy, 1.0), gear(qz, 1.0))));
|
|
540
|
+
return vec2(d, 1.0);
|
|
541
|
+
}
|
|
542
|
+
```
|
|
543
|
+
|
|
544
|
+
### Variant 5: PBR Material Rendering
|
|
545
|
+
|
|
546
|
+
```glsl
|
|
547
|
+
float D_GGX(float NoH, float roughness) {
|
|
548
|
+
float a = roughness * roughness; float a2 = a * a;
|
|
549
|
+
float d = NoH * NoH * (a2 - 1.0) + 1.0;
|
|
550
|
+
return a2 / (3.14159 * d * d);
|
|
551
|
+
}
|
|
552
|
+
vec3 F_Schlick(float VoH, vec3 f0) {
|
|
553
|
+
return f0 + (1.0 - f0) * pow(1.0 - VoH, 5.0);
|
|
554
|
+
}
|
|
555
|
+
vec3 pbrLighting(vec3 pos, vec3 nor, vec3 rd, vec3 albedo, float roughness, float metallic) {
|
|
556
|
+
vec3 lig = normalize(vec3(-0.5, 0.4, -0.6));
|
|
557
|
+
vec3 hal = normalize(lig - rd);
|
|
558
|
+
vec3 f0 = mix(vec3(0.04), albedo, metallic);
|
|
559
|
+
float NoL = max(dot(nor, lig), 0.0);
|
|
560
|
+
float NoH = max(dot(nor, hal), 0.0);
|
|
561
|
+
float VoH = max(dot(-rd, hal), 0.0);
|
|
562
|
+
vec3 spec = D_GGX(NoH, roughness) * F_Schlick(VoH, f0) * 0.25;
|
|
563
|
+
vec3 diff = albedo * (1.0 - metallic) / 3.14159;
|
|
564
|
+
float shadow = calcSoftshadow(pos, lig, 0.02, 2.5);
|
|
565
|
+
return (diff + spec) * NoL * shadow * vec3(1.3, 1.0, 0.7) * 3.0;
|
|
566
|
+
}
|
|
567
|
+
```
|
|
568
|
+
|
|
569
|
+
## Performance & Composition
|
|
570
|
+
|
|
571
|
+
### Performance Optimization Tips
|
|
572
|
+
|
|
573
|
+
- **Bounding volume acceleration**: test ray against AABB first to narrow `tmin/tmax`, avoiding wasted steps in empty regions
|
|
574
|
+
- **Sub-scene bounding**: in `map()`, use a cheap `sdBox` to check proximity before computing the precise SDF
|
|
575
|
+
- **Adaptive step size**: `abs(h.x) < SURF_DIST * t` -- looser tolerance at distance, stricter up close
|
|
576
|
+
- **Prevent compiler inlining**: `#define ZERO (min(iFrame, 0))` + loop prevents `calcNormal` from inlining map 4 times
|
|
577
|
+
- **Exploit symmetry**: fold into the fundamental domain, reducing 18 evaluations to 4
|
|
578
|
+
|
|
579
|
+
### Common Composition Techniques
|
|
580
|
+
|
|
581
|
+
- **Noise displacement**: `d += 0.05 * sin(p.x*10.)*sin(p.y*10.)*sin(p.z*10.)` adds organic detail; breaks the Lipschitz condition, so step size should be multiplied by 0.5~0.7
|
|
582
|
+
- **Bump mapping**: perturb only during normal calculation, leaving ray marching unaffected for better performance
|
|
583
|
+
- **Domain transforms**: warp coordinates before entering map (bending, polar coordinate transforms, etc.)
|
|
584
|
+
- **Procedural animation**: bone angles driven by time to position primitives, `smin` ensures smooth joints
|
|
585
|
+
- **Motion blur**: multi-frame temporal sampling averaged
|
|
586
|
+
|
|
587
|
+
## Further Reading
|
|
588
|
+
|
|
589
|
+
Full step-by-step tutorials, mathematical derivations, and advanced usage in [reference](../reference/sdf-3d.md)
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# SDF Advanced Tricks & Optimization
|
|
2
|
+
|
|
3
|
+
## Use Cases
|
|
4
|
+
- Optimizing complex SDF scenes for real-time performance
|
|
5
|
+
- Adding fine detail to SDF surfaces without increasing geometric complexity
|
|
6
|
+
- Creating special effects with SDF manipulation (hollowing, layered edges, interior structures)
|
|
7
|
+
- Debugging and visualizing SDF fields
|
|
8
|
+
|
|
9
|
+
## Core Techniques
|
|
10
|
+
|
|
11
|
+
### Hollowing (Shell Creation)
|
|
12
|
+
Convert any solid SDF into a thin shell:
|
|
13
|
+
```glsl
|
|
14
|
+
float hollowed = abs(sdf) - thickness;
|
|
15
|
+
// Example: hollow sphere with 0.02 wall thickness
|
|
16
|
+
float d = abs(sdSphere(p, 1.0)) - 0.02;
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
### Layered Edges (Concentric Contour Lines)
|
|
20
|
+
Create equidistant contour rings from any SDF:
|
|
21
|
+
```glsl
|
|
22
|
+
float spacing = 0.2;
|
|
23
|
+
float thickness = 0.02;
|
|
24
|
+
float layered = abs(mod(d + spacing * 0.5, spacing) - spacing * 0.5) - thickness;
|
|
25
|
+
```
|
|
26
|
+
Useful for: topographic map effects, neon outlines, energy shields, wireframe-like rendering.
|
|
27
|
+
|
|
28
|
+
### FBM Detail on SDF (Distance-Based LOD)
|
|
29
|
+
Add procedural noise detail only where it's visible — near the camera:
|
|
30
|
+
```glsl
|
|
31
|
+
float map(vec3 p) {
|
|
32
|
+
float d = sdBasicShape(p);
|
|
33
|
+
// Only add expensive FBM detail when close to surface
|
|
34
|
+
if (d < 1.0) {
|
|
35
|
+
d += 0.02 * fbm(p * 8.0) * smoothstep(1.0, 0.0, d);
|
|
36
|
+
}
|
|
37
|
+
return d;
|
|
38
|
+
}
|
|
39
|
+
```
|
|
40
|
+
**Critical**: The `smoothstep` fade prevents the FBM from disrupting the SDF's Lipschitz continuity far from the surface, which would cause ray marching to overshoot.
|
|
41
|
+
|
|
42
|
+
### SDF Bounding Volumes (Performance Optimization)
|
|
43
|
+
Skip expensive SDF evaluation when the point is far from the object:
|
|
44
|
+
```glsl
|
|
45
|
+
float map(vec3 p) {
|
|
46
|
+
// Cheap bounding sphere test first
|
|
47
|
+
float bound = sdSphere(p - objectCenter, boundingRadius);
|
|
48
|
+
if (bound > 0.1) return bound; // far away — return bounding distance
|
|
49
|
+
// Expensive detailed SDF only when close
|
|
50
|
+
return complexSDF(p);
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
For scenes with multiple distant objects, this can provide 5-10x speedup.
|
|
54
|
+
|
|
55
|
+
### Binary Search Refinement
|
|
56
|
+
After ray marching finds an approximate hit, refine with binary search for sub-pixel precision:
|
|
57
|
+
```glsl
|
|
58
|
+
// After ray march loop finds t where map(ro+rd*t) < epsilon:
|
|
59
|
+
for (int i = 0; i < 6; i++) {
|
|
60
|
+
float mid = map(ro + rd * t);
|
|
61
|
+
t += mid * 0.5; // or use proper bisection:
|
|
62
|
+
// float dt = step * 0.5^i;
|
|
63
|
+
// t += (map(ro+rd*t) > 0.0) ? dt : -dt;
|
|
64
|
+
}
|
|
65
|
+
```
|
|
66
|
+
Especially useful for: sharp edge rendering, precise shadow termination, accurate reflection points.
|
|
67
|
+
|
|
68
|
+
### XOR Boolean Operation
|
|
69
|
+
Create interesting geometric patterns by combining SDFs with XOR:
|
|
70
|
+
```glsl
|
|
71
|
+
float opXor(float d1, float d2) {
|
|
72
|
+
return max(min(d1, d2), -max(d1, d2));
|
|
73
|
+
}
|
|
74
|
+
// Creates a "difference of unions" — geometry exists where exactly one shape is present
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### Interior SDF Structures
|
|
78
|
+
Use the sign of the SDF to create interior geometry:
|
|
79
|
+
```glsl
|
|
80
|
+
float interiorPattern(vec3 p) {
|
|
81
|
+
float outer = sdSphere(p, 1.0);
|
|
82
|
+
float inner = sdBox(fract(p * 4.0) - 0.5, vec3(0.1)); // repeating inner pattern
|
|
83
|
+
return (outer < 0.0) ? max(outer, inner) : outer; // inner visible only inside
|
|
84
|
+
}
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## SDF Debugging Visualization
|
|
88
|
+
|
|
89
|
+
```glsl
|
|
90
|
+
// Visualize SDF distance as color bands
|
|
91
|
+
vec3 debugSDF(float d) {
|
|
92
|
+
vec3 col = (d > 0.0) ? vec3(0.9, 0.6, 0.3) : vec3(0.4, 0.7, 0.85); // outside/inside
|
|
93
|
+
col *= 1.0 - exp(-6.0 * abs(d)); // darken near surface
|
|
94
|
+
col *= 0.8 + 0.2 * cos(150.0 * d); // distance bands
|
|
95
|
+
col = mix(col, vec3(1.0), 1.0 - smoothstep(0.0, 0.01, abs(d))); // white at surface
|
|
96
|
+
return col;
|
|
97
|
+
}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
→ For deeper details, see [reference/sdf-tricks.md](../reference/sdf-tricks.md)
|