Threejs 에서 카메라가 가까워지면 객체가 사라지는 현상 Shader의 절두체 컬링 비활성화 방법 - Whitmem
Threejs 에서 카메라가 가까워지면 객체가 사라지는 현상 Shader의 절두체 컬링 비활성화 방법
Graphic Development
2024-12-30 20:26 게시 0a4a958b633d2306743c

0
0
50
이 페이지는 외부 공간에 무단 복제할 수 없으며 오직 있는 그대로 게시되며 부정확한 내용을 포함할 수 있습니다. 법률이 허용하는 한 가이드 라인에 맞춰 게시 내용을 인용하거나 출처로 표기할 수 있습니다.
This page is not to be distributed to external services; it is provided as is and may contain inaccuracies.
카메라 범위를 벗어나는 경우 객체 전체의 렌더링이 비활성화되는 증상
해당 문제는 카메라가 절두체 컬링 처리에 의해 원 포지션을 벗어나는 경우 아예 렌더링하지 않는 증상으로, 포지션을 벗어나더라도 렌더링하게끔 하기 위해 원본 메시에 대해 frumstumCulled를 비활성화해야 한다.
필자의 경우 Shader 과 Instance 처리를 통해 하나의 메시 데이터를 원점에서 생성하고, 수 많은 인스턴스를 버퍼에 복제, 그리고 각 인스턴스마다 attribute를 임의 할당하여 대량 출력하는 방법을 사용하였다. 해당 방법을 사용해서 인스턴스 출력의 최적화를 수행할 수 있다.
상기 코드와 같이 원본 지오메트리에 대해 인스턴스 버퍼 공간을 만들고, 인스턴스 어마운트 설정을 통해 개수를 지정, 각 인스턴스에 대해서 Attribute를 지정하였다.
하나의 인스턴스 처럼 처리하여 각각의 인스턴스에 대해서 렌더링되는 버텍스의 포지션을 변경하도록 쉐이더를 구현하였다. 하지만 위와 같이 수행하니 최초 생성하는 카피본의 인스턴스 범위를 벗어나 음수 영역으로 이동하니 렌더링해야 하는 또 다른 인스턴스가 있음에도 불구하고, 절두체 처리에 의해 모든 입자의 출력이 사라지는 증상을 확인할 수 있었다. 해당 문제를 해결하기 위해 원본 메시의 절두체 옵션을 비활성화 해주었다.
만약 메시가 하나가 아니라, 다양한 메시와 부모 관계에 있는 메시인 경우, traverse 로 순회하면서 모든 메시에 대해서 절두체 컬링을 비활성화할 수 있다.
다시 출력 하면 제대로 렌더링되는 것을 확인할 수 있다.
댓글 0개
댓글은 일회용 패스워드가 발급되며 사이트 이용 약관에 동의로 간주됩니다.
확인
Whitmemit 개인 일지 블로그는 개인이 운영하는 정보 공유 공간으로 사용자의 민감한 개인 정보를 직접 요구하거나 요청하지 않습니다. 기본적인 사이트 방문시 처리되는 처리 정보에 대해서는 '사이트 처리 방침'을 참고하십시오. 추가적인 기능의 제공을 위하여 쿠키 정보를 사용하고 있습니다. Whitmemit 에서 처리하는 정보는 식별 용도로 사용되며 기타 글꼴 및 폰트 라이브러리에서 쿠키 정보를 사용할 수 있습니다.
이 자료는 모두 필수 자료로 간주되며, 사이트 이용을 하거나, 탐색하는 경우 동의로 간주합니다.