2021. 11. 29. 01:33ㆍ유니티 & C# 공부
이재현 강사님 강의 듣고 나름 정리해서 올립니다.
1. 네비게이션
유니티 3은 2010.9 출시
유니티 3.5 이전 - 자체적으로 길찾기 알고리즘만 제공(A * pathfinding = A스타 패스웨이)
유니티 3.5 이후 - 네비게이션 메쉬 적용
네비게이션 - 3D 지형/지오메트릭을 분석, 미리 데이터화 해서 가장 최단경로를 계산
가장 난이도 쉬운 경로 쪽으로 이동 가능
https://mowingnow.tistory.com/8 네비게이션 정리
2. 쉐이더
빛 받을 때 겉표면 재질의 표현 방법
3. 물리기반 쉐이더 PBR
유니티 5. 2015.3.3 시작
유니티 5 이후 - 물리기반 쉐이더 PBR도입되어 정반사 난반사 정도 등 표현가능해짐, 비쥬얼퀄리티 상승
재질마다 빛 반사 흡수율을 실사 흡사하게 렌더링해주는 기능)
4. URP(이전 LWRP), HRP
LWRP(현재 URP) - 유니티 2019년부터 모바일,VR,AR에서 가볍고 퀄리티 높게 사용할 수 있게 제공,
URP로 이름변경. 유니버셜 렌더링 파이프
HRP - 최고사항 그래픽 퀄리티
5. 개발방식 및 물리엔진 기존 / 개발 방향
기존에는 컴포넌트 기반의 개발 방식(CBD : Component Based Development)이고 현재 physX를 사용
하나, 데이터 기반 개발방식(DOTS, Data orientated Technologies Stack) 개발중으로, 퍼포먼스를 극대화
하고자 하며 DOTS에 사용되는 3D물리엔진은 unity physics(유니티 기본 물리엔진)과 havok Physics로
개발중이고 프리뷰로 제공한다.
hovk은 비활성 오브젝트를 수면 모드로 전환하는 것을 비롯한 다양한 자동 캐싱 전략을 통해
CPU 리소스가 필요한 곳에, 복잡한 씬과 물리적 상호작용을 할 때 사용한다고 함
hovk와 유니티 physics 관련 게시글, 그리고 DOTS 모두 아래 사이트에서 확인 가능
https://blog.unity.com/kr/technology/announcing-unity-and-havok-physics-for-dots
https://blog.unity.com/kr/technology/havok-physics-in-unity
데이터 기반 개발방식(DOTS, Data orientated Technologies Stack) =멀티스레드 지향
6. 라이트와 조명 관련
1) 라이트 매핑 (정적 물체) - GI = 전역조명(직접광원과 간접광원)에 대한 데이터를 미리
택스쳐(=Light map)로 1개이상 제작.
특히 간접광원은 퍼포먼스에 과부하되기 때문임.
간접광원 = 빛이 물체에서 튕기면서 발생
직접광원 = Directional Light 4)번 참고
미리 조명효과를 만들어서 프레임드랍을 최소, 최적화.
실시간 조명을 사용한다면, 조명이나 그림자는
모든 프레임마다 연산(계산)
프레임 드랍 발생.
미리 만든 조명효과와 실시간 렌더링 화면과 오버레이(Overlay)시킴
실시간 라이트매핑 기능 취소는 window - lighting - setting의
lighting view에서 Auto Generate옵션을 해제하면 됨.
. pc성능 떨어져있다면 버벅이긴함
Auto Generate - 라이트매핑은 처음에는 하는게 좋음(선택)
. pc성능 떨어져있다면 버벅이긴함
[ Secene탭 프로퍼티]
[Mapping Light 탭]
Baked Global IIumination 체크 하기
[Lightmapping Settings 탭]으로 bake할 수 있음
1. Lightmapper Progressive GPU 빠르지만 아직 개발Privew
Progressive CPU
Enlighter (Deprecated) 지원x,
Progressive 는 결과미리보기 + bake, 일시정지가능
Enlighter 결과 아웃풋 미리보기 x
2. Lightmapper Progressive GPU 빠르지만 아직 개발Privew
Progressive CPU
Enlighter (Deprecated) 지원x,
Progressive 는 결과미리보기 + bake, 일시정지가능
Enlighter 결과 아웃풋 미리보기 x
3. Direct Samples 직접 광원 퀄리티
4. InDirect Samples 간접 광원 퀄리티
5. Min Bounces 조명 튕기는 거 감지
6. Max Bounces 조명 튕기는 거 감지
7. Lightmap Resolution 텍셀(텍스쳐해상도) 얼마만큼 - 40은 높음
Progressive CPU
Enlighter (Deprecated) 지원x,
8. Lightmap Padding 너무 타이트하면 텍스쳐 품질 저하.
경고 나오면 padding늘리기
9. Max Lightmapsize 2048까지 무난, 모바일 저사양은 4096위험함
10. Compress 압축 하기(적용함)
11. Ambient Occulsion 물체와 지면 닿는 경계선 어둡게
압체감 현실감을 더 증가한다.
12. Auto Generate옵션 선택임 (pc성능 저하된다면 해제하고 가능)
환경광원(skybox 의 은은한 빛) 없애기
[ Enviroment 탭 프로퍼티 ]
Enviroment light 의 skybox를 color로
Ambient color를 가장 어둡게(예시)
Enviroment Reflections 의 skybox를 custom로
https://blog.unity.com/kr/technology/lighting-tips-for-mobile-game-development
2) 라이트 프로브 (동족 물체)
실시간 조명 아님. 모든 플랫폼에 다 사용할 것. 적용 안하면 퀄리티 증가
몇 개의 Point Light 배치 후 라이트프로브 추가배치, 인스펙터 창에 Depulicate로 복사,
배치 후 라이트매핑에서 베이크 하면
주변 광원을 흡수, 조명 데이터 값을 저장시켜
움직이는 캐릭터에 가지고 있는 빛을 제공하는 역할 함
3) 리플렉션 프로브 - 반사효과 가능 (참고 정리 사이트)
4) 조명 Lighting에 관한 내용
환경광원 - 스카이박스의 밝음에 의해 은은히 보이게 함
직접광원 Directional Light = 실런더 형태 (문제!!)
Directional Light - 전체 화면에 균일한 빛, 위치는 상관x, 각도에 따라 그림자 방향과 길이 변경
Y축을 0보다 높게 설정하는 것이 편리 (빛이 미치는 범위 설정x Point light와 차이점)
intensity - 빛 강도
Point Light - 위치한 좌표 중점으로 주변으로 퍼져나가는 조명. 백열전구.
빛이 퍼지는 범위(Range)를 설정할 수 있는 속성 있음
Spot Light - 콘 모양, 가장 연산 부하가 크다. 빛이 뻗어나가는 각도를 조정
할 수 있는 Spot Angle 속성 제공함
Area Light - 라이트 맵핑 해야만 보이는 조명, 간접 조명 효과. 사각형 형태 조명.
한쪽면에서 빛을 발함
Light 인스펙터 창 프로퍼티
Range 조명범위
Mode realTime실시간 / baked / mixed 2가지로 섞음
intensity 강도
Inderct 간접광원 증폭 값
shadow type hard /soft (그림자경계선이 부드러운가)
7. 하늘 표현 방식
1) 프로시저럴 스카이 - 기본 방식임 (머테리얼 생성 후 적용 방법 문제 나옴)
머테리얼 제작 > 적용( window - lighting - Enviroment - Skybox Material에 적용)
1. 머테리얼 제작
(1) Shader의 Skybox - procedural 설정
(2) 속성 sun size convergence로 테두리 밝고 진하게
(3) 속성 Amophere Thickness - 대기 탁도, 먼지농도 조절 , 우주와 노을 표현 가능
(4) 속성 Exposure - 노출 정도
2) SkyBox - 6-Slided sky으로 이름 변경 ,
카메라에 clear (floags/mode)를 skybox로 설정
유니티 문서 (https://docs.unity3d.com/kr/2019.3/Manual/class-Skybox.html)
카메라 clear flags - skybox
- solid(색으로 렌더링)
- Depth only(카메라 추가 시 렌더링 우선순위 설정)
카메라의 clear flags의 Depth only에 대한 설명
http://twinbraid.blogspot.com/2015/02/blog-post_26.html
카메라가 렌더링 할 수 있는 기본 영역 = 프로스텀 영역
Clipping Planes(Far) 속성에서
Near 0.3 = 30cm 앞에서부터
Far 1000 = 1km 까지 렌더링 가능
카메라 프러스텀 영역에 찾다가 오쿨루젼 컬링과 프러스텀 컬링 차이가 헷갈렸음
이 사이트가 가장 쉽고 명쾌한듯
https://rito15.github.io/posts/unity-opt-occlusion-culling/
+ 컬링 기법은 3가지 있다고 함
1) 프러스텀 컬링 (카메라 랜더링 영역으로만)
2) 카메라 거리에 의한(너무 멀면 렌더링X, 컬링(가림) = LOD , level of detail)
3) Occulusion Culling 오쿨루전 컬링
1인칭, 건물 등 많으 오브젝트일 시 (tow down 시야 일 때는 효과x 안좋음)
앞 건물이 가장 커서 카메라 시야에서 안보이는 것들은 컬링(안보이게) 시키는 효과
메인 카메라의 occlusion culling으로 비활성화 가능함
Smallest occluder 5m가 최소크기. 너무 작으면 안좋음
오브젝트에 Static 설정해줘야 함
Occluder 다른 물체 가리는 오브젝트에 적용함.
투명쉐이더 쓰면 안됨 > 경고 나와도 어느오브젝트 문제인지 안나옴.
메인 카메라가 이 안에 들어가면 안됨.
Occludee 가려짐을 당하는 오브젝트에 적용
Occluder + Occludee 가려짐을 당하면서, 자신 뒤에 작은 물체도 가리게 하고 싶을 때 사용
Occlusion Area로 필요 부분만 베이크 가능
3) SkyDome - Sphere을 절반으로 자른 메쉬
드로우콜에 유리함. 하늘표현하는 메쉬 (1장의 텍스쳐)를 안으로 적용
모바일 게임에 잘 적용. 반구형 Texture에 이미지 늘리므로 단점으로는 끝 부분이 일그러진다.
4) Cube Map 방식 - 카메라로 360 촬영, Texture 구한 후 유니티에 표현
* 이 때 경계선이 지글지글 끓게 되는 현상이 발생되는데, 이는 Mip Map 옵션이
기본적으로 활성화 되어 카메라로부터 멀리 떨어지면 미리 텍스쳐 사이즈를 축소,
미리 축소된 텍스쳐로 렌더링 됨
렌더링 속도는 향상되는데, 메모리는 30% 늘어난다.
이를 막으려면 texture 인스펙트 창- Adivanced- Generate Mip Map 체크 풀면 됨
체크 되어 있다면, 제일 밑 슬라이드바가 보이게 됨 (사진참고 사이트는 아래)
https://learnandcreate.tistory.com/501
5) 파노라믹 방식 - 360도 VR에서 많이 사용
7. 메쉬 / 머테리얼/ 텍스쳐 / 폴리곤 / Triangle / vertex / 빛
메쉬 - 3차원 형상 정보, Vertex(점) 테이터 가짐
머테리얼 -표면을 렌더링하는 방법( 텍스처에 대한 레퍼런스, 타일링 정보, 컬러 틴트 등을 포함)
(1) Metalic(금속) 에 있는 smoothness
-금속과 고무 표현 정도를 조절 가능
(2) Emission 체크 후, Texure(검은...) 적용
- 특정 부분만 밝게 빛나게 함
(결과물 밑 사진)
(3) Secondary Map은 좀 더 디테일 정밀하게 함
텍스쳐 - 비트맵 이미지. 머티리얼에 텍스처에 대한 레퍼런스가 포함됨 (출처 : 유니티 메뉴얼)
폴리곤 - 입체 형태 이루는 가장 작은 다각형(조각)
Triangle(Tris) -Vertex점 3개 만나는 삼각형 면
Vertex - 폴리곤의 꼭지점. 일련번호. 좌표값
빛 - 들어올 때 색깔 정보, 반사에 대한 정보, 법선벡터
8. 씬 / 게임오브젝트/ 프리펩 / 네스티브(중첩) 프리펩
씬 - 화면 구분 단위 (메뉴/옵션/게임씬/엔딩화면)
게임오브젝트 - 씬에 존재하는 가장 작은 단위 , 컴포넌트 추가가능(스크립트 포함)
프리팹 - 복제, 재사용 하는 원본 게임오브젝트, 완성된 기능을 재사용하기 위한 원본의 객체,
프리펩 수정 시, 하이어라이키에 있는 복사한 클론들은 자동 수정된다.
복사 클론에 수정하고 원본프리펩에 반영 안하면 인스펙터 창에 파란색 뜬다.
선택한 프리펩만 연결 끊는 법 - 복사클론에 마우스 우클릭 - unpack prefab
모든 프리펩 연결 끊기 - 사클론에 마우스 우클릭 - unpack prefab Complately
= 모든 프리팹 인스턴스(네스티드 프리팹 또는 기본 프리팹)를 언패킹
네스티드 프리펩 - 2018.3 부터 중첩 프리펩 기능 ( 프리팹 하위오브젝트로 프리팹 중첩)
9. 컴포넌트
유니티는 CBD라는 컴포넌트 기반의 개발 방식을 사용하며 CBD는 독립적인 개발 기능단위를 의미한다.
컴포넌트 안의 요소,속성(예: position x값, y값)들은 프로퍼티 라고 부름 .
Transform은 삭제 불가능한 컴포넌트.
컴포넌트 삭제 시 누르는 버튼은 케밥이라고도 외국에서는 말함.
컴포넌트 예시
1 콜라이더(=충돌체)
2 Render(메쉬렌더링)- 반드시 Mesh Filter(오브젝트 어떤 것을 그리는지 형태, 모양)가 있어야 함
'유니티 & C# 공부' 카테고리의 다른 글
(유니티 자격시험 Unity GameDeveloper)6. 주인공 점수 감소/싱글톤(싱글턴)/발사체/유니티 예약 폴더 (0) | 2021.12.04 |
---|---|
(유니티 자격시험 Unity GameDeveloper) 5. 네비게이션 (0) | 2021.12.04 |
(유니티 자격시험 Unity GameDeveloper)4. 애니메이션/유한상태머신/가비지콜렉션 GC (0) | 2021.12.02 |
(유니티 자격시험 Unity GameDeveloper)3.이벤트함수/벡터/오일러/법선벡터/충돌/문법/오디오 (0) | 2021.12.01 |
(유니티 자격시험 Unity GameDeveloper)1. 유니티 기본 단축키(유니티 21년 기능 포함) (0) | 2021.11.29 |