로블록스에서 인게임 리포팅이 작동하는 방식
동적 3D 환경에서 상세한 보고서를 캡처하는 기술

- Roblox는 매일 2억 7,400만 건의 아바타 업데이트를 처리하며, 이는 안전 규정 위반 여부를 검토하는 사용자 생성 콘텐츠의 한 유형에 불과합니다.1
- 플레이어의 신고는 위반 사항을 조기에 파악하는 데 있어 매우 중요한 부분이며, 저희는 플레이어들이 부적절하거나 정책에 위배된다고 판단되는 내용을 쉽게 신고할 수 있도록 하고자 합니다.
- 동적이며 사용자 생성된 3D 콘텐츠 내의 위반 사항을 포착하는 것은 어려울 수 있으므로, 저희는 레이 캐스팅, 데이터 모델 복제, 그리고 전면 개편된 신고 UI를 활용하여 플레이어가 특정 오브젝트를 식별하고 신고할 수 있도록 돕고, 이를 통해 저희가 조치를 취하는 데 필요한 데이터와 시각적 증거를 확보하고 있습니다.
최대 피크 시 Roblox 플랫폼은 매일 2억 7,400만 건의 아바타 업데이트를 처리합니다.1 이러한 동적인 사용자 생성 3D 콘텐츠에서 악용 사례를 신고하고 검토하는 것은, 텍스트 로그나 소셜 미디어 게시물과 같은 정적 콘텐츠가 남기는 명확한 흔적이 항상 남아 있지 않기 때문에 어려운 과제입니다. 이 블로그 게시물에서는 악용 아바타를 식별하기 위한 초기 레이 캐스팅 방식부터, 플레이어가 모든 3D 게임 오브젝트를 정확하게 신고할 수 있도록 로블록스 데이터 모델과 통합된 현재 시스템에 이르기까지, 플레이어 신고에 대응하는 데 필요한 데이터와 시각적 맥락을 포착하기 위한 당사의 접근 방식을 설명합니다.
플레이어 신고는 잠재적인 정책 위반 사항을 조기에 식별하는 데 있어 핵심적인 요소이며, 최근 저희는 플레이어가 불편하거나 불안감을 주는 요소를 즉시 신고하거나 차단할 수 있도록 신고 절차를 개선했습니다. 현재 플레이어 신고를 통해 매월 19,000개 이상의 정책 위반 아바타가 자동으로 제거되고 있으며, 이는 부적절한 게임을 탐지하는 데 중요한 조기 신호 역할을 하고 있습니다.2
동적 콘텐츠 포착의 어려움
동적이며 사용자가 생성한 3D 콘텐츠는 다양한 맥락에서 조합되어 사용될 수 있기 때문에, 단순한 설명이나 스크린샷만으로는 저희가 조치를 취하는 데 필요한 데이터를 항상 제공하지는 못합니다. 소셜 미디어 게시물, 포럼 댓글, 동영상과 같은 정적 콘텐츠는 문제의 영구적인 기록 역할을 하여, 신고와 증거 검토를 모두 쉽게 할 수 있게 해줍니다. 텍스트 및 음성 채팅은 Roblox에 기록되지만, 다른 유형의 사용자 생성 콘텐츠는 이러한 명확한 흔적을 남기지 않습니다. 이미지는 플랫폼 내 다른 곳에서 불러올 수 있으며, 동적인 상호작용은 기록되지 않을 수 있고, 플레이어들은 때때로 개별적으로는 무해한 의상 아이템들을 조합하여 부적절한 복장을 만들기도 합니다.
동적인 상황에서 정책 위반 사항을 포착하기 위해서는, 신고자가 먼저 게임 내의 특정 요소를 식별할 수 있는 방법이 필요합니다. 둘째, 신고된 콘텐츠에 대한 객체 ID를 제공하여 올바른 객체를 평가할 수 있도록 식별 메커니즘이 마련되어야 합니다.

3D 공간에서 악의적인 아바타 탐지
기존 신고 도구는 주로 채팅 기록 증거에 의존했습니다. 신고 내용에는 시각적 정보가 전혀 포함되어 있지 않아 상황을 파악하는 데 큰 한계가 있었습니다. 다른 유형의 위반 행위에 대한 더 많은 맥락을 포착할 수 있는 신고 도구를 개발하기 시작했을 때, 우리는 모든 플레이어가 상호작용하는 대상인 ‘아바타’에 먼저 주목했습니다. 플레이어는 로블록스에서 자신을 대변할 아바타를 맞춤 설정할 수 있으며, 아바타에 대한 정보를 수집하면 채팅 기록이 없더라도 위반 행위를 특정 플레이어와 연결 지을 수 있게 됩니다. 아바타 데이터를 효과적으로 식별할 수 있는 시스템은 향후 다른 유형의 객체를 다루는 데에도 중요한 기반이 될 것입니다.
가능한 해결책으로는 신고에 더 많은 증거를 보완하기 위해 스크린샷을 찍거나 배경 화면을 녹화하는 방법이 있었습니다. 우리는 스크린샷이 모든 가능한 위반 사항을 포착하지는 못하더라도 통찰력을 얻기 쉬운 방법이라는 점 때문에 스크린샷 테스트를 시작했습니다. 하지만 곧 한계에 부딪혔습니다. 2D 이미지만으로는 3D 공간에서 플레이어의 아바타를 다른 아바타나 NPC와 구별하는 데 도움이 되지 않았습니다. 아바타들이 겹칠 때 잠재적 위반자의 사용자 ID를 항상 정확하게 식별할 수 없었습니다.

특정 시점에 촬영된 2D 이미지를 실행 가능한 증거로 전환하기 위해 더 많은 정보를 추출하는 방법을 모색해야 했습니다.
우리는 3D 공간에서 관련 정보를 분리하고 신고가 접수된 시점의 2D 이미지에 이를 표현하는 효율적인 방법으로 레이 캐스팅을 채택했습니다. 플레이어가 신고를 열면, 먼저 해당 세션에 참여 중인 플레이어 목록을 수집하고 뷰포트에 포함되지 않은 플레이어를 걸러냅니다. 그런 다음 레이 캐스팅을 사용하여 각 플레이어 아바타의 바운딩 박스를 결정합니다. 동시에, 로블록스 엔진의 프레임 버퍼 내용을 스크린샷으로 자동 저장합니다. 이를 통해 단순한 2D 스크린샷에 3D 세계에 대한 충분한 공간 데이터를 결합하여, 잠재적 위반자를 다른 아바타나 주변 환경과 구분할 수 있습니다. 레이 캐스팅을 사용하면 평균 3.5밀리초 만에 바운딩 박스를 결정할 수 있습니다. 더 느린 방법을 사용했다면 어색한 멈춤 현상이 발생하여 사용자 경험을 저해했을 것입니다.


거기서부터 잠재적인 정책 위반에 대한 기타 상황 정보를 비동기적으로 수집할 수 있습니다. 현재 이 시스템은 플레이어가 신고를 시작하면 자동으로 이 메커니즘을 실행합니다.
하이라이트 모드
다음으로, 플레이어가 위반 콘텐츠를 신속하게 식별할 수 있도록 직관적인 신고 인터페이스가 필요했습니다. 이에 신고 인터페이스를 업데이트하여 ‘하이라이트 모드’를 도입했고, 이를 통해 플레이어가 위반 항목을 강조 표시하고 신고 내용에 추가 정보를 기재할 수 있게 했습니다. 플레이어가 위반 항목을 클릭하면, 플레이어 커서 주변을 원형으로 감싸는 광선을 투사했습니다. 플레이어가 아바타를 선택하면, 신고 내용을 검토하고 조치를 취하는 데 필요한 모든 메타데이터를 수집할 수 있었습니다. 내부 사용자 조사 결과, 하이라이트 모드는 긍정적인 반응을 얻었으며, 특히 9~13세의 어린 플레이어들도 문제를 더 쉽게 강조 표시하고 신고를 성공적으로 완료할 수 있게 되었습니다.

새로운 리포팅 도구의 이 초기 버전에서는 아바타의 ID만 수집했습니다. 플레이어가 다른 항목을 선택하면 해당 객체의 ID는 수집되지 않았습니다. 우리는 리포트를 분석하여 통찰력과 더 넓은 맥락을 파악하고, 개발자에게 문의한 뒤 다음 단계를 결정할 수 있었습니다.
하지만 우리는 플레이어가 게임 내 어떤 항목이든 정확하게 선택하여 보고서에 해당 데이터를 직접 캡처할 수 있는 메커니즘을 구상했습니다.
일반 콘텐츠 유형에 대한 데이터 모델 캡처
원형 레이 캐스팅 방식은 플레이어의 뷰포트 내에 있는 제한된 수의 아바타나 광고를 구별하는 데는 효과적이었지만, 게임 내 모든 오브젝트에 적용하기에는 확장성이 부족했습니다. 아래의 환경을 예로 들어 보겠습니다:

바위, 관목, 꽃 등 수십 개의 오브젝트가 겹치고 움직이는 밀집된 환경에서는 원형 레이 캐스팅만으로는 특정 꽃이나 관목을 확실하게 식별할 수 없습니다. 플레이어가 오브젝트를 더 정밀하게 선택할 수 있도록 해야 했으며, 게임 내 모든 오브젝트와 관련된 데이터를 캡처할 수 있는 방법이 필요했습니다.
Roblox의 엔진은 이미 데이터 모델에 3D 세계의 표현을 저장하고 있지만, 게임의 전체 데이터 모델 크기는 기가바이트에 달할 수 있습니다. 속도를 최적화하기 위해, 우리는 장면을 렌더링하는 데 필요한 핵심 오브젝트만 복제하는 복제 메커니즘(이 메커니즘은 원래 Translation Feedback을 위해 처음 개발된 것)을 만들었습니다. 이렇게 복제된 데이터 모델을 확보하면, 하이라이트 모드를 사용하여 리포터를 복제된 세계로 이동시킬 수 있으며, 플레이어는 3D 공간에서 보고하고자 하는 대상을 정밀하게 하이라이트할 수 있습니다.

이 방식을 통해 플레이어는 자신이 신고하는 내용에 대해 더 많은 통제권을 갖게 되며, 우리는 훨씬 더 다양한 콘텐츠 유형을 평가하는 데 필요한 메타데이터를 확보할 수 있습니다. 또한 검토 과정을 돕기 위해 신고 내용에 스크린샷을 자동으로 첨부합니다.
데이터 무결성
프로젝트 시작부터 우리가 제기해 온 핵심 질문 중 하나는 증거를 클라이언트 기기에서 캡처해야 할지, 아니면 게임 서버에서 캡처해야 할지 여부였습니다. 로블록스(Roblox)는 서버가 아닌 클라이언트 상태만 업데이트할 수 있는 클라이언트 측 스크립트를 지원합니다. 또한 일부 물리 효과는 비결정적이기 때문에, 서버 측 캡처로는 신고자가 실제로 경험한 내용을 정확히 보여주지 못할 수도 있습니다. 신고자가 보고 있는 내용을 충실하게 재현할 수 있도록 클라이언트 측 캡처를 채택하기로 결정했으나, 여기에는 단점이 따릅니다. 악의적인 사용자가 클라이언트에 접근하여 증거를 조작할 가능성이 있기 때문입니다.
이를 완화하기 위해, 우리는 다양한 신호를 통해 정확성을 검증하고 부정확한 클라이언트 데이터를 걸러냅니다. 비유하자면, 기상학자들은 모든 기상 관측소에서 정확한 측정값을 받지 못하더라도 정확한 일기 예보를 내놓을 수 있습니다.
향후 과제
이러한 개선 사항과 더욱 풍부한 시각적 정보를 캡처할 수 있는 기능 덕분에, 이 시스템은 현재 매달 19,000개 이상의 정책 위반 아바타를 자동으로 차단하고 있으며, 부적절한 게임을 탐지하는 중요한 지표로 자리 잡았습니다. 또한, 적격 신고의 약 19%가 시각적 주석을 포함하는 등 높은 채택률을 보이고 있습니다.2
우리는 이미 다음 단계의 개선 작업을 진행 중이며, 특정 시점의 스냅샷만으로는 판단할 수 없는 동적 위반 행위(예: 이모트와 플레이어 움직임이 결합된 경우)를 탐지하는 방법을 개발하고 있습니다. 올해 하반기에는 신고된 장면의 시간 순서별 시퀀스를 캡처할 수 있는 기능을 도입할 계획입니다. 로블록스가 크리에이터들에게 더욱 풍부한 게임 내 상호작용을 구축할 수 있는 도구를 지속적으로 제공하는 만큼, 저희 안전 팀은 모든 플레이어를 위한 안전한 환경을 조성하기 위해 계속 노력할 것입니다.
이번 프로젝트에 기여해 주신 Rayan Hussain, Ryan Liu, Bridget Daly, Agatha Kielczewski, Alex Leavitt, Ying Liao, Andrew Xu 님께 감사의 말씀을 전합니다.
1 2025년 상반기 데이터를 기준으로 함.
2 2026년 3월 1일부터 4월 1일까지의 데이터를 기준으로 함.


