본문 바로가기

게임최적화

쉐이더 FallBack과 시맨틱 안녕하세요. TA 새벽언덕입니다. 쉐이더의 FallBack과 시맨틱에 관해서 말씀드리고자합니다. FallBack FallBack "Diffuse" 쉐이더의 마지막 줄끝에 FallBack "Diffuse"라고 보통 적혀있는것을 보실 수있습니다. 저는 이것이 무엇을 의미하는지 많이 궁금했었는데요. 이것의 의미는 이 하드웨어에서 실행할 수 있는 하위 쉐이더가 없는 경우, 다른쉐이더(Diffuse)에서 시도 하라는 내용입니다. 즉 원래 셰이더가 맞지 않을때를 대비해서 다른 대안 셰이더를 지정한것입니다. FallBack으로 지정해주면 렌더링이 되지않는경우를 막고 최소한 낮은 품질으로라도 렌더링을 할 수있게 됩니다. FallBack에는 만일의 경우 여러 플랫폼에서 대응할수있는 쉐이더를 적어주는것이 일반적입니다. F.. 더보기
Shader의 Struct, SubShader, Pragma 안녕하세요~ TA 새벽언덕입니다. 오늘은 유니티 쉐이더에서 Struct, SubShader, Pragma 부분에대해서 말씀드리고자합니다. 먼저 구조체(Struct)입니다. 구조체 : Struct vert & frag struct appdata부분과 struct v2f부분으로 보통 사용합니다. 예를들면 struct appdata { float4 positionOS : POSITION; float4 color : COLOR; } struct v2f { float4 positionCS : SV_POSITION; float4 color : TEXCOORD1; } 위와같이 코드를 작성해 줄 수 있습니다. 여기서 appdata부분은 Shader에서 vertex의 정보를 가져오는 구조체부분이고, v2f는 vertex.. 더보기
Properties & Shader 경로지정 안녕하세요. TA 새벽언덕입니다. 오늘은 Shader의 Properties와 Shader의 경로지정, CG, HLSL구문이 어디서 시작하고 끝나는지 안내드리고자합니다. Properties Property _Color ("Color", Color) = (1,1,1,1) _변수명(프로퍼티명,프로퍼티) = (초기값) 아래는 여러가지의 예시입니다. Range, float, int, color, vector이 있는데 직접 사용해 보시는것이 가장 좋습니다. _Name("display name", Range(min,max)) = number _Name("display name", Float) = number _Name("display name", Int) = number _Name("display name", Col.. 더보기
UV와 Sampler2D 안녕하세요. TA새벽언덕입니다. Shader에서 사용하는 uv와 sample2D개념에대해서 말씀드리고자합니다. UV란? UV좌표는 UVW(== RGB, XYZ와 같음)란 세개의 채널이있지만, 2차원 좌표만을 사용하기 때문에 마지막 W를 제외한 UV 두개의 채널을 이용합니다. Sampler 2D 텍스쳐는 float가 아닌 'sampler2D'라는 자료형을 사용합니다. 텍스쳐를 오브젝트에 매핑하기 위해서는 1)입력할 텍스쳐 2)UV좌표 위 2가지 정보가 하며, 따라서 자료형 float로는 텍스쳐를 매핑할 수 없습니다. UV와 XYZW UV는 4개까지 채널을 쓸수있습니다. UV에서 주로 float2를쓰지만, 최대 float4까지 사용할 수있습니다. 초기값으로 x,y,z,w중에 z에는 0을 w에는 1을 넣어서 .. 더보기
쉐이더의 Culling, Queue, RenderType 안녕하세요. 새벽언덕입니다. 쉐이더의 Culling, Queue, RenderType에 대해서 말씀드리려고합니다. Culling Culling은 뷰어에서 멀어지는 다각형을 렌더링하지않는 최적화방법입니다. *컬링의 기준은 오브젝트(렌더링된물체)를 바라보는 카메라(보이지않는 카메라로 씬뷰를 보고있는것임)와 렌더링되고있는 오브젝트간의 사이가 기준입니다. 더 먼곳이 뒷면(Back이 됩니다.) [Normal의 방향] Cull Back : 뒷면을 컬링하시오. Cull Front : 앞면을 컬링하시오. Cull off : 컬링을 비활성화하여, 앞,뒷면 모드 렌더링하도록 합니다. 렌더링 파이프라인에서 Culling Depth Test는 Vertex Shader와 Fragment Shader사이에 존재합니다. Queue.. 더보기
SRP Batcher 안녕하세요 새벽언덕입니다. SRP Batcher를 사용하는 방법을 안내드리겠습니다. 일반적으로 쉐이더를 처음 생성하면, SRP Batcher부분이 not compatible라고 되어있습니다. 이것을 아래와같이 바꿔주고자하는데요 이것을 하는 방법은 아래와 같습니다. 쉐이더의 Properties 변수부분을 CBUFFER로 감싸주면됩니다. CBUFFER_START(UnityPerMaterial) float4 _MainTex_ST; float4 _MainColor; CBUFFER_END 주의사항입니다. 1. Properties에 선언한 모든 변수를 CBUFFER로 감싸줘야합니다. 2. Pass를 여러개 쓸경우, 해당 Pass에서 변수를 쓰지않더라도, Properties의 모든 변수를 CBUFFER로 감싸줘야합니.. 더보기
Culling 안녕하세요. 새벽언덕입니다. 게임개발의 최적화 기법중 하나인 Culling에 대해서 설명드리도록하겠습니다. - Culling (컬링) - 단어 뜻 : Culling (도태) - 목적 : 최적화 : 카메라에 보이는 것만 렌더링하여서 성능을 절약하는것이 목적 - Culling의 종류 Backface Culling, Occlusion Culling, Frustrum Culling, 공간 분할 컬링( BSP, PVS, Portal, QuadTree, OcTree) - Shader Code의 Culling 설정 (Backface Culling) CullBack : 뒷면을 컬링합니다. [Default : 아무것도 적지 않으면 CullBack] (뒷면 삭제) CullFront : 앞면을 컬링합니다. [앞면 삭제 : .. 더보기