Revision Difference
render.DepthRange#528583
<function name="DepthRange" parent="render" type="libraryfunc">
<description>Set's the depth range of the upcoming render.</description>
<realm>Client</realm>
<args>
<arg name="depthmin" type="number">The minimum depth of the upcoming render. 0.0 = render normally; 1.0 = render nothing</arg>
<arg name="depthmax" type="number">The maximum depth of the upcoming render. 0.0 = render everything (through walls); 1.0 = render normally</arg>
</args>
</function>
<example>
<description>Perform a downward screen wipe effect on all opaque objects once the client connects.</description>
<code>
local depthmin = 1.0
function GM:PreDrawOpaqueRenderables(bDrawingDepth, bDrawingSkybox)
render.DepthRange(depthmin, 1.0)
if(depthmin > 0.0) then
depthmin = depthmin - 0.001
end
end
</code>
</example>
<example>
<description>Same effect as above but with a dark shadow skin present where the model is being drawn.</description>
<code>
local depthmin = 1.0
local spawn_copies = {} -- The shadow copies
function GM:PreDrawOpaqueRenderables(bDrawingDepth, bDrawingSkybox)
render.DepthRange(depthmin, 1.0)
if(!spawn_copies) then return false end
if(depthmin > 0.0) then
depthmin = depthmin - 0.001
else
local alpha = 0
local valid_copies = 0
-- Fade out the shadow copies and remove them
for _, spawncopy in pairs(spawn_copies) do
if(IsValid(spawncopy)) then
alpha = spawncopy:GetColor().a
if(alpha > 0) then
spawncopy:SetColor(Color(255, 255, 255, alpha-1))
else
spawncopy:Remove()
end
valid_copies = valid_copies + 1
end
end
-- Nullify table since we aren't using it any more
if(valid_copies == 0) then
spawn_copies = nil
end
end
end
function GM:OnEntityCreated(ent)
if(!spawn_copies) then return end
-- Prevents infinite loop and other errors
if(ent:GetClass() != "class C_BaseFlex" &&
ent:GetRenderGroup() == RENDERGROUP_OPAQUE &&
ent:GetClass() != "gmod_hands") then
local mdl = ent:GetModel()
-- Check that the entity is a model and not a brush
if(mdl && string.find(mdl, ".mdl")) then
local spawncopy = ClientsideModel(mdl)
-- A material with $ignorez set to 1 works best here
spawncopy:SetMaterial("models/overlay_rendertarget")
spawncopy:AddEffects(EF_BONEMERGE)
spawncopy:SetParent(ent)
spawncopy:SetRenderMode(RENDERMODE_TRANSALPHA)
spawncopy:SetColor(Color(255, 255, 255, 92))
table.insert(spawn_copies, spawncopy)
end
end
end
</code>
<output><image src="DepthRange_example.webm"/></output>⤶
<output><upload src="DepthRange_example.webm" name="Example" /></output>⤶
</example>