매쉬의 Vertices 정보를 보면 저렇게 나오는디
1. 그러면 VertexShader 구조체로 넣을 수 있는 정보는 총 5개
POSITION
NORMAL
TANGENT
TEXCOORD0
TEXCOORD1
이렇게 맞나요?
2. 왜 순서를 뒤죽박죽 섞어 놔도 오류가 안 생길까요?...
position
Texcoord0 순서를 뒤바꿔도 오류가 안 나는데..
3. 왜 아무 의미 없는 시맨틱을 넣어도 오류가 안날까요?
name : AAAa 같은..
매쉬의 Vertices 정보를 보면 저렇게 나오는디
1. 그러면 VertexShader 구조체로 넣을 수 있는 정보는 총 5개
POSITION
NORMAL
TANGENT
TEXCOORD0
TEXCOORD1
이렇게 맞나요?
2. 왜 순서를 뒤죽박죽 섞어 놔도 오류가 안 생길까요?...
position
Texcoord0 순서를 뒤바꿔도 오류가 안 나는데..
3. 왜 아무 의미 없는 시맨틱을 넣어도 오류가 안날까요?
name : AAAa 같은..
구조체 선언할때 변수명 : [SV_POSITION?] 머 이렇게 뒤에 태그 붙이지 않나 뒤에 저걸로 판별하니까 뒤섞어도 찾아내는걸로 아는데
https://docs.unity3d.com/ScriptReference/Mesh.SetVertexBufferParams.html
내부적으로
버텍스 정보를 기록하고 버퍼를 등록합니다 그래픽스 api에서 제공하는 기능이고 그걸 유니티에서 api로 빼둔게 위 아래 두 링크입니다
https://docs.unity3d.com/ScriptReference/Rendering.VertexAttributeDescriptor.html
- dc App
너무 감사드립니다!
또 궁금한 게 있는데 그럼 저 큐브는 내부적으로 POSITION,NORMAL,TANGENT,TEXCOORD0,TEXCOORD1를 포함한 레이아웃이 들어가 있는 거겠죠? 그렇다면 1. 버텍스 쉐이더 입력 구조체로는 레이아웃에 들어간 저 5개 항목만 최대로 사용할 수 있는 것이 맞는지? 2. 예를들어 해당 항목에 없는 Color같은 시맨틱을 붙여도 오류가 안 나는데 왜 그런 것일까요 ㅠㅠ
쉐이더 컴파일러는 엄격하지 않습니다 없는 시맨틱은 무시해버려요 또 쉐이더프로그램 또한 최대성능을 내야되기때문에 사용되지 않는 시맨틱은 무시하거나 기본값을 적용합니다 - dc App
그리고 5개 항목만 이용할수있는건 아니고 texcoordn 같은 경우 플랫폼에 따라 다르지만 15개까지 있습니다 번외로 정말로 쉐이더프로그램이 어떻게 돌아가는지 알고싶다면 컴파일후 어셈블리어로 볼수있습니다(유니티도 됩니다) - dc App
glsl은 직접 레이아웃을 정해서 들어가기 때문에 hlsl처럼 시맨틱이 없는 대신 엄격합니다 - dc App