#########################
Writing a Custom Material
#########################

.. toctree::
    :maxdepth: 1
    :titlesonly:
    :hidden:

    bk_bm_wcm/bk_bm_custom_builtin
    bk_bm_wcm/bk_bm_custom_custom
    bk_bm_wcm/bk_bm_custom_state
    bk_bm_wcm/bk_bm_custom_default_state
    bk_bm_wcm/bk_bm_custom_hw_platform


If none of the HOOPS Luminate built-in materials (:doc:`/book/subjects/bk_bm/bk_bm_using_built_in_luminate_materials`) suit you or if you want to create your own specific effects, the following pages are written for you. HOOPS Luminate is very flexible concerning material and shader programming and support a full range of customization from totally built-in materials to totally custom shaders either for GPU rendering or software shading.

A ``RED::IMaterial`` is composed of shaders (as explained in :doc:`/book/subjects/bk_bm/bk_bm_the_shading_pipeline`). 

This part of the book covers the following topics:

    * :doc:`/book/subjects/bk_bm/bk_bm_wcm/bk_bm_custom_builtin`: The first easiest way to built a custom material is by using the HOOPS Luminate built-in render shaders. The chapter gives a list of all of them.
    * :doc:`/book/subjects/bk_bm/bk_bm_wcm/bk_bm_custom_custom`: If none of the predefined shaders is adapted to your needs, the second choice is to write your own render shaders. The page explains how to do it in GPU and in software.
    * :doc:`/book/subjects/bk_bm/bk_bm_wcm/bk_bm_custom_state`: After reading this chapter you will be able to use a state shader to configure your shading pipeline. It describes the several functions of the ``RED::StateShader`` object.
    * :doc:`/book/subjects/bk_bm/bk_bm_wcm/bk_bm_custom_default_state`: Lists the default state shader blending and depth modes for each material pass.
    * :doc:`/book/subjects/bk_bm/bk_bm_wcm/bk_bm_custom_hw_platform`: This page defines the concept of hardware platform configurations for shaders.
