분류 전체보기(93)
-
커스텀 제어 가능 알파 블렌딩 && 펙터
다음은 모든 문제가 그대로 발생하는, 전형적인 알파 블렌딩 쉐이더 이다. Shader "Custom/CustomBlending_problematic_Shader" { Properties { _MainTex ("Albedo (RGB)", 2D) = "white" {} } SubShader { Tags { "RenderType"="Transparent" "Queue" = "Transparent"} zwrite off blend SrcAlpha OneMinusSrcAlpha CGPROGRAM #pragma surface surf Lambert keepalpha #pragma target 3.0 sampler2D _MainTex; struct Input { float2 uv_MainTex; }; void sur..
2022.07.26 -
알파 테스팅과 컷아웃
- 알파 블랜딩은 사실상 사용할 수 있는 부분이 한정적이다. - 그림자도 나오지 않고, 앞뒤 판정은 명확하지 않으며 매우 무겁다. - 나무,풀 등을 그려야 할 경우 , 알파 블렌딩을 사용한다면 많은 문제가 생길 확률이 높다. 그래서 그런 경우에 사용하는 방법이 알파 테스팅(컷아웃) 이다. Shader "Custom/AlphaTesting" { Properties { //_Color 구문을 살려놓은 이유는 없을경우 그림자가 나오지 않기때문 //즉, 그림자를 그리는 Pass에서 그림자 색상을 위해서 해당 인자를 사용. _Color ("Color", Color) = (1,1,1,1) //추가 _MainTex ("Albedo (RGB)", 2D) = "white" {} _Cutoff("Alpha cutoff",..
2022.07.26 -
Alpha Blend
* 불투명(Opaque) 오브젝트는 먼저 그린다. -> 불투명 오브젝트들은 Z버퍼 때문에 어차피 순서에 상관없이 그려도 상관이 없으므로 먼저 그린다. * 반투명(Transparent) 오브젝트는 나중에 그린다. -> 정확히는 반투명 계열의 쉐이더를 나중에 그립니다. * 반투명 오브젝트들끼리는 '멀리 있는 것' 부터 가까운 것까지 차례대로 그린다. 이것을 '알파 소팅(Alpha Sorting)' 이라고 합니다. 위의 문제점을 해결하기 위해서 매 프레임마다 계산되어야 하는 연산을 생각하면 불투명 오브젝트들은 그저 계산되는 대로 그려주면 아무 문제가 없다. 반투명 오브젝트들은 일단 불투명한 오브젝트가 다 그려질 때까지 대기해야한다. 그리고 이번엔 반투명 오브젝트들끼리 거리를 체크하는 연산을 추가해야 한다. 불..
2022.07.25 -
Z Buffer
가장 먼저 그려지는 건 배경일까 ? 캐릭터일까? 이펙트일까? UI 일까 ? 답은 그려지는 순서는 제멋대로이다. 특정한 명령이나 그룹핑에 따라서 그리는 순서를 조정할 수 있지만 간단하게 "계산이 다 끝난 녀석을 그린다" 이다. 그러니 어느것이 먼저 그려졌는지 알 수 없다. 검은색 공이 먼저 그려졌는지 , 뒤에 있는 하얀색 큐브가 먼저 그려졌는지 알 수 없다 "일단 순서는 상관없이 그린다" 라는 대전제로 시작하겠습니다. 뒤에 있는 오브젝트가 먼저 그려지고 앞에 있는 오브젝트가 그려질 때 뒤에 있는 하얀색 큐브와 앞에 있는 검은색 공이 있습니다. 뒤에 있는 하얀색 큐브가 먼저 그려지고 앞에 있는 검은색 공이 뒤에 그려지면 문제 없이 그려집니다. 그냥 그려진 큐브 위에다가 검은색 공을 덧그리면 되니까요. 이것을..
2022.07.25 -
Cubemap Reflection
실시간 반사는 다른 연산들보다 상당히 무거운 연산인 것은 사실이다. 그래서 많이 사용하는 방식은 Cubemap이라는 환경 텍스처를 이용해 주변 이미지를 텍스처로 만든 후 이를 오브젝트에 씌우는 방식을 많이 사용한다. 기본 적인 Cubemap을 적용하는 코드는 다음과 같다. Shader "Custom/0725Reflection" { Properties { _MainTex ("Albedo (RGB)", 2D) = "white" {} _Cube("CubeMap",Cube) = ""{} } SubShader { Tags { "RenderType"="Opaque" } LOD 200 CGPROGRAM #pragma surface surf Lambert noambient #pragma target 3.0 sample..
2022.07.25 -
커스텀 라이팅2
Tags {"LightMode" = "ForwardBase"} 이것의 의미는 이 패스를 포워드 렌더러의 첫 번째 라이트 패스로 사용하겠다는 것이다. ForwardBase 패스가 오직 하나라면 첫 번째 빛을 제외한 다른 빛은 최종 결과에 영향을 미치지 않을 것이다. 만약 다른 빛도 영향을 주길 원한다면 또 다른 패스를 추가하고 그것의 태그를 다음과 같이 바꾼다. Tags {"LightMode" = "ForwardAdd"} #include "UnityLightingCommon.cginc" UnityLightingCommon.cginc는 라이팅 셰이더에 필요한 많은 유용한 변수 및 함수들이 담긴 파일이다. 커스텀 라이팅을 할때 주의해야 할 점은 노멀 벡터와 빛의 방향 벡터의 좌표 공간을 일치시켜야 한다. 생각..
2022.07.17