본문 바로가기
(셰이더그래프)아티스트를 위한 URP 셰이더 Shader #10 - UV제어 UV라... 여기서는 이론 설명이 조금 들어가게 되는데, 역시나 이론 설명 자세한건 책을 참고하시고요 (꾸준글) 책을 보신 분들은 UV 가 사실 이거라는거 다 알고 계시죠? 거럼요 을매나 좋은 책인데 당연히 알겠지 ( ...) 아참참, R,G,B 랑 X,Y,Z 는 사실 같은거다라는거 말씀드렸죠? 여기에 하나 더 U,V,W 도 같은 말이랍니다. 보통 UV만 쓰지만... 같은건데 어디에 쓰냐 따라서 이름이 다르고 막 이래 그리고 유니티에서 사용하는 방식은 왼쪽 아래가 float2(0,0) 오른쪽 위가 float2(1,1) 이라고도 책에서 얘기했었죠. 즉 아래같은 상황일때 버텍스에는 사실 이런 숫자가 들어가 있는 것이란 말이다... 뭐 그런 거였습니다. 책에 있어요 책에. 비엘북스 출판사 사장님 보고 계십니까.. 2021. 9. 11.
(HLSL)아티스트를 위한 URP 셰이더 Shader #9 - LERP 함수의 등장 lerp 함수는 개인적으로 가장 많이 쓰는 함수 중 하나라고 생각합니다. 또한 유용하고 쉬운만큼, 처음에 셰이더 함수를 배우기 좋은 함수라고 생각합니다. 증거 있냐고요? 네 없습니다. 그럼 20000 lerp (리니어 인터폴레이션: Linear Interpolation) 함수는 이런 구조로 되어 있습니다. lerp(A, B, T); 여기서 A 와 B의 단위는 같아야 합니다. 그리고 T의 단위는 float이어야 하고요. T 가 0~ 1 값의 범위를 가지고 있으면 A ~ B 의 값을 출력하지요. Linear Interpolation , 리니어 인터폴레이션 일단 시작코드는 여기서 시작합시다. 텍스쳐 하나가 있는 코드예요. 흠 이정도면 이제 모든 셰이더를 만들때 시작형으로 둬도 무리 없을 코드네요 Shader .. 2021. 9. 10.
(셰이더그래프)아티스트를 위한 URP 셰이더 Shader #9 - LERP 함수의 등장 이제 텍스쳐까지 다루게 되었다고 생각하니까.. 텍스쳐를 가지고 뭘 할 수 있을지 생각해 봅시다. 뭐 간단하게 더하고 곱하고 빼고 지지고 볶고 하는건 그런대로 할 수 있으니까요 그렇게 이미지를 연산하는 것에서 한 단계 발전하면, 이번에는 두 장을 전환하는 단계를 바라보게 됩니다. 뭐 그것도 공식은 있습니다만.. 요즘 세상에 누가 공식 외워요 함수쓰면 되지 (위험한 발언) ㅋㅋㅋ 자 그럼 오늘 해볼 함수 , 두 장 텍스쳐 전환용 lerp 함수입니다. 너무 많이 써서 질려버릴 정도로 많이 쓰는 함수지요!! 전 질려서 안씀 Linear Interpolation , 리니어 인터폴레이션 일단 텍스쳐를 두 개 만듭니다. 프로퍼티에도 두 개 받고요. 텍스쳐는 이렇게 두 개를 따로 적용시켜 놓았습니다. 그럼 뭐 첫 번째.. 2021. 9. 5.
(HLSL)아티스트를 위한 URP 셰이더 Shader #8 - 텍스쳐 출력 / 조작하기 자 그럼 각설하고, 이번에는 HLSL로도 텍스쳐를 출력해 보겠습니다. 시작은 역시! 6편에 있던 그거죠 없으신 분은 6편에서 받아오시면 돼요. 다운로드 다 걸어 놨으니까... 이걸 적용하면, 붉은 오브젝트가 나와야 정상입니다. 뭐야 귀찮다고요? 허허 나만큼 게으른 사람들이었잖아? 할 수 없군 이번만이예요. Shader "Example/URPUnlitShaderBasic" { Properties { } SubShader { Tags { "RenderType" = "Opaque" "RenderPipeline" = "UniversalPipeline" } Pass { HLSLPROGRAM #pragma vertex vert #pragma fragment frag #include "Packages/com.unit.. 2021. 9. 3.
(셰이더그래프)아티스트를 위한 URP 셰이더 Shader #8 - 텍스쳐 출력 / 조작하기 이번엔 텍스쳐 출력을 해보겠습니다. 크으 드디어 텍스쳐 출력이다. 개그치지 않고 바로 들어갈께요 텍스쳐 출력하기 셰이더그래프에서 텍스쳐 출력은 뭐.. 간단합니다. 원하는 텍스쳐를 잡고! 뙇 드래그하면 돼요!!! 개간단하네!!! 아 물론 이런다고 출력되진 않아요 쏘리쏘리 요것까지 이어줘야 출력되지요 뿅 잘되네요. 아니... 그런데... 이렇게 하니까 텍스쳐를 바꿔 줄 수가 없잖아?!??! 프로퍼티가 잠겨 있어서 수정을 할 수가 없네요???\ 심지어 프로퍼티로 컨버팅도 안돼?!??!?! 내가 뭘 할 수가 없네요??? 네네 그렇습니다. 이렇게 하는거 아님. 저렇게 하는건 에.. 뭐.. 언제쓰지.. 살다보면 쓸일이 있겠죠... 하여간 보통은 제대로 하려면 이렇게 해야 합니다. 텍스쳐가 출력될려면 텍스쳐 오브젝트.. 2021. 8. 31.
(HLSL)아티스트를 위한 URP 셰이더 Shader #7 - 출력 실습 이제 그러면 노드에서 했던 것과 같이, float 수치를 입력받아서 색을 출력하는걸 해 보도록 하겠습니다. 재미있는거니 빨리빨리 시작하고 싶군요 하악하악. 아참, 이번엔 노드랑 완전히 똑같은 내용으로 해보는걸 시도해 보려고 해요. 원래 그게 목표이기도 했고. 그래서 같은 식으로 해보려고 하는데 어떨지 모르겠네. 뭐 어떻게 될지는 해보면 알겠지요. 어떻게든 되겠지이이ㅣ이ㅣㅇ이ㅣ이잉 Float 입력을 조합하여 색상 만들어 보기 이전에 스위즐링 시간에 익힌 바에 의하면, float 3개를 보여서 합치면 float3로 만들 수 있다는 것을 알 수 있었습니다. 이를 응용해서 , R G B 를각각 0~ 1로 입력해서 색을 만드는 기능을 만들어 보지요 시작 코드는, 저번 시간의 시작 코드와 같습니다. 다운로드가 필요.. 2021. 8. 29.
(HLSL)아티스트를 위한 URP 셰이더 Shader #6 - 스위즐링 원래는 셰이더 그래프랑 코드랑 완전히 합을 맞춰서 동일한 내용을 동일한 타이밍으로 연재하려 했어요. 우와 이상적이고 멋져 보이잖음. 셰이더 그래프로 뙇 설명하고 코드로 똑같은거 뙇 설명하고 캬 멋진 나의 모습 ...사실 지금도 그러려고 하고 있어요 하지만 노드 사용법이 들어가니까 꼬이더군요. 노드에서는 감마 설명이 안되면 진도 자체가 안나가는 부분이 있어서. 게다가 노드는 기본 사용법 설명이 있다 치더라도 코드는 기본 설명을 해버리려면 ... 어디서부터 해야 돼 아니 사실 할 수는있는데, 그렇게 되면 이놈의 기초에서 헤어나올 수 없게 되기 때문에요, 블로그 쓰는것도 좀 재미가 있어야 하는데 사실 기초는 그다지 재미가 없거든요. 빨리 중급 셰이더 들어가고 싶지 ... 그러니 기초는 좀 듬성듬성 뛰어 넘겠습.. 2021. 8. 28.
(셰이더그래프)아티스트를 위한 URP 셰이더 Shader #7 - 출력 실습 와 간만입니다. 바쁜 일이 있으면 부정기적으로 이렇게 중지될 수 있어염. 이거 뭐 블로그로 쓰는건 실시간 반응같은게 없으니 재밌었는지 힘들었는지 알 수가 없네. 도네해달라는 말 안할테니까 리플좀 써봐요 사랑한다고 자 저번 시간에 스위즐링을 배웠으니까, 이번에는 초큼 실습을 하죠. 이번에는 인터페이스를 만들고, 거기서 값을 받아와서 결과를 내는 방법을 알아보도록 하겠습니다. 뭐, 이것도 대박 간단해요 사실 여기까지는 사람 무시하냐 수준이긴 하지. 프로퍼티 연결하기 우선 여기에서부터 시작하도록 해 봅시다. 새로운 메터리얼을 만들고, 셰이더를 만들고, 메터리얼은 오브젝트(공) 에 입히고.. 일단 붉은 색 노드를 만들어서 연결해 보았어요. 노드를 프로퍼티로 승격시키기 인터페이스 (프로퍼티) 를 만드는 법은 이전.. 2021. 8. 24.
Unity Vertex Shader / Fragment Shader 의 설정 함수 Vertex Shader UNITY_SETUP_INSTANCE_ID(input); 이 옵션을 사용하여 인스턴스 ID가 셰이더 함수에 액세스할 수 있게 만들 수 있습니다. 버텍스 셰이더의 맨 처음에 사용해야 하며 프래그먼트 셰이더에서는 선택 사항입니다. UNITY_TRANSFER_INSTANCE_ID(input, output); 이 옵션을 사용하여 버텍스 셰이더의 입력 구조에서 출력 구조로 인스턴스 ID를 복사할 수 있습니다. 이는 프래그먼트 셰이더의 인스턴스별 데이터에 액세스해야 하는 경우에만 필요합니다. UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output); Single Pass Instanced 렌더링(’스테레오 인스턴싱’이라고도 불림)을 사용하면 GPU가 단일 렌더 패스.. 2021. 8. 10.
(셰이더그래프)아티스트를 위한 URP 셰이더 Shader #6 - 스위즐링(swizzling) 간만입니다. 주력컴으로 쓰는 게이밍 노트북의 배터리가 부풀어서 AS 갔다 오느라고 늦었습니다 게다가 주말에 000 0000 00000 도 있었고 그럼 오늘로 기본 이론 설명은 끝날려나요? 어서 빨리 실습으로 나가고 싶군요. 어쨌거나 답답해도 그냥 그런가 보다 하세요 어쩌겠어 할 얘기는 해야지 오늘은 swizzling입니다. swizzling 이란 뒤섞다의 의미입니다. 셰이더의 데이터들은 전부 부동소수점 (float) 이기 때문에 이것저것 가지고 놀기 좋아요 뭔가 요즘엔 int도 되고 half가 어쩌고 하지만 그냥 일단 저렇게 생각해도 별 문제 없.. 그래서 이전에 설명했듯이, Vector4 나 Vector3는 이런식으로 되어 있는거라고 생각하시면 편합니다. 뭐랄까. 규격이 있는 택배박스가 xyzw라는 이.. 2021. 8. 6.
URP shader 에서 Texture 16장 초과하여 사용하기 흠 뭐 전문가분들에게는 어그로 제목이고.. 막 초보자를 벗은 분들에게는 도움이 될 겁니다. ㅋㅋ 셰이더를 좀 익숙하게 쓰시다 보면 슬슬 이런저런 한계에 부딪히게 되는데요, 뭐 인터폴레이터 제한이라던가.. 샘플러 제한 같은거 말이죠. 만약 실무를 뛰시고 모바일 게임을 만드시고 계신다면, 하드웨어에 대해서도 슬슬 신경을 써 줘야 합니다. 보통은 뭐 초보에서 막 셰이더에 익숙해지면 즐겁게 막막 쓰게 되지요. 막 쓰게 되면 즐겁거든 그러다가 자주 마주하는 것 중 하나에 대한 이야기 텍스쳐 16장 넘게 사용하는 이야기 일단 셰이더 그래프에서 텍스쳐 하나를 받고요 이 텍스쳐 오브젝트를 이케 sampler Texture2D 에 연결해서 출력하면 .. 그리고 뭔가 텍스쳐를 미리 넣어 놓으면 이렇게 잘 뜹니다. 뭐 재밌.. 2021. 8. 4.
유니티 셰이더 버전별 인터폴레이터 / 각 타겟별 성능 인터폴레이터 개수 한계 버텍스에서 프래그먼트 셰이더로 정보를 넘기는 데 사용할 수 있는 전체 인터폴레이터 변수 개수에는 제한이 있습니다. 이 제한은 플랫폼 및 GPU에 따라 달라지며 일반적인 가이드라인은 다음과 같습니다. 인터폴레이터 최대 8개: OpenGL ES 2.0 (iOS/Android), Direct3D 11 9.x 레벨 (Windows 휴대폰), Direct3 9 셰이더 모델 2.0 (구형 PC)입니다. 인터폴레이터 개수에 제한이 있지만 각 인터폴레이터는 4-컴포넌트 벡터가 될 수 있으며 일부 셰이더는 제한을 충족하기 위하여 여러가지를 합칩니다. 예를 들어, 텍스처 좌표 2개를 float4 변수 하나로 패스할 수 있습니다. (첫 번째 좌표는 .xy로, 두 번째 좌표는 .zw로). 인터폴레이터 .. 2021. 8. 3.
반응형