Blender 3D 를활용한 CAD/Surface Mesh Repair 삼성중공업해양부유체연구파트연성모 2016.09.29-30
Overview Background Blender3D Surface Repair에서의활용방법 Open Source Mesh Generator (SHM, cfmesh) 에서의활용방법 사용상의장애물 기타활용처 요약및결론 p2
Background CAD File Cleanup Leakage 수정 (watertight mesh) Surface mesh 수정 Time consuming work 상용 CAD S/W SolidWorks Rhino 3D AutoCAD Open Source CAD S/W FreeCAD Open CasCade 기반 Unmature (beta) Open Source 3D Modeler Blender 3D p3
Blender 3D 역사 네델란드애니메이션회사 NeoGeo의창업자 Ton Roosendaal에의해개발 1995년 in-house tool로서개발시작 자회사 NaN 설립 and 망함 2002년 Blender Foundation 설립 2002년 10월 : NaN 투자자로부터소스코드에대한 IP 획득 GPL로 open source화 (Blender v2.26) ( 저장소 git://git.blender.org/blender.git) 2006년예술프로젝트 오렌지 시작 세계최초오픈소스애니메이션 코끼리의꿈 (Elephants Dream) 발표 3D 애니메이션, 게임, VFX 영화제작및공개 제작에관련된모든소스공개 2008년 v2.5부터 UI 변경 현재가장성공한 Open Source S/W 상용 : 3D Max ( 게임 ), Maya (Wavefront) ( 영화 ) Open Source : Blender 3D 2016 SIGGRAPH 출전작품 ( 심사위원상수상 ) : Cosmo Laundromat p4
주요기능 Modeling tool Rich keyboard shortcuts Python scripting Game creation Interactive application Physics model Python scripting Sculpting tool Zbrush Dynamic topology sculpting Camera & object tracking Powerful camera reconstruction Real-time preview of tracked footage and 3d scene Realistic simulation GPU&CPU rendering Accurate shader Realistic material Fluid,smoke,hair, cloth, particles Character animation Fast rigging Skeleton Automatic skinning Powerful video-edit p5
Why Blender 3D as a Surface Repair Tool Keyboard shortcut oriented workflow 작업효율증가 (VIM 과비슷 ) Advanced selection methods 반복적인작업최소화 Mesh diagnostic method 제공 Water-tight mesh check Python scripting 복잡하거나, 반복적인작업의프로그래밍 OpenFOAM 과의궁합 OpenFOAM 지원 Export 파일포맷 p6
Surface Repair Scenario selection 기능을 이용한 cleanup 및 leakage 수정 Select similar by length (Shift+G)를 이용한 비슷한 edge length 선택 Non-manifold selection (Ctrl+Shift+Alt+M)을 이용한 leakage 수정 Merge by distance (w)를 이용한 gap 수정 Duplicate vertices (w) 제거 Desolve (x)기능을 이용한 불필요한 vertex, edge, face 제거 Normal Recalculation (Ctrl+N) 을 이용한 face normal 수정 p7
Surface Repair Scenario StarCCM+ repair mesh 기능의보완도구로서의 Blender 3D Surface mesh 진단항목 Pierced faces Non-manifold edges Non-manifold vertices Free edges Face quality Face proximity STL file import 시쉽게발생되는문제 Pierced faces Non-manifold edges Non-manifold vertices 원인 삼각화된각 face 들의 vertex 의 tolerance 문제 Blender 3D 에서의해결방법 STL export 전에모든 face 들을삼각화시킴 (Ctrl+T) Single-region only Boundary surface 구분이안됨 p8
Open Source Mesh Generator (SHM, cfmesh) 로의활용방법 STL file format 구조 Single region only Face 정보 (facet) 만존재 Connectivity information 없음 readstlascii.l exhaustive search 방법으로재구성 labellist pointmap; label nuniquepoints = mergepoints ( STLpoints, 100*SMALL, // merge distance false, // verbose pointmap ); pointfield& sp = storedpoints(); setsize(lexer.ntriangles()); sp.setsize(nuniquepoints); forall(stlpoints, pointi) { const floatvector& pt = STLpoints[pointI]; sp[pointmap[pointi]] = vector ( scalar(pt.x()), scalar(pt.y()), scalar(pt.z()) ); } // Assign triangles label pointi = 0; forall(*this, i) { operator[](i)[0] = pointmap[pointi++]; operator[](i)[1] = pointmap[pointi++]; operator[](i)[2] = pointmap[pointi++]; operator[](i).region() = STLlabels[i]; } A facet vertex2 ASCII format 구조 보통 hash table 이용 solid name facet normal nx ny nz outer loop vertex v1x v1y v1z vertex v2x v2y v2z vertex v3x v3y v3z endloop endfacet endsolid name BINARY format 구조 vertex1 UNIT8[80] Header UINT32 Number of triangles Foreach triangle REAL32[3] Normal vector REAL32[3] Vertex 1 REAL32[3] Vertex 2 REAL32[3] Vertex 3 UNIT16 Attribute byte count vertex3 p9
Open Source Mesh Generator (SHM, cfmesh) 로의활용방법 STL file format 의한계 Named face/multi region 정보를가지기힘듦 ASCII 파일 Split STL file into each surface file Rename solid name Merge each surface file into a single file» cat *.stl > surfacemesh.stl Split+Rename+Merging 과정이번거로움 비표준방식 지원하는 S/W 거의없음 BINARY 파일» Import 후강제로 single region 으로병합됨 Attribute byte count 을이용한 colored STL 사용» RGB 를위한 5bit field 3 개 + flag bit 1 개로구성» 각 surface group 의이름을임의로줄수없음» 지원하는 S/W 가거의없고 (SolidWorks) 대부분의경우무시되는 field 임» Hexpress 에서사용 Multi region STL 구조 solid surface1 endsolid surface1 solid surface2 endsolid surface2 solid surface3 endsolid surface3 p10
Open Source Mesh Generator (SHM, cfmesh) 로의활용방법 Multi region 사용유무에따른 SHM 결과비교 (DTC tutorial 사용 ) Parameter Single region Multi region Feature Edge 3 3 RefinementSurface level (3 4) (3 4) for each region p11
Open Source Mesh Generator (SHM, cfmesh) 로의활용방법 대안 Wavefront file format (.obj) OpenFOAM 2.2.0 이후로권장포맷임 ASCII 기반 Multi-region 지원 Supported in Blender 3D Correct forward into Y Forward Turn off all options except Material Groups 장점 Named surface 관리및수정이용이 별도의 Surface split 과정이필요없음 Split + rename + merge 과정이없음 단점 ASCII 기반이기때문에대용량파일의경우불리 OpenFOAM외에지원하는 CFD tool이딱히없음 p12
Open Source Mesh Generator (SHM, cfmesh) 에서의활용방법 Blender 3D 에서 multi-region 작성 Linked flat faces (Ctrl+Shift+Alt+F) 기능을이용한 surface selection Surface material 속성을이용한 named surface 작성 Export into Wavefront file format p13
사용상의장애물 User Interface 그동안학습된 Mouse LMB 기능과다른동작방식 Object 선택은 Mouse RMB 3D Max, Maya interface 지원 Zoom in/out, Rotation, Panning Mouse MMB 단축키위주의구성 익숙해지면작업효율상승 CAD file import 기능의부재 Blender 3D is modeler, not CAD S/W Approximate polymesh 기반 Python Add-on 개발로어느정도해결가능 B-spline curve (entity 126) 의경우성공사례있음 (http://blenderscripting.blogspot.com/2012/07/blender-26x-igs-importer.html) 면생성작업후 p14
기타활용처 OpenFOAM post-processor OpenFOAM Front-End 개발 paltform swiftblock and swiftsnap p15
Blender 단축키 Infographic http://www.giudansky.com/design/51-blender-map p16
요약및결론 Repairing 에사용된단축키일람 x : 삭제및 desolve에사용 w : duplicate vertices (merge by distance) 제거에사용 Ctrl+Shift+Alt+M : non-manifold selection에사용 Shift+G : selection by edge length에사용 Ctrl+Shift+Alt+F : selection by angle에사용 Ctrl+T : face triangulation에사용 Ctrl+N : normal vector 수정에사용 Ctrl+F : flip normal CFD preprocessing tool 로써의 Blender 3D 평가 Surface (Mesh) 수정 단축키를활용한효율증대 다양한 selection 기능으로반복작업최소화가능 STL 또는 OBJ format으로 export 가능 Python 을이용한기능확장 OpenFOAM Front-End 개발 platform 제한적인 CAD file 지원 (not CAD tool) CAD S/W (freecad, 상용 S/W) 를이용한 STL export Python을이용한해결 p17
Q&A p18