这个建筑来自天地玄黄式建筑的变化,设计参考来源于20250104的blend,手动拼接了下面3个
再加上了天地玄黄1式的立柱铺垫1层,有了下面这个立面参考,这栋完全是盒子房,结构上没啥难度,技术细节方面。
1.楼顶的紧密宽度不同且有厚度差次不齐的钢琴键式栅格,我用一个blender python script实现了一键创建。
2.顶楼的金属阵列窗花我查找pinterest door grill\window grill作为参考对于一个圆圈截取部分修改收尾然后上下对称,再mirror左右旋转90度成为4叶草型,把曲线添加bevel厚度,注意段数保持原样即可这种装饰在顶楼远看就看个大概,我一开始添加16分段,之后拿去阵列成型后模型面数太高blender都卡了。
3.顶楼与中间层当中有一圈像cobble stone的东西我打算用材质实现
创建具有随机宽度和厚度的立方体栅格阵列 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 import bpyimport randombpy.ops.object .select_all(action='SELECT' ) bpy.ops.object .delete(use_global=False ) cubes = [] for i in range (10 ): bpy.ops.mesh.primitive_cube_add(size=1 , location=(0 , 0 , 0 )) cube = bpy.context.object cube.name = f"Cube_{i+1 } " cubes.append(cube) for cube in cubes: cube.scale.x = random.uniform(0.05 , 0.06 ) cube.scale.y = random.uniform(0.1 , 0.135 ) cube.scale.z = 0.646 bpy.ops.object .select_all(action='SELECT' ) bpy.ops.object .origin_set(type ='ORIGIN_GEOMETRY' ) random.shuffle(cubes) current_x = 0 for cube in cubes: cube_width = cube.dimensions.x cube.location.x = current_x + cube_width / 2 cube.location.y = 0 cube.location.z = 0 current_x += cube_width print (f"Cube '{cube.name} ':" ) print (f" Location X: {cube.location.x:.4 f} " ) print (f" Dimensions X: {cube.dimensions.x:.4 f} " ) print (f" Next start X: {current_x:.4 f} " )
最终做出来的效果window grill部分要很近距离才能看清楚,我试着对grill提取曲线重新生成,中远距离看起来可以,这种规则排列的grill虽然传输起来卡占用面数高但是好像还是做mesh好,我发现用midjourney好像不太好生产这种整齐的几何体排列。
不规则宽度厚度层次栅格只有近距离能看出来,远处完全看不出,说明厚度不够,调整厚度之后还是可以的。
这次建筑所有内景都用busStop那个内景材质,之前我也发现了个别需要旋转不规则角度,原来和uv有关系,一般来说对于整体部件打包让bakemaster unwrap不会发生这种情况。busStop内景材质我加入了uvscale,无需对内景uv做后期手动调大小,今天做了些调整后它的玻璃反射对天空的映射趋于完美了,配合blueprint修改了custum num data可以按照空间位置随机分配。内景scale为-1的mesh会出现显示有“薄暮”的怪相,另一方面scale-1意味着内景镜像显示若有重复也会显得诡异,因此对于包含内景的mesh需要解除instance然后apply scale再重新link object data成为instance,这里让chatgpt写了个python script解决了,注意不必对所有scale -1的mesh做这个带来额外的mesh。
自动筛选所有scale为 -1的mesh,解除instance,apply scale,再建立instacne 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 import bpydef select_negative_scale_objects (): bpy.ops.object .select_all(action='DESELECT' ) for obj in bpy.context.scene.objects: if obj.type == 'MESH' : if any (s == -1 for s in obj.scale): obj.select_set(True ) print (f"Selected: {obj.name} " ) def unlink_apply_relink (): selected_objects = bpy.context.selected_objects if not selected_objects: print ("No objects selected." ) return obj_data_map = {} for obj in selected_objects: if obj.type == 'MESH' : mesh = obj.data if mesh.name not in obj_data_map: obj_data_map[mesh.name] = [] obj_data_map[mesh.name].append(obj) for obj in selected_objects: if obj.type == 'MESH' : obj.data = obj.data.copy() bpy.ops.object .transform_apply(location=False , rotation=False , scale=True ) for mesh_name, objs in obj_data_map.items(): if len (objs) > 1 : shared_mesh = objs[0 ].data for obj in objs[1 :]: obj.data = shared_mesh print ("Unlink, apply scale, and relink completed." ) select_negative_scale_objects() unlink_apply_relink()
bakemaster 每次自动的smart uv unwrap烘焙部分mesh的packed a texture不理想,导致最终显示的污渍、水渍很不正常,原因多种多样,这次由于起初忘记导入packed A texture发现其实对于没有雕花的建筑其立体感还是过得去的,金属部分稍微差一些,或许意味着建筑制作时,先不用太在意packed A texture?从以往经历来看,这部分到最后要花不少力气做修复。
评论