user: Describe ShaderNodeBsdfPrincipled(ShaderNode) from the Blender manual or Python API, including usage steps and snippets.

assistant: # ShaderNodeBsdfPrincipled(ShaderNode)

base classes — [`bpy_struct`](bpy.types.bpy_struct.html#bpy.types.bpy_struct "bpy.types.bpy_struct"), [`Node`](bpy.types.Node.html#bpy.types.Node "bpy.types.Node"), [`NodeInternal`](bpy.types.NodeInternal.html#bpy.types.NodeInternal "bpy.types.NodeInternal"), [`ShaderNode`](bpy.types.ShaderNode.html#bpy.types.ShaderNode "bpy.types.ShaderNode")

*class* bpy.types.ShaderNodeBsdfPrincipled(*ShaderNode*)
:   Physically-based, easy-to-use shader for rendering surface materials, based on the OpenPBR model

    distribution
    :   Light scattering distribution on rough surface

        - `GGX`
          GGX.
        - `MULTI_GGX`
          Multiscatter GGX – GGX with additional correction to account for multiple scattering, preserve energy and prevent unexpected darkening at high roughness.

        Type:
        :   enum in [`'GGX'`, `'MULTI_GGX'`], default `'GGX'`

    subsurface_method
    :   Method for rendering subsurface scattering

        - `BURLEY`
          Christensen-Burley – Approximation to physically based volume scattering.
        - `RANDOM_WALK`
          Random Walk – Volumetric approximation to physically based volume scattering, using the scattering radius as specified.
        - `RANDOM_WALK_SKIN`
          Random Walk (Skin) – Volumetric approximation to physically based volume scattering, with scattering radius automatically adjusted to match color textures. Designed for skin shading..

        Type:
        :   enum in [`'BURLEY'`, `'RANDOM_WALK'`, `'RANDOM_WALK_SKIN'`], default `'BURLEY'`

    *classmethod* is_registered_node_type()
    :   True if a registered node type

        Returns:
        :   Result

        Return type:
        :   boolean

    *classmethod* input_template(*index*)
    :   Input socket template

        Parameters:
        :   **index** (*int in* *[**0**,* *inf**]*) – Index

        Returns:
        :   result

        Return type:
        :   [`NodeInternalSocketTemplate`](bpy.types.NodeInternalSocketTemplate.html#bpy.types.NodeInternalSocketTemplate "bpy.types.NodeInternalSocketTemplate")

    *classmethod* output_template(*index*)
    :   Output socket template

        Parameters:
        :   **index** (*int in* *[**0**,* *inf**]*) – Index

        Returns:
        :   result

        Return type:
        :   [`NodeInternalSocketTemplate`](bpy.types.NodeInternalSocketTemplate.html#bpy.types.NodeInternalSocketTemplate "bpy.types.NodeInternalSocketTemplate")

    *classmethod* bl_rna_get_subclass(*id*, *default=None*, */*)
    :   Parameters:
        :   **id** (*str*) – The RNA type identifier.

        Returns:
        :   The RNA type or default when not found.

        Return type:
        :   [`bpy.types.Struct`](bpy.types.Struct.html#bpy.types.Struct "bpy.types.Struct") subclass

    *classmethod* bl_rna_get_subclass_py(*id*, *default=None*, */*)
    :   Parameters:
        :   **id** (*str*) – The RNA type identifier.

        Returns:
        :   The class or default when not found.

        Return type:
        :   type