Pande Posted December 31, 2017 Posted December 31, 2017 My first python script, took a while to bugfix it and get it working. It's WIP as I'd like to convert it to a blender Addon, in which I can let the user define things like scale, a few parameters to control the 4th vertex production, etc. Atm, it generates trisoup so its great for making terrain. You could import a height map into blender and displace a subdivided plane for a quick 'easygen' like terrain. Or you can sculpt out something. Set blender's grid to metric centimeters. 1 meter in blender will now be 64 units in radiant.This is a good size for a terrain triangle, I wouldn't go much smaller than that overall, just in areas of intense detail (yes, we can have intense detail now! ) The brush generated is a 4 sided prism. I chose this because you can edit the vertices of surrounding terrain tris very easily within Radiant without worrying about breaking the brush. The 4th vertex is positioned at the apex of the triangle and shifted back along the normal. It is controlled by the 'depth' variable in the script. import bpy import bmesh bpy.ops.object.mode_set(mode='OBJECT') bpy.ops.object.mode_set(mode='EDIT') bpy.ops.mesh.select_mode(type='FACE') obj = bpy.context.active_object mesh = obj.data bm = bmesh.new() bm.from_mesh(mesh) bm.normal_update() rounding = '.0f' depth = 8 f = open("export_to_trisoup.map", "w") f.write('// entity 0\n{\n"classname" "worldspawn"\n') brush = 0 e = [] for face in mesh.polygons: f.write("// brush %s \n{\n" % brush) brush += 1 normal_x = face.normal.x; normal_y = face.normal.y; normal_z = face.normal.z center_x = face.center.x; center_y = face.center.y; center_z = face.center.z vertices = face.vertices[:] v = [] for vert in vertices: v.append(format(mesh.vertices[vert].co.x, rounding) ) v.append(format(mesh.vertices[vert].co.y, rounding) ) v.append(format(mesh.vertices[vert].co.z, rounding) ) e = format(center_x - normal_x * depth, rounding), format(center_y - normal_y * depth, rounding), format(center_z - normal_z * depth, rounding) f.write('( {0} {1} {2} ) ( {3} {4} {5} ) ( {6} {7} {8} ) system/clip 0 0 0 0.1 0.1 0 0 0\n'.format (v[3],v[4],v[5],v[0],v[1],v[2],v[6],v[7],v[8])) f.write('( {0} {1} {2} ) ( {3} {4} {5} ) ( {6} {7} {8} ) system/nodraw 0 0 0 0.1 0.1 0 0 0\n'.format(v[6],v[7],v[8],e[0],e[1],e[2],v[3],v[4],v[5])) f.write('( {0} {1} {2} ) ( {3} {4} {5} ) ( {6} {7} {8} ) system/nodraw 0 0 0 0.1 0.1 0 0 0\n'.format(v[0],v[1],v[2],e[0],e[1],e[2],v[6],v[7],v[8])) f.write('( {0} {1} {2} ) ( {3} {4} {5} ) ( {6} {7} {8} ) system/nodraw 0 0 0 0.1 0.1 0 0 0\n'.format(v[3],v[4],v[5],e[0],e[1],e[2],v[0],v[1],v[2])) f.write('}\n') bpy.ops.object.mode_set(mode='OBJECT') f.write('}\n') f.close() To use, copy the above text and paste into the python console in Blender. It works only on the currently selected object. Note: Ridiculously small brushes may crash Radiant. Do not use 'Import .map' in Radiant with an unsaved map file to avoid the small possibility that an incorrectly scaled model might crash radiant on import.If you stick to the grid size mentioned above, the tris should could out pretty good. Showing the back side: Futuza, Boothand, mjt and 4 others like this
Tempust85 Posted January 4, 2018 Posted January 4, 2018 You couldn't just export to ase/md3 and load it in as a misc_model?
Pande Posted January 19, 2018 Author Posted January 19, 2018 No, you lose the ability to texture in Radiant and would have to define the textures in Blender first. You also lose the weapon marks on models, I don't understand why but I think Razor fixed that in one of his mods. Lastly, the game's collision detection can really screw up on terrain models, leaving problems like being able to climb a wall because of strange invisible surfaces jutting out from the model, possible in the SP jawa droid level for example.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now