250308

lililllilillll·2025년 3월 7일

개발 일지

목록 보기
104/350

✅ What I did today


  • Udemy Course : Unity Lighting


📝 Things I Learned


🏷️ 유나이트 서울 2020 - 최대 성능을 위한 최적화 팁

https://www.youtube.com/watch?v=tT9LS53HRx4

Script

  • Object Pooling 써라
  • 게임에서 변하지 않는 데이터를 위한 클래스 작성할 때 MonoBehaviour 말고 Scriptable Object 써라
  • 프로퍼티 대신 그냥 변수 써라. 프로퍼티 사용하면 함수 호출하는 거라 특히 Update()같은 곳에서 잦은 호출할 때 안 좋다.
  • Resources 폴더에 있는 리소스 많으면 앱 준비 시간에 나쁜 영향 준다. 가능하면 Addressable Assets 패키지의 AssetBundle 써라.
  • Start()나 Update()같은 Unity 이벤트 함수는 비어 있으면 지워라. 비어있어도 선언돼있으면 매번 호출된다. 컴포넌트까지 같이 불려오기 때문에 느려진다.
    • release에선 별다른 구현 없지만 디버깅 용으로 사용한다면 define 분기로 최종 빌드에선 제외되게 해라.
  • Awake(), Start()가 무거우면 Scene() 초기 동작을 지연시킨다. 초기화 로직 무거우면 Update()에서 별도의 FSM으로 초기화 구간을 구성해라.
  • Hierarchy 복잡성 줄여라. Transform 구조들은 배열로 저장돼서 수정할 때마다 모든 배열 값 재설정. 가급적 Hiearchy 구조 변경도 하지 말기.
    • 계층적 구조가 필요한게 아니라면 Root에 GameObject를 배치하는게 성능면에서 가장 좋다.
  • Find()는 모든 GameObject에 대해, GetComponent(), GetComponentInChildren()은 GameObject 내의 모든 컴포넌트에 대해 검사를 수행한다. 가능하면 미리 초기화 시점에 캐싱해둬라.
    • 검사 대상도 많고, 비교 검사 자체가 문자열 조건을 비교해서 오버헤드가 높다. 자주 사용하지 마라.

Texture Import Settings

  • Generate Mipmaps : 밉맵 안 쓰면 꺼라. 리소스 용량 24% 감소.
  • Format : (대부분은 자동으로 잘 압축) 디바이스에서 지원하는 압축 포맷 선택해야 무압축 대비 1/4 감소.
  • 불필요한 알파 채널 삭제한다. 이미지 퀄리티 손실 조금 감소시켜줌.
  • Read/Write Enable 해제한다. (기본값도 해제)

Mesh Import Settings

  • Mesh Compression : 원본과 안 달라지는 선에서 최대한 높은 압축 선택. Runtime 메모리는 영향 없지만 패키지 용량 감소.
  • Read/Write Enabled, Blendshapes, Normals and Tangents, Rig 등 사용 안하면 다 꺼라.

Audio Import Settings

  • 스테레오 꼭 필요한 거 아니면 Force to Mono 사용
  • 퀄리티 손상 체크하며 Compression bitrate 낮추기
  • Audio Clip 크기 별 Load Type
    • 200kb 미만 : Decompress On Load
    • 200kb 이상 : Compressed In Memory
    • 1mb 이상 : Streaming
  • Mute (볼륨 0) 상태에선 오디오 재생을 중지해라. 그리고 필요 없어지면 Audio Clip Unload해라.

Batching

  • 가능하면 같은 Texture / Material 써서 Batching 성공률 높여라. 아니면 Atlas Texture 써라.
  • Dynamic Batching 했는데 Batching 성공률 낮으면 그냥 꺼라.

Light

  • 그림자 필요 없는 오브젝트는 Cast Shadow 꺼라.
  • Light 효과 받는 대상은 별도 Layer로 구성해서 Culling Mask로 계산 비용 최소한으로 해라. Light(특히 Spot Light)는 계산 비용이 높다.
  • 보이지 않는 UI는 Activate 끄거나 Hide해라 . 카메라 밖으로 벗어나거나 다른 UI에 가려져도 실제로는 매 프레임마다 렌더링된다.

UI

  • 정적인 UI와 동적인 UI를 분리시켜라. UI 변경 시 발생하는 UI Mesh 재생성 최소화할 수 있다.
  • 하나의 Canvas에 있는 UI의 Z값을 동일하게 설정해라. Z값 다르면 Batching이 깨진다.
  • Atlas를 활용하여 같은 머테리얼과 텍스쳐를 쓰게 해라.
  • 동일한 Clipping Rect를 사용해라.
  • 입력 이벤트 필요없으면 Graphic Raycaster 꺼라.
  • Pause나 Main menu 띄울 때 전체 화면 불투명으로 가리는 UI 써라. Camera도 꺼서 렌더링 비용 줄여라.
  • Frame Rate 낮춰라.

🏷️ The Beginners Guide to Creating Realistic Graphics (In Unity)

https://m.youtube.com/watch?v=fBQvL5YR3eg&pp=ygUdaG93IHRvIG1ha2UgM2Qgc2NlbmUgaW4gdW5pdHk%3D

  • symplygon addon은 lod 만드는거 자동으로 해줌
  • node wrangler 깔았으면 shift t로 텍스쳐들 불러오면 노드 자동 연결해줌
  • simpel bake라는 addon 깔면 블랜더에서 유니티로 머태리얼 export하는거 편해짐


🎞️ Udemy Course : Unity Lighting


1.15 ~ 1.18

라이팅 베이크

  • 씬 저장
  • Lighting tab > Scene > Lighting Settings Asset > New
  • Light > Indirect Multiplier : 반사되는 정도 조절
  • Edit > Preference > GI Cache (Global Illumination) : 캐시 최대 저장 용량 조절, 캐시 삭제
  • Lighting tab의 Realtime Lighting, Mixed Lighting으로 각 라이팅을 골랐을 때의 설정
  • static object들을 설정해줘야 lightmap이 생성된다.
    • static 옆 화살표 클릭하면 static으로 반영될 것들 설정 가능

Mixed Lighting > Lighting Mode

  • Baked Indirect : 퀄리티 적당히 좋은거. 반사광은 Lightmap에 bake해두고, Mixed Light가 실시간 그림자도 드리운다.
  • Subrtactive : 퀄리티 제일 안 좋은거. Main Directional Light 하나 빼고 빛이랑 그림자 다 bake해버림.
  • Shadowmask : 퀄리티 제일 좋은거. Baked Indirect랑 똑같은데 그림자 퀄리티가 더 좋아짐.

Lightmapping Settings

  • Lightmapper : CPU는 느리고 정확, GPU는 훨씬 빠르고 살짝 부정확
    • Samples : 높이면 퀄 좋아지고 bake 느려짐.
    • Max Bounces : 반사 몇 번 계산할건지
  • Lightmap resolution : 얼마나 세밀하게 bake할건지.
  • Lightmap Parameters : 얼마나 퀄리티 좋게 bake할건지.
  • Ambient Occlusion : AO bake할건지
  • Directional Mode : 직선광인지 환경광인지

Area light

  • Gizmo 켜서 영역 조절 가능


profile
너 정말 **핵심**을 찔렀어

0개의 댓글