def METHOD_NAME(
        nw,
        color=("palette", "desert"),
        random_seed=0,
        wet=False,
        wet_part=("uniform", 0.2, 0.25),
        *args,
        **kwargs
    ):
    nw.force_input_consistency()
    with FixedSeed(random_seed):
        position = (nw.new_node("ShaderNodeTexCoord", []), 3)
        assert(color is not None)
        if wet:
            position = nw.new_node('ShaderNodeNewGeometry')
            factor = nw.scalar_divide(nw.separate(position)[2], 3) # this needs to be consistent with value in coast.gin
            factor = nw.scalar_add(factor, -0.5, nw.new_node(Nodes.NoiseTexture, input_kwargs={"Scale": 0.1}))
            sand_color = nw.new_node(Nodes.ColorRamp, [factor])
            sand_color.color_ramp.elements[0].position = rg(wet_part)
            sand_color.color_ramp.elements[0].color = rg(("color_category", "wet_sand"))
            sand_color.color_ramp.elements[1].position = sand_color.color_ramp.elements[0].position + 0.11
            sand_color.color_ramp.elements[1].color = rg(("color_category", "dry_sand"))
            roughness = nw.new_node(Nodes.ColorRamp, [factor])
            roughness.color_ramp.elements[0].position = sand_color.color_ramp.elements[0].position / 2
            roughness.color_ramp.elements[0].color = (0.1, 0.1, 0.1, 0.1)
            roughness.color_ramp.elements[1].position = sand_color.color_ramp.elements[1].position
            roughness.color_ramp.elements[1].color = (1, 1, 1, 1)
        else:
            sand_color = tuple(rg(color))
            roughness = 1.0
        bsdf_sand = nw.new_node("ShaderNodeBsdfPrincipled", input_kwargs={
            "Base Color": sand_color,
            "Roughness": roughness,
        })
    return bsdf_sand