@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,525 @@
|
|
|
1
|
+
# Fractal Rendering — Detailed Reference
|
|
2
|
+
|
|
3
|
+
This document is a detailed supplement to [SKILL.md](SKILL.md), containing prerequisites, step-by-step explanations, mathematical derivations, variant descriptions, in-depth performance analysis, and complete combination example code.
|
|
4
|
+
|
|
5
|
+
## Prerequisites
|
|
6
|
+
|
|
7
|
+
- **GLSL Basics**: uniform, varying, built-in functions (`dot`, `length`, `normalize`, `abs`, `fract`)
|
|
8
|
+
- **Complex Number Arithmetic**: representing complex numbers as `vec2`, multiplication `(a+bi)(c+di) = (ac-bd, ad+bc)`
|
|
9
|
+
- **Vector Math**: dot product, cross product, matrix transforms
|
|
10
|
+
- **Ray Marching Basics** (required for 3D fractals): stepping along a ray, using distance fields for collision detection
|
|
11
|
+
- **Coordinate Normalization**: mapping pixel coordinates to the `[-1, 1]` range
|
|
12
|
+
|
|
13
|
+
## Core Principles in Detail
|
|
14
|
+
|
|
15
|
+
The essence of fractal rendering is **visualization of iterative systems**. Core algorithm patterns fall into three categories:
|
|
16
|
+
|
|
17
|
+
### 1. Escape-Time Algorithm
|
|
18
|
+
|
|
19
|
+
For each point `c` on the complex plane, repeatedly iterate `Z <- Z^2 + c`, counting the number of steps needed for Z to escape (`|Z| > R`). More steps means closer to the fractal boundary.
|
|
20
|
+
|
|
21
|
+
**Distance Estimation** computes the precise distance from a point to the fractal by simultaneously tracking the derivative `Z'`:
|
|
22
|
+
```
|
|
23
|
+
Z <- Z^2 + c (value iteration)
|
|
24
|
+
Z' <- 2*Z*Z' + 1 (derivative iteration)
|
|
25
|
+
d(c) = |Z|*log|Z| / |Z'| (Hubbard-Douady potential function)
|
|
26
|
+
```
|
|
27
|
+
Distance estimation produces smoother coloring than pure escape-time step counting, and is a prerequisite for ray marching in 3D fractals.
|
|
28
|
+
|
|
29
|
+
### 2. Iterated Function System (IFS)
|
|
30
|
+
|
|
31
|
+
Apply a set of transforms (folding `abs()`, scaling `Scale`, offset `Offset`) to points in space, iterating repeatedly to produce self-similar structures. Core steps of KIFS (Kaleidoscopic IFS) commonly used in 3D:
|
|
32
|
+
```
|
|
33
|
+
p = abs(p) // Fold (symmetrize)
|
|
34
|
+
sort p.xyz descending // Sort (select symmetry axis)
|
|
35
|
+
p = Scale * p - Offset * (Scale-1) // Scale and offset
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### 3. Spherical Inversion Fractal
|
|
39
|
+
|
|
40
|
+
Apollonian-type fractals use `fract()` for space folding + spherical inversion `p *= s/dot(p,p)`:
|
|
41
|
+
```
|
|
42
|
+
p = -1.0 + 2.0 * fract(0.5*p + 0.5) // Fold space to [-1,1]
|
|
43
|
+
r^2 = dot(p, p)
|
|
44
|
+
k = s / r^2 // Inversion factor
|
|
45
|
+
p *= k; scale *= k // Spherical inversion
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
All 3D fractals are rendered using **Sphere Tracing (Ray Marching)**: stepping along the view ray by the distance field value at each step, until close enough to the surface.
|
|
49
|
+
|
|
50
|
+
## Implementation Steps in Detail
|
|
51
|
+
|
|
52
|
+
### Step 1: Coordinate Normalization
|
|
53
|
+
|
|
54
|
+
**What**: Map pixel coordinates to standard coordinates centered on the screen with aspect ratio correction.
|
|
55
|
+
|
|
56
|
+
**Why**: All fractal calculations must be performed in mathematical space, independent of pixel resolution.
|
|
57
|
+
|
|
58
|
+
```glsl
|
|
59
|
+
vec2 p = (2.0 * fragCoord - iResolution.xy) / iResolution.y;
|
|
60
|
+
// p now has y range [-1,1], x scaled by aspect ratio
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### Step 2: 2D Fractal — Mandelbrot Escape-Time Iteration
|
|
64
|
+
|
|
65
|
+
**What**: For each pixel point as complex number `c`, iterate `Z <- Z^2 + c` while tracking the derivative.
|
|
66
|
+
|
|
67
|
+
**Why**: Escape time produces fractal structure; derivative tracking enables distance estimation coloring.
|
|
68
|
+
|
|
69
|
+
```glsl
|
|
70
|
+
float distanceToMandelbrot(in vec2 c) {
|
|
71
|
+
vec2 z = vec2(0.0);
|
|
72
|
+
vec2 dz = vec2(0.0); // Derivative
|
|
73
|
+
float m2 = 0.0;
|
|
74
|
+
|
|
75
|
+
for (int i = 0; i < MAX_ITER; i++) {
|
|
76
|
+
if (m2 > BAILOUT * BAILOUT) break;
|
|
77
|
+
|
|
78
|
+
// Z' -> 2*Z*Z' + 1 (complex derivative chain rule)
|
|
79
|
+
dz = 2.0 * vec2(z.x*dz.x - z.y*dz.y,
|
|
80
|
+
z.x*dz.y + z.y*dz.x) + vec2(1.0, 0.0);
|
|
81
|
+
|
|
82
|
+
// Z -> Z^2 + c (complex squaring)
|
|
83
|
+
z = vec2(z.x*z.x - z.y*z.y, 2.0*z.x*z.y) + c;
|
|
84
|
+
|
|
85
|
+
m2 = dot(z, z);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// Distance estimation: d(c) = |Z|*log|Z| / |Z'|
|
|
89
|
+
return 0.5 * sqrt(dot(z,z) / dot(dz,dz)) * log(dot(z,z));
|
|
90
|
+
}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### Step 3: 3D Fractal — Distance Field Function (Mandelbulb Example)
|
|
94
|
+
|
|
95
|
+
**What**: Implement the Mandelbulb power-N iteration using spherical coordinates, returning a distance estimate.
|
|
96
|
+
|
|
97
|
+
**Why**: 3D fractals cannot be directly colored via escape-time on pixels; they require distance fields for ray marching.
|
|
98
|
+
|
|
99
|
+
```glsl
|
|
100
|
+
float mandelbulb(vec3 p) {
|
|
101
|
+
vec3 z = p;
|
|
102
|
+
float dr = 1.0; // Derivative (distance scaling factor)
|
|
103
|
+
float r;
|
|
104
|
+
|
|
105
|
+
for (int i = 0; i < FRACTAL_ITER; i++) {
|
|
106
|
+
r = length(z);
|
|
107
|
+
if (r > BAILOUT) break;
|
|
108
|
+
|
|
109
|
+
// Convert to spherical coordinates
|
|
110
|
+
float theta = atan(z.y, z.x);
|
|
111
|
+
float phi = asin(z.z / r);
|
|
112
|
+
|
|
113
|
+
// Derivative: dr -> power * r^(power-1) * dr + 1
|
|
114
|
+
dr = pow(r, POWER - 1.0) * dr * POWER + 1.0;
|
|
115
|
+
|
|
116
|
+
// z -> z^power + p (spherical coordinate exponentiation)
|
|
117
|
+
r = pow(r, POWER);
|
|
118
|
+
theta *= POWER;
|
|
119
|
+
phi *= POWER;
|
|
120
|
+
z = r * vec3(cos(theta)*cos(phi),
|
|
121
|
+
sin(theta)*cos(phi),
|
|
122
|
+
sin(phi)) + p;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// Distance estimation
|
|
126
|
+
return 0.5 * log(r) * r / dr;
|
|
127
|
+
}
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### Step 4: 3D Fractal — IFS Distance Field (Menger Sponge Example)
|
|
131
|
+
|
|
132
|
+
**What**: Construct a KIFS fractal distance field through fold-sort-scale-offset iteration.
|
|
133
|
+
|
|
134
|
+
**Why**: IFS fractals produce self-similar structures through spatial transforms rather than numerical iteration; distance is tracked via `Scale^(-n)` scaling.
|
|
135
|
+
|
|
136
|
+
```glsl
|
|
137
|
+
float mengerDE(vec3 z) {
|
|
138
|
+
z = abs(1.0 - mod(z, 2.0)); // Infinite tiling
|
|
139
|
+
float d = 1000.0;
|
|
140
|
+
|
|
141
|
+
for (int n = 0; n < IFS_ITER; n++) {
|
|
142
|
+
z = abs(z); // Fold
|
|
143
|
+
if (z.x < z.y) z.xy = z.yx; // Sort
|
|
144
|
+
if (z.x < z.z) z.xz = z.zx;
|
|
145
|
+
if (z.y < z.z) z.yz = z.zy;
|
|
146
|
+
z = SCALE * z - OFFSET * (SCALE - 1.0); // Scale + offset
|
|
147
|
+
if (z.z < -0.5 * OFFSET.z * (SCALE - 1.0))
|
|
148
|
+
z.z += OFFSET.z * (SCALE - 1.0);
|
|
149
|
+
d = min(d, length(z) * pow(SCALE, float(-n) - 1.0));
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
return d - 0.001;
|
|
153
|
+
}
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
### Step 5: 3D Fractal — Spherical Inversion Distance Field (Apollonian Type)
|
|
157
|
+
|
|
158
|
+
**What**: Construct an Apollonian fractal using fract folding + spherical inversion iteration, while recording orbit traps.
|
|
159
|
+
|
|
160
|
+
**Why**: Spherical inversion `p *= s/dot(p,p)` produces sphere packing structures; orbit traps provide color and AO information.
|
|
161
|
+
|
|
162
|
+
```glsl
|
|
163
|
+
vec4 orb; // Global orbit trap
|
|
164
|
+
|
|
165
|
+
float apollonianDE(vec3 p, float s) {
|
|
166
|
+
float scale = 1.0;
|
|
167
|
+
orb = vec4(1000.0);
|
|
168
|
+
|
|
169
|
+
for (int i = 0; i < INVERSION_ITER; i++) {
|
|
170
|
+
p = -1.0 + 2.0 * fract(0.5 * p + 0.5); // Fold space to [-1,1]
|
|
171
|
+
float r2 = dot(p, p);
|
|
172
|
+
orb = min(orb, vec4(abs(p), r2)); // Record orbit trap
|
|
173
|
+
float k = s / r2; // Inversion factor
|
|
174
|
+
p *= k;
|
|
175
|
+
scale *= k;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
return 0.25 * abs(p.y) / scale;
|
|
179
|
+
}
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### Step 6: Ray Marching (Sphere Tracing)
|
|
183
|
+
|
|
184
|
+
**What**: Step along the ray direction, advancing by the distance field value at each step, until hitting the surface.
|
|
185
|
+
|
|
186
|
+
**Why**: The distance field guarantees safe stepping (won't pass through the surface), and is the standard method for rendering implicit 3D fractals.
|
|
187
|
+
|
|
188
|
+
```glsl
|
|
189
|
+
float rayMarch(vec3 ro, vec3 rd) {
|
|
190
|
+
float t = 0.01;
|
|
191
|
+
for (int i = 0; i < MAX_STEPS; i++) {
|
|
192
|
+
float precis = PRECISION * t; // Relax precision with distance
|
|
193
|
+
float h = map(ro + rd * t);
|
|
194
|
+
if (h < precis || t > MAX_DIST) break;
|
|
195
|
+
t += h * FUDGE_FACTOR; // fudge < 1.0 improves safety
|
|
196
|
+
}
|
|
197
|
+
return (t > MAX_DIST) ? -1.0 : t;
|
|
198
|
+
}
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
### Step 7: Normal Calculation (Finite Differences)
|
|
202
|
+
|
|
203
|
+
**What**: Sample the distance field gradient around the hit point as the surface normal.
|
|
204
|
+
|
|
205
|
+
**Why**: Implicit surfaces have no analytical normals and require numerical approximation. Tetrahedral sampling (4-tap) saves 1/3 of the cost compared to central differences (6-tap).
|
|
206
|
+
|
|
207
|
+
```glsl
|
|
208
|
+
// 6-tap central difference method (more intuitive)
|
|
209
|
+
vec3 calcNormal_6tap(vec3 pos) {
|
|
210
|
+
vec2 e = vec2(0.001, 0.0);
|
|
211
|
+
return normalize(vec3(
|
|
212
|
+
map(pos + e.xyy) - map(pos - e.xyy),
|
|
213
|
+
map(pos + e.yxy) - map(pos - e.yxy),
|
|
214
|
+
map(pos + e.yyx) - map(pos - e.yyx)));
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
// 4-tap tetrahedral method (more efficient, recommended)
|
|
218
|
+
vec3 calcNormal_4tap(vec3 pos, float t) {
|
|
219
|
+
float precis = 0.001 * t;
|
|
220
|
+
vec2 e = vec2(1.0, -1.0) * precis;
|
|
221
|
+
return normalize(
|
|
222
|
+
e.xyy * map(pos + e.xyy) +
|
|
223
|
+
e.yyx * map(pos + e.yyx) +
|
|
224
|
+
e.yxy * map(pos + e.yxy) +
|
|
225
|
+
e.xxx * map(pos + e.xxx));
|
|
226
|
+
}
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
### Step 8: Shading and Lighting
|
|
230
|
+
|
|
231
|
+
**What**: Compute Lambertian diffuse + ambient + AO for hit surfaces.
|
|
232
|
+
|
|
233
|
+
**Why**: Lighting gives 3D fractals depth and material quality. Orbit trap values (`orb`) can serve both as color mapping and as simple AO.
|
|
234
|
+
|
|
235
|
+
```glsl
|
|
236
|
+
vec3 shade(vec3 pos, vec3 nor, vec3 rd, vec4 trap) {
|
|
237
|
+
vec3 light1 = normalize(LIGHT_DIR);
|
|
238
|
+
float diff = clamp(dot(light1, nor), 0.0, 1.0);
|
|
239
|
+
float amb = 0.7 + 0.3 * nor.y;
|
|
240
|
+
float ao = pow(clamp(trap.w * 2.0, 0.0, 1.0), 1.2); // Orbit trap AO
|
|
241
|
+
|
|
242
|
+
vec3 brdf = vec3(0.4) * amb * ao // Ambient
|
|
243
|
+
+ vec3(1.0) * diff * ao; // Diffuse
|
|
244
|
+
|
|
245
|
+
// Map material color from orbit trap
|
|
246
|
+
vec3 rgb = vec3(1.0);
|
|
247
|
+
rgb = mix(rgb, vec3(1.0, 0.8, 0.2), clamp(6.0*trap.y, 0.0, 1.0));
|
|
248
|
+
rgb = mix(rgb, vec3(1.0, 0.55, 0.0), pow(clamp(1.0-2.0*trap.z, 0.0, 1.0), 8.0));
|
|
249
|
+
|
|
250
|
+
return rgb * brdf;
|
|
251
|
+
}
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
### Step 9: Camera Setup
|
|
255
|
+
|
|
256
|
+
**What**: Build a look-at camera matrix, converting pixel coordinates to 3D ray directions.
|
|
257
|
+
|
|
258
|
+
**Why**: All 3D fractal ray marching requires a unified camera framework to generate rays.
|
|
259
|
+
|
|
260
|
+
```glsl
|
|
261
|
+
void setupCamera(vec2 uv, vec3 ro, vec3 ta, float cr,
|
|
262
|
+
out vec3 rd) {
|
|
263
|
+
vec3 cw = normalize(ta - ro); // forward
|
|
264
|
+
vec3 cp = vec3(sin(cr), cos(cr), 0.0); // roll
|
|
265
|
+
vec3 cu = normalize(cross(cw, cp)); // right
|
|
266
|
+
vec3 cv = normalize(cross(cu, cw)); // up
|
|
267
|
+
rd = normalize(uv.x * cu + uv.y * cv + 2.0 * cw); // FOV ~ 2.0
|
|
268
|
+
}
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
## Common Variants in Detail
|
|
272
|
+
|
|
273
|
+
### 1. 2D Mandelbrot (Distance Estimation Coloring)
|
|
274
|
+
|
|
275
|
+
Difference from base version (3D Apollonian): pure 2D computation, no ray marching needed, uses complex iteration + distance coloring.
|
|
276
|
+
|
|
277
|
+
```glsl
|
|
278
|
+
// Replace entire mainImage
|
|
279
|
+
void mainImage(out vec4 fragColor, in vec2 fragCoord) {
|
|
280
|
+
vec2 p = (2.0*fragCoord - iResolution.xy) / iResolution.y;
|
|
281
|
+
|
|
282
|
+
// Animated zoom
|
|
283
|
+
float tz = 0.5 - 0.5*cos(0.225*iTime);
|
|
284
|
+
float zoo = pow(0.5, 13.0*tz);
|
|
285
|
+
vec2 c = vec2(-0.05, 0.6805) + p * zoo; // Tunable: zoom center point
|
|
286
|
+
|
|
287
|
+
// Iteration
|
|
288
|
+
vec2 z = vec2(0.0), dz = vec2(0.0);
|
|
289
|
+
for (int i = 0; i < 300; i++) { // Tunable: iteration count
|
|
290
|
+
if (dot(z,z) > 1024.0) break;
|
|
291
|
+
dz = 2.0*vec2(z.x*dz.x-z.y*dz.y, z.x*dz.y+z.y*dz.x) + vec2(1.0,0.0);
|
|
292
|
+
z = vec2(z.x*z.x-z.y*z.y, 2.0*z.x*z.y) + c;
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
float d = 0.5*sqrt(dot(z,z)/dot(dz,dz))*log(dot(z,z));
|
|
296
|
+
d = clamp(pow(4.0*d/zoo, 0.2), 0.0, 1.0); // Tunable: 0.2 controls contrast
|
|
297
|
+
fragColor = vec4(vec3(d), 1.0);
|
|
298
|
+
}
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
### 2. Mandelbulb Power-N (3D Spherical Coordinate Fractal)
|
|
302
|
+
|
|
303
|
+
Difference from base version: uses spherical coordinate trigonometric functions instead of spherical inversion, with a tunable `POWER` parameter controlling the fractal shape.
|
|
304
|
+
|
|
305
|
+
```glsl
|
|
306
|
+
#define POWER 8.0 // Tunable: 2-16, higher = more complex structure
|
|
307
|
+
#define FRACTAL_ITER 4 // Tunable: 2-8, more = more detail
|
|
308
|
+
|
|
309
|
+
float mandelbulbDE(vec3 p) {
|
|
310
|
+
vec3 z = p;
|
|
311
|
+
float dr = 1.0;
|
|
312
|
+
float r;
|
|
313
|
+
for (int i = 0; i < FRACTAL_ITER; i++) {
|
|
314
|
+
r = length(z);
|
|
315
|
+
if (r > 2.0) break;
|
|
316
|
+
float theta = atan(z.y, z.x);
|
|
317
|
+
float phi = asin(z.z / r);
|
|
318
|
+
dr = pow(r, POWER - 1.0) * dr * POWER + 1.0;
|
|
319
|
+
r = pow(r, POWER);
|
|
320
|
+
theta *= POWER;
|
|
321
|
+
phi *= POWER;
|
|
322
|
+
z = r * vec3(cos(theta)*cos(phi), sin(theta)*cos(phi), sin(phi)) + p;
|
|
323
|
+
}
|
|
324
|
+
return 0.5 * log(r) * r / dr;
|
|
325
|
+
}
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
### 3. Menger Sponge (KIFS Folding Type)
|
|
329
|
+
|
|
330
|
+
Difference from base version: uses abs() folding + conditional sorting instead of spherical inversion, producing regular geometric fractals.
|
|
331
|
+
|
|
332
|
+
```glsl
|
|
333
|
+
#define SCALE 3.0 // Tunable: scaling factor, 2.0-4.0
|
|
334
|
+
#define OFFSET vec3(0.92858,0.92858,0.32858) // Tunable: offset vector, changes shape
|
|
335
|
+
#define IFS_ITER 7 // Tunable: iteration count
|
|
336
|
+
|
|
337
|
+
float mengerDE(vec3 z) {
|
|
338
|
+
z = abs(1.0 - mod(z, 2.0)); // Infinite tiling
|
|
339
|
+
float d = 1000.0;
|
|
340
|
+
for (int n = 0; n < IFS_ITER; n++) {
|
|
341
|
+
z = abs(z);
|
|
342
|
+
if (z.x < z.y) z.xy = z.yx; // Conditional sorting
|
|
343
|
+
if (z.x < z.z) z.xz = z.zx;
|
|
344
|
+
if (z.y < z.z) z.yz = z.zy;
|
|
345
|
+
z = SCALE * z - OFFSET * (SCALE - 1.0);
|
|
346
|
+
if (z.z < -0.5*OFFSET.z*(SCALE-1.0))
|
|
347
|
+
z.z += OFFSET.z*(SCALE-1.0);
|
|
348
|
+
d = min(d, length(z) * pow(SCALE, float(-n)-1.0));
|
|
349
|
+
}
|
|
350
|
+
return d - 0.001;
|
|
351
|
+
}
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
### 4. Quaternion Julia Set
|
|
355
|
+
|
|
356
|
+
Difference from base version: uses quaternion algebra `Z <- Z^2 + c` (4D), Julia sets use a fixed `c` parameter instead of per-point `c`, visualized by taking 3D cross-sections.
|
|
357
|
+
|
|
358
|
+
```glsl
|
|
359
|
+
// Quaternion squaring
|
|
360
|
+
vec4 qsqr(vec4 a) {
|
|
361
|
+
return vec4(a.x*a.x - a.y*a.y - a.z*a.z - a.w*a.w,
|
|
362
|
+
2.0*a.x*a.y, 2.0*a.x*a.z, 2.0*a.x*a.w);
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
float juliaDE(vec3 p, vec4 c) {
|
|
366
|
+
vec4 z = vec4(p, 0.0);
|
|
367
|
+
float md2 = 1.0;
|
|
368
|
+
float mz2 = dot(z, z);
|
|
369
|
+
|
|
370
|
+
for (int i = 0; i < 11; i++) { // Tunable: iteration count
|
|
371
|
+
md2 *= 4.0 * mz2; // |dz| -> 2*|z|*|dz|
|
|
372
|
+
z = qsqr(z) + c; // z -> z^2 + c
|
|
373
|
+
mz2 = dot(z, z);
|
|
374
|
+
if (mz2 > 4.0) break;
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
return 0.25 * sqrt(mz2 / md2) * log(mz2);
|
|
378
|
+
}
|
|
379
|
+
// Animated Julia parameter c:
|
|
380
|
+
// vec4 c = 0.45*cos(vec4(0.5,3.9,1.4,1.1) + time*vec4(1.2,1.7,1.3,2.5)) - vec4(0.3,0,0,0);
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
### 5. Minimal IFS Field (2D, No Ray Marching)
|
|
384
|
+
|
|
385
|
+
Difference from base version: pure 2D implementation, only ~20 lines of code, using `abs(p)/dot(p,p) + offset` for iteration, producing a density field through weighted accumulation.
|
|
386
|
+
|
|
387
|
+
```glsl
|
|
388
|
+
float field(vec3 p) {
|
|
389
|
+
float strength = 7.0 + 0.03 * log(1.e-6 + fract(sin(iTime) * 4373.11));
|
|
390
|
+
float accum = 0.0, prev = 0.0, tw = 0.0;
|
|
391
|
+
for (int i = 0; i < 32; ++i) { // Tunable: iteration count
|
|
392
|
+
float mag = dot(p, p);
|
|
393
|
+
p = abs(p) / mag + vec3(-0.5, -0.4, -1.5); // Tunable: offset values change shape
|
|
394
|
+
float w = exp(-float(i) / 7.0); // Tunable: 7.0 controls decay
|
|
395
|
+
accum += w * exp(-strength * pow(abs(mag - prev), 2.3));
|
|
396
|
+
tw += w;
|
|
397
|
+
prev = mag;
|
|
398
|
+
}
|
|
399
|
+
return max(0.0, 5.0 * accum / tw - 0.7);
|
|
400
|
+
}
|
|
401
|
+
// Sample field() directly on fragCoord as brightness/color
|
|
402
|
+
```
|
|
403
|
+
|
|
404
|
+
## Performance Optimization Details
|
|
405
|
+
|
|
406
|
+
### Bottleneck Analysis
|
|
407
|
+
|
|
408
|
+
The core bottleneck in fractal rendering is **nested loops**: outer ray marching steps x inner fractal iterations. A single pixel may execute `200 steps x 8 iterations = 1600` distance field evaluations.
|
|
409
|
+
|
|
410
|
+
### Optimization Techniques
|
|
411
|
+
|
|
412
|
+
#### 1. Reduce Ray Marching Steps
|
|
413
|
+
Lower `MAX_STEPS` from 200 to 60-100, compensating precision loss with a fudge factor (0.7-0.9).
|
|
414
|
+
```glsl
|
|
415
|
+
t += h * 0.7; // Fudge factor < 1.0, allows larger steps but reduces penetration risk
|
|
416
|
+
```
|
|
417
|
+
|
|
418
|
+
#### 2. Adaptive Precision
|
|
419
|
+
Relax the collision threshold as distance increases; far objects don't need pixel-level precision.
|
|
420
|
+
```glsl
|
|
421
|
+
float precis = 0.001 * t; // Precision grows linearly with distance
|
|
422
|
+
```
|
|
423
|
+
|
|
424
|
+
#### 3. Early Exit
|
|
425
|
+
In fractal iteration, break immediately once `|z|^2 > bailout`.
|
|
426
|
+
```glsl
|
|
427
|
+
if (m2 > 4.0) break; // Don't continue useless iterations
|
|
428
|
+
```
|
|
429
|
+
|
|
430
|
+
#### 4. Reduce Iteration Count
|
|
431
|
+
Fractal iteration counts (`INVERSION_ITER`, `IFS_ITER`) reduced from 8 to 4-5 have minimal visual impact but significant performance gains.
|
|
432
|
+
|
|
433
|
+
#### 5. Use 4-Tap Instead of 6-Tap for Normals
|
|
434
|
+
The tetrahedral method requires only 4 `map()` calls instead of 6, saving 33% normal computation cost.
|
|
435
|
+
|
|
436
|
+
#### 6. AA Downgrade
|
|
437
|
+
Use `#define AA 1` during development, switch to `AA 2` for release. `AA 3` has massive performance impact (9x overhead).
|
|
438
|
+
|
|
439
|
+
#### 7. Distance Field Scaling
|
|
440
|
+
For non-unit-sized fractals, scale the space first then scale the distance value to avoid precision issues.
|
|
441
|
+
```glsl
|
|
442
|
+
float z1 = 2.0;
|
|
443
|
+
return mandelbulb(p / z1) * z1;
|
|
444
|
+
```
|
|
445
|
+
|
|
446
|
+
#### 8. Avoid `pow()` Inside Loops
|
|
447
|
+
`pow(r, power)` in Mandelbulb is expensive; low powers (e.g., 2, 3) can be manually expanded instead.
|
|
448
|
+
|
|
449
|
+
## Combination Suggestions
|
|
450
|
+
|
|
451
|
+
### 1. Fractal + Volumetric Lighting
|
|
452
|
+
|
|
453
|
+
Accumulate scattered light passing through fractal gaps during ray marching, producing "god rays" effects.
|
|
454
|
+
|
|
455
|
+
```glsl
|
|
456
|
+
// Accumulate additionally in ray march loop
|
|
457
|
+
float glow = 0.0;
|
|
458
|
+
for (...) {
|
|
459
|
+
float h = map(ro + rd*t);
|
|
460
|
+
glow += exp(-10.0 * h); // Closer to surface = larger contribution
|
|
461
|
+
...
|
|
462
|
+
}
|
|
463
|
+
col += glowColor * glow * 0.01;
|
|
464
|
+
```
|
|
465
|
+
|
|
466
|
+
### 2. Fractal + Post-Processing (Tone Mapping / FXAA)
|
|
467
|
+
|
|
468
|
+
3D fractals have rich high-frequency detail, prone to aliasing. Use ACES Tone Mapping + sRGB correction + FXAA post-processing.
|
|
469
|
+
|
|
470
|
+
```glsl
|
|
471
|
+
// ACES tone mapping
|
|
472
|
+
vec3 aces_approx(vec3 v) {
|
|
473
|
+
v = max(v, 0.0) * 0.6;
|
|
474
|
+
float a=2.51, b=0.03, c=2.43, d=0.59, e=0.14;
|
|
475
|
+
return clamp((v*(a*v+b))/(v*(c*v+d)+e), 0.0, 1.0);
|
|
476
|
+
}
|
|
477
|
+
col = aces_approx(col);
|
|
478
|
+
col = pow(col, vec3(1.0/2.4)); // sRGB gamma
|
|
479
|
+
```
|
|
480
|
+
|
|
481
|
+
### 3. Fractal + Transparent Refraction (Multi-Bounce Refraction)
|
|
482
|
+
|
|
483
|
+
Used for "crystal ball" effects on volumetric fractals like Mandelbulb. Uses negative distance fields for reverse ray marching inside, combined with Beer's law absorption.
|
|
484
|
+
|
|
485
|
+
```glsl
|
|
486
|
+
// Invert distance field for interior stepping
|
|
487
|
+
float dfactor = isInside ? -1.0 : 1.0;
|
|
488
|
+
float d = dfactor * map(ro + rd * t);
|
|
489
|
+
// Beer's law light absorption
|
|
490
|
+
ragg *= exp(-st * beer); // beer = negative color vector
|
|
491
|
+
// Refraction direction
|
|
492
|
+
vec3 refr = refract(rd, sn, isInside ? 1.0/ior : ior);
|
|
493
|
+
```
|
|
494
|
+
|
|
495
|
+
### 4. Fractal + Orbit Trap Texture Mapping
|
|
496
|
+
|
|
497
|
+
Orbit trap values can be mapped to HSV color space for rich coloring, or mapped as self-emission for glowing fractal effects.
|
|
498
|
+
|
|
499
|
+
```glsl
|
|
500
|
+
vec3 hsv2rgb(vec3 c) {
|
|
501
|
+
vec4 K = vec4(1.0, 2.0/3.0, 1.0/3.0, 3.0);
|
|
502
|
+
vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);
|
|
503
|
+
return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);
|
|
504
|
+
}
|
|
505
|
+
// Map orbit trap to HSV
|
|
506
|
+
vec3 col = hsv2rgb(vec3(trap.x * 0.5, 0.9, 0.8));
|
|
507
|
+
```
|
|
508
|
+
|
|
509
|
+
### 5. Fractal + Soft Shadow
|
|
510
|
+
|
|
511
|
+
Perform an additional ray march from the fractal surface toward the light source, accumulating the minimum `h/t` ratio to generate soft shadows.
|
|
512
|
+
|
|
513
|
+
```glsl
|
|
514
|
+
float softshadow(vec3 ro, vec3 rd, float mint, float k) {
|
|
515
|
+
float res = 1.0;
|
|
516
|
+
float t = mint;
|
|
517
|
+
for (int i = 0; i < 64; i++) {
|
|
518
|
+
float h = map(ro + rd*t);
|
|
519
|
+
res = min(res, k * h / t); // Larger k = harder shadows
|
|
520
|
+
if (res < 0.001) break;
|
|
521
|
+
t += clamp(h, 0.01, 0.5);
|
|
522
|
+
}
|
|
523
|
+
return clamp(res, 0.0, 1.0);
|
|
524
|
+
}
|
|
525
|
+
```
|