Unity에서 오브젝트의 스케일을 마이너스로 하면 폴리곤이 반전하는 것 같아서 조사해 보았다 (Odd Negative Scaling)

3253 단어 Unity3DUnity

개요



Unity에서 오브젝트의 스케일을 마이너스로 하면 폴리곤이 반전하고 있는 것이 신경이 쓰였으므로,
조사한 내용을 공유하려고 합니다.

경위



「변환 행렬로 스케일을 반전시켜도 폴리곤은 반전하지 않지요?」라고 생각했습니다만,
실제로 확인한 결과, Unity에서는 반전하고 있는 것 같기 때문에 조금 조사해 보기로 했습니다.

운영 환경


  • Windows 10
  • Unity 2019.3.14f1
  • UE4

  • 검증 패턴



    왼쪽은 스케일을 그대로, 오른쪽은 Z 스케일을 -1로 설정한 것입니다.


    Z 스케일을 1 -> -1 로 애니메이션 시키고 있습니다.
    스케일이 마이너스가 되었을 때에, 폴리곤이 반전하고 있네요.

    다각형이 반전되지 않는 경우의 이미지



    ※ 어디까지나 이미지를 위해 만든 이미지입니다. 실제로는 이렇게 되지 않습니다.
    오른쪽의 모델은 쉐이더로 프런트 페이스 컬링으로 하고 있습니다.




    가설



    조사 전에는 다음과 같이 예상했습니다.

    가설 1. 다각형을 반전시킨 다른 모델을 준비해, 스케일이 부의 모델에 사용하고 있다



    이 경우 모델에 대한 그래픽 메모리 소비가 증가하지만 배치 대상이됩니다.

    가설 2. 프론트 페이스 컬링으로 전환 중



    렌더링 전에 GL.invertCulling(true)를 호출하는 이미지입니다.
    배치 대상외가 될 정도가 단점입니까.

    조사 결과



    문서를 찾을 수 없어서 모르겠습니다!

    하지만, 하나 신경이 쓰이는 움직임이 있었습니다.
    Frame Debugger에서 "검증 패턴"을 확인한 결과 다음과 같은 메시지가 표시되었습니다.



    X, Y, Z 스케일 중 홀수개가 마이너스인 경우는, 배치 대상외가 되는 것 같네요.
    그래서 가설 2가 가까울까라고 생각했습니다.

    오래된 자료입니다만 여기 에도 "What breaks batching"안에 "Odd Negative Scaling"라고 있네요.

    결론



    자세한 내용은 알 수 없지만 Unity는 Odd Negative Scaling 객체의 경우 다각형을 반전시킵니다.

    여담, UE4의 경우



    그럼 UE4는 어떻게 되어 있는 것일까? 라는 것으로 조사해 보았습니다.

    언리얼 에디터 4.24.3에서 확인했습니다.

    Actor(오브젝트)를 Odd Negative Scaling로 한 경우



    반전했습니다.


    부모를 Odd Negative Scaling로 설정한 경우



    반전하지 않았습니다.
    부모의 스케일은 컬링에 영향을 미치지 않는 사양일지도 모릅니다.



    잡감



    잘 생각해 보면, 스케일이 부가되었을 때에 폴리곤을 반전시킨 쪽이 여러가지 편리한 생각은 했습니다.
    폴리곤을 반전시키지 않으면 모델의 외형이 이상해지므로, 반전 모델용으로 전용 머티리얼이 필요하게 되는 등 고려하는 것도 많아질 것 같네요.

    그리고, 기사를 쓰고 있어 「폴리곤의 반전」이 게슈타르트 붕괴할 것 같게 되었습니다. . .

    좋은 웹페이지 즐겨찾기