Awesome
ProjectKaya
프로젝트 카야는 유니티 코리아에서 진행하는 URP를 활용한 모바일 예제 프로젝트 입니다.
공개된 repository는 지속적으로 업데이트 되며, 사용자가 프로젝트에 기여하는 것도 가능합니다.
Mobile Platform을 위한 추가적인 최적화는 모바일 게임 성능 최적화 01 모바일 게임 성능 최적화 02 문서를 참고하시기 바랍니다.
프로젝트에 대한 보다 많은 정보는 Unity Webinar와 UniteSeoul 2020 Session 영상을 참고 바랍니다.
<p align="center"> <a href="https://youtu.be/QqTeElxbTA0" target="_blank"> <img src="https://img.youtube.com/vi/QqTeElxbTA0/0.jpg" style="margin: 1em; width:45%"> </a> <a href="https://youtu.be/SJBRPsziteQ" target="_blank"> <img src="https://img.youtube.com/vi/SJBRPsziteQ/0.jpg" style="margin: 1em; width:45%"> </a> </p>Project Kaya는 Unity Technologies Korea의 URP 모바일 플랫폼을 사용하는 Unity 사용자를 위한 예시 프로젝트입니다. 유니티 프로젝트 내에서 본 프로젝트의 자원을 상업적/비 상업적으로 사용하는 것은 허용되지만 재배포는 허용되지 않습니다. 이 프로젝트의 저작권은 유니티코리아에 있습니다. 라이센스와 관련한 자세한 내용은 프로젝트내의 Asset End User License Agreement 문서를 참고해주세요.
Project Kaya is an example project for unity users using URP mobile platform from Unity Technologies Korea. Commercial/non-commercial use of this project's resources is permitted in the unity project, but redistribution is not permitted. All right reserved by copyrights of this project belong to Unity Korea.For further details, please refer to the Asset End User License Agreement document in the project.
released note(kaya ver 1.1)
- UI anchor setting, UI Transform 정리
- skill, action UI layout 변경. 기타 세부사항 정리
- Hierarchy 정리
- Material example scene 개선중(수정 예정)
- shader graph node 수정
Requirement
- at least Unity 2021.3.2f1 LTS (Android module required) or above (2021.1.13f1 이전 버전은 주석 처리된 unpacknormal을 활성화해야 합니다.)
- URP 12.1
- Android Platform module Required
- Vulkan API supported(Visual Effect Graph를 사용하지 않는다면 ES 3.1이상)
- 윈도우 터미널, cmd, git bash 등에서 명령어 실행
git clone https://github.com/UnityKorea/ProjectKaya
editor setting
Kaya project는 android 플랫폼을 기준으로 작업되고 있습니다. 이를 위해서 editor를 이와 같은 환경으로 셋팅해주어야 합니다. 커맨드라인 인자 추가에 -force-vulkan
을 입력해 vulkan api로 동작하도록 설정합니다.
플랫폼을 android로 선택합니다(에디터 설치시에 android 모듈이 설치되어야 합니다
Project Setting
Renderer setting
Anti Aliasing
모바일 프로젝트에서 사용하는 MSAA 옵션은 프로젝트 상황에 따라 적절하게 조절해주는것이 좋습니다. 아래는 MSAA 샘플링 수에 따른 메시 외곽의 퀄리티 비교입니다. quality setting이 Low, medium, high에 따라 아래와 같이 변경됩니다.
Resource Compression
대부분의 Texture compression은 ASTC 를 사용하고 있습니다.
일부 리소스의 경우 압축하지 않은 RGB24 혹은 RGBA32입니다.
- 2048 normal texture를 ASTC12x12(0.6MB)으로 압축한것(좌)과 ASTC6x6(2.4MB)로 압축한 결과(우) 비교
Albedo texture의 경우보다 normal texture에서 이런 증상이 두드러지며 이럴경우는 리소스 압축 포맷과 옵션을 직접 선택하는 것을 권장합니다.
Scene List
Lobby scene은 로비 구현에 필요한 연출과 shader 예제를 제공하고 있습니다.
Animation type은 Generic으로 mechanim으로 구성되어 있습니다.
Lobby Scene
FPS Counter & information display
- Frame Rate Counter : 화면 왼측 상단에는 현재 Frame Rate에 대한 정보를 밀리세컨(millisecond, ms)과 프레임으로 표시되고 있습니다.
- Display pixel Resoultion : Rendering 되고 있는 현재 해상도를 보여줍니다.
- Graphics API : 현재 렌더링 되고 있는 Graphics API 정보를 보여줍니다.
Cinemachine
Lobby Scene에서 카메라 전환은 Cinemachine을 활용해서 이루어지고 있습니다. 카메라의 Priority값을 UI에서 바꿔줌으로써 카메라간 전환이 이루어지게 됩니다.
Scene에 CinemachineVirtualCamera를 배치하면 카메라는 해당 버추얼 카메라의 포지션으로 이동하게 됩니다.
- 1번 카메라 : 얼굴 근접 CM Face Shot. 1번 카메라에만 Depth of Field가 적용되어 있습니다.
- 2번 카메라 : 전신 CM FullBody shot
- 3번 카메라 : 스킬 CM Skill Shot
Realtime Reflection
Render texture와 shader custom을 통한 실시간 reflection을 구현한 예제입니다.
- Resoultion Mutiplier : 렌더링되는 반사이미지의 해상도를 설정
- Clip Plane Offset : 반사되는 이미지의 시작점을 설정
- Reflect Layer : 반사를 적용할 오브젝트 레이어를 선택
- Draw Dithering : 캐릭터 디더링을 반사에 그릴지 여부
PBR Custom Shader(Shader Graph)
kaya에 쓰이는 기본 shader는 URP Lit shader를 기반으로 shader graph에서 제작한 셰이더가 쓰이고 있습니다.
하나의 캐릭터 금속, 천, 가죽등 다양한 재질을 표현하기 위해 캐릭터 컨셉에서부터 이런 점을 고려하여 진행하였습니다.
Shader Graph를 사용해서 Lit shader의 metallic과 smoothness, AO를 하나의 mask texture로 사용하게 되었으며, smoothness 값은 remap으로 처리하고 있습니다.
Character Object Overdraw(Shader Graph)
캐릭터가 오브젝트에 겹쳐질때의 표시는 Renderer의 Render Features를 사용해 구현했습니다. 자세한 내용은 Universal Rendering Examples에서 확인할 수 있습니다.
Character Layer만 그리지 않고 Dither를 Depth Test후 opaque를 그린뒤(AfterRenderingOpaques) 나머지를 그리게 설정되어 있습니다.
Hair shader(Shader Graph)
UTKTemplate/URPHairKajiyaKay
헤어셰이더에서 많이 사용되는 UV를 세로로 펴지 사용하는 방식이 아닌 flowmap을 사용해 라이팅을 구현한 예제입니다. flowmap으로 헤어의 방향을 기록하고 shiftmap으로 하이라이트의 위치를 조절할 수 있습니다.
flowmap은 후디니에서 LabsFlowmap 노드를 사용해서 머리카락의 방향대로 vector을 정하고 그걸 렌더링해서 사용했습니다.
사용시에 텍스쳐의 sRGB옵션(Gamma correction)을 끄고 사용해야 합니다.
이 셰이더는 addlight, addlightshadow 까지 모두 지원합니다.
Shader Graphs/KajiyaKay
위방식과 다르게 Shader Graph로 작성되어있으며, 두개의 하이라이트를 조절해 헤어의 하이라이트를 표현하는 방식입니다.
Skin shader(Shader Graph)
SSS(SubSurface Scattering)의 구현은 Shader Graph를 사용해 구현되었습니다. Skin Texture의 Alpha Channel이 Thickness map으로 사용됩니다.
Animation Setting
Rig Setting
Animation Setting은 Generic을 사용하고 있습니다. 유니티의 Humanoid는 애니메이션 리타겟팅을 목적으로 하지 않는 경우를 제외하고는 권장하지 않습니다. 제너릭과 휴머노이드의 최적화 관련 문서는 unity forum의 문서를 참조하세요.캐릭터의 Rig setting은 Model의 optimize Game Objects를 클릭해 성능을 높이며, 사용하는 무기 슬롯만 하이라키에 노출하게 됩니다(Extra Transforms to Expose)
본의 갯수는 88개 입니다.
VFX Setting
Scene VFX
배경에 쓰인 VFX Graph는 낮에는 벛꽃, 밤에는 불씨가 흩날리며 추가로 밤엔 불길을 VFX Graph로 구현했습니다.
Character VFX
캐릭터 1번과 2번 슬롯의 스킬에는 캐릭터 이펙트가 붙어있습니다. 이 이펙트는 shuriken이 아닌 Visual effect graph로 제작되어 있습니다.
실제 모바일 빌드시 OpenGL ES 3.2 환경에서도 제대로 출력되지 않는 부분들이 있습니다.(vulkan 권장)
UserInterface
전체적으로 앵커 적용하여 컴포넌트 배치를 개선하고 테마를 일치하는 업데이트가 진행되었습니다.
Lobby Scene
Action Scene
** Unity Technologies Korea Evangelism dev 2021