User Problem
The material editor is designed to only show properties that are relevant for the material given its current feature set. In a similar fashion, the material will only serialize properties that are relevant given its current feature set.
This leads to settings that are pass-specific (such as u_ShadowClippingThreshold for the SHADOW_PASS feature), to not be displayed in the material editor, although they should be exposed to the user somehow.
Feature Description
The multi-compile/variant system should be decoupled to support 2 similar yet different systems:
The SHADOW_PASS, which is currently a feature, should be known and recognized on the engine side as a "pass", this way, pass-related settings could still be displayed in the material editor, potentially under a different category, and still serialized. Passes should not be displayed in the feature list.
Features & passes could be declared as follows:
#pass SHADOW_PASS
#feature PARALLAX_MAPPING
#feature ALPHA_CLIPPING
#feature ALPHA_DITHERING
#feature NORMAL_MAPPING
#feature DISTANCE_FADE
#feature SPECULAR_WORKFLOW
#feature GAMMA_CORRECTION
The rest of the code would remain unchanged.
Screenshots

User Problem
The material editor is designed to only show properties that are relevant for the material given its current feature set. In a similar fashion, the material will only serialize properties that are relevant given its current feature set.
This leads to settings that are pass-specific (such as
u_ShadowClippingThresholdfor theSHADOW_PASSfeature), to not be displayed in the material editor, although they should be exposed to the user somehow.Feature Description
The multi-compile/variant system should be decoupled to support 2 similar yet different systems:
The
SHADOW_PASS, which is currently a feature, should be known and recognized on the engine side as a "pass", this way, pass-related settings could still be displayed in the material editor, potentially under a different category, and still serialized. Passes should not be displayed in the feature list.Features & passes could be declared as follows:
The rest of the code would remain unchanged.
Screenshots