Garry's Mod Wiki

Revision Difference

render.SetLightmapTexture#517445

<function name="SetLightmapTexture" parent="render" type="libraryfunc"> <description> Sets the texture to be used as the lightmap in upcoming rendering operations. This is required when rendering meshes using a material with a lightmapped shader such as LightmappedGeneric. <rendercontext hook="false" type="3D"/> <rendercontext hook="false" type="2D"/> </description> <realm>Client</realm> <args> <arg name="tex" type="ITexture">The texture to be used as the lightmap.</arg> </args> </function> <example> <description>Creates a mesh with LightmappedGeneric material on it</description> <code> -- LightmappedGeneric material that we'll use for our mesh local meshMat = Material( "concrete/concretefloor001a" ) -- Mesh vertices (notice that it's not MeshVertex structure format, just something similar) -- Notice that we have 2 UV coordinates channels, one for texture, one for lightmap local meshVertices = { { pos = Vector( 0, 0, 0 ), u0 = 0, v0 = 0, u1 = 0, v1 = 0, n = Vector( 1, 0, 0 ) }, { pos = Vector( 0, 100, 0 ), u0 = 1, v0 = 0, u1 = 3, v1 = 0, n = Vector( 1, 0, 0 ) }, { pos = Vector( 0, 100, -100 ), u0 = 1, v0 = 1, u1 = 3, v1 = 3, n = Vector( 1, 0, 0 ) }, { pos = Vector( 0, 0, -100 ), u0 = 0, v0 = 1, u1 = 0, v1 = 3, n = Vector( 1, 0, 0 ) }, } -- Run this command while ingame to create the mesh at map origin concommand.Add( "meshtest", function() -- Creating a render target to be used as lightmap texture meshLightmap = GetRenderTarget( "test_mesh_lightmap", 128, 128, false ) -- Filling the lightmap texture with some stuff for visualization render.PushRenderTarget( meshLightmap ) cam.Start2D() -- Resetting lightmap to be monotone gray render.Clear( 128, 128, 128, 255 ) -- Drawing a dark rectangle render.SetColorMaterial() surface.SetDrawColor( 80, 80, 80, 255 ) surface.DrawRect( 32, 32, 64, 64 ) -- And some color text, why not! Lightmaps support RGB color draw.SimpleText( "This is lightmap", "DermaDefault", 64, 64, Color( 255, 0, 0, 255 ), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER ) cam.End2D() render.PopRenderTarget() -- Creating the mesh. Don't forget to pass the material you're gonna use with it! -- Shader of the material defines some features of the mesh, vertex structure -- specifically (LightmappedGeneric requires each vertex to store 2 UV channels, -- for instance. This is important in this case) myTestMesh = Mesh( meshMat ) -- Creating the mesh mesh.Begin( myTestMesh, MATERIAL_QUADS, 1 ) for i, vertex in pairs( meshVertices ) do mesh.Position( vertex.pos ) -- Texture coordinates go to channel 0 mesh.TexCoord( 0, vertex.u0, vertex.v0 ) -- Lightmap texture coordinates go to channel 1 mesh.TexCoord( 1, vertex.u1, vertex.v1 ) mesh.Normal( vertex.n ) mesh.AdvanceVertex() end mesh.End() end ) hook.Add( "PostDrawOpaqueRenderables", "LightmappedMeshTest", function() if myTestMesh and myTestMesh ~= NULL then render.SetMaterial( meshMat ) render.SetLightmapTexture( meshLightmap ) myTestMesh:Draw() end end ) </code> <output></output>⤶ <output><image src="LightmappedGenericMeshPreview.jpeg" alt="512px|thumb"/></output>⤶ </example>