전체 글238 [ShaderLab] NormalMap ■ Footage Metalic과 Smoothness 프로퍼티를 추가 및 적용한 뒤 노말맵을 적용한 모습이다. 노말맵은 텍스처의 디테일을 살리기 위해 존재하는 눈속임용 맵이다. 벡터 데이터들로 이루어져있으며 이러한 데이터들은 일반적인 게임용 텍스처 포맷인 DXT1 혹은 DXT5가 아니라 DXTnm의 형식으로 집합되어 있다. 위와 같이 다른 이유는 일반적으로 사용하는 포맷을 그대로 가져다 쓴다면 벡터 데이터들의 품질 저하를 일으킬 수 있기 때문에 AG파일 포맷인 DXTnm 포맷을 만들어 사용하게 된 것이다. 이 포맷은 노말맵의 RGB중 R과 G 값의 퀄리티를 최대한 보전하여 A와 G에 개별적으로 넣어 저장한다. R과 G는 X와 Y에 대응되며 Z는 삼각함수를 이용해 수학적으로 추출된다. 그러므로 벡터 데이터.. 2024. 2. 28. [ShaderLab] Vertex Color (Masking) ■ Vertex Color 정점(Vertex)에는 여러 가지 정보가 들어있다. 대표적으로 (1) 위치 (Position) (2) 컬러 (Color) (3) 노말 (Normal) (4) 탄젠드 (Tangent) (5) UV (Texcoord) 위와 같은 정보를 담고 있는데 버텍스 컬러는 이 중에서 버텍스가 내포하고있는 Color값을 뜻한다. 이같이 외부 인터페이스에서 입력해주는 값이 아니라 엔진 내에서 버텍스 값을 받아와 사용하려면 Input 구조체를 사용해야했다. ■ Poly Bursh 유니티 2018부터 Poly Bursh라는 툴을 사용해 버텍스에 컬러값을 칠해줄 수 있게 되었다. Poly Bursh를 통해 위와 같이 R, G, B 영역을 칠해줬다. 처음에 칠하기만 하면은 우리 눈에는 보이지 않으므로 .. 2024. 2. 27. [ShaderLab] UV, 불 이펙트 ■ 기본적인 세팅 불 텍스처를 오브젝에 그대로 씌우기만한다면 검은색 배경화면이 분리되지 않은 채 그대로 적용이 됨. 이를 제거하기 위해 RenderType은 Transparent로 두고 alpha:fade 키워드를 스니핏에 추가해준다. 또한 빛의 영향을 받지 않고 텍스처 본연의 색깔을 나타내기 위해 o.Albedo = c.rgb 코드를 주석처리한 뒤 o.Emission = c.rgb를 추가해줬다. 기본 불 이미지를 적용해줄 뿐만이 아니라 불을 역동적으로 표현 하기 위해 불기둥 이미지를 적용 한 뒤 불기둥 이미지의 uv를 유니티 내장된 _Time 변수(시간)에 따라 조절해주는 코드를 추가해줬다. ▼ 결과물 불을 더 사실적으로 표현하기 위해 저자께서 올려주신 리소스 중 노이즈를 추가했다. 그리고 방금 추가한.. 2024. 2. 27. [ShaderLab] Surface Shader - Texture ■ 코드 이전 쉐이더 코드 속 스니핏에서 사용했던 fullforwardshadows키워드를 제거했다. 추가한다면, 이 쉐이더를 사용하는 오브젝트는 포워드 렌더링(Forward Rendering)일 때, 모든 라이트로부터 그림자를 생성하는 상태가 된다. 해당 키워드가 없다면 Directional Light로부터만 그림자를 생성하고 Point Light이나 Spot light로부터 그림자를 생성하지 않는다. [추가한 부분] Lerp함수를 활용하여 Texture1과 Texture2를 선형적으로 섞어 사용하였다. ■ Scene 작업물들을 한 데 모아놓고 깔끔한 상태로 보고싶어서 GUIText를 띄워줄 컴포넌트를 작성하고 부착했다. Texture 작업을 한 것은 Texture Mix Shader의 글자가 박힌 P.. 2024. 2. 15. [ShaderLab] 서피스 쉐이더 구조 및 기초 작업 ■ ShaderLab 유니티 쉐이더는 ShaderLab이라고 부리는 자체 스크립트 언어를 갖고있다. ShaderLab의 작성 방법이 아래와 같이 크게 세 가지로 나뉜다 (1) ShaderLab으로만 작성하기 (2) Surface Shader(서피스 셰이더)로 작성하기 (3) Vertex & Fragment Shader [Pixel Shader] (버텍스 & 프래그먼트 셰이더)로 작성하기 종류 특징 ShaderLab 매우 가볍고 하드웨어 호환성이 높지만 기능이 부족함. 요즈음 지원을 안하는 추세이기에 아래 두 가지 방식으로 보통 제작함 Surface Shader ShaderLab스크립트와 같이 CG쉐이더 코드를 사용하는 방법. 픽셀 쉐이더 부분만 가볍게 작성하면 됨. 하지만 최적화를 원하는만큼 하기에는 한.. 2024. 2. 15. [Alogrithm] 히프, 기수, 계수 정렬, 알고리즘 비교표 ■ 히프 정렬 (Heap Sort) 1. 히프(heap) 자료구조를 사용하는 정렬 알고리즘임. 2. 히프는 최댓값, 최솟값을 쉽게 추출할 수 있는 자료구조이며 완전 이진 트리이다. 3. 최대힙 혹은 최소 힙에서 삽입, 삭제 연산에 내포되어있는 정렬 알고리즘들이 히프 정렬이다. * 완전이진트리 : 루트로부터 자식노드가 두 개씩 있는데 마지막 레벨의 노드들이 왼쪽부터 오른쪽으로 채워져있는 트리 (※ 마지막 바로 위 레벨 노드들은 다 꽉채워져있고 마지막 레벨의 노드들도 빈틈 없이 왼쪽부터 오른쪽 순서대로 채워져있어야함) [히프 정렬 과정] 1. 정렬할 데이터들을 먼저 히프로 삽입해야 함 2. 그런 다음 루트 노드들 하나씩 삭제하여 꺼내면 히프에 있는 데이터들이 순서대로 나오게 되는데 이 순서대로 나열한 것이 .. 2024. 2. 7. [Algorithm] 셸, 병합, 퀵 정렬 ■ 셸 정렬 (Shell Sort) 삽입 정렬을 보완한 알고리즘. Donald L. Shell이란 사람이 제안한 방법이라 셸 정렬임. [삽입 정렬의 문제점] 1. 데이터들이 삽입될 때 이웃한 위치로만 이동하는 것 2. 삽입되어야 할 위치가 현재 위치에서 상당히 멀리 떨어진 곳이라면 많은 이동을 해야만 제자리로 갈 수 있음 [특징] 1. 삽입 정렬의 확장된 개념. 전체 데이터를 한꺼번에 정렬하는 것이 아니라 매개변수를 설정한 후 이 매개변수만큼 떨어져 있는 데이터들을 모아 부분 리스트를 만든 다음 그 매개변수를 줄여가면서 정렬하는 방식 2. 일정한 간격(gap)만큼 떨어져있는 데이터들끼리 부분 리스트를 구성하고 각 부분 리스트에 있는 데이터들을 삽입 정렬하는 작업을 반복 3. 큰 간격에서부터 시작하여 각 .. 2024. 2. 7. [Algorithm] 선택 정렬, 버블 정렬, 삽입 정렬 ■ 선택 정렬 (Selection Sort) 정렬되지 않은 여러 데이터들 중에 '가장 작은 값'을 찾아 가장 앞의 데이터와 교환하는 작업을 반복하여 정렬 정렬되지 않은 전체 데이터 중에서 해당 위치에 맞는 데이터를 선택하여 위치를 교환 [구현] [시간 복잡도] 1. 선택 정렬의 시간 복잡도는 O(n^2) 2. 입력이 거의 정렬되어 있든지, 역순으로 정렬되어 있든지, 랜덤하게 되어 있든지를 구분하지 않고 항상 일정한 시간 복잡도를 가짐 (입력에 민감하지 않은 알고리즘) 3. 정렬을 위한 비교 횟수는 많으나 교환 횟수는 상당히 적음 ■ 버블 정렬 (Bubble Sort) 첫번째 값부터 시작해서 바로 앞뒤 데이터를 비교하여 큰 것은 뒤로 보내는 방법을 사용하는 정렬 수가 정렬되는 모습이 물속의 거품(Bubbl.. 2024. 2. 7. [Algorithm] 정렬 알고리즘,내부정렬, 외부정렬 ■ 정렬 알고리즘 여러 알고리즘 중 가장 기본이 되는 알고리즘 [특징] 1. 대부분의 정렬 알고리즘은 키값을 비교하는 비교 연산과 자료의 위치를 바꾸는 이동 연산으로 이루어짐 2. 비교 연산의 횟수와 이동 연산의 횟수로 정렬의 효율성을 판단 3. 정렬을 수행해야 하는 데이터의 크기가 크면 이동 연산이 적을수록 좋음 (데이터의 크기가 크면 그만큼 이동해야 하는 데이터의 크기가 증가하여 이동 연산을 수행하는데 더 많은 시간이 필요) 4. 연산의 횟수가 같더라도 비교 연산이 많은 알고리즘이 이동 연산이 많은 알고리즘보다 성능이 더 우수 5. 컴퓨터 메모리 내부에서 정렬하는 '내부 정렬 알고리즘'과 보조기억 장치에서 정렬하는 '외부 정렬 알고리즘'이 있음 [시간복잡도] 1. 대부분 O(n^2)과 O(nlogn).. 2024. 2. 7. 이전 1 ··· 7 8 9 10 11 12 13 ··· 27 다음