일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- AR Foundation
- 유니티
- callbyreference
- Euler
- Unity
- ARProgect
- 1인개발
- 깃허브
- 리듬게임
- AR게임
- 레이캐스트
- C#
- 병맛게임
- 짐벌락
- github
- 게임
- Quaternion
- 델리게이트
- callbyvalue
- 로케트
- raycast
- 게임제작
- 소규모프로젝트
- 리듬게임에디터
- 확장메서드
- 게임개발
- 인터페이스
- ExtensionMethod
- AR세팅
- ar
- Today
- Total
Ssssong += Dev
[그래픽스] Constant Buffer 본문
https://woo-dev.tistory.com/234
Constant buffer - 16바이트 단위로 정렬!
상수 버퍼(Constant buffer)는 정점 및 픽셀 셰이더에서 사용될 상수를 모아 놓은 버퍼이다. 상수 버퍼 사용을 위해 cpp 코드 영역에 상수 버퍼 타입의 구조체를 정의하고 셰이더에도 동일한 포맷으로
woo-dev.tistory.com
상수 버퍼는 정점 및 픽셀 셰이더에서 사용될 상수를 모아 놓은 버퍼이다.
상수 버퍼는 업데이트 및 전송이 빈번하기 때문에 처리하기에 효율적인 메모리 정렬이 되어야 한다.
따라서 상수 버퍼를 구성하는 구조체는 16바이트 정렬되어 있어야 한다. 따라서 전체 크기는 16의 배수가 되며,
최대 4096 x 16 바이트를 가질 수 있다.
컴파일러가 알아서 패딩 데이터를 붙여주지 않으므로 변수 단위에 신경을 써야 한다.
CBUFFER에 대한 기본 설명은 이러한데,
유니티 셰이더에서 CBUFFER_START(UnityPerMaterial), CBUFFER_END 형식으로 쓸 때 의문이 들었다.
SRP Batcher가 동작하려면 프로퍼티 선언을 이렇게 감싸 주어야 한다.
Drawing a texture | Universal RP | 8.2.0
Drawing a texture The Unity shader in this example draws a texture on the mesh. Use the Unity shader source file from section URP unlit shader with color input and make the following changes to the ShaderLab code: In the Properties block, replace the exist
docs.unity3d.com
그런데 CBUFFER는 말그대로 상수로써 업데이트가 빈번하기에 많은 프로퍼티 변수를 올리면 안 될 것 같은데
이번에 분석하고 있는 OmniShader에서는 엄청나게.... 많이 올려서 쓰고 있었다.
이렇게 써도 괜찮은건가? 이보다 훨씬 적게 썼던 MaskingShader에서는 안된다고 에러떴었는데
이건 에러도 안뜨고....
는 좀 더 찾아보니 이런 게시글이 있었다.
https://blog.naver.com/mnpshino/221850973199
UPR 셰이더 코딩 튜토리얼 : 제 2편 - SRP Batcher와 MultiPass Outline
안녕하세요 마둠파입니다. URP에 대해서 파다보니 재미있어서 좀 더 파봤습니다. 바로 2편 시작할게요. ...
blog.naver.com
CBUFFER에 올린 프로퍼티 양이 문제가 아니라 설정을 덜해서 그런 듯 하다.
이렇게 올려서 썼을 때의 부작용은 무엇일까