@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,527 @@
|
|
|
1
|
+
# Lighting Models Skill
|
|
2
|
+
|
|
3
|
+
## Use Cases
|
|
4
|
+
- Adding realistic lighting to raymarched or rasterized scenes
|
|
5
|
+
- Simulating light interaction with various materials (metal, dielectric, water, skin, etc.)
|
|
6
|
+
- From simple diffuse/specular to full PBR
|
|
7
|
+
- Multi-light compositing (sun, sky, ambient)
|
|
8
|
+
- Adding material appearance to SDF scenes in ShaderToy
|
|
9
|
+
|
|
10
|
+
## Core Principles
|
|
11
|
+
|
|
12
|
+
Lighting = Diffuse + Specular Reflection:
|
|
13
|
+
|
|
14
|
+
- **Diffuse**: Lambert's law `I = max(0, N·L)`
|
|
15
|
+
- **Specular**: Empirical model uses Blinn-Phong `pow(max(0, N·H), shininess)`; physically-based model uses Cook-Torrance BRDF
|
|
16
|
+
|
|
17
|
+
### Key Formulas
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
Lambert: L_diffuse = albedo * lightColor * max(0, N·L)
|
|
21
|
+
Blinn-Phong: H = normalize(V + L); L_specular = lightColor * pow(max(0, N·H), shininess)
|
|
22
|
+
Cook-Torrance: f_specular = D(h) * F(v,h) * G(l,v,h) / (4 * (N·L) * (N·V))
|
|
23
|
+
Fresnel: F = F0 + (1 - F0) * (1 - V·H)^5
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
- **D** = GGX/Trowbridge-Reitz normal distribution
|
|
27
|
+
- **F** = Schlick Fresnel approximation
|
|
28
|
+
- **G** = Smith geometric shadowing
|
|
29
|
+
- F0: dielectric ~0.04, metals use baseColor
|
|
30
|
+
|
|
31
|
+
## Implementation Steps
|
|
32
|
+
|
|
33
|
+
### Step 1: Scene Basics (Normal + Vector Setup)
|
|
34
|
+
|
|
35
|
+
```glsl
|
|
36
|
+
// SDF normal (finite difference method)
|
|
37
|
+
vec3 calcNormal(vec3 p) {
|
|
38
|
+
vec2 e = vec2(0.001, 0.0);
|
|
39
|
+
return normalize(vec3(
|
|
40
|
+
map(p + e.xyy) - map(p - e.xyy),
|
|
41
|
+
map(p + e.yxy) - map(p - e.yxy),
|
|
42
|
+
map(p + e.yyx) - map(p - e.yyx)
|
|
43
|
+
));
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
vec3 N = calcNormal(pos); // surface normal
|
|
47
|
+
vec3 V = -rd; // view direction
|
|
48
|
+
vec3 L = normalize(lightPos - pos); // light direction (point light)
|
|
49
|
+
// directional light: vec3 L = normalize(vec3(0.6, 0.8, -0.5));
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### Step 2: Lambert Diffuse
|
|
53
|
+
|
|
54
|
+
```glsl
|
|
55
|
+
float NdotL = max(0.0, dot(N, L));
|
|
56
|
+
vec3 diffuse = albedo * lightColor * NdotL;
|
|
57
|
+
|
|
58
|
+
// energy-conserving version
|
|
59
|
+
vec3 diffuse_conserved = albedo / PI * lightColor * NdotL;
|
|
60
|
+
|
|
61
|
+
// Half-Lambert (reduces over-darkening on backlit faces, commonly used for SSS approximation)
|
|
62
|
+
float halfLambert = NdotL * 0.5 + 0.5;
|
|
63
|
+
vec3 diffuse_wrapped = albedo * lightColor * halfLambert;
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### Step 3: Blinn-Phong Specular
|
|
67
|
+
|
|
68
|
+
```glsl
|
|
69
|
+
vec3 H = normalize(V + L);
|
|
70
|
+
float NdotH = max(0.0, dot(N, H));
|
|
71
|
+
float SHININESS = 32.0; // 4.0 (rough) ~ 256.0 (smooth)
|
|
72
|
+
|
|
73
|
+
// with normalization factor for energy conservation
|
|
74
|
+
float normFactor = (SHININESS + 8.0) / (8.0 * PI);
|
|
75
|
+
float spec = normFactor * pow(NdotH, SHININESS);
|
|
76
|
+
vec3 specular = lightColor * spec;
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### Step 4: Fresnel-Schlick
|
|
80
|
+
|
|
81
|
+
```glsl
|
|
82
|
+
vec3 fresnelSchlick(vec3 F0, float cosTheta) {
|
|
83
|
+
return F0 + (1.0 - F0) * pow(1.0 - cosTheta, 5.0);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// metallic workflow
|
|
87
|
+
vec3 F0 = mix(vec3(0.04), baseColor, metallic);
|
|
88
|
+
|
|
89
|
+
// computed with V·H (specular reflection BRDF)
|
|
90
|
+
float VdotH = max(0.0, dot(V, H));
|
|
91
|
+
vec3 F = fresnelSchlick(F0, VdotH);
|
|
92
|
+
|
|
93
|
+
// computed with N·V (environment reflection, rim light)
|
|
94
|
+
float NdotV = max(0.0, dot(N, V));
|
|
95
|
+
vec3 F_env = fresnelSchlick(F0, NdotV);
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### Step 5: GGX Normal Distribution (D Term)
|
|
99
|
+
|
|
100
|
+
```glsl
|
|
101
|
+
float distributionGGX(float NdotH, float roughness) {
|
|
102
|
+
float a = roughness * roughness; // roughness must be squared first
|
|
103
|
+
float a2 = a * a;
|
|
104
|
+
float denom = NdotH * NdotH * (a2 - 1.0) + 1.0;
|
|
105
|
+
return a2 / (PI * denom * denom);
|
|
106
|
+
}
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### Step 6: Geometric Shadowing (G Term)
|
|
110
|
+
|
|
111
|
+
```glsl
|
|
112
|
+
// Method 1: Schlick-GGX
|
|
113
|
+
float geometrySchlickGGX(float NdotV, float roughness) {
|
|
114
|
+
float r = roughness + 1.0;
|
|
115
|
+
float k = (r * r) / 8.0;
|
|
116
|
+
return NdotV / (NdotV * (1.0 - k) + k);
|
|
117
|
+
}
|
|
118
|
+
float geometrySmith(float NdotV, float NdotL, float roughness) {
|
|
119
|
+
return geometrySchlickGGX(NdotV, roughness) * geometrySchlickGGX(NdotL, roughness);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// Method 2: Height-Correlated Smith (more accurate, directly returns the visibility term)
|
|
123
|
+
float visibilitySmith(float NdotV, float NdotL, float roughness) {
|
|
124
|
+
float a2 = roughness * roughness;
|
|
125
|
+
float gv = NdotL * sqrt(NdotV * (NdotV - NdotV * a2) + a2);
|
|
126
|
+
float gl = NdotV * sqrt(NdotL * (NdotL - NdotL * a2) + a2);
|
|
127
|
+
return 0.5 / max(gv + gl, 0.00001);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
// Method 3: Simplified approximation
|
|
131
|
+
float G1V(float dotNV, float k) {
|
|
132
|
+
return 1.0 / (dotNV * (1.0 - k) + k);
|
|
133
|
+
}
|
|
134
|
+
// Usage: float vis = G1V(NdotL, k) * G1V(NdotV, k); where k = roughness/2
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
### Step 7: Assembling Cook-Torrance BRDF
|
|
138
|
+
|
|
139
|
+
```glsl
|
|
140
|
+
vec3 cookTorranceBRDF(vec3 N, vec3 V, vec3 L, float roughness, vec3 F0) {
|
|
141
|
+
vec3 H = normalize(V + L);
|
|
142
|
+
float NdotL = max(0.0, dot(N, L));
|
|
143
|
+
float NdotV = max(0.0, dot(N, V));
|
|
144
|
+
float NdotH = max(0.0, dot(N, H));
|
|
145
|
+
float VdotH = max(0.0, dot(V, H));
|
|
146
|
+
|
|
147
|
+
float D = distributionGGX(NdotH, roughness);
|
|
148
|
+
vec3 F = fresnelSchlick(F0, VdotH);
|
|
149
|
+
float Vis = visibilitySmith(NdotV, NdotL, roughness);
|
|
150
|
+
|
|
151
|
+
// Vis version already includes the 4*NdotV*NdotL denominator
|
|
152
|
+
vec3 specular = D * F * Vis;
|
|
153
|
+
// Or with standard G term: specular = (D * F * G) / max(4.0 * NdotV * NdotL, 0.001);
|
|
154
|
+
|
|
155
|
+
return specular * NdotL;
|
|
156
|
+
}
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### Step 8: Multi-Light Accumulation and Compositing
|
|
160
|
+
|
|
161
|
+
```glsl
|
|
162
|
+
vec3 shade(vec3 pos, vec3 N, vec3 V, vec3 albedo, float roughness, float metallic) {
|
|
163
|
+
vec3 F0 = mix(vec3(0.04), albedo, metallic);
|
|
164
|
+
vec3 diffuseColor = albedo * (1.0 - metallic); // metals have no diffuse
|
|
165
|
+
vec3 color = vec3(0.0);
|
|
166
|
+
|
|
167
|
+
// primary light (sun)
|
|
168
|
+
vec3 sunDir = normalize(vec3(0.6, 0.8, -0.5));
|
|
169
|
+
vec3 sunColor = vec3(1.0, 0.95, 0.85) * 2.0;
|
|
170
|
+
vec3 H = normalize(V + sunDir);
|
|
171
|
+
float NdotL = max(0.0, dot(N, sunDir));
|
|
172
|
+
float NdotV = max(0.0, dot(N, V));
|
|
173
|
+
float VdotH = max(0.0, dot(V, H));
|
|
174
|
+
vec3 F = fresnelSchlick(F0, VdotH);
|
|
175
|
+
vec3 kD = (1.0 - F) * (1.0 - metallic); // energy conservation
|
|
176
|
+
|
|
177
|
+
color += kD * diffuseColor / PI * sunColor * NdotL;
|
|
178
|
+
color += cookTorranceBRDF(N, V, sunDir, roughness, F0) * sunColor;
|
|
179
|
+
|
|
180
|
+
// sky light (hemisphere approximation)
|
|
181
|
+
vec3 skyColor = vec3(0.2, 0.5, 1.0) * 0.3;
|
|
182
|
+
float skyDiffuse = 0.5 + 0.5 * N.y;
|
|
183
|
+
color += diffuseColor * skyColor * skyDiffuse;
|
|
184
|
+
|
|
185
|
+
// back light / rim light
|
|
186
|
+
vec3 backDir = normalize(vec3(-sunDir.x, 0.0, -sunDir.z));
|
|
187
|
+
float backDiffuse = clamp(dot(N, backDir) * 0.5 + 0.5, 0.0, 1.0);
|
|
188
|
+
color += diffuseColor * vec3(0.25, 0.15, 0.1) * backDiffuse;
|
|
189
|
+
|
|
190
|
+
return color;
|
|
191
|
+
}
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
### Step 9: Ambient Occlusion (AO)
|
|
195
|
+
|
|
196
|
+
```glsl
|
|
197
|
+
// Raymarching AO (using SDF queries)
|
|
198
|
+
float calcAO(vec3 pos, vec3 nor) {
|
|
199
|
+
float occ = 0.0;
|
|
200
|
+
float sca = 1.0;
|
|
201
|
+
for (int i = 0; i < 5; i++) {
|
|
202
|
+
float h = 0.01 + 0.12 * float(i) / 4.0;
|
|
203
|
+
float d = map(pos + h * nor);
|
|
204
|
+
occ += (h - d) * sca;
|
|
205
|
+
sca *= 0.95;
|
|
206
|
+
}
|
|
207
|
+
return clamp(1.0 - 3.0 * occ, 0.0, 1.0);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
float ao = calcAO(pos, N);
|
|
211
|
+
diffuseLight *= ao;
|
|
212
|
+
// specular AO (more subtle):
|
|
213
|
+
specularLight *= clamp(pow(NdotV + ao, roughness * roughness) - 1.0 + ao, 0.0, 1.0);
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
### Outdoor Three-Light Model
|
|
217
|
+
|
|
218
|
+
The go-to lighting setup for outdoor SDF scenes. Uses three directional sources to approximate full global illumination with minimal cost:
|
|
219
|
+
|
|
220
|
+
```glsl
|
|
221
|
+
// === Outdoor Three-Light Lighting ===
|
|
222
|
+
// Compute material, occlusion, and shadow first
|
|
223
|
+
vec3 material = getMaterial(pos, nor); // albedo, keep ≤ 0.2 for realism
|
|
224
|
+
float occ = calcAO(pos, nor); // ambient occlusion
|
|
225
|
+
float sha = calcSoftShadow(pos, sunDir, 0.02, 8.0);
|
|
226
|
+
|
|
227
|
+
// Three light contributions
|
|
228
|
+
float sun = clamp(dot(nor, sunDir), 0.0, 1.0); // direct sunlight
|
|
229
|
+
float sky = clamp(0.5 + 0.5 * nor.y, 0.0, 1.0); // hemisphere sky light
|
|
230
|
+
float ind = clamp(dot(nor, normalize(sunDir * vec3(-1.0, 0.0, -1.0))), 0.0, 1.0); // indirect bounce
|
|
231
|
+
|
|
232
|
+
// Combine with colored shadows (key technique: shadow penumbra tints blue)
|
|
233
|
+
vec3 lin = vec3(0.0);
|
|
234
|
+
lin += sun * vec3(1.64, 1.27, 0.99) * pow(vec3(sha), vec3(1.0, 1.2, 1.5)); // warm sun, colored shadow
|
|
235
|
+
lin += sky * vec3(0.16, 0.20, 0.28) * occ; // cool sky fill
|
|
236
|
+
lin += ind * vec3(0.40, 0.28, 0.20) * occ; // warm ground bounce
|
|
237
|
+
|
|
238
|
+
vec3 color = material * lin;
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
Key principles:
|
|
242
|
+
- **Colored shadow penumbra**: `pow(vec3(sha), vec3(1.0, 1.2, 1.5))` makes shadow edges slightly blue/cool, mimicking real subsurface scattering in penumbra regions
|
|
243
|
+
- **Material albedo rule**: Keep diffuse albedo ≤ 0.2; adjust light intensities for brightness, not material values. Real-world surfaces rarely exceed 0.3 albedo
|
|
244
|
+
- **Linear workflow**: All computations in linear space, apply gamma `pow(color, vec3(1.0/2.2))` at the very end
|
|
245
|
+
- **Sky light approximation**: `0.5 + 0.5 * nor.y` is a cheap hemisphere integral — surfaces pointing up get full sky, pointing down get none
|
|
246
|
+
- Do NOT apply ambient occlusion to the sun/key light — shadows handle that
|
|
247
|
+
|
|
248
|
+
## Complete Code Template
|
|
249
|
+
|
|
250
|
+
```glsl
|
|
251
|
+
// Lighting Model Complete Template - Runs directly in ShaderToy
|
|
252
|
+
// Progressive implementation from Lambert to Cook-Torrance PBR
|
|
253
|
+
|
|
254
|
+
#define PI 3.14159265359
|
|
255
|
+
|
|
256
|
+
// ========== Adjustable Parameters ==========
|
|
257
|
+
#define ROUGHNESS 0.35
|
|
258
|
+
#define METALLIC 0.0
|
|
259
|
+
#define ALBEDO vec3(0.8, 0.2, 0.2)
|
|
260
|
+
#define SUN_DIR normalize(vec3(0.6, 0.8, -0.5))
|
|
261
|
+
#define SUN_COLOR vec3(1.0, 0.95, 0.85) * 2.0
|
|
262
|
+
#define SKY_COLOR vec3(0.2, 0.5, 1.0) * 0.4
|
|
263
|
+
#define BACKGROUND_TOP vec3(0.5, 0.7, 1.0)
|
|
264
|
+
#define BACKGROUND_BOT vec3(0.8, 0.85, 0.9)
|
|
265
|
+
|
|
266
|
+
// ========== SDF Scene ==========
|
|
267
|
+
float map(vec3 p) {
|
|
268
|
+
float sphere = length(p - vec3(0.0, 0.0, 0.0)) - 1.0;
|
|
269
|
+
float ground = p.y + 1.0;
|
|
270
|
+
return min(sphere, ground);
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
vec3 calcNormal(vec3 p) {
|
|
274
|
+
vec2 e = vec2(0.001, 0.0);
|
|
275
|
+
return normalize(vec3(
|
|
276
|
+
map(p + e.xyy) - map(p - e.xyy),
|
|
277
|
+
map(p + e.yxy) - map(p - e.yxy),
|
|
278
|
+
map(p + e.yyx) - map(p - e.yyx)
|
|
279
|
+
));
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
// ========== AO ==========
|
|
283
|
+
float calcAO(vec3 pos, vec3 nor) {
|
|
284
|
+
float occ = 0.0;
|
|
285
|
+
float sca = 1.0;
|
|
286
|
+
for (int i = 0; i < 5; i++) {
|
|
287
|
+
float h = 0.01 + 0.12 * float(i) / 4.0;
|
|
288
|
+
float d = map(pos + h * nor);
|
|
289
|
+
occ += (h - d) * sca;
|
|
290
|
+
sca *= 0.95;
|
|
291
|
+
}
|
|
292
|
+
return clamp(1.0 - 3.0 * occ, 0.0, 1.0);
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
// ========== Soft Shadow ==========
|
|
296
|
+
float softShadow(vec3 ro, vec3 rd, float mint, float maxt) {
|
|
297
|
+
float res = 1.0;
|
|
298
|
+
float t = mint;
|
|
299
|
+
for (int i = 0; i < 24; i++) {
|
|
300
|
+
float h = map(ro + rd * t);
|
|
301
|
+
res = min(res, 8.0 * h / t);
|
|
302
|
+
t += clamp(h, 0.02, 0.2);
|
|
303
|
+
if (res < 0.001 || t > maxt) break;
|
|
304
|
+
}
|
|
305
|
+
return clamp(res, 0.0, 1.0);
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
// ========== PBR BRDF Components ==========
|
|
309
|
+
float D_GGX(float NdotH, float roughness) {
|
|
310
|
+
float a = roughness * roughness;
|
|
311
|
+
float a2 = a * a;
|
|
312
|
+
float d = NdotH * NdotH * (a2 - 1.0) + 1.0;
|
|
313
|
+
return a2 / (PI * d * d);
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
vec3 F_Schlick(vec3 F0, float cosTheta) {
|
|
317
|
+
return F0 + (1.0 - F0) * pow(1.0 - cosTheta, 5.0);
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
float V_SmithGGX(float NdotV, float NdotL, float roughness) {
|
|
321
|
+
float a2 = roughness * roughness;
|
|
322
|
+
a2 *= a2;
|
|
323
|
+
float gv = NdotL * sqrt(NdotV * NdotV * (1.0 - a2) + a2);
|
|
324
|
+
float gl = NdotV * sqrt(NdotL * NdotL * (1.0 - a2) + a2);
|
|
325
|
+
return 0.5 / max(gv + gl, 1e-5);
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
// ========== Complete Lighting ==========
|
|
329
|
+
vec3 shade(vec3 pos, vec3 N, vec3 V, vec3 albedo, float roughness, float metallic) {
|
|
330
|
+
vec3 F0 = mix(vec3(0.04), albedo, metallic);
|
|
331
|
+
vec3 diffuseColor = albedo * (1.0 - metallic);
|
|
332
|
+
float NdotV = max(dot(N, V), 1e-4);
|
|
333
|
+
float ao = calcAO(pos, N);
|
|
334
|
+
vec3 color = vec3(0.0);
|
|
335
|
+
|
|
336
|
+
// sunlight
|
|
337
|
+
{
|
|
338
|
+
vec3 L = SUN_DIR;
|
|
339
|
+
vec3 H = normalize(V + L);
|
|
340
|
+
float NdotL = max(dot(N, L), 0.0);
|
|
341
|
+
float NdotH = max(dot(N, H), 0.0);
|
|
342
|
+
float VdotH = max(dot(V, H), 0.0);
|
|
343
|
+
float D = D_GGX(NdotH, roughness);
|
|
344
|
+
vec3 F = F_Schlick(F0, VdotH);
|
|
345
|
+
float Vis = V_SmithGGX(NdotV, NdotL, roughness);
|
|
346
|
+
vec3 kD = (1.0 - F) * (1.0 - metallic);
|
|
347
|
+
vec3 diffuse = kD * diffuseColor / PI;
|
|
348
|
+
vec3 specular = D * F * Vis;
|
|
349
|
+
float shadow = softShadow(pos, L, 0.02, 5.0);
|
|
350
|
+
color += (diffuse + specular) * SUN_COLOR * NdotL * shadow;
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
// sky light (hemisphere approximation)
|
|
354
|
+
{
|
|
355
|
+
float skyDiff = 0.5 + 0.5 * N.y;
|
|
356
|
+
color += diffuseColor * SKY_COLOR * skyDiff * ao;
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
// back light / rim light
|
|
360
|
+
{
|
|
361
|
+
vec3 backDir = normalize(vec3(-SUN_DIR.x, 0.0, -SUN_DIR.z));
|
|
362
|
+
float backDiff = clamp(dot(N, backDir) * 0.5 + 0.5, 0.0, 1.0);
|
|
363
|
+
color += diffuseColor * vec3(0.15, 0.1, 0.08) * backDiff * ao;
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
// environment reflection (simplified)
|
|
367
|
+
{
|
|
368
|
+
vec3 R = reflect(-V, N);
|
|
369
|
+
vec3 envColor = mix(BACKGROUND_BOT, BACKGROUND_TOP, clamp(R.y * 0.5 + 0.5, 0.0, 1.0));
|
|
370
|
+
vec3 F_env = F_Schlick(F0, NdotV);
|
|
371
|
+
float envOcc = clamp(pow(NdotV + ao, roughness * roughness) - 1.0 + ao, 0.0, 1.0);
|
|
372
|
+
color += F_env * envColor * envOcc * (1.0 - roughness * 0.7);
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
return color;
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
// ========== Raymarching ==========
|
|
379
|
+
float raymarch(vec3 ro, vec3 rd) {
|
|
380
|
+
float t = 0.0;
|
|
381
|
+
for (int i = 0; i < 128; i++) {
|
|
382
|
+
float d = map(ro + rd * t);
|
|
383
|
+
if (d < 0.001) return t;
|
|
384
|
+
t += d;
|
|
385
|
+
if (t > 50.0) break;
|
|
386
|
+
}
|
|
387
|
+
return -1.0;
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
// ========== Background ==========
|
|
391
|
+
vec3 background(vec3 rd) {
|
|
392
|
+
vec3 col = mix(BACKGROUND_BOT, BACKGROUND_TOP, clamp(rd.y * 0.5 + 0.5, 0.0, 1.0));
|
|
393
|
+
float sun = clamp(dot(rd, SUN_DIR), 0.0, 1.0);
|
|
394
|
+
col += SUN_COLOR * 0.3 * pow(sun, 8.0);
|
|
395
|
+
col += SUN_COLOR * 1.0 * pow(sun, 256.0);
|
|
396
|
+
return col;
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
// ========== Main Function ==========
|
|
400
|
+
void mainImage(out vec4 fragColor, in vec2 fragCoord) {
|
|
401
|
+
vec2 uv = (2.0 * fragCoord - iResolution.xy) / iResolution.y;
|
|
402
|
+
|
|
403
|
+
float angle = iTime * 0.3;
|
|
404
|
+
vec3 ro = vec3(3.0 * cos(angle), 1.5, 3.0 * sin(angle));
|
|
405
|
+
vec3 ta = vec3(0.0, 0.0, 0.0);
|
|
406
|
+
vec3 ww = normalize(ta - ro);
|
|
407
|
+
vec3 uu = normalize(cross(ww, vec3(0.0, 1.0, 0.0)));
|
|
408
|
+
vec3 vv = cross(uu, ww);
|
|
409
|
+
vec3 rd = normalize(uv.x * uu + uv.y * vv + 1.5 * ww);
|
|
410
|
+
|
|
411
|
+
vec3 col = background(rd);
|
|
412
|
+
float t = raymarch(ro, rd);
|
|
413
|
+
|
|
414
|
+
if (t > 0.0) {
|
|
415
|
+
vec3 pos = ro + t * rd;
|
|
416
|
+
vec3 N = calcNormal(pos);
|
|
417
|
+
vec3 V = -rd;
|
|
418
|
+
vec3 albedo = ALBEDO;
|
|
419
|
+
float roughness = ROUGHNESS;
|
|
420
|
+
float metallic = METALLIC;
|
|
421
|
+
|
|
422
|
+
if (pos.y < -0.99) {
|
|
423
|
+
roughness = 0.8;
|
|
424
|
+
metallic = 0.0;
|
|
425
|
+
float checker = mod(floor(pos.x) + floor(pos.z), 2.0);
|
|
426
|
+
albedo = mix(vec3(0.3), vec3(0.6), checker);
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
col = shade(pos, N, V, albedo, roughness, metallic);
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
col = col / (col + vec3(1.0)); // Tone mapping (Reinhard)
|
|
433
|
+
col = pow(col, vec3(1.0 / 2.2)); // Gamma
|
|
434
|
+
fragColor = vec4(col, 1.0);
|
|
435
|
+
}
|
|
436
|
+
```
|
|
437
|
+
|
|
438
|
+
## Common Variants
|
|
439
|
+
|
|
440
|
+
### Variant 1: Classic Phong (Non-PBR)
|
|
441
|
+
|
|
442
|
+
```glsl
|
|
443
|
+
vec3 R = reflect(-L, N);
|
|
444
|
+
float spec = pow(max(0.0, dot(R, V)), 32.0);
|
|
445
|
+
vec3 color = albedo * lightColor * NdotL + lightColor * spec;
|
|
446
|
+
```
|
|
447
|
+
|
|
448
|
+
### Variant 2: Point Light Attenuation
|
|
449
|
+
|
|
450
|
+
```glsl
|
|
451
|
+
float dist = length(lightPos - pos);
|
|
452
|
+
float attenuation = 1.0 / (1.0 + dist * 0.1 + dist * dist * 0.01);
|
|
453
|
+
color *= attenuation;
|
|
454
|
+
```
|
|
455
|
+
|
|
456
|
+
### Variant 3: IBL (Image-Based Lighting)
|
|
457
|
+
|
|
458
|
+
```glsl
|
|
459
|
+
// diffuse IBL: spherical harmonics
|
|
460
|
+
vec3 diffuseIBL = diffuseColor * SHIrradiance(N);
|
|
461
|
+
|
|
462
|
+
// specular IBL: EnvBRDFApprox
|
|
463
|
+
vec3 EnvBRDFApprox(vec3 specColor, float roughness, float NdotV) {
|
|
464
|
+
vec4 c0 = vec4(-1, -0.0275, -0.572, 0.022);
|
|
465
|
+
vec4 c1 = vec4(1, 0.0425, 1.04, -0.04);
|
|
466
|
+
vec4 r = roughness * c0 + c1;
|
|
467
|
+
float a004 = min(r.x * r.x, exp2(-9.28 * NdotV)) * r.x + r.y;
|
|
468
|
+
vec2 AB = vec2(-1.04, 1.04) * a004 + r.zw;
|
|
469
|
+
return specColor * AB.x + AB.y;
|
|
470
|
+
}
|
|
471
|
+
vec3 R = reflect(-V, N);
|
|
472
|
+
vec3 envColor = textureLod(envMap, R, roughness * 7.0).rgb;
|
|
473
|
+
vec3 specularIBL = EnvBRDFApprox(F0, roughness, NdotV) * envColor;
|
|
474
|
+
```
|
|
475
|
+
|
|
476
|
+
### Variant 4: Subsurface Scattering Approximation (SSS)
|
|
477
|
+
|
|
478
|
+
```glsl
|
|
479
|
+
// SDF-based interior probing
|
|
480
|
+
float subsurface(vec3 pos, vec3 L) {
|
|
481
|
+
float sss = 0.0;
|
|
482
|
+
for (int i = 0; i < 5; i++) {
|
|
483
|
+
float h = 0.05 + float(i) * 0.1;
|
|
484
|
+
float d = map(pos + L * h);
|
|
485
|
+
sss += max(0.0, h - d);
|
|
486
|
+
}
|
|
487
|
+
return clamp(1.0 - sss * 4.0, 0.0, 1.0);
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
// Henyey-Greenstein phase function
|
|
491
|
+
float HenyeyGreenstein(float cosTheta, float g) {
|
|
492
|
+
float g2 = g * g;
|
|
493
|
+
return (1.0 - g2) / (pow(1.0 + g2 - 2.0 * g * cosTheta, 1.5) * 4.0 * PI);
|
|
494
|
+
}
|
|
495
|
+
float sssAmount = HenyeyGreenstein(dot(V, L), 0.5);
|
|
496
|
+
color += sssColor * sssAmount * NdotL;
|
|
497
|
+
```
|
|
498
|
+
|
|
499
|
+
### Variant 5: Beer's Law Water Lighting
|
|
500
|
+
|
|
501
|
+
```glsl
|
|
502
|
+
vec3 waterExtinction(float depth) {
|
|
503
|
+
float opticalDepth = depth * 6.0;
|
|
504
|
+
vec3 extinctColor = 1.0 - vec3(0.5, 0.4, 0.1);
|
|
505
|
+
return exp2(-opticalDepth * extinctColor);
|
|
506
|
+
}
|
|
507
|
+
vec3 underwaterColor = objectColor * waterExtinction(depth);
|
|
508
|
+
vec3 inscatter = waterDiffuse * (1.0 - exp(-depth * 0.1));
|
|
509
|
+
underwaterColor += inscatter;
|
|
510
|
+
```
|
|
511
|
+
|
|
512
|
+
## Performance & Composition
|
|
513
|
+
|
|
514
|
+
- **Fresnel optimization**: Use `x2*x2*x` instead of `pow(x, 5.0)`
|
|
515
|
+
- **Visibility term**: Use `V_SmithGGX` to directly return `G/(4*NdotV*NdotL)`, avoiding separate division
|
|
516
|
+
- **AO sampling**: 5 samples is sufficient; can reduce to 3 at far distances
|
|
517
|
+
- **Soft shadow**: `clamp(h, 0.02, 0.2)` limits step size; 14~24 steps usually sufficient; `8.0*h/t` controls softness
|
|
518
|
+
- **Simplified IBL**: Without cubemap, approximate with `mix(groundColor, skyColor, R.y*0.5+0.5)`
|
|
519
|
+
- **Branch culling**: Skip specular calculation when `NdotL <= 0`
|
|
520
|
+
- **Raymarching integration**: Use SDF finite differences for normals, query SDF directly for AO/shadows
|
|
521
|
+
- **Volume rendering integration**: Beer's Law attenuation + Henyey-Greenstein phase function; FBM noise procedural normals can be passed directly to lighting functions
|
|
522
|
+
- **Post-processing integration**: ACES `(col*(2.51*col+0.03))/(col*(2.43*col+0.59)+0.14)` / Reinhard `col/(col+1)` + Gamma
|
|
523
|
+
- **Reflection integration**: `reflect(rd, N)` to query scene again, blend result with Fresnel weighting
|
|
524
|
+
|
|
525
|
+
## Further Reading
|
|
526
|
+
|
|
527
|
+
For complete step-by-step tutorials, mathematical derivations, and advanced usage, see [reference](../reference/lighting-model.md)
|