Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Enhancement ShaderLab PBR #2502

Merged
merged 4 commits into from
Jan 14, 2025

Conversation

zhuxudong
Copy link
Member

@zhuxudong zhuxudong commented Jan 10, 2025

sync https://github.com/galacean/editor/pull/3011

Summary by CodeRabbit

  • New Features

    • Added new properties for shader configuration, including refraction mode, transparency, render face, and blend mode.
    • Enhanced anisotropy, iridescence, and sheen property controls.
  • Refactor

    • Restructured shader property naming and organization for improved clarity.
    • Removed shader registration functionality to simplify the module.

@zhuxudong zhuxudong requested a review from hhhhkrx January 10, 2025 09:11
Copy link

coderabbitai bot commented Jan 10, 2025

Walkthrough

The pull request introduces significant structural and naming modifications to the PBR.gs shader file. The changes primarily focus on reorganizing the Editor section, renaming properties, and introducing new configuration options for material rendering. The modifications enhance the shader's property organization without fundamentally altering its core functionality, providing more granular control over material properties like anisotropy, iridescence, sheen, and transparency. Additionally, the registerShader function and its associated logic have been removed from the index.ts file, simplifying the shader module.

Changes

File Change Summary
packages/shader-shaderlab/src/shaders/PBR.gs - Renamed EditorProperties to Editor
- Introduced nested Properties block
- Restructured "Anisotropy", "Thin Film Iridescence", and "Sheen" sections
- Added new properties: refractionMode, isTransparent, renderFace, blendMode
- Updated various property signatures
packages/shader-shaderlab/src/index.ts - Removed registerShader function and associated logic
- Removed shaderRegistered variable
- Updated export to include PBRSource

Possibly related PRs

  • PBR shader support Iridescence #2425: This PR adds support for iridescence properties in the PBRMaterial class, which is directly related to the changes in the PBR.gs shader file regarding the management of iridescence properties.
  • PBR support sheen #2448: This PR enhances the PBRMaterial class with sheen properties, which aligns with the changes in the PBR.gs shader file that also involve properties related to sheen.
  • shaderlab pbr support refraction #2470: This PR introduces new properties in the "Transmission" section of the PBR.gs shader, which directly correlates with the changes made in the main PR regarding the transmission properties.

Suggested labels

Rendering, shader, enhancement, glTF, material

Suggested reviewers

  • GuoLei1990

Poem

🐰 A shader's dance, properties rearranged,
Lines of code, elegantly exchanged.
Anisotropy twirls, iridescence gleams bright,
Rendering magic in pure digital light!
Hop, hop, shader rabbit's delight! 🌈✨


📜 Recent review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between b6bb3ac and 18e35ac.

📒 Files selected for processing (1)
  • packages/shader-shaderlab/src/shaders/PBR.gs (3 hunks)
⏰ Context from checks skipped due to timeout of 90000ms (3)
  • GitHub Check: build (22.x, windows-latest)
  • GitHub Check: e2e (22.x)
  • GitHub Check: codecov
🔇 Additional comments (5)
packages/shader-shaderlab/src/shaders/PBR.gs (5)

73-75: Validate rendering state handling

New properties affecting fundamental rendering behavior have been added:

  • isTransparent for transparency control
  • renderFace for face culling
  • blendMode for blend mode selection

These properties must be properly synchronized with the new render states (DepthState, BlendState, RasterState) defined below.


55-56: Verify sheen property references

The sheen properties have been renamed from ui_SheenIntensity and ui_SheenColor to sheenIntensity and sheenColor. Ensure these changes are synchronized with the shader implementation.

✅ Verification successful

✓ Sheen properties are properly synchronized

The renamed sheen properties are correctly integrated across shader implementations and material handling code. No instances of the old property names were found, indicating the changes are safe.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for references to old and new sheen property names
echo "=== Searching for old sheen properties ==="
rg "ui_Sheen(Intensity|Color)"
echo -e "\n=== Searching for new sheen properties ==="
rg "sheen(Intensity|Color)"

Length of output: 4540


90-104: Verify render state variable definitions

The new render states reference variables that must be defined in the shader implementation:

  • depthWriteEnabled
  • blendEnabled, sourceColorBlendFactor, destinationColorBlendFactor, etc.
  • rasterStateCullMode

Ensure these variables are properly defined and set based on the new Common properties.

✅ Verification successful

Render state variables are properly defined ✓

All render state variables are correctly defined and integrated:

  • Variables are set through the shaderData interface
  • Proper enums (BlendFactor, CullMode) are used
  • Implementation exists in core package with default values
  • Variables are tested in e2e tests
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for render state variable definitions
echo "=== Searching for depth state variables ==="
rg "depthWriteEnabled"
echo -e "\n=== Searching for blend state variables ==="
rg "(blend|source|destination).*(Enabled|BlendFactor)"
echo -e "\n=== Searching for raster state variables ==="
rg "rasterStateCullMode"

Length of output: 12524


1-2: Verify shader name references in the codebase

The shader name has been changed from "PBR.gs" to "PBRShaderName". This change needs to be synchronized across the codebase.


67-69: Verify refraction mode implementation

A new refractionMode enum has been added with Sphere and Planar options. Ensure that the shader implementation properly handles both refraction modes.

✅ Verification successful

Refraction modes are properly implemented

Both Sphere and Planar refraction modes are fully implemented in shadingPBR/Refraction.glsl and correctly integrated in shadingPBR/BTDF.glsl.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for refraction mode implementation
rg -A 5 "refractionMode|Sphere|Planar" packages/shader-shaderlab/src/

Length of output: 5006


Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR. (Beta)
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link

codecov bot commented Jan 10, 2025

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 68.50%. Comparing base (a8414f9) to head (18e35ac).
Report is 2 commits behind head on dev/1.4.

Additional details and impacted files
@@           Coverage Diff            @@
##           dev/1.4    #2502   +/-   ##
========================================
  Coverage    68.50%   68.50%           
========================================
  Files          956      957    +1     
  Lines       100007   100057   +50     
  Branches      8545     8543    -2     
========================================
+ Hits         68506    68549   +43     
- Misses       31245    31252    +7     
  Partials       256      256           
Flag Coverage Δ
unittests 68.50% <100.00%> (+<0.01%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between a9aae8b and b6bb3ac.

📒 Files selected for processing (2)
  • packages/shader-shaderlab/src/index.ts (2 hunks)
  • packages/shader-shaderlab/src/shaders/PBR.gs (3 hunks)
🔇 Additional comments (7)
packages/shader-shaderlab/src/index.ts (1)

1-3: Verify shader registration after removal of registerShader.

The removal of the registerShader function suggests a change in shader registration responsibility. Please ensure that PBR shader registration is properly handled elsewhere in the codebase.

Also applies to: 16-16

packages/shader-shaderlab/src/shaders/PBR.gs (6)

2-3: LGTM! Improved structure with Editor block.

The reorganization of properties under the Editor block improves code organization.


67-67: Verify initialization of new refractionMode property.

The new refractionMode enum property needs proper initialization in existing materials. Default value is set to Planar (1).


106-106: Verify initialization of renderQueueType.

Ensure renderQueueType is properly set based on the material's transparency settings.


90-104: Verify initialization of render state variables.

The shader uses several variables for render state configuration:

  • depthWriteEnabled
  • blendEnabled, sourceColorBlendFactor, destinationColorBlendFactor
  • rasterStateCullMode

Please ensure these variables are properly initialized based on the new material properties.

✅ Verification successful

Render state variables are properly initialized

The render state variables are correctly initialized through the shader data system with appropriate default values and runtime configuration support. The implementation in BlendState.ts ensures proper state management and type safety.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for render state variable initialization
rg "depthWriteEnabled|blendEnabled|sourceColorBlendFactor|destinationColorBlendFactor|rasterStateCullMode"

Length of output: 7304


55-56: Verify impact of sheen property renames.

The renaming of sheen properties (ui_SheenIntensitysheenIntensity, ui_SheenColorsheenColor) improves consistency but may affect existing materials.


73-75: Verify handling of new rendering control properties.

New properties added for enhanced rendering control:

  • isTransparent: Controls transparency
  • renderFace: Controls face culling
  • blendMode: Controls blend mode

Please ensure these properties are properly initialized and handled in the shader code.

Comment on lines +17 to +19
anisotropy("Intensity", Range(0, 1, 0.01)) = 0;
anisotropyRotation("Rotation", Range(0, 360, 1)) = 0;
material_AnisotropyTexture("Texture", Texture2D);
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codebase verification

Property rename breaks shader functionality

The anisotropy property renames in PBR.gs are incomplete and will break the shader system. The old property names material_AnisotropyInfo and material_AnisotropyTexture are still used in:

  • Shader uniform declarations and calculations in FragmentPBR.glsl, pbr_frag_define.glsl, and pbr_helper.glsl
  • Material implementation in PBRMaterial.ts

Either keep the original property names or update all references consistently across the codebase.

🔗 Analysis chain

Verify impact of anisotropy property renames.

The renaming of anisotropy properties (material_AnisotropyInfoanisotropy, material_AnisotropyTexture name change) improves clarity but may affect existing materials.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for uses of old anisotropy property names
rg "material_AnisotropyInfo|material_AnisotropyTexture"

Length of output: 1632

Comment on lines +47 to +50
material_Iridescence("Iridescence", Range(0, 1, 0.01)) = 0;
material_IridescenceIOR("IOR", Range(1, 5, 0.01)) = 1.3;
material_IridescenceRange("ThicknessRange", Vector2) = (100,400);
material_IridescenceThicknessTexture("ThicknessTexture", Texture2D);
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codebase verification

Incomplete iridescence property refactoring detected

The iridescence properties have been restructured in PBR.gs but the implementation hasn't been updated accordingly:

  • FragmentPBR.glsl still uses the old material_IridescenceInfo vec4 property which no longer exists
  • PBRMaterial.ts still references the old property via _iridescenceInfoProp
🔗 Analysis chain

Verify impact of iridescence property restructuring.

The iridescence properties have been significantly restructured:

  • material_IridescenceInfo split into separate properties
  • Added new material_IridescenceIOR and material_IridescenceRange
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for uses of old iridescence property
rg "material_IridescenceInfo"

Length of output: 872


Script:

#!/bin/bash
# Search for new iridescence properties
echo "=== Searching for new properties ==="
rg "material_Iridescence[^I]" -A 2
echo -e "\n=== Searching for PBRMaterial.ts changes ==="
rg "material_Iridescence" packages/core/src/material/PBRMaterial.ts -A 2

Length of output: 3605

@GuoLei1990 GuoLei1990 changed the title Sync 1.4 pbr editor props Enhancement ShaderLab PBR Jan 14, 2025
@GuoLei1990 GuoLei1990 added enhancement New feature or request ignore for release ignore for release labels Jan 14, 2025
@GuoLei1990 GuoLei1990 merged commit caa21ac into galacean:dev/1.4 Jan 14, 2025
9 checks passed
@coderabbitai coderabbitai bot mentioned this pull request Jan 14, 2025
3 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request ignore for release ignore for release
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants