From Valve Developer Community
Revision as of 13:01, 26 April 2011 by Killer89 (talk | contribs) ("rendered" is more proper term than "drawn" on note #1.)

Jump to: navigation, search
Projecting a colourful texture.
Env_projectedtextures allow for self-shadows, shadow-receivers, and properly oriented and proportioned shadows. Two of these entities are currently being used in this scene. After "grain" fix

env_projectedtexture is a point entity available in all Orange Box games. It creates a dynamic shadow-mapping light that affects all objects in the world. It is used to create the flashlights in Source 2007, Source 2009 and Left 4 Dead engine games.

As expected, projected textures have been improved in Portal 2. Light no longer bleeds around objects and shadows appear to be more accurate and precise. In addition, more flashlight ConVars are available (try find r_flashlight in the console). However, Portal 2 never has (nor can have) more than one active at any given time.

Note:Shadows are only rendered when the user is running with "High" shadow detail.
Note:Portal 2 does not allow more than one env_projectedtexture, if one is activated while another is already on, it will disable the previous one.
Note:In multiplayer, mp_flashlight and mat_flashlight must be set to 1 for flashlights to work; by default, these ConVars are disabled in Team Fortress 2.
Bug: Does not accept a configurable texture value from Hammer - will always default to the flashlight. You must use the SpotlightTexture input or use the code fix available on the Bug Fixes page.
Bug: Models will not receive their own shadows correctly unless using $bumpmap; even a flat bump map is suffice.
Bug: Viewmodels won't receive light or shadows from projected textures(Not even in Portal 2). See the code fix available on the Bug Fixes page.
Bug: Causes issues if it overlaps a prop_portal from Portal 1, however this is fixed in Portal 2

Bug fixes

See env_projectedtexture/fixes.


target <string>
The entity will rotate to point at its target, no matter where it is in the world. See also lightonlytarget.
Bug: Does not work with stock SDK code. See Env_projectedtexture/fixes#Fixing targeting.
FOV <float>
The angle at which the texture is projected. The projection is square, but the texture can make it appear of any shape.
Remember the default Player FOV is 75°.
NearZ <float>
Near Z for projected texture. Default value is 4.0.
Objects closer than this will not receive the projection.
FarZ <float>
Far Z for projected texture. Default value is 750.0.
Objects beyond this distance will not receive the projection. Think of it as the range limit.
Enable Shadows <bool>
Should I cast shadows?
Shadow Quality <bool>
Quality of shadows (To do: what's the difference?)
Light Only Target <bool>
Should I light only the entity that is my target? The world will still be lit.
Light World <bool>
Should I light the world?
Camera Space <bool>
Display relative to player's view. Breaks things horribly unless the entity moves with the player.
Light Color <color255>
Tint of projected texture.
texturename <VTF/string>
Sets the current projected texture associated with this entity.
Bug: Does not work with stock SDK code. See Env_projectedtexture/fixes#Fix configurable texture value in Hammer.
Bug: KeyValue not recognised by Hammer as it is not in the base FGD. Value must be set manually.


Parent (parentname) <targetname>
Specifies a movement parent. An entity will maintain its initial offset from its parent. An attachment point can be added to the end of the name, separated by a comma.
Bug: Does not work with stock SDK code. See Env_projectedtexture/fixes#Fixing Parenting.
Note:Does work in Portal 2


Pitch Yaw Roll (Y Z X) (angles) <angle>
This entity's orientation in the world. Pitch is rotation around the Y axis, yaw is the rotation around the Z axis, roll is the rotation around the X axis.


Name (targetname) <string>
The targetname that other entities refer to this entity by.
Entity Scripts (vscripts) <scriptlist> (New with Left 4 Dead 2)
Space delimited list of VScript files (without file extension) that are executed after all entities have spawned. The scripts are all executed in the same script scope, later ones overwriting any identical variables and functions.
Script think function (thinkfunction) <string> (New with Left 4 Dead 2)
Name of a function in this entity's script which will be called automatically every 100 milliseconds (ten times a second) for the duration of the script. It can be used to create timers or to simulate autonomous behavior. The return value (if present) will set the time until the next call.
Note:Try to avoid expensive operations in this function, as it may cause performance problems.


  • Enabled


These inputs are accepted by the entity but not known to Hammer:

target <string>
Specify a new target entity to point at.
cameraspace <bool>
See above keyvalues.
LightOnlyTarget <bool>
See above keyvalues.
Bug: Non-functional.
LightWorld <bool>
See above keyvalues.
Bug: Cannot be re-enabled.
EnableShadows <bool>
See above keyvalues.
Ambient <float>
Allows for an ambiance light, much like the shadow color for it.
SpotlightTexture <VTF/string>
A VTF file (not VMT), relative to /materials.
SetPattern <string>
Much like the light's custom appearance keyvalue. A string of characters, like a sequence of piano keys, that define a pattern of brightness. a is dark and z is full intensity. New with Portal 2.

These inputs are known to Hammer:

Enable or disable the light.
FOV <float>
See lightfov keyvalue above.


SetParent <string>
Move with this entity. See Entity Hierarchy (parenting).
SetParentAttachment <string>
Change this entity to attach to a specific attachment point on its parent. The entity will teleport so that the position of its root bone matches that of the attachment. Entities must be parented before being sent this input.
SetParentAttachmentMaintainOffset <string>
As above, but without teleporting. The entity retains its position relative to the attachment at the time of the input being received.
Removes this entity from the the movement hierarchy, leaving it free to move independently.


Removes this entity and any entities parented to it from the world.
Functions the same as Kill, although this entity and any entities parented to it are killed on the same frame, being marginally faster than Kill.
AddOutput <string>
Evaluates a keyvalue/output on this entity. It can be potentially very dangerous, use with care.
Format: <key> <value>
Format: <output name> <targetname>:<inputname>:<parameter>:<delay>:<max times to fire, -1 means infinite>
FireUser1 to FireUser4
Fire the OnUser outputs; see User Inputs and Outputs.
Use  !FGD
Same as a player invoking +use; may not do anything. Can also be invoked by creating an output that does not specify an input.
This input is not included in Valve's FGDs.
RunScriptFile <script> (New with Left 4 Dead 2)
Execute a VScript file from disk, without file extension. The script contents are merged with the script scope of the receiving entity.
RunScriptCode <string> (New with Left 4 Dead 2)
Execute a string of VScript source code in the scope of the entity receiving the input. String quotation may be needed when fired via console.
Bug: In <Left 4 Dead 2>, the code is executed in the script scope of the entity that fires the output, not the one receiving the input.
Warning: Never try to pass string parameters to a script function with this input. It will corrupt the VMF structure because of the nested quotation marks, which then must be removed manually with a text editor.
CallScriptFunction <string> (New with Left 4 Dead 2) !FGD
Execute a VScript function in the scope of the receiving entity.
SetLocalOrigin <coordinates> (New with Alien Swarm) !FGD
Send this entity to a spot in the map. If the entity is parented to something, it will be offset from the parent by this amount.
SetLocalAngles <angles> (New with Alien Swarm) !FGD
Set this entity's angles.



OnUser1 to OnUser4
These Outputs each fire in response to the firing of the like-numbered FireUser1 to FireUser4 Input; see User Inputs and Outputs.
OnKilled  (Only in the Left 4 Dead series)
This Output fires when the entity is killed and removed from the game.