본문 바로가기

분류 전체보기481

[Unity/Shader] 파트18-1 : 2Pass를 이용한 깨끗한 알파 블렌딩 (뒷면이 안보이게) z버퍼에 그리는 것과, 화면에 그리는 것을 별도로 분리해 계산한다. 이를 통해 반투명의 뒷면이 안보이게 하는 방법이다. 코드 Shader "Custom/part18-1" { Properties { _MainTex ("Albedo (RGB)", 2D) = "white" {} } SubShader { Tags { "RenderType"="Opaque" } LOD 200 // 1st pass : Z 버퍼에는 그리되, 화면엔 그리지 않는다. zwrite on ColorMask 0 // 화면에 그리지 않게 한다. CGPROGRAM #pragma surface surf nolight noambient noforwardadd nolightmap novertexlights noshadow #pragma target 3.. 2023. 9. 4.
[Unreal/Niagara] 벡터필드 사용법 후디니 내보내는 노드는 labs vector field export이다. vdb의 경우 아래와 같은 절차를 거쳐야한다. 언리얼 빨간색은 필수 노란색은 권장 사용한 모듈 - Sample Vector Field 모듈 벡터필드를 적용한다. - Apply Vector Field 모듈 velocity에 값을 주면 적은 수치로도 큰 변화를 확인할 수 있다. tightness는 0~1 값이다. 1에 가까울수록 벡터필드를 정확히 따라간다. 2023. 9. 4.
[레퍼런스] 레퍼런스 검색어 팁 Sakuga를 검색어에 입력하면 좋은 애니메이션 레퍼런스를 얻을 수 있다. Sakuga는 일본어로 '작화'를 의미한다. 이를 영어로 그대로 쓴 것이다. 앞에다 원하는 요소를 쓰면 된다. 구글이나 핀터레스트에 FX Sakuga, Effect Sakuga와 같이 쓰면 양질의 레퍼런스를 구할 수 있다. 2023. 8. 30.
[Unity/Shader] 파트17-2 : 블렌드 펙터 연산 개요 중요한 기본 공식은 다음과 같다. (펙터 * Source) + (펙터 * Destination) 이펙트를 예로 들어보자. 자신을 Source라고 부른다. (Src) 배경을 Destination이라고 부른다. (Dest) 예시 1. SrcAlpha OneMinusSrcAlpha (알파 * Source) + (1-알파 * Destination) 2. SrcAlpha One 배경은 그대로 사용되므로 겹쳐서 밝아진다. (알파 * Source) + (1 * Destination) 3. One One 알파 채널이 전혀 작동하지 않는다. (1 * Source) + (1 * Destination) 4. DstColor Zero 결론적으로 색상끼리의 곱셈이다. (배경색상 * Source) + (0 * Destina.. 2023. 8. 30.
[Unity/Shader] 파트17-1 : 커스텀 제어 가능한 알파 블렌딩 모든 문제가 발생하는 전형적인 알파 블렌딩 쉐이더이다. 단, 명시적으로 선언된 부분만 다르다. 명시적으로 선언된 부분은 다음과 같다. 1. z 버퍼에 쓸 것인지 여부 2. 블렌드 펙터로 블렌딩을 제어 코드 Shader "Custom/part17-1" { Properties { _MainTex ("Albedo (RGB)", 2D) = "white" {} } SubShader { Tags { "RenderType"="Transparent" "Queue"="Transparent" } // * zwrite off // zwrite 끄고 켜기 옵션 blend SrcAlpha OneMinusSrcAlpha // blend 펙터 LOD 200 CGPROGRAM #pragma surface surf Lambert ke.. 2023. 8. 30.
[Unity/Shader] 파트16-5 : 알파 테스팅 (컷아웃) 알파 테스팅(컷아웃)은 나무나 풀 등을 그릴 때 사용한다. _Cutoff 프로퍼티는 잘라내는 기준이 될 값이다. 단, 잘라내면 외곽이 거칠어지는 문제가 있다. 안티알리아싱으로 개선한다. 또는 해상도가 높은 텍스쳐를 사용해서 덜 거슬리게 한다. 코드 Shader "Custom/part16-5" { Properties { _Color ("Color", Color) = (1,1,1,1) // _Color가 없으면, 그림자가 나오지 않는다. 그림자를 그리는 Pass에서 그림자 색상을 위해 이 인자를 사용하기 때문이다. _MainTex ("Albedo (RGB)", 2D) = "white" {} _CutOff ("Alpha cutoff", Range(0,1)) = 0.5 // * } SubShader { Tags.. 2023. 8. 30.
[Unity/Shader] 파트16-4 : 알파 소팅 문제 로봇에 알파 블랜딩 적용한다. cull on (양면)을 끄고 cull back으로 바꾼다. 그래도 위처럼 뒤에 가려져야 할 오브젝트가 앞에 찍히는 문제가 있다. 왜 그런가? 피봇을 중심으로 거리를 산정하는 특성 때문이다. 아래 그림처럼 오브젝트와의 거리는 피봇으로 판별한다. 오브젝트 크기가 극명하게 다르면 더욱 자주 발생하는 문제다. 아래 그림에서 우측은 바닥의 피봇이 카메라와 더 가까워서 생긴 문제다. 위 내용을 정리하자면, 알파 소팅을 써도 완벽한 앞 뒤 판정은 불가능하다. 이렇듯 앞 뒤 판정이 잘못된 경우에, 자기 자신을 잘라버리는 현상을 막기 위해 z 버퍼에 자신의 위치값을 입력하지 않는다. 이를 'zwrite를 off한다' 라고 한다. 따라서 앞뒤 연산이 잘못되어도 잘리지 않고, 앞뒤만 바뀌게 .. 2023. 8. 28.
[Unreal/Niagara] 시간에 따라 파티클 색상 변경 보라 -> 분홍으로 바뀌는 결과이다. 방법 1. lerp를 사용한다. 2. 컬러 지정이 쉽게 linear color rgb를 적용한다. 3. 알파에 커브를 적용해 컨트롤 한다. 2023. 8. 28.
[Unity/Shader] 파트16-3 : 알파 블렌딩 제작 알파 블렌딩을 실습한다. 반투명을 만드는 것이다. 풀은 예시일 뿐이다. 실제로 반투명을 풀에다 적용하진 않는다. (풀은 보통 AlphaTest (Cutout)을 사용한다.) 코드 Shader "Custom/part16-3" { Properties { _MainTex ("Albedo (RGB)", 2D) = "white" {} } SubShader { Tags { "RenderType"="Transparent" "Queue"="Transparent"} // Queue는 그리는 순서를 의미한다. Transparent라고 적으면 불투명 다음에 그린다는 의미다. cull off // 양면 LOD 200 CGPROGRAM #pragma surface surf Lambert alpha:fade // * #pragm.. 2023. 8. 25.