从abaqus到unity:
目录
1. 数据准备
1.1 abaqus中提取element rpt文件
element rpt文件格式:
1.2 abaqus中提取node rpt文件:
node rpt文件格式:
2. python预处理以上数据:
2.1 提取node rpt中的节点坐标及应力值
2.2 提取element rpt中的单元信息
2.3 将以上信息写入obj文件
3. 在unity中添加obj 并挂载shader和material
显示效果:
1. 数据准备
1.1 abaqus中提取element rpt文件
在probe中选择element,输出单元类型及连接节点信息
element rpt文件格式:
abaqus默认单元类型为C3D8R,为六面体网格,含有8个节点
其中C3D8R单元nodes的排列方式如下,其他类型单元nodes排列方式:单元信息Three-dimensional solid element library (mit.edu)
1.2 abaqus中提取node rpt文件:
在probe中选择node,输出节点坐标及应力值
node rpt文件格式:
2. python预处理以上数据:
2.1 提取node rpt中的节点坐标及应力值
2.2 提取element rpt中的单元信息
其中C3D8R单元nodes的排列方式如下,其他类型单元nodes排列方式:单元信息Three-dimensional solid element library (mit.edu)
每个面切分为多个三角形,按逆时针排列节点顺序:
以以上单元face3为例:
三角1:1,2,6
三角2:1,6,5
整个单元划分为12个三角面
参考博客:从有限元到Unity——从abaqus网格模型文件到Unity模型数据_怎么把有限元结果与unity结合-CSDN博客
2.3 将以上信息写入obj文件
文件包含:
节点坐标,材质信息,顶点法线,面信息
v;vt;vn;f
obj文件示例:
v -0.500000 -0.500000 0.500000
v 0.500000 -0.500000 0.500000
v -0.500000 0.500000 0.500000
v 0.500000 0.500000 0.500000
v -0.500000 0.500000 -0.500000
v 0.500000 0.500000 -0.500000
v -0.500000 -0.500000 -0.500000
v 0.500000 -0.500000 -0.500000
vt 0.000000 0.000000
vt 0.1 0.000000
vt 0.2 0
vt 0.3 0
vn 0.000000 0.000000 1.000000
vn 0.000000 0.000000 1.000000
vn 0.000000 0.000000 1.000000
vn 0.000000 0.000000 1.000000
vn 0.000000 1.000000 0.000000
vn 0.000000 1.000000 0.000000
vn 0.000000 1.000000 0.000000
vn 0.000000 1.000000 0.000000
vn 0.000000 0.000000 -1.000000
vn 0.000000 0.000000 -1.000000
vn 0.000000 0.000000 -1.000000
vn 0.000000 0.000000 -1.000000
vn 0.000000 -1.000000 0.000000
vn 0.000000 -1.000000 0.000000
vn 0.000000 -1.000000 0.000000
vn 0.000000 -1.000000 0.000000
vn 1.000000 0.000000 0.000000
vn 1.000000 0.000000 0.000000
vn 1.000000 0.000000 0.000000
vn 1.000000 0.000000 0.000000
vn -1.000000 0.000000 0.000000
vn -1.000000 0.000000 0.000000
vn -1.000000 0.000000 0.000000
vn -1.000000 0.000000 0.000000
f 1/1/1 2/2/2 4/4/3 3/3/4
f 3/3/5 4/4/6 6/1/7 5/2/8
f 5/3/9 6/3/10 8/3/11 7/3/12
f 7/4/13 8/4/14 2/4/15 1/4/16
f 2/2/17 8/4/18 6/4/19 4/4/20
f 7/3/21 1/1/22 3/3/23 5/2/24
3. 在unity中添加obj 并挂载shader和material
shader文件示例:
Shader"Custom/beam"
{
Properties
{
//2D贴图
_Texture2D ("Texture2D", 2D) = ""{}
}
SubShader
{
Pass
{
CGPROGRAM
// 声明vert函数为顶点着色器
#pragma vertex vert
// 声明frag函数片元着色器
#pragma fragment frag
//需要使用以上变量,在CG程序中重新声明
sampler2D _Texture2D;
//结构体,用于传递应用程序到顶点函数、顶点函数到片元函数
//应用程序到顶点函数结构体
struct a2v
{
float4 vertex : POSITION;//将模型空间的顶点坐标填充给vertex
float3 normal : NORMAL;//将模型空间的法线方向填充给normal
float2 texcoord : TEXCOORD;//将第一套纹理坐标填充给texcoord
};
//顶点函数到片元函数结构体
struct v2f
{
float4 position : SV_Position;
float3 color : COLOR;
float2 texcoord : TEXCOORD;
};
//顶点函数
v2f vert(a2v v)
{
v2f f;
f.position = UnityObjectToClipPos(v.vertex);//顶点坐标从模型空间到剪裁空间的转换
f.texcoord = v.texcoord;
return f;
}
fixed4 frag(v2f i) : SV_Target
{
fixed4 col = tex2D(_Texture2D, i.texcoord);
return col;
}
ENDCG
}
}
FallBack "Diffuse"
}