?how to SaveB3D Lightmapping Data
Blitz3D Forums/Blitz3D Programming/?how to SaveB3D Lightmapping Data
| ||
Ive Been making my own meshes for a tileset engine and want the ability to Export and lightmap if the user wishes So I use Jfk's SaveB3d Function To Export a multi surface Mesh Then LightMap This in SlimShady But I cant configure SaveB3d Function to Load in the Lightmap data For a Combined mesh Export Anybody got some code snippets showing multitex SaveB3d any Help welcome Thanks btw jfk cool tools :) |
| ||
Thanks. Well, SaveB3D doesn't LOAD anything, it will only save a Mesh. If you want to load a lightmapped Mesh and then save it with the SaveB3D Function, you first need to track down the Lightmap Texture as well. THis may be pretty easy, use the command GetBrushTexture with the second, optinal INDEX parameter. I think this would be: lightmaptex=GetBrushTexture(brush,1) ; use 0 or 1, 1 for LIghtmap, AFAIK lima_texfile$=texturename$(lightmaptex) Now that you know the texture file that is used for the lightmap as a second texture layer on each brush, you can modify the SaveB3D Function easily, have a look at the comments, and these lines: b3dBeginChunk( "TEXS" ) ; list all textures used by the mesh For i=1 To c_surfs b3dWriteString( c_tex_name$(i) ) ;texture file b3dWriteInt( 1 );flags b3dWriteInt( 2 );blend b3dWriteFloat( 0 );x in tex 0 (hu?) b3dWriteFloat( 0 );y in tex 0 b3dWriteFloat( 1 );x scale 1 b3dWriteFloat( 1 );y scale 1 b3dWriteFloat( 0 );rotation 0 Next You see, in the TEX chunk all textures are inserted. Basicly the TEX chunk lists all teyxtures that may be used by the mesh. The Function assumes that each surface has exactly one texture, so it only counts up to the number of surfaces and inserts the surface-brushes texture info for each surface. You may add an additional texture info block for the Lightmap. You may do this as the first block, or as the last block (pre or past the For loop), but it must be inside the TEX chunk. Something like: b3dWriteString( lima_file$ ) ;texture file b3dWriteInt( 1 );flags b3dWriteInt( 2 );blend - uh right now I don't remember exactly what blendmode needs to be used, but probably you have to try some modes b3dWriteFloat( 0 );x in tex 0 b3dWriteFloat( 0 );y in tex 0 b3dWriteFloat( 1 );x scale 1 b3dWriteFloat( 1 );y scale 1 b3dWriteFloat( 0 );rotation 0 (please note: use the right blend mode, "addition" or something) Now heres a number of BRUS chunk, each one defines a Brush. Some people use only one BRUS chunk and include all Bsushes inside, but they need to use the same number of Texture Layers for each Brush, even when Layers can be deactivated by using -1 as index, if I remember right. However, this Function uses a method that defines a BRUS chunk for each Brush, this way each Brush can have its individual number of Textures. If you have added the lightmap info block in the TEX chunk after the For loop, you could do it this way: For i=1 To c_surfs b3dBeginChunk( "BRUS" ) ; describe all brushes used by the mesh b3dWriteInt( 2 );number of textures per brush b3dWriteString( "brush"+(i-1) );brushname b3dWriteFloat( 1 );red b3dWriteFloat( 1 );green b3dWriteFloat( 1 );blue b3dWriteFloat( 1 );alpha b3dWriteFloat( 0 );shininess b3dWriteInt( 1 );blendmode b3dWriteInt( 1 );FX >>> lightmapped meshes usually are FX 1 b3dWriteInt( i-1 );used "material" texture index b3dWriteInt( c_surfs ); index of the lightmap b3dEndChunk();end of BRUS chunk Next Now the mesh still needs to know what to do with the lightmap, so you need to save the second UV Coords, in the Function it's already there, only remarked, so you only have to activate these two lines in the function WriteMESH( mesh ): ;;b3dWriteFloat( VertexU#( surf,j,1 ) ) ; lightmap uv ;;b3dWriteFloat( VertexV#( surf,j,1 ) ) ; lightmap uv plus chanche this line: b3dWriteInt( 1 );number of tex_coord sets to b3dWriteInt( 2 );number of tex_coord sets Now you should be pretty close to a working Mesh exporter that works with lightmaps- Additionally you learned something about the format. |
| ||
Thanks jfk think ive got to grips with it now |
| ||
Jfk Got that sorted But the Lightmap Texture is Being Placed on the same Uv as the Normal Texture is there Another Texture Detail that must be added for the lightmap texture Thanks for your help |
| ||
Just Hacked the mesh and checked Its deffo the Problem of it being asigned to the default Texturecoords Added Small Code after loading and the lightmap appeared correctly |