본문 바로가기
서피스 셰이더에서 버텍스 셰이더 인풋값 초기화 블로그 주인장에게 커피값을 후원할 수 있습니다! UNITY_INITIALIZE_OUTPUT(Input,o); 서피스 셰이더는 인풋값이 고정되어 있는 경우가 일반적. 보통 appdata_full 이나 appdata_base , tangent 등등 몇 가지 버전이 있다. 그런데 여기에 추가 데이터를 넣고 싶을때에는 void vert (inout appdata_full v) 로만 말고 추가 인풋을 원할때에는.. . void vert (inout appdata_full v, out input o) 이렇게 쓰게 되는데, 이럴때 이 인풋값을 초기화 안 시켜주면 에러가 난다. 이럴때 주로 나오는 에러가 이런거 Output value 'vert' is not completely initialized 그래서 나온 함수이.. 2021. 7. 7.
(셰이더 그래프/HLSL)아티스트를 위한 URP 셰이더 Shader #1 셰이더 처음 만들기 (노드버전) 그럼 맨 먼저 시작해 보죠. 이론 같은거야 좋은 책들이 많을테고, 여기 오시 분들은 그래요.. 서론 싫어하는거 다 안다고요... 하긴 저도 유투브에서 5분 설명할거 10분 서론 설명하는 강좌보면 막 빡치고 그래요. 그러니 일단 무식하게 시작해 보도록 합시다 여기서 할 일은 다음과 같습니다. 셰이더를 만들고, 메터리얼에 적용시키고, 그걸 다시 오브젝트에 적용시킵니다. 네 그래요. 별 것 아니죠. 그냥 빈 거 하나 만드는 겁니다. 겁내지 말고 따라해 봅시다. 셰이더 만들기 유니티 빈 화면에 공 하나 만드시고요 Project 창에서 + 키를 누르고 Shader / Universal Render Pipelint/ Unlit Shader Graph 를 눌러줍니다. 이름은 기본적으로.. 2021. 7. 4.
아티스트를 위한 URP 셰이더 Shader 강좌예정 https://book.naver.com/bookdb/book_detail.nhn?bid=12518820 유니티 쉐이더 스타트업 『유니티 쉐이더 스타트업』은 프로그래밍으로 완성해야 하는 쉐이더의 구현을 아티스트들의 역량으로도 충분히 발휘할 수 있도록 도움을 주는 책입니다. 저자의 오랜 게임그래픽 실무경험과 book.naver.com "테크니컬 아티스트를 위한 유니티 쉐이더 스타트업" 을 쓴지가 벌써 4년이 되었습니다. 셰이더냐 쉐이더냐 ... 그게 사실 셰이더가 맞다고 합니다. 그런데 출판사에서는 계속 쉐이더로 나갔다고 해서 쉐이더로. 홓홓홓 . 처음 책을 쓸때에는 '에이 이거 뭐 이렇게 마이너한 기술서적이 얼마나 나가겠어' 하는 느낌으로 시작했는데 어느덧 4쇄!!! 세상에!! 그리고 유니티가 URP로 .. 2021. 7. 4.
커스텀 셰이더 GUI 만들기 : 잠깐 정리 지금까지 만든걸 잠깐 살펴봅시다. 이렇게 만들었습니다. 이건 .. 그냥 일반적인 셰이더 프로퍼티와 같네요. 네 그렇습니다. 하지만 커스텀 셰이더 GUI로 만든거죠. 똑같이 만든거 맞습니다. 네네 아래가 풀 코드입니다. UnlitCustomGUIShaderGraph 에서 UnlitCustomGUIShaderGraph1 로 바뀌었습니다. 원본을 하도 가지고 놀아서 다시 지우고 하느라고. 크게 신경쓰지 마시길. using UnityEditor; public class UnlitCustomGUIShaderGraph1 : ShaderGUI{ MaterialProperty TestFloat = null; MaterialProperty TestTexture = null; //MaterialProperty 형식의 변수.. 2021. 5. 14.
커스텀 셰이더 GUI 만들기 - 프로퍼티 생성 그럼 이번엔 빈 프로퍼티에 원하는 기능을 채워봅시다. 심플하게 원래랑 똑같이 만들어 보죠. 하등 쓸모없게. 원래 이렇게 생겼었죠 맨아래 렌더큐나 GPU 인스턴싱, 더블 사이드 GI 쪽은 빼고 만들어 봅시다 일단 float을 그대로 만들어 보죠 float 만들기 만들기 위해서 먼저 셰이더 쪽을 수정해 줘야 합니다. 이름과 레퍼런스 변수명이 저모양이면 심히 피곤하기 때문에. 그래서 좀 더 편하게 만들어 주었습니다. _TestFloat 이 녀석을 쓰면 됩니다. 쓰고나서 저장하는거 잊지 맙시다. 셰이더는 저장이 Ctrl+S 로 안된다는게 참 안좋은 것 같아요 이제 스크립트로 갑니다. 아래처럼 수정해 줍시다. using UnityEditor; public class UnlitCustomGUIShaderGraph .. 2021. 5. 2.
커스텀 셰이더 GUI 만들기 - 기본 시작 셰이더의 인터페이스를 커스텀 해봅시다 우선 제일 먼저 해볼 일은, 기본형 ... 즉 '아무것도 없는 빈 기본형'을 만드는 것입니다 빈 기본형 만들기 셰이더 그래프를 하나 만듭시다 그리고 평범하게 3개의 Properties를 추가했습니다. 각각 float , Texture, color 네 평범하죠 그리고 메터리얼을 생성하고, 방금 만든 셰이더를 연결합니다. 메터리얼을 확인하면, 방금 만든 Properties 가 활성화 되어 있는 것을 확인할 수 있습니다. 잘 들어와 있군요. 저걸 다 지워볼께요 . 커스텀 GUI 코드로! C# 스크립트를 하나 생성합니다. 아참. 스크립트는 반드시 Editor 폴더에다가 만들어야 합니다. 그리고 Custom Editor GUI 에다가 그 C# 스크립트 이름을 맞춰서 적습니다... 2021. 5. 2.
URP Shader 에서 Set Material Keyword 찾기 URP 셰이더들에 보면 메터리얼 키워드들이 정의되어 있는데, 이걸 활성화 시켜주는 부분을 찾을 수가 없다. // Material Keywords #pragma shader_feature_local_fragment _ALPHATEST_ON #pragma shader_feature_local_fragment _ALPHAPREMULTIPLY_ON #pragma shader_feature_local_fragment _ _SPECGLOSSMAP _SPECULAR_COLOR #pragma shader_feature_local_fragment _GLOSSINESS_FROM_BASE_ALPHA #pragma shader_feature_local _NORMALMAP #pragma shader_feature_local_f.. 2021. 4. 27.
InputData input.hlsl에 정의되어 있음. struct InputData { float3 positionWS; half3 normalWS; half3 viewDirectionWS; float4 shadowCoord; half fogCoord; half3 vertexLighting; half3 bakedGI; float2 normalizedScreenSpaceUV; half4 shadowMask; }; SurfaceData.hlsl struct SurfaceData { half3 albedo; half3 specular; half metallic; half smoothness; half3 normalTS; half3 emission; half occlusion; half alpha; half clearCoatM.. 2021. 4. 13.
#ifndef 이게 뭘까 URP 셰이더를 보다보면 인클루드 파일에 #ifndef UNIVERSAL_SIMPLE_LIT_INPUT_INCLUDED #define UNIVERSAL_SIMPLE_LIT_INPUT_INCLUDED #endif 이런 류의 항목을 볼 수 있다. 검색해 봐도 따로 선언된 곳도 없고 , 어디다 쓰는걸까 라는 생각이 든다. 이것은 중복 인클루드를 막는 거라고 생각해도 좋을듯. 아무래도 URP 셰이더는 인클루드로 서로 막 꼬여 있기 때문에, 인클루드에 인클루드가 들어갈 수도 있다고 생각하는게 편하다. 그럴때 이걸 선언해서, 중복 인클루드해도 문제가 없도록 선언해 주는 것이라고 보는게 좋겠다. pchero21.com/?p=911 헤더파일 속의 #ifndef와 #endif 선언 헤더파일을 보면 다음과 같이 #ifnd.. 2021. 4. 8.
URP 2019 에서 2020으로 업그레이드 할 때 Shader가 달라진 것 그 외에 Simplit Shader 기반으로 바뀐걸 정리하면 다음과 같습니다. 프로퍼티 일단 웃긴게 [MainTexture] 와 [MainColor] 가 뒤바뀌었습니다 ...왜 ㅋㅋㅋㅋㅋㅋ 어째서 ㅋㅋㅋㅋ 그리고 잔 오타가 수정되었습니다. TogleOff 인데 동작하고 있었다고?!? 셰도우 마스크와 라이트맵 데이터가 추가되었습니다. 숨겨져 있지만 적용될 수 있게 말이죠 [HideInInspector][NoScaleOffset]unity_Lightmaps("unity_Lightmaps", 2DArray) = "" {} [HideInInspector][NoScaleOffset]unity_LightmapsInd("unity_LightmapsInd", 2DArray) = "" {} [HideInInspector.. 2021. 3. 25.
URP 2019 에서 2020으로 업그레이드 할 때 Shader Error URP 2019 에서 2020으로 업그레이드 할 때 Shader Error URP 7 에서 10으로 업그레이드 할 때 Shader Error가 나는 경우가 있습니다. 노드로 짜면야 문제가 없지만 코드를 짰을 때, 그것도 기존 내장 인클루드를 같이 이용했을 때 말이죠. 'InitializeInputData': output parameter 'inputData' not completely initialized at .. 이 에러는 Core.hlsl에 인클루드 되어 있는 Input.hlsl을 사용했을때 나오는 에러인데요 아니 코어를 만들어 쓸 리가 없잖 이 인풋이 아래처럼 바뀌었습니다. 뒤에 두 줄이 추가되었어요. 이게 초기화가 안되어 있다고 나는 에러입니다. 코드를 보아하니 URP에 아직 안 들어가 있었던 .. 2021. 3. 24.
OpenGL ES와 DX11의 뎁스 차이 추가 : 그리고 이건 유니티 2019 버전의 버그로 결론지어짐. 그리고 이것만이 문제가 아님 . 두둥. float thisZ = LinearEyeDepth(projection.z / projection.w, _ZBufferParams); 값의 차이 . 이것은 #ifdef SHADER_API_D3D11 thisZ = thisZ; #else thisZ = thisZ*2; #endif 해주자 거의 차이가 없어졌다. 뭐야.. 모바일에서 2만 곱해주면 된다고???? 그리고 놀랍게도 float sceneZ = LinearEyeDepth(SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, sampler_CameraDepthTexture, projection.xy / projection.w), .. 2021. 2. 22.
반응형