Machineboy空

Day15: テクニカルアーティストのインターン生がコライダー可視化ツールを作った話 본문

#endregion/1日1冊

Day15: テクニカルアーティストのインターン生がコライダー可視化ツールを作った話

안녕도라 2025. 5. 30. 12:49

https://technote.qualiarts.jp/article/53/

 

テクニカルアーティストのインターン生がコライダー可視化ツールを作った話 | QualiArtsエンジ

テクニカルアーティスト室でインターンシップをしていた学生がIDOLY PRIDEでツールを作成し、最終的にパッケージ化する話

technote.qualiarts.jp

TA실에서 인턴십 하고 있는 ㅇㅇ입니다. 거기서 개발한 툴에 대해서 소개하겠습니다.

인프라에는 촬영이라는 모드가 있는데, 플레이어가 필드 위의 아이돌을 원하는 위치, 각도로부터 촬영할 수 있습니다. 

이 씬에는 대량의 콜라이더가 있어서 개발이 되지 않은 부분에 들어가지 않도록 콜라이더 누락을 체크할 필요가 있습니다.

하지만 2023년2월 현재 유니티 게임뷰에서 콜라이더를 표시할 수 있는 방법은 없습니다.

신뷰에서는 기즈모로 표시할 수 있지만 표시하려면 대상 게임 오브젝트를 선택해야 하고 효율적으로 확인할 수 없습니다. 

그래서 씬뷰, 게임뷰, 실기기의 모두에 간단하게 콜라이더를 가시화할 수 있는 방법을 제공해서 콜라이더 누락을 체크하는 작업을 효율화하려고 합니다.

 

콜라이더 가시화 기능을 유효화하면 신에 존재하는 액티브 콜라이더가 모두 표시됩니다.

한번 씬에서 검출된 콜라이더는 추적되기 때문에 캐릭터가 이동하면 콜라이더 표시도 이동합니다. 그리고 신뷰가 아니라 게임뷰나 실기기에서도 표시할 수 있습니다.

 

묘사에는 rendererfeature를 사용합니다.

scriptableRenderPipeline에 따른 커스텀이 가능한 기능입니다.

RendererFeature를 사용함으로서 렌더링순서의 변경이나 다른 파이프라인으로의 이식이 간단해집니다.

editor의 메뉴나 실기기의 디버깅화면부터 콜라이더의 가시화 기능을 유효화하면 rendererfeature에서 렌더링이 개시되게 되어있습니다. 설정화면에는 묘사 순서이외에도 표시하는 콜라이더의 색이나 셰이더를 바꾸는 옵션이 포함되어있습니다.

 

 면으로 표시하지 않으면 둘 이상의 콜라이더가 결합되어있을때 어느 부분이 더 안에 있는지 파악하기 힘듭니다.

그래서 콜라이더 형식을 메쉬로 재현할 필요가 있습니다.

 

하지만 unity는 meshcollider이외의 콜라이더의 형태를  메쉬로 관리하지 않기 때문에 각각의 콜라이더에 맞는 정점을 계산하는 처리를 만들었습니다.

 

MeshCollider의 경우 할당되어있는 메쉬를 사용할 수 있기 때문에 정점을 계산할 필요는 없습니다. 메모리 소비를 늘리지 않기 위해서 MeshCollider.sharedMesh에서 취득한 Mesh를 그대로 이용합니다.

 

BoxCollder를 표시하기 위해서는 정방형 메쉬를 6장 사용합니다. 변의 길이를 1로 중심은 원점이 되도록 생성하면 변형하기 쉽습니다.

 

SphereCollider는 구면좌표계에서 직교좌표계로 변환하는 식을 사용해서 정점의 좌표를 계산합니다. 그 후에 변형하기때문에 표면까지의 거리를 1로 중심을 원점으로 둡니다.

 

CapsuleCollider는 2개의 반구랑 하나의 원통으로 생성합니다. 변형하기위해서 3개의 메쉬는 각각 원점에 둔채로 submesh로 통합합니다.

 

unity packageManager로 이용할 수 있도록 패키지화했기 때문에 다른 프로젝트에서도 도입할 수 있도록 했습니다.

描画(びょうが)
コライダー可視化機能を有効にすると、シーン上に存在するアクティブなコライダーがすべて描画されます。 묘사
追跡(ついせき)  一度シーンから検出されたコライダーは追跡されるため 추적
頂点(ていてん)   정점
奥(おく) どちらが奥にあるかが把握しにくいためです。
割り当てられた MeshColliderの場合、割り当てられているメッシュを流用できるため頂点を計算する必要はありません。 할당된
正方形( せいほうけい )   정방형
格納(かくのう)
CapsuleColliderでは上部の半球、中間の円錐、下部の半球をそれぞれサブメッシュとして格納し、