기본이 만들어졌으니 버텍스 스트림에 대해 얘기해 보죠. 


버텍스 스트림은 vertex shader 흐름 단계에 개입해서 값을 집어 넣는 방식이므로,  버텍스 값에 접근할 수 있어야 합니다. 


그중 대표적인 데이터는 texcoord.


texture coordinate (텍스쳐 좌표) 라고 불리고 texcoord 라는 약어로 불리고 있으며, 아티스트들에게는 UV라는 이름이 더 익숙한 그것 말이죠. 


근데 사실 texcoord 는 꽤 여러 개를 쓸 수 있고, Vector4 데이터라서 UV 말고도 꽤 이곳저곳에 쓰이기도 합니다. 사실상 만능 그릇 ... 

그래서 이 texcoord를 커스텀 데이터로 사용하는거죠 


기본적으로는 이렇게 셋팅되어 있다고 생각하면 편합니다 


texcoord0 -> (uv1.x , uv1.y[각주:1] , 0  , 0 )



 그리고 커스텀 데이터는 texcoord1[각주:2] , texcoord2를 사용합니다. 


그래서 버텍스 스트림을 받을 수 있도록 커스텀 데이터를 개조하려면 이렇게 해야 합니다. 

슈리켄의 렌더러 항목에서 커스텀 버텍스 스트림을 가동시키고, 

아래 스트림 항목을 맞춰줘야 합니다. 


일단 UV2 를 만들어서 texccord0 번의 zw를 강제로 채워줘야 하고, 

그 다음에 커스텀 데이터 vector4를 두 개 쓸 수 있습니다. 


즉 위 그림에 따르면 이렇게 배열된거죠 


texcoord0 -> (uv1.x , uv1.y , uv2.x  , uv2.y )

texcoord1 -> Custom1(x , y , z , w)

texcoord2 -> Custom2(x , y , z , w)



즉 위 그림에 따르면 이렇게 배열된거죠 


저걸 저렇게 셋팅해 주고 나면, 


커스텀 데이터를 켜 주도록 합시다. 초기값으로 모두 0이 들어가 있음을 집중하시고. 


그럼 왠 에러 메세지가 떠 있을 겁니다. 


뭐 읽어보면 '버텍스 스트림 셋팅한거랑 셰이더랑 안맞는데?!?' 라는 말입니다. 

즉 셰이더에서 맞춰달란 말이죠 



뭐 맞춰달라니 이제 맞춰주면 됩니다. 



이전에 만든 셰이더에서 아래처럼 추가로 꺼내오면 돼요 



아 진짜 ... 여기서 말하는 UV1 은 texcoord1 을 의미하고 

UV2는 texcoord2를 의미합니다. 제발 이름좀 맞춰달라고 ... [각주:3]


자 이걸 만든다고 에러가 해결되는건 아닙니다. 하나라도 연결되어야 해결되지요 

이제부터는 솔직히 어디에 연결하느냐에 따라 달라서 더 설명할 필요도 없긴 한데요. 셰이더를 다룰 줄 아시면 이제 이 데이터를 어디에 넣느냐에 따라 맘대로 처리할 수 있습니다. 



보통의 저라면 이렇게 안하겠지만, 예시로 한 번 만들어 보았습니다. 


Custom1.x 는 전체 밝기에 곱해줘서 밝기를 조절할 수 있게 만들었고요. 기본값은 1이어야 할듯

Custom1.yz 는 Tiling에 연결해서 타일을 조절할 수 있게 만들었습니다. 기본값이 1이어야 겠네요 

Custom2.xy 는 Offset 에 연결해서 텍스쳐의 좌우 이동을 제어할 수 있게 만들었습니다. 기본값은 0이어야 할듯요


물론 이것 말고도 원하는 어디에다가라도 연결할 수 있습니다. 

제어를 직접 파티클에서 할 수 있기 때문에, 그래프나 렌덤값등을 나오게 할 수도 있고요. 매우 무궁무진한 응용이 기다리고 있습니다. 



  1. xy == uv [본문으로]
  2. 0부터 시작하므로 사실 이게 두 번째 texcoord [본문으로]
  3. uv0는 텍스쳐 샘플링쪽 보시면 이미 셋팅되어 있는걸 보실 수 있습니다. [본문으로]
YOUR COMMENT IS THE CRITICAL SUCCESS FACTOR FOR THE QUALITY OF BLOG POST
  1. :D 2020.08.05 16:33  댓글주소  수정/삭제  댓글쓰기

    오래된 글이라 답변해주실지 모르겠지만 읽다가 궁금해서 남깁니다!
    본문에 UV2를 추가하면서 TEXCOORD0.zw가 추가되었는데
    배열 정리해주시걸 보면
    TEXCOORD0 -> ( uv1.x , uv1.y , uv2.x uv2.y )로 적혀있습니다.
    uv2에서는 uv2.z , uv2.w가 아닌 이유가 궁금합니다.

    • 캬오 대마왕J 2020.08.05 18:13 신고  댓글주소  수정/삭제

      이게 제가 배열한게 아니라 유니티에서 원래 texcoord 하나에 각각 xyzw순서로 uv1.xy , uv2xy로 배열합니다.

      UV 는 2차원 정보가 필요하니까 순서대로 배치하면
      UV1 의 xy 다음에는 UV2의 xy지요.
      주로 라이트맵에 쓰는게 UV2 의 xy 입니다.