Env cascade light: Difference between revisions
MyGamepedia (talk | contribs) (Added info about CSM volumes (Black Mesa game feature). There were no documentation about this. I've spent many time and attempts to turn out what each thing does and how to use.) |
MyGamepedia (talk | contribs) |
||
Line 116: | Line 116: | ||
</gallery> | </gallery> | ||
In this way, we get results that are identical to the result from {{code|SetCSMVolume}} input. | In this way, we get results that are identical to the result from {{code|SetCSMVolume}} input. | ||
{{important|All this features fully disabled with ridiculous value for setting {{code|Sun Shadow Quality}} (or {{command|cl_csm_qualitymode|4}}).}} | |||
== See also == | == See also == | ||
Revision as of 07:19, 5 July 2024



It casts an extremely accurate shadow map via the tools/skybox
texture, acting as a real-time variation of light_environment. This form of lighting is known as Cascaded Shadow Maps, or CSM, which works by rendering very detailed shadow maps which becomes a lower and lower resolution depending on the distance the viewer is from the surface, similar to mipmaps. Some games automatically add this entity to the map, but it can be placed manually as well.


- Although you can toggle this entity, you can have only one env_cascade_light in your level. Other will not work.
- In
, shadows will be very faint if the map hasn't been compiled with HDR.
- In
, Lightstyles will break when this entity exists. [todo tested in ?]

- You still need to have a light_environment in your map as well to create lightmap based lighting, which is not done by this entity.
Source 2013 doesn't have this entity, but there is an attempt of porting it.
Alien Swarm Deferred's counterpart to this entity is Light_deferred_global(also in
)
- You alternatively can implement
Lambda Wars's Deferred lighting as it is the most robust implementation currently being available to the public.
Represented by class
CCascadeLight
.
Keyvalues
- Light Color (color) <color255>
- This is the color of the sunlight. For
, the color is automatically copied from the light_environment.
- Max shadow distance (maxshadowdistance) <float>
- Maximum dynamic shadow distance. Higher values are slower, default on PC is 400 units.
- Use light_environment's angles (uselightenvangles) <boolean>
- If true, the CSM shadow angles are automatically taken from a light_environment's angles. If false, this entity's Pitch Yaw Roll is used.
- LightRadius1 (LightRadius1) to LightRadius3 <float> (only in
)
- Used for controlling shadow softness in cascades 1, 2, and 3.
- Depthbias1 (Depthbias1) to Depthbias3 <float> (only in
)
- DepthBias for cascades 1, 2, and 3.
- Slopescaledepthbias1 (Slopescaledepthbias1) to Slopescaledepthbias3 <float> (only in
)
- Slope DepthBias for cascades 1, 2, and 3.
- ViewModelDepthbias (ViewModelDepthbias) <float> (only in
)
- DepthBias for viewmodel cascade.
- ViewModelSlopescaledepthbias (ViewModelSlopescaledepthbias) <float> (only in
)
- DepthBias for viewmodel cascade.
- CSM_Volume_Mode (CSMVolumeMode) <choices> (only in
)
- Use Manual mode for better quality and performance. In near future Auto mode will be removed from the game.
- 0: Auto: Static cache will update once every 10 frames (approx) covering max shadow distance or whole map around player.
- 1: Manual : Static cache area coverage and updates are managed via CSM Volumes' I/O.
- Start Disabled (StartDisabled) <boolean>
- Stay dormant until activated (with the
Enable
input).
Inputs
- SetAngles <string >
- Sets the direction shadows cast in.

- LightColor <color255 >
- Changes color of the sunlight.



![]() ![]() ![]()
|
LightColorScale!FGD- Deprecated.
Boosts the color of the sunlight. Non-functional, only resets the Light Color.
- SetCSMVolumeViaCSMVolumeEntity <targetname > (only in
)
- Set CSM Volume to CSM Volume Entity.
- Disable <void>
- Disable this entity.



- Enable <void>
- Enable this entity.



Outputs
Cascade Shadow Mapping Volumes
Black Mesa provides very powerful optimization feature, called Cascade Shadow Mapping Volumes (CSM volumes for short). Initially, there were 2 different modes for rendering shadow maps for static cascade, which type to use - determines the value from the property, the property is CSM_Volume_Mode. CSM volumes allow you to automatically limit rendering of cascade shadows, swap areas there you want to have static cascade shadows (this is cascade shadows from static props with world geometry (brush entities as well)) and also change value for
Max shadow distance property.
CSM_Volume_Mode property can have 2 different values:
- Auto - you will not be able to swap areas there you want to have static cascade shadows, value from Max shadow distance property never changes, static cascade shadows will also disappear with dynamic cascade shadows. Good enough if map isn't very open space or if it's not too big.
- Manual - static cascade shadows rendering areas depends on values from the inputs, value from Max shadow distance property also depends on values from the inputs. This allows you to save many FPS for maps with big open space areas (especially for Xen levels).
There are 3 different inputs for this feature, which create 3 different ways to use CSM volumes.
The first input is SetCSMVolume. This input changes CSM volume and sets min and max bounds via trigger_csm_volume entity. The size of trigger_csm_volume entity decides the size of the world or level to be rendered into CSM shadow maps. To use it, specify the area in which you want to set CSM volume via trigger_csm_volume entity (also works with trigger_multiple and other triggers for some reason). In trigger_csm_volume make the following output:
My output | Target entity | Target input | Parameter | Delay | Only once | Comments | ||
![]() |
OnStartTouch | NameOfEnvCascadeLight | SetCSMVolume | 0.00 | No | Instead of NameOfEnvCascadeLight use name of your env_cascade_light for which you want to set volume. | ||
In this way, static cascade shadows will not appear outside of min and max bounds.
The second input is SetCSMVolumeToSceneBounds. It resets CSM volume to scene bounds. To use it, use the steps from the previous way, but replace SetCSMVolume input with SetCSMVolumeToSceneBounds input.
In this way, static cascade shadows never disappear, but dynamic still disappear.
The third input and the last way is SetCSMVolumeViaCSMVolumeEntity. It does the same thing that does SetCSMVolume, but instead of trigger_csm_volume you are using env_cascade_volume entity. This way is deprecated, but still can be used in some very rare cases. env_cascade_volume is disabled in original FGD, you need to find line 3169
and uncomment the code (or just use Enhanced Black Mesa FGD). The next step is to place the entity, give a name and set values for RadiusX, RadiusY and RadiusZ properties. What values to set to have required results ? Image that the entity position is brush center, and the values for the properties is the values what you see in 2D Hammer window while some brush entity is selected. The last step is to add output for entity that will set CSM volume is this they, this can be trigger or any other entity. SetCSMVolumeViaCSMVolumeEntity requires parameter to work, the parameter is the name of env_cascade_volume which we set up early.
In this way, we get results that are identical to the result from SetCSMVolume input.

See also
- light_environment
- Shadow_control
- env_sun
- Skybox Basics
- Skybox lighting
- Advanced Lighting
- Effect flags (dynamic light effects)
- newLight_Dir
- newLight_Point
- newLight_Spot
- NewLights_settings
- New_Specular
- light_deferred
- light_deferred_global
External links
- BlackMesa XenEngine: Part3 – CSM 2.0 (page from Black Mesa developer about their own CSM implementation)
- BlackMesa XenEngine: Part2 – How a Frame is Rendered (page from Black Mesa developer about new graphics features)
- BlackMesa XenEngine: Part1 – Heavily Modified Source Engine (page from Black Mesa developer about Black Mesa engine, better known as Xengine)