Babylon.js 9.33.2, WebGPU 반정밀도 읽기 경로 변경
모아보기 · 소식 기준일 · 블로그 공개
Float16Array를 제공하는 환경에서 해당 타입을 활용합니다.

발표 내용
Babylon.js 9.33.2는 WebGPU에서 반정밀도 값을 읽어올 때 환경에 Float16Array가 있으면 그 타입을 사용하도록 바꿨습니다.
확인할 부분
WebGPU로 만든 화면을 다시 CPU에서 읽는 작업과 GPU에서 화면에 표시하는 작업은 경로가 달라요. 효과나 화면 캡처가 읽기 작업을 한다면 해당 출력값을 확인할 수 있어요.
화면이 맞아 보여도 읽어낸 숫자는 다를 수 있어요
GPU가 계산한 색을 화면에 내보내는 것과, 그 값을 CPU 프로그램으로 가져와 다시 사용하는 것은 서로 다른 작업입니다. 화면에서는 비슷해 보여도 읽어낸 배열의 자료형을 잘못 가정하면 이후 계산에서 정밀도를 잃거나 예상하지 못한 분기로 갈 수 있어요. 반정밀도 값이 필요한 예로는 화면 일부를 읽어 평균 밝기를 추정하거나, 렌더링 결과를 다른 도구로 넘겨 수치로 비교하는 작업이 있어요. 이런 코드는 재질이 그려지는 장면만 보는 방식으로는 확인이 어렵습니다.
비교용 텍스처에는 0이나 1처럼 단순한 값뿐 아니라 서로 가까운 값, 밝기가 달라지는 경계, 채널마다 다른 값을 넣을 수 있어요. 읽기 결과에서 배열 길이와 채널 순서를 먼저 확인한 뒤 기준 값과 오차를 비교합니다. 자료형의 존재 여부에 따라 서로 다른 경로를 타므로, 같은 화면이 나오는지와 두 환경에서 호출자가 같은 의미의 숫자를 받는지를 구분해야 합니다. 브라우저를 바꿔도 테스트 패턴은 유지하면 환경 차이가 더 잘 드러납니다.
호출 코드가 특정 배열의 생성자나 메서드에 직접 의존하는 프로젝트라면 런타임의 타입도 확인할 부분입니다. 값이 같아도 버퍼를 다른 모듈에 넘기는 단계에서 기존 가정이 드러날 수 있어요. 반대로 출력을 숫자로만 소비하는 코드라면 테스트의 핵심은 배열 이름보다 읽기 값의 오차와 순서입니다. 업데이트에서 실제로 달라지는 부분을 찾으려면 출력 처리까지 한 경로로 연결해 살펴보는 편이 정확합니다.