From 8f7331034f2ec4343bc638ae106162f11f78bf39 Mon Sep 17 00:00:00 2001 From: Daniele Bartolini Date: Fri, 20 Feb 2026 17:56:59 +0100 Subject: [PATCH 1/2] docs: add 'Shading Environment' --- docs/rendering/images/shading_environment.png | Bin 0 -> 21585 bytes docs/rendering/index.rst | 1 + docs/rendering/lighting.rst | 2 +- docs/rendering/shading_environment.rst | 77 ++++++++++++++++++ 4 files changed, 79 insertions(+), 1 deletion(-) create mode 100644 docs/rendering/images/shading_environment.png create mode 100644 docs/rendering/shading_environment.rst diff --git a/docs/rendering/images/shading_environment.png b/docs/rendering/images/shading_environment.png new file mode 100644 index 0000000000000000000000000000000000000000..def1567a561da57b018db5ef0accd463919cb919 GIT binary patch literal 21585 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 ^Zo6u_Rb=nwB3h)xowhLduCQ86=?IT?R&;2 z$~n<&D@)))M&c`K#HF}cjmYeYNHKj@#H8rnM>lGeFY0!RI=%6&@qmkr-$tZb^a0qD z7LXucKvEH~DgUf9IO&d^Mm3>FWiYfFtir^B-}z9nR#&yeN9i>_L|iya7Gmewa4x?i*jxH|@xE^#jo={8oZvwjOP=^o~wUzmtQnI}>d z4%#8sxzvLYF`Fyf0w7f~ZpzBoXsIU+cACg;&$>w2N9p0IFQ{43;n>#G_A;2|x=(-a zyjWu2%<9KXE@fuj@=zP& zS^2w{Lacl98gbipaF?_jZJM#XMf<)}S39Tm@VkP$hb{EV&*Mpz9E*imc2DHT#*BV6 z+sfO|WG`IM(wn9E;8S1W1~#H&rKkMJT~d58o~G7!J+HXs&!#W%mD><87Z(n7VO)Fm zW{#+U1DEm22BF&4`bcat*cTxzQHOCeirUwce#%5;5gVOA&-h*J{C>vF)lHod_d_v=={*g$cWSSKI~3Iy?^tl*)9#gW1M2o zAXGvM8K0NONp%Ah6jxfxLQSsAV+?mBx(vHY5e0UdEone7W+KP|lz*Z~iH9@)YvX8t zqUPLs@E*N3Xn_0*!N$|Eo8-?+L`vw}h&HcC%XATh6+af%2iE*>WsH1#_d;gHL;ACs zAl-H4WmWL8+?i$D_owARDaojdr~+EK0gF*p~4Q8 z&Rm*^d?QQ+f{JC0{qoW7YX)p(xl$aR6hwJ6*^QMA;Q~{aNL}l$$t4EgSLXdL7hHdn z)gl0dM}!$Al7+|J;k+{6YF}B%cn72EZqIgs-8;uNOplk$X}b;r$5w}RoOT6Bakwab zhBOho?LPA^#M_h~NnZ3Tr{I6Y7EK09e3=^@i`QH9M1htEgi!UH`gzw$u19Z3WF%fT z$1kOFPYU^G+>0N{N&Uk|{}Vn?p-ehuN=?mn;68rY>R@^D~S7At&hAmaiaJAXq)vy6!71!eaQ^zgG-g-GaM8hv~>B+J=5?ABAx zPwiFx)<)LXHvJtpfK&|zR#d-KS92xff{NL16mb-Fsncw0JjoG)GN;rU*7K ze7{q%St`3)dQeIpLM!wl+bb;M4YLK%?J{ry5Mo$oYz@INfqr)!-Fa0*#wCx_Ao7c| zlt*IwEsKNx2gV73Z7G;&eibXbK0i3=cIya;us==P(zAQ z;p@EtQcLRCZ7c9i0oo^lScfT@_c3YUI?hVNs$aPXA%tsJs&jgirKgybF#x)JY7L?E zT;IE}(DhG1FGRNwKFRy`^7pD>!#aSUwO}>Aj&Dg^6LPmPTE~ z*k0^jKc830@kt5d>n}T*=0w+{uA^Swvs4-yGGjB#@a=nTkh303BP!lTDKi6)+>3^g zE$YcoAJpJZ$xxfQ2ppP`)O<+Z!)Q@hOrfis%mS*_<|uc+ClVkt2Slcwmn;K8=S`ru^@ z0tRSNgD8zFe|S82xt198`9a2JP6E%djkuG*=*36I&4oFLDdEvl z4mXdxqt#VP=eD3cZqxpsk;Yu1C|2wAC2yhn<8teqw~$bO7c$o@sSL?(C$s8TkC3=+ zwXIpLK`o&JXax+=3M#PgNnlg-^_3!SpwCx6rO8u#lh~TPg{=i3Po=p`vv;?mn{Mvy z?K$M!!Y>MVq1MaQ4D_h|#9r@m@~A%IHjt#7l=|@Yh+*&IBSw;kl-S~Ma?mhAxK?cm z9}4!TJJU8$j@>6-GE_i4yGuW-jag>pckA3r9+uA?c!!tZof-3$?}(a^qHBMaO|nw% ze-l$PbQlc)1tEGCOU4CYbfhxShiv@({K=w#uN0Qgo93O%kA0KH)pPBk7*^zvx}jk* z>@7fE-Nb}=Fu{{j^0k`i;v|J6UOUWJMgqRZ=DTSAze&Q@)iuqJJy(6Vh9N|0PZBLP Lebq{3oA7@Ds!Hx^ literal 0 HcmV?d00001 diff --git a/docs/rendering/index.rst b/docs/rendering/index.rst index 150a50d74..980b23ccb 100644 --- a/docs/rendering/index.rst +++ b/docs/rendering/index.rst @@ -6,3 +6,4 @@ Rendering :maxdepth: 2 lighting + shading_environment diff --git a/docs/rendering/lighting.rst b/docs/rendering/lighting.rst index f359e16ae..e42111ca7 100644 --- a/docs/rendering/lighting.rst +++ b/docs/rendering/lighting.rst @@ -83,4 +83,4 @@ Crown automatically adds an implicit skydome Unit to every new Level created with the :ref:`Level Editor `. It is rendered on the current camera's far plane and is always centered to it, so it appears infinitely distant and does not shift as the camera moves. Its texture and intensity are -configured via the :ref:`Shading Environment`. +configured via the :ref:`Shading Environment `. diff --git a/docs/rendering/shading_environment.rst b/docs/rendering/shading_environment.rst new file mode 100644 index 000000000..d4c4ce785 --- /dev/null +++ b/docs/rendering/shading_environment.rst @@ -0,0 +1,77 @@ +=================== +Shading Environment +=================== + +The shading environment is a regular :ref:`unit ` that groups +components controlling global rendering features. Crown uses the properties +defined in this unit to drive many aspects of scene rendering. + +.. figure:: images/shading_environment.png + :align: center + + The Shading Environment unit with some of its components shown in the Inspector. + +Custom Shading Environment +========================== + +Every level must contain exactly one shading environment unit named +``shading_environment``. When you create a new level with the :ref:`Level +Editor`, Crown inserts a default shading environment unit for that level. + +Because the shading environment is a Unit, you can edit its components in the +Inspector and :ref:`save the unit as a prefab` for +reuse in other levels. + +Default components +================== + +Crown provides a set of components commonly attached to the shading +environment. These components establish the scene base look and control +post-processing effects. + +Global Lighting +--------------- + +The Global Lighting component controls the :ref:`Skydome` and ambient light +contribution: + +* ``Skydome Map``: equirectangular projection texture used to render the skydome +* ``Skydome Intensity``: multiplier applied to the skydome texture to boost or + soften its contribution +* ``Ambient Color``: base color added to objects when direct lighting is + absent + +Fog +--- + +The Fog component simulates atmospheric scattering between the camera and +shaded objects: + +* ``Color``: fog base color +* ``Density``: overall fog strength; higher values make distant objects appear + foggier +* ``Range Min`` / ``Range Max``: distances from the camera where fog starts + and ends +* ``Sun Blend``: mixes the :ref:`sun ` color into the fog + (0 = no sun influence, 1 = fog color replaced by sun color) +* ``Enabled``: toggle the fog simulation + +Bloom +----- + +The Bloom component adds glow around very bright parts of the image. + +* ``Weight``: blending weight of the bloom contribution (0 = no bloom contribution, 1 = image is replaced by bloom) +* ``Intensity``: bloom brightness +* ``Enabled``: toggle the effect + +Tonemap +------- + +The Tonemap component maps the renderer's HDR output to the displayable color +range of the monitor. + +* ``Gamma``: no complex tonemapping, only gamma correction +* ``Reinhard`` +* ``Filmic`` +* ``ACES`` From c16e7f7f98acd5654e7e557d785a3f8f60ec6352 Mon Sep 17 00:00:00 2001 From: Daniele Bartolini Date: Fri, 20 Feb 2026 17:57:39 +0100 Subject: [PATCH 2/2] docs: add 'Materials' --- docs/rendering/images/materials.png | Bin 0 -> 19287 bytes .../images/mesh_renderer_material.svg | 56 +++++++++++++++++ docs/rendering/index.rst | 1 + docs/rendering/materials.rst | 59 ++++++++++++++++++ 4 files changed, 116 insertions(+) create mode 100644 docs/rendering/images/materials.png create mode 100644 docs/rendering/images/mesh_renderer_material.svg create mode 100644 docs/rendering/materials.rst diff --git a/docs/rendering/images/materials.png b/docs/rendering/images/materials.png new file mode 100644 index 0000000000000000000000000000000000000000..dbbd3f793bb3cabb3c1679d2da15b63576f5c6a1 GIT binary patch literal 19287 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 RF9TPo13pLg*M4(4<3AfyDscb+ literal 0 HcmV?d00001 diff --git a/docs/rendering/images/mesh_renderer_material.svg b/docs/rendering/images/mesh_renderer_material.svg new file mode 100644 index 000000000..e14be0ee5 --- /dev/null +++ b/docs/rendering/images/mesh_renderer_material.svg @@ -0,0 +1,56 @@ + + + + + + + + + + + diff --git a/docs/rendering/index.rst b/docs/rendering/index.rst index 980b23ccb..9da5af0e8 100644 --- a/docs/rendering/index.rst +++ b/docs/rendering/index.rst @@ -6,4 +6,5 @@ Rendering :maxdepth: 2 lighting + materials shading_environment diff --git a/docs/rendering/materials.rst b/docs/rendering/materials.rst new file mode 100644 index 000000000..f56248c5f --- /dev/null +++ b/docs/rendering/materials.rst @@ -0,0 +1,59 @@ +========= +Materials +========= + +Materials in Crown are resources with the ``.material`` extension. They define +the shading (i.e. the visual appearance) of objects in the scene. + +.. figure:: images/materials.png + :align: center + + Some materials displayed in the Project Browser. + +At the technical level, a material binds a shader together with its options +and parameters (uniforms and samplers). For example, the built-in +``core/units/primitive`` material uses the shader named ``mesh`` and assigns +values appropriate to primitive objects to all uniforms that shader exposes. + +Creating Materials +================== + +Materials are normally created indirectly by the :ref:`importers +` when you bring in external resources. + +For instance: + +* Importing a 3D scene automatically generates the required ``.material`` + resources +* Importing sprites also produces associated material resources + +You can also create standalone materials directly in the :ref:`Level Editor +`: + +1. Open the :ref:`Project Browser` +2. Right-click inside the target folder +3. Choose ``New Material...`` +4. Give it a unique name and confirm + +Assigning Materials to Units +============================ + +Materials are assigned to units through their rendering components. The ``Mesh +Renderer`` component for example exposes a ``Material`` property. + +.. figure:: images/mesh_renderer_material.svg + :align: center + + The Material selector in the Mesh Renderer component. + +Click the folder icon next to the material's name to open the Material Chooser +and pick the desired material from the list. + +You can also assign materials programmatically at runtime via +the :ref:`RenderWorld` Lua API. + +Modifying Material properties +============================= + +Once a material is assigned, you can modify its properties dynamically from +Lua scripts using the :ref:`Material` API.