포스트

Mesh slice in Unity

오늘은 VR게임의 비트세이버처럼 3D mesh를 자르는 기능을 알아보겠습니다:)

참고 출처: https://github.com/Tvtig/UnityLightsaber

화려한 텍스쳐를 빼고 핵심 스크립트만 제 프로젝트로 가져와서 사용해봤습니다. 그런데 이 원리가 Knife와 충돌한 오브젝트를 knife가 그리는 plane에 대하여 두 조각으로 쪼개는 원리이기 때문에 응용성에 아쉬운 점이 많습니다. 두 조각으로만 분리하기 때문에 제가 만든 U자형 오브젝트에 대해서는 기대하는 대로 작동하지 않고 있습니다. 그리고 조금만 가져다 댔을 뿐인데 마치 도끼가 나무를 찍듯 쩍 하고 갈라지는군요.. 오브젝트를 두 조각으로 쪼개는 것이 코드의 핵심이기 때문에 이것을 변경하는 것은 작동 메커니즘으로 보아 어려울 것 같습니다.

[영상]

[영상]

어떻게 하면 좋을까…Boolean Substract 메커니즘으로 바꾼다면 더 응용성이 좋은 Slicer가 생기지 않을까 해서찾아보았습니다.

https://github.com/KaimaChen/MeshBoolean https://www.youtube.com/watch?v=4r9IwX17UbY Boolean을 구현하는 방법에는 Shader를 사용해서 눈속임만 해주는 방법도 있습니다. 특수한 Shader를 사용해서 마치 intersected 영역이 비어있는 것처럼 보이게 할 수는 있지만, 엄밀히 말하면 mesh를 건드리는 것이 아니기 때문에 완전절삭이 된 상태를 어떻게 판별하는지의 문제와, 어떻게 closed 곡면으로 자르게 되는지의 문제로 다시 회귀하겠습니다. 그래서 Shader보다는 실제로 mesh의 vertices를 계산해서 처리하는 방법이 좋겠습니다. 하지만 그렇게 되면 그 끊어지는 vertices를 계산하는 데에 시간이 다소 걸려 성능상 불이익이 있을 법 한데요, 그래서 제 생각엔 knife가 지나가는 경로를 따라 오브젝트를 생성하고 일단은 boolean shader로 눈속임을 해준 후에, 먼저 베인 곳 부터 실제 vertices cutting작업을 해주면 성능 상 현실성이 있지 않을까 고민해봤습니다.

+) LightSaver는 UnityStore에서 또 다른 분이 더 발전시켜서 mesh slicer라는 에셋으로 판매하고 있는데, 여전히 위의 단점은 개선되어 있지 않다고 합니다!

아쉽지만 오늘은 여기서 마치려고 합니다.

감사합니다.

sticker

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.