버텍스와 스트림

lenore·2026년 2월 23일

오늘 배운 내용을 흐름대로 정리하면 이렇습니다.


버텍스란

메시를 구성하는 점 하나이며, 단순한 위치가 아니라 렌더링에 필요한 여러 버텍스 속성의 묶음입니다.

Position(위치), Normal(법선벡터), UV(텍스처 좌표), Color(색상), Tangent(노말맵용) 등이 속성에 해당합니다.


버텍스 버퍼와 스트림

이 버텍스 속성들은 CPU가 VRAM에 미리 올려둔 버텍스 버퍼에 저장됩니다. 스트림은 이 속성들을 어떻게 묶어서 GPU가 읽을지 정의한 버퍼 단위입니다. 속성 하나하나가 스트림이 아니라, 속성들의 묶음이 스트림입니다.

스트림을 여러 개로 나누는 이유는 특정 렌더링 패스에서 필요한 속성만 읽게 해서 메모리 대역폭을 아끼기 위해서입니다. 다만 기본적으로는 하나의 스트림에 속성을 모두 묶는 게 일반적이고, 분리는 선택적입니다.


드로우콜과 GPU 처리 흐름

CPU는 "어떤 버텍스 버퍼를, 어떤 셰이더로 그려라"는 명령서인 드로우콜을 만들어 GPU에 넘깁니다. GPU는 이를 받아 Input Assembler 단계에서 스트림 레이아웃에 맞게 데이터를 읽고, 버텍스 셰이더에서 병렬로 처리합니다.

드로우콜 자체가 CPU에 비싼 작업이라 횟수를 줄이는 것이 최적화의 핵심이며, GPU Instancing이나 Static Batching이 그 전략입니다.


파티클과 대역폭

파티클 시스템은 매 프레임 CPU가 버텍스 데이터를 갱신해서 GPU에 올리는 Dynamic Buffer 방식입니다. 그래서 Custom Vertex Streams에서 체크하는 속성이 많을수록 매 프레임 전송량이 늘어나 대역폭에 직접 영향을 줍니다. 셰이더에서 실제로 쓰는 속성만 체크하는 것이 원칙입니다.

profile
VFX Artist in Korea

0개의 댓글