Babylon.js 9.33.3, 셰이더 조건식 처리 보완

정의가 없을 때의 분기가 사라졌습니다
Babylon.js 9.33.3은 한국시간 2026년 11월 5일 공개됐습니다. 셰이더 전처리기에서 #if !X를 정의 X의 부재를 검사하는 조건으로 처리하도록 수정했습니다. 기존에는 !X 전체를 이름으로 받아들여 존재하지 않는 정의를 찾았고, 의도한 분기가 경고 없이 빠질 수 있었습니다.
PR #19098 작성자는 WGSL 재질 플러그인에서 정의가 없는 변형이 실행되지 않는 문제를 확인했다고 설명합니다. Babylon의 전처리기를 거치는 GLSL도 같은 수정 대상입니다. 특정 언어의 모든 조건식이 고장 났다는 뜻이 아니라, defined를 생략한 부정 조건의 해석 문제입니다.
숫자 비교와 존재 검사는 구분해야 합니다
수정 후 #if !X는 #if !defined(X)와 같은 의미로 읽힙니다. && 또는 ||로 묶인 경우에도 적용됩니다. 이미 지원되던 #if X, 명시적인 !defined 조건과 비교 연산은 그대로입니다. 따라서 X가 정의되어 있으면서 값이 0인 경우를 ‘정의가 없음’과 같은 것으로 이해해서는 안 됩니다.
이 문법은 Babylon 전처리기의 규칙을 설명한 것이며, 다른 언어의 전처리 동작으로 일반화하지 않았습니다. 셰이더 생성 도구를 함께 사용한다면 최종 생성된 조건과 실제 정의 목록을 같이 확인하는 편이 좋습니다.
작은 색 비교로 분기를 관찰할 수 있습니다
PR의 재현 예시는 X가 없으면 평면을 빨간색, 있으면 초록색으로 그립니다. 이전 9.33.0에서는 두 경우 모두 초록색이었고, 수정은 정의가 없는 경우의 분기를 되살립니다. 작성자는 WGSL과 GLSL에서 중심 픽셀을 읽어 비교하고 조건식 단위 테스트도 추가했습니다.
프로젝트에서는 이처럼 분기가 구별되는 작은 재질로 먼저 확인한 뒤 실제 효과를 검토해 보세요. 복잡한 조명이나 텍스처를 함께 바꾸면 분기 선택이 틀린 것인지 표현이 비슷한 것인지 판단하기 어렵습니다. 이 글의 점검 제안은 직접 실행한 결과와 구분됩니다.
그래프 편집기 변경은 별도 기능입니다
같은 릴리스에는 Flow Graph Editor의 소리 반응과 진단 개선도 들어갔습니다. PR #19102는 소리 에셋 가져오기·미리보기와 저장·불러오기, 선택이나 메시 교차 이벤트에서 소리를 재생하는 템플릿을 설명합니다. Log 패널에는 이벤트·블록 실행 기록을, Validation에는 지원하지 않는 블록과 내보내기 진단을 표시합니다.
이 변경은 그래프 편집 흐름을 보완하며 기존 KHR 작성 마법사는 그대로입니다. 셰이더 조건 수정과 직접적인 인과관계가 있는 기능은 아닙니다. 재질 컴파일 확인과 그래프 이벤트 확인을 별도로 기록하면 한 버전 안의 서로 다른 변화를 정확히 판단할 수 있습니다.
미로

댓글
이 글에 대한 생각을 남겨 주세요.