본문 바로가기
Lit 셰이더 분석 2 일단 Direct Light의 물리 기반 셰이더 공식을 만듬. 디퓨즈의 반사를 구현. 비메탈에서 디퓨즈에 알베도가 적용된다. 스페큘러의 반사를 구현. 메탈에서 스페큘러에 알베도가 적용된다. 비메탈에서는 4% 의 반사를 보인다. 디퓨스 + 스페큘러 반사 구현해 본 것. Diffuse BRDF GGX Specular Fresnel-Schlick Function Smith's shadow masking function G1 Dielectric BRDF Electric BRDF 2023. 10. 10.
Lit 셰이더 분석 #define kDielectricSpec half4(0.04, 0.04, 0.04, 1.0 - 0.04) // standard dielectric reflectivity coef at incident angle (= 4%) 으로 정의되어 있으므로 half OneMinusReflectivityMetallic(half metallic) { // We'll need oneMinusReflectivity, so // 1-reflectivity = 1-lerp(dielectricSpec, 1, metallic) = lerp(1-dielectricSpec, 0, metallic) // store (1-dielectricSpec) in kDielectricSpec.a, then // 1-reflectivity = .. 2023. 9. 28.
매크로 상수 배열 정의하기 // 셰이더에서 매크로상수 정의하기 #define TEST_CONST 123.132 // 셰이더에서 상수 정의하기 static const float TestConst = 123.132; // 셰이더에서 상수 배열하기 static const float3 Test[9] = { float3(-1, 1, 0), float3( 0, 1, 0), float3( 1, 1, 0), float3(-1, 0, 0), float3( 0, 0, 0), float3( 1, 0, 0), float3(-1, -1, 0), float3( 0, -1, 0), float3( 1, -1, 0), }; 자주쓰는데 자꾸 잊어버려서 정리 2023. 2. 15.
카메라 디렉션 구하기 버텍스 셰이더 단계에서 카메라 행렬 구한 후 Z 부분만 추출 fixed3 camForward_n = normalize(mul((float3x3)unity_CameraToWorld, float3(0,0,1))); https://forum.unity.com/threads/where-is-unity_cameratoworld-documented.908183/ Where is "unity_CameraToWorld" documented? Where is this documented?: unity_CameraToWorld I'm using a shader and can't find any information in the manuals or on google on this. Thanks... forum.unity.com 2022. 10. 4.
OpenGL Transform 개요 OpenGL Transformation 几何变换的顺序概要(MVP,NDC,Window坐标变换过程)_Jave.Lin的博客-CSDN博客 OpenGL Transformation 几何变换的顺序概要(MVP,NDC,Window坐标变换过程)_Jave.Lin的博客-CSDN博客 OpenGL Transformation 几何变换的顺序概要(MVP,NDC,Window坐标变换过程) Geometry transforming or culling sequence: application passing the vertex pos(object space pos) to the shader program。transforming of clip space pos from object space pos blog.csdn.net 2022. 6. 4.
노말맵 블렌딩 https://blog.selfshadow.com/publications/blending-in-detail/ Blending in Detail The x, why, z It’s a seemly simple problem: given two normal maps, how do you combine them? In particular, how do you add detail to a base normal map in a consistent way? We’ll be examining several popular methods as well as covering a new approach, Re blog.selfshadow.com 아주 훌륭한 내용. 화이트아웃 블렌딩이 유니티에서 쓰이는 방법 float3 r =.. 2022. 3. 6.
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 에서 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.
서피스 셰이더에서 버텍스 셰이더 인풋값 초기화 블로그 주인장에게 커피값을 후원할 수 있습니다! 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.
커스텀 셰이더 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.
반응형