GPT Image 2.5 Flare & Sunburst가 EvoLink에 출시되었습니다GPT Image 2.5 체험하기
유리 평면으로 나뉜 금속 구의 매끄러운 표면과 다면체 표면
활용 사례

코드와 스크린샷으로 렌더링 오류를 디버깅하는 방법

EvoLink Team
EvoLink Team
제품 팀
2026년 10월 16일
9분 소요

물체가 엉뚱한 곳에 나오지만 셰이더는 컴파일됩니다. 스크린샷은 현상을 보여 주고 코드는 여러 원인 후보를 줍니다. 카메라·행렬·기댓값 없이 “화면을 고쳐 달라”고 하면 설득력 있는 추측을 얻기 쉽습니다.

재현 가능한 장면으로 한 가설씩 시험합니다. 같은 버전의 픽셀과 실행 상태를 비교하고 수치나 렌더 검사로 패치의 효과를 판단합니다.

렌더링 근거 묶음 준비하기

렌더러/API, 셰이더 단계, uniform, 기하, viewport, 카메라, 기대·실제 화면과 재현 동작을 넣습니다. 오류와 컴파일·링크 진단을 “정상”이라는 요약 대신 실제 관측으로 남깁니다.

근거내용화면만으로 알 수 없는 것
기대·실제 프레임같은 카메라·해상도, 표시 영역어떤 변환·상태가 원인인지
셰이더·uniform정확한 버전·규칙·값호스트가 실제 전송한 값
그리기 설정기하·속성·깊이/컬링/혼합실제 그려진 객체
재현최소 장면과 단계다른 장면에도 패치가 유효한지

작은 화면에서는 누락 텍스처와 조명이 비슷해 보입니다. 선명한 영역을 주고 전후 비교 중 카메라를 바꾸지 않습니다.

검증할 수 있는 변환 순서 예

가상 장면은 열벡터이며 객체→모델→뷰→투영 순서입니다. 식은projection * view * model * position이고 오른쪽부터 적용합니다.

문제 후보입니다.

gl_Position = uProjection * uModel * uView * vec4(position, 1.0);
모델이 x로 2 이동, 뷰가 z축 90도 회전, 투영이 x/y를 0.2배로 한다고 정합니다. 점(1,0,0,1)의 기대 클립 좌표는(0,0.6,0,1)입니다.
Model:      (1,0) -> (3,0)
View:       (3,0) -> (0,3)
Projection: (0,3) -> (0,0.6)
Wrong order: View (1,0)->(0,1), Model ->(2,1), Projection ->(0.4,0.2)
그림이 예쁜지와 무관하게 가설을 검증합니다. Khronos의 정점 변환은 좌표 단계를 설명합니다. 호스트 메모리 배치와 곱셈 규칙은 별도로 확인하며 순서 교체를 모든 렌더러의 해법으로 쓰지 않습니다.

가설·재현·최소 패치 요구하기

셰이더·호스트 상태·기대 동작·실제 프레임·버전으로 차이를 조사하세요.
이미지는 관측이지 특정 근본 원인의 증거가 아닙니다.
현상과 근거, 가설 순위와 구별 검사, 첫 가설의 최소 테스트,
검사가 뒷받침할 때만 패치, 부족한 uniform·상태·문맥을 반환하세요.
주어진 행렬·벡터 규칙을 지키세요.
렌더러 전체를 재작성하거나 카메라 변경으로 현상을 숨기지 마세요.
제안한 테스트를 실행했다고 주장하지 마세요.
입력: 근거 묶음과 변환 규약.

이 예의 후보 패치입니다.

gl_Position = uProjection * uView * uModel * vec4(position, 1.0);
EvoLink Gemini 4의 Agent/API로 코드를 검토하고 실제 프레임은 문서상 이미지 형식으로 첨부합니다. 같은 게이트웨이의 다른 모델에 같은 자료를 보낼 수 있지만 합의는 테스트를 대체하지 않습니다.

먼저 행렬 규약과 오류 셰이더를 주고 가설 하나와 최소 패치를 받습니다. 수치 예로 (0,0.6)과 (0.4,0.2)를 구별한 뒤 실제 렌더를 확인합니다.

화면을 보기 전에 수치 검사 실행하기

다음 JavaScript는 예의 2차원 변환을 나타냅니다.

const model = ([x, y]) => [x + 2, y];
const view = ([x, y]) => [-y, x];
const projection = ([x, y]) => [x * 0.2, y * 0.2];
const correct = projection(view(model([1, 0])));
const wrong = projection(model(view([1, 0])));
if (Math.abs(correct[0]) > 1e-9 || Math.abs(correct[1] - 0.6) > 1e-9) {
  throw new Error("Unexpected reference transform");
}
if (Math.abs(wrong[0] - correct[0]) < 1e-9 &&
    Math.abs(wrong[1] - correct[1]) < 1e-9) {
  throw new Error("Fixture does not distinguish transform order");
}
계산만 검증하며 GPU 전송이나 최종 화면을 입증하지 않습니다. WebGL의 행렬 uniform API와 배치 요건을 확인합니다. 카메라·해상도·상태를 고정한 최소 장면에서 점과 물체 위치를 전후 비교합니다.

비슷한 화면의 다른 원인 구별하기

현상구별 검사
카메라 이동에 따라 위치 이상알려진 점의 변환과 전송 값
한쪽에서 물체 사라짐정점 순서·컬링·시선
위치는 맞고 가림이 틀림깊이 버퍼·초기화·비교 상태
텍스처 늘어남·뒤집힘UV·이미지 방향·샘플러
고밀도 화면만 다름drawing buffer·viewport·CSS 크기

조건을 하나씩 바꿉니다. 컬링을 꺼 보이게 해도 최종 수정이 컬링 해제인 것은 아닙니다. 실험과 해석은 구분합니다.

패치와 회귀 장면 보관하기

이동과 회전이 교환되지 않는 예를 남깁니다. 단위행렬만 쓰면 이 오류가 숨습니다. 최소 검사가 통과하면 일반 카메라 움직임과 대표 기하를 추가하고 같은 버전에서 비교합니다. 남는 별도 오류는 다른 항목으로 기록합니다.

지적 자체의 타당성은 코드 리뷰 검증에서 다룹니다. 본문은 시각적 재현과 렌더 상태 진단에 집중합니다.

자주 묻는 질문

스크린샷으로 정확한 원인을 아나요?

보통 현상과 위치를 줍니다. 코드·상태·재현으로 원인을 구별합니다.

컴파일 성공이면 수학도 맞나요?

문법이 유효해도 변환 순서가 틀릴 수 있습니다.

모든 패치를 같이 시험하나요?

한 번에 한 가설을 검사해야 결과 원인을 해석할 수 있습니다.

JavaScript로 GPU도 검증하나요?

명시된 계산만 검사합니다. 렌더와 호스트 검사는 별도입니다.

전체 저장소가 필요한가요?

재현 장면과 관련 상태로 시작해 가설에 필요한 의존을 추가합니다.

최종 버그 기록은 무엇인가요?

버전·입력·기대와 관측·실험·채택 패치·회귀 검사·불확실성입니다.

참고 자료

통합 API로 AI 모델 연동하기

모델 기능과 현재 요금을 비교한 뒤 API 문서에 따라 작업에 맞는 모델을 연동하세요.