Unity Optimization
๐ซ ๋จธ๋ฆฌ๋ง
๐ซ A
๊ณตํต์ ์ต์ ํ ์ด์
๋ชจ๋ฐ์ผ ํ๋ซํผ ๋์
๊ฒฝํ์ ์ธ ๋ถ๋ถ๋ค์ด ๋ง์ด ํฌํจ๋จ
๐ซง ๋์ ๋ฉ๋ชจ๋ฆฌ ์ ์ ์์
- Shader Variants
- Keyword๋ฅผ ์ถ๊ฐํ๋ฉด 2์ ์ง์ ํํ๋ก variant๊ฐ ์ฆ๊ฐ
- Keyword๊ฐ 10๊ฐ ๋ง ์์ด๋ 1024
- Build in Shader๋ ์์ฉ Asset ์์ ์ keyword ์ฆ๊ฐ ์ฃผ์
- Dynamic SHader Loading
- Chunck ๋จ์ Variants ์์ถ/ํด์
- PlayerSetting / Shader Variant Loading Settings
- ์ ๋ํฐ ๋ธ๋ก๊ทธ๋ฅผ ํตํด์๋ ์๊ฐ๋จ (2021)
- Chunck ๋จ์ Variants ์์ถ/ํด์
- Stripping ์๋ ์ ๊ฑฐ
- Project Settings/Grapjjics
- โ ์ง์ ์ ๊ฑฐ
- Play log์์ variant ์ ๋ณด ์ถ์ถ
- GraphicsStateCollection.BeginTrace (Unity6)
- AssetBundle ๊ด๋ จ๋ จ
- PersistentManager.Remapper
- Instance ID์ File GUID, Local ID mapping ์ ๋ณด
- ๋์ด๋๋ฉด ์ฆ์ด๋ค์ง ์๊ธฐ ๋๋ฌธ์ ์ต๋ asset ๊ฐ์ ์ต์ํ
- Instance ID์ File GUID, Local ID mapping ์ ๋ณด
- SerialzedFile
- Assetbundle metadata
- ์ฅ๋ฉด์ ํ์ํ asset๋ง ํฌํจ๋ bundle ๊ตฌ์ฑ (์ฌ์ค์ ๋ถ๊ฐ๋ฅ)
- ๋๊ธฐ Load๋ bundle ๊ฐ์ ์ ํ
- Instance ์ง์ ๊ด๋ฆฌ๋ก bundle ํด์ (๊ฐ๋ฐ ๋น์ฉ ์์น)
- AssetBundle.UNload(False)
- ์ด๋ ๋ก๋๋ ์ธ์คํด์ค๋ค๋ ๊ฐ์ด ๋ด๋ ค๊ฐ์
- Addressable - Custom assetbundle provider
- ์ปค์คํ ํ์
- AssetBundle.UNload(False)
1
2
3
4
// AssetBundleProvider.cs
// 14๋ฒ์ค
~ m_AssetBUndle.UnloadAsync(true); // ์์ ?
๐ซง _
IL2CPP Metadata ์ผ๋ถ ๊ณ ์ ํฌ๊ธฐ, ์ผ๋ถ๋ ์คํ ์ค ํฌ๊ธฐ ์ฆ๊ฐ
- ์ ์ฒด ๊ท๋ชจ ํ์ด
- Platform seting ScriptBdebbuing ์ค์ (Debugging ์ ๋ณด ๋ถํ)
- Native Profiler
il2cpp:: filtering
- ๊ด๋ จ ์ฑ์
- Managed Code Stripping - Medium
- Medinum์ด๋ ๋ค๋ฅธ๊ฑฐ ์ฑ๋ฅ 20%์ฐจ์ด์ด
- ์ฝ๋ ์ญ์ ๋๋ ๊ฒฝ์ฐ
- namespace ์ค์ ๊ฐ๋ฅ
- IL2CPP Code Generation - Faster (smaller) builds
- Package Manager - ๋ถํ์ํ package, plugin ์ ๊ฑฐ
- Build ํ ๋ค์ ๊ฒฝ๋ก์ dllํฌ๊ธฐ๋ก module ๋ณ ํฌ๊ธฐ ์ ์ถ
- Library/Bee/artifact/(platform)
- Managed Code Stripping - Medium
๐ซง ๋จํธํ ๋ฌธ์
- ์ฆ์ ์์ ํ ๋น์ ์ํ 2๊ฐ์ง ์ด์
- Memory hole์ ์ํ amanaged heap ์ฆ๊ฐ
- ์์ ํ ๋น์ ์ํด ๊ฑฐ์ ๋น bucket์ ํด์ ใ ใน๊ฐ
- ์ผ๋ฐ์ ์ธ ๊ฐ์ด๋ (๋์ด๋ ์)
- ์๋ช ์ด ๊ธด ๋ฐ์ดํฐ๋ฅผ ๋ฏธ๋ฆฌ ํ ๋นํ๊ณ ์ต๋ํ ์ ์ง
- ~
- ~
๊ณ ๋ฏผํด๋ณผ ๋งํ ๋ด์ฉ
- ํ ๋น ๊ท๋ชจ์ ๋น๋๊ฐ ๋์ ์ฃผ์ ๊ตฌ๊ฐ
- Text data parsing - parsing ๋ณ string ํ ๋น ๊ท๋ชจ ํ์ธ
- ๋ช
์์ ์ฅ๋ฉด ์ ํ - ์ฅ๋ฉด๊ฐ ๋น ์ฅ๋ฉด ์ถ๊ฐ๋ก heap ํ์ฅ ์ต์
- ์ด์ ์ฌ, ๋ค์ ์ฌ ๋ฉ๋ชจ๋ฆฌ ๋ชจ๋ ์ฌ๋ผ๊ฐ๋ ๊ฒฝ์ฐ๊ฐ
- GarbageCollector..GCMode๋ฅผ ์ฌ์ฉํ ํด์ ์์ ๊ด๋ฆฌ
- (์ฌ๋ก ๋ถ์กฑ์ผ๋ก ๋น์ถ)
- ๋์ ํด์ ๋ฅผ ํตํ ๋จํธํ ๊ฐ์ ํจ๊ณผ ใฑ๋
- ํด์ ์์ ์ CPU ๋ถํ ์ฃผ์
๐ซง CPU Stuttering
์ฃผ์์ - Profiler Marker ์์ง ๋ถํ
- Call count์ ๋น๋กํ ์ค์ฐจ ์ฆ๊ฐ
- ์์ฌ์ค๋ฌ์ด ๊ฒฝ์ฐ native profiler์ ๊ฒฐ๊ณผ์ ๊ผญ ๋น๊ต
- GC Allocation์ call stack ํ์ธ
- Deep Profiler๋์ call stack ์ต์ ์ฌ์ฉ
Shader.CreateGPUProgram
์์ด๋ ๋ก๋
Shader warmup
- OpenGGL, DX11
- Shader.WarmupAlShaders
- ShaderVariantCollection.WarmUp
- +
- off ScreenRendering
- ๊ฐ์ฅ ์์ ?
Instantiate
- ์ต์ ํ
- ์ค๋ธ์ ํธ ํ ์ฌ์ฉ
- Serialized field ๊ตฌ๋ชจ์ ๋น๋กํ CPU ๋ถํ
- ์์ฑ์์ ๋ถ๋ฆฌ ์) ์บ๋ฆญํฐ ๋ ๋๋ฌ์ ์ ๋ณด
- Object. Instantiate Async
- Produce & Copy ๋น๋๊ธฐ (Deserialied ํฌ๊ธฐ) -> Job์ผ๋ก ๋๋ฆฌ๊ณ , AWake ๋น๋๊ธฐ
GC.Collect
- GC allocation ์ ๊ฑฐ๋ก GC.Collect ์ง์ฐ
- ํนํ Update, ๋ฐ๋ณต๋ฌธ ๋น๋ช ์์ ํ ๋น (object.name ์ด๋ฐ ๋ณต์ฌ๋ณธ ๋ฐํ ๋ฉค๋ฒ ์ฃผ์)
- Incremental GC
- ๊ฐ์ฅ ํ์คํ ๋ฐฉ๋ฒ GCMode ํ์ฉ์ ๋ํ์๊ฒฌ
- ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ์ฆ๊ฐ์ ๋ํด ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํ ์ฌ์์ธ์ง ๊ฒํ
๐ซง ์ฃผ์ CPU ๋ถํ ์์ธ
์ฃผ์ CPU ๋ถํ ์์ธ
REndering
- Draw ๊ณ ๊ธ ๊ธฐ๋ฅ ํ์ฉ
- **SBP Batcher, Instancing
- Indirect draw, Batch Render Group API
- GPI Resident Drawer (MeshRenderer, Foward*, Unity 7)
- Cull
- ์๊ฑฐ๋ฆฌ ์ด์ํ ๋ฌผ์ฒด ๋ฐ ์ฌ์ ์ ๊ฑฐ
- Camera Cull
- Light
- ~
- Culling Group (์ฅ๋ฉด ๊ตฌ์กฐ์ ๋ฐ๋ผ ์ ํจ, ๊ทธ๋ฆผ์ ๋ฌธ์ )
- ์๊ฑฐ๋ฆฌ ์ด์ํ ๋ฌผ์ฒด ๋ฐ ์ฌ์ ์ ๊ฑฐ
UGUI
ํต์ฌ ์ต์ ํ ๋ฐ ๊ณ ๋ ค์ฌํญ
- ๋์ ์์์ ์ํ Batc ๋น์ฉ ์ต์ํ
- ๋์ .์ ์ ์์ canvas ๋ถ๋ฆฌ (Animator, Scroll , โฆ)
- Layout system ๋ถํ
- ๊ณ์ธต ๊ตฌ์กฐ ์ต์ํ ๋ฐ ๋นํ์ฑํ
- REctMask2D cull query ๋ถํ
- ๋์ ์์ ๊ท๋ชจ์ ๋น๋กํจ (ํนํ Text ํฌํจ ์ ๊ธ๊ฒฉํ ์ฆ๊ฐ - ๊ธ์ ๋จ์๋ก Culling ํ๊ธฐ ๋๋ฌธ์)
Animator ~ ์ฌ์ง ์ฐธ๊ณ
Job์ ํตํด์ ๋์๊ฐ๋๋ฐ
Event ๋ฑ์ ์ฐ๋ฉด?? MainThread์์ ๋์๊ฐ๋๋ก ๋์ด ์์์
Skinning ~ ์ฌ์ง ์ฐธ๊ณ X
๊ธฐํ
๋ถํ์ํ ์นด๋ฉ๋ผ
RenderObjects์ Override ? ์ปค์คํ
๋ ๋ ํผ์ฒ? ์ฌ์ฉ์ ๋ฐ๋ผ์๋ ..?
๋์ผํ REdnerer๋ฅผ ์ง์ ํ๋ ๊ฒฝ์ฐ๋ ์๋๋ฐ
์๋ธ ์นด๋ฉ๋ผ๊ฐ ๊ผญ ํ์ํ ๊ฒฝ์ฐ๊ฐ ์๋๋ผ๋ฉด ,์ต์ ํ๋ ๋ณ๊ฐ์ Renderer๋ฅผ ๋ง๋๋ ๋ฐฉ์์ผ๋ก..
๋ฌผ๋ฆฌ
Fixed UPdate
RayCase
D rawMesh๋ ์ง์ Culcingํด์ผํ๋ ๋ถ๋ถ์ด ๊ณ ๋ ค
๐ซง GPU ๋ถํ
PixelOVerDraw
์ฃผ๋ก ๋ณต์กํ UI, Particle์์ ๊ฒน์ณ์ ธ ์๋ ๋ถ๋ถ
ํํฐํด, ์ฃผ๋ก Billboard๋ฅผ ์ฐ๋๋ฐ, ์์ ํฌ๋ช
ํ ์์ญ์ด ์์
ํ์ดํธํ ์ง์ค๋ฉํธ๋ฆฌ๋ฅผ ์ฐ๋ ๊ฒ์ ์ถ์ฒ
ํ์ง์ด ํ์ฉํ๋ ์ ์์๋ ๋ณํฉํด์,
UI, ๋ณต์ก๋๊ฐ ๋๊ธฐ ๋๋ฌธ์
๊ผญ ๊ฐ๋ ค์ง๋ 1,2๊ฐ ์ ๋ ์๋๋ฐ
๊ผญ ๊บผ์ฃผ์๊ณ
Alpha 0 ์ผ๋ ์์ ๊บผ์ฃผ๋ ๊ฒ์ด ์๋๋ฐ
์ต์ ์์๋ ํ์ฑํ๋์ด ์๋์ง ์ฌ๋ถ๋ฅผ ํ์ธํด์ผ์ผ
Shader
SHader๊ฐ ๊ฐ์ง๋ Pixel Coverage
Native Profiler๋ฅผ ์ฐ๋ฉด , ์์ด๋, ์คํฌ๋ฆฐ ๊ธฐ์ค์ผ๋ก ํฝ์
? ์ด ์ผ๋ง๋ ์ฐ์ด๊ณ ์๋ ์ง ํ์ธ ๊ฐ๋ฅ
์ง์ Shader ์ต์ ํ ํ๋ค๊ณ ํ์๋, ์ ์ ์ ๋ณด๋ฅผ ์์งํ์๊ณ , ์ฌ์ฉ๋๋ ์ธ์คํธ๋ญ์
์ ์ ๋ฐ๋?? ๋ฑ์ด ํฌํจ๋๋๋ฐ, ๋์ ์ ๋ฐ๋์ ์ธ์คํธ๋ ฅ์
์ธ ๊ฒฝ์ฐ ์ ๋ฐ๋๋ฅผ ๋ฎ์ถ๋ ๊ฒฝ์ฐ ํจ๊ณผ?? ์์น๋ ์๊ฐ๊ณผ ๊ณผ๋ จ๋ ์ธ์คํธ๋ ฅ์
์ธ ๊ฒจ์ฐ๋ ์ฃผ์๋ฅผ ํด์ผ ใ
๋ง.
- ๋์ ๋ถ๊ธฐ ์ ๊ฑฐ?
- ๋๊ธฐ์ฑ์ ์ํด ์ ๊ฑฐํ ํ์๊ฐ ์๋ค?
ํฝ์
๋ณด๋ค ์์ ์ผ๊ฐํ์ ๊ฒฝ์ฐ 3๊ฐ์ ๋ฒํ
์ค? ๋ญ๋น๊ฐ
Micro triangle
์ธก์ ์ด ์ฝ์ง ์๋ค
๋ชจ๋ฐ์ผ..?
HDRP๋ง ์ ๊ณตํ๋ ใด์ค
NativePRofiler ์ธ ์ ์์ง๋ง ,์ฝ์ง ์๋ค
์ค๋ช ํ๊ธฐ ์ด๋ ค์ด GPU ๋ถํ๋ ์ด๊ฒ์ ์์ฌํด๋ณผ ์ ์๋ค.
๐ซ B
5๊ฐ์ง ๋ด์ฉ
์ฑ๋ฅํ๊ฒ๋ฌ์
๊ฐ์ฅ ์ค์ํ ๊ฒ์ Mindsetใ
๋ฅด ์ฑ๋ฅ ์ฃผ๋์ ์ผ๋ก
์ฑ๋ฅ์ ๋ํด์ ์ด์ผ๊ธฐ ํ ๋๋
ํ๊ฒ ํ๋ ์ ํ์
์ด๊ฒ์ ๋ฐ๋ฆฌํ์ ๋จ์๋ก ์๊ฐํด์ผ ํจ
ํน์ ํ๋ ์์ ๋ ๋๋ง/๋ง๋ฌด๋ฆฌ CPU์์ ๋ง๋ฌด๋ฆฌใ
๋๋ฐ ์ผ๋ง๋ ๋ง์ ์๊ฐ์ด ใ
ใน๋ฆฌ๋ ์ง ์ค์ํ๋๊น์
์ฃผ์ํ ๋ถ๋ถ
ํน์ FPS ์๋ก 30์ผ๋ก ํ๋ฉด 33, 60์ด๋ฉด 16ms, 90ms 11ms ์ด๊ฐ ๋ฉ๋๋ค
๊ทธ๋์ ๋ฐ๋ฆฌ์ด ๋จ์๋ก ๊ณ์ฐ์ ํด์ผ
์ผ๊ด์ฑ์ด ์์ด์ผ?
FPS๊ฐ ์ธ๋ ์ด๋ฉด ๋ํฐ, ๋ฌผ๋ฆฌ, ์ ๋๋ฉ์
๋ฑ์ด ํ๋ค
์ฑ๋ฅ ๋ฒํผ์ ๋ง๋ค์ด์ผ ํ๋ค
๊ทธ ๊ฐ์ด๋ฐ 65%๋ง ์จ์ผ ํ๋ค
๋ฐฐํฐ๋ฆฌ๋ฅผ ์๋ ์ ์๊ณ , ์ฑ๋ฅ์ด ์ฝ๊ฐ ์ ํ๋ ๋ ๋ฒํผ์ญํ ์ ํ๋ค
๋ฐ์ด, ๋ฑ
์จ์ ๋๋ฆด ์ ์๋ ๊ณต๊ฐ์ ๋ฌ์ผ ํ๋ค
๊ณต๊ฐ์ ๋ฌ์ ์ฟจ๋ค์ด ํ ์ ์ด์
๋ฒํท์ ์ ๋ถ ์ฐ๋ฉด ์ด๋ ต๋ค
33ms 21ms์ด
60FPX 16 10ms ์ด ๋ฑ
๋ค์ํ ๋ถ๋ถ์์ ํ๋กํ์ผ๋ง
์ฌ๋ฌ ์ข
๋ฅ์ ๊ธฐ๊ธฐ (์ ๊ฐ ๊ณ ๊ฐ OS ใ
์กฐ์ ๋๋ผ์ด๋ฒ ๋ฑ)
์ผ๊ด์ฑ์๋ ํ๋กํ์ผ๋ง์ ์ฌํ๊ฐ๋ฅํ ํ๊ฒฝ์์
์ธ์ ๋ ์ด์ฌ์ ์๋์ผ๋ก ์ฌ์ํ๋ฉด์ ํน์ ๋ ๋๋งํจ๋
์
์ผ๋ฐ์ ์ธ ๊ณ ๊ฐ์ฒ๋ผ ์ผ๊ด์ฑ ์๊ฒ ์ฌํ ๊ฐ๋ฅํด์ผ
์ผ๊ด์ฑ ํ๋ณด๊ฐ ์ค์ํ๋ค
Profile early, oftne, and on the target device
ํ๋ฆฌํ๋ก๋์
, ๋ฑ๋ฑ ์ฑ๋ฅ ๊ฒ์ฆ ๋ฑ
๋ชจ๋ฐ์ผ - ๋ชจ๋ ๋๋ฐ์ด์ค๊ฐ ์ฑ๋ฅ์ด ๋ค๋ฅด๊ณ ๋ญ๊ฐ ๊ณ ๋ฏผ๊ฑฐ๋ฆฌ๋ฅผ ์ฃผ๊ณ
์๋ํฐ ์ฌํ ๋ถ๊ฐ์ผ
- ๋ ๋ ํ๊ฒ ์ํคํ ์ผ
Dedicated Graphics Memory
OldSchool
๋
ธํธ๋ถ, ์ปด ๋ฑ ๊ฐ๋ณ์ ์ธ ์ฒ๋ฆฌ
์ด๊ฒ Old School ์ธ์ด์
์ด์ ๋๋ถ๋ถ์ Unified
CPU GPU ๊ณต์ ํ RAM์ ์ฐ๊ณ ์๋ค๋ ๋ป
์๋๊ฒฝ์ฐ๊ฐ ์ด๊ฒ์ด ์ ๋ง ๋ฆฌ์์ค๋ฅผ ๋ง์ด ์ฐ๊ณ ์๋ค
PC, Labtop์ ์ ๊ธฐ ์ฐ๊ฒฐํ๋ฉด ๋๋๋ฐ
๋ชจ๋ฐ์ผ์ ๊ทธ๋ ์ง ์์ฃ
๊ทธ๋์ (ํ์ผ ๋ฉ๋ชจ๋ฆฌ)๋ฅผ ์ฐ๋ ๊ฒ์ด ์ค์
๋ ๋๋ง์ด ํ๋ฉด ํ ๋ฒใ
ใ
๊ทธ๋ฆฌ์ง ์๊ณ , ํ์ผ ์์ผ๋ก ๋๋ค ?
์ข ๋ ํจ์จ์ ์ผ๋ก
์ค์ ๋ ๋๋ง ์ํฌ ํ๋ก์ฐ
์ฌ์ด ๋ ๋๋ง ๋๋ฉด ์ฌ์ด ํ๋ก์ธ์ฑ์ ํ๋ค
๋ฒํ
๊ธ๊ฐ ์ด๋ค ์ซใด์๋ก ๋ ๋๋ง ๋์ด์ผ ํ๋์ง
์นด๋ฉ๋ผ ์๋ณด์ด๋ ์ค๋ธ์ ํธ๋ฅผ ์ ๊ฑฐํ๋ค๋์ง Culling ๋ฑ์
๋ชจ๋ ๋ฆฌ์์ค๊ฐ Ram์ชฝ์ผ๋ก
์ด๊ฒ์ GPU๊ฐ ์ฝ์ด๋ธ๋ค Struct Resoruces
ํ์ผ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐ๊ฒ ๋๊ณ
Vertex, Fragment SHader๋ฅผ ์ฐ๊ณ
์ ๋ถ ๊ธฐ์ตํ์ง๋ ์์๋ ๋๊ณ
ํ๋ํ๋ ํ๋ ์์ ๊ณ์ ์นดํผํ๊ณ ์ฝ์ด๋ด๊ณ ๋ฐ๋ น๋๊ธฐ ๋๋ฌธ์
๋๋ ์ ํจ์จ์ ์ผ๋ก ํ๋ ๊ฒ์ด ์ค์
๋๋ฌด ๋ง์ด ์์ฑ๋์ง ์๋๋ก ์ ์ํด์ผ ํ๋ค (๋ฐ์ดํฐ ์นดํผ, ์ฝ๋ ๊ณผ์ )
- ํ๋กํ์ผ ํด
Project Auditor
์๋ก์ด ๊ธฐ๋ฅ
WIP
์ฝ๋ ์ด์๊ฐ ๋ญ๊ฐ ์๋์ง, ๊ทธ ๊ฐ๋๋ ์ด๋ค์ง ๋ฑ ์ ์ ์ธ ๋ถ์
๋ฐํ์์ด ์๋ฆฌ ใ
์ต์ ํ ์ฒซ๊ฑธ์์ผ๋ก ใ
๊ฒ๋ใด
Profiler
Frame Debugger ์ ๋ํฐ ํ์ดํ๋ผ์ธ์์ ๋ญ๊ฐ ์ด๋ป๊ฒ ๋ฒ์ด์ง๊ณ ์๋์ง ๋ฑ
์์ธํ์ง ์์ง๋ง, ์ด๋ป๊ฒ ๋๊ณ ์๊ฑฐ๋
Shader DrawCall Batching ๋ฑ์ ๋๋ฒ๊น ๊ฐ์ผ
Frame Debugger ์ข ๋
์ด๋ป๊ฒ ์ฌ์ด ๋ง๋ค์ด์ ธ ์๋์ง ํ์ธ ๊ฐ๋ฅ
Bath, Batch Break๊ฐ ์ด๋์ ์ด๋ป๊ฒ ๋๋์ง ์ใน ์ ์๊ณ
๊ทธ๊ฒ์ ์์๋ด๋ ๊ฒ์ ์์์ผ๋ก ~
์ญ์๋ GPU Profierl
์ถ์ฒ๋๋ ๊ฒ์ (์ ๋ํฐ์์๋ ์ฐ์ด๋) RenderDOc AOD Metal GPI Debugger IOS
RenderDOc ์์
TimeLine ๋ฑ์ด ์๊ณ (์ด๋ฒคํธ๋ค)
์ข๊ธใฑ ์๋จ์๋ Event ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ค
์ด๋์ ๋ ๋๋ฆฌ๊ฒ ์งํ์ด ๋๋ใท, ์๋์ ์ผ๋ก ๊ฐ๊ฐ์ ์ฝ๋ค์ด ๊ทธ๋ํฝ์ค ์ฝ์์ ์ผ๋ง๋ ์ฐจ์งํ๋์ง (์๋์ ์ผ๋ก (์ ๋ X))
๊ทธ๋ฆฌ๊ณ ์ค๋ฅธ์ชฝ์ ํ
์ค์ณ ๋ทฐ์ด
์ค์ ๋ก ์ด๋ค Output์ด ๋์ค๋์ง
๋๋ฆฐ๋ฐ ๋ญ ๊ทธ๋ฆฌ๊ณ ์๋๊ฑด์ง?
๋ฑ์ ์๋ ค์ฃผ๋
๊ตฌ์ฒด์ ์ผ๋ก ํ๋ฉด ๋์ด ์๊ณ
ํต์ฌ์ ์์์ ์ก์ ์ ์๋ค
- ์ฑ๋ฅ์ ํ ๊ทธ๋ํฝ ์ค์๋ค
๊ฐ์ฅ ์ค์ํ ๊ฒ์ ์ฐ๋ฆฌ ๋ชจ๋๊ฐ ํ๋ค๋ ๊ฒ
Mesh Mistiakes
๋ณต์กํ ์ง์ค ๋ฉํธ๋ฆฌ๋์ฌ
๋ง์ ์ผ๊ฐํ
์ผ๊ฐํ์ ํํ๋ ์ค์ํ๋ค
๋ชจ๋ฐ์ผ์ ํ์ผ ๊ธฐ์ค์ผ๋ก ํ๋ฉด์ ์ชผ๊ฐ๋๋ฐ, ์ด ์ผ๊ฐํ์ด ํ์ผ์ ๋ฑ ๋ง์ ๋จ์ด์ง๋ฉด ์ข์ ์๋ก ์ข๋ค
๋ฉ์ํ ๊ฒ ์ข๋ค?
์๋ฒฝํ๋ฉด GPU๊ฐ ๋ ํจ์จ์ ์ผใ
ใน ๊ฐ๋ฅ
๋ง์ดํฌ๋ก ์ผ๊ฐํ
์์ฒญ๋๊ฒ ๋ง์ ์ผ๊ฐํ (ํ๋์ ํ์ผ์ ์์ฒญ ๋ง์)
LOD๋ฅผ ์ฌ์ฉํ์ง ์ํ ๊ฒ
ํ์ผ ๋ ๋๋ง์ ์ญ๋ถ ํ๋ฃกํ๋ ค๋ช
LOD
์นด๋ฉ๋ผ ์ฌ์ฉ ์ซ์ ์ค์ฌ์ผํ๋ค
2๊ฐ ์ด์์ ํ๋๋ก ์ค์ผ์์๋ ์ธ์ ๋ ๋ฌผ์ด๋ณธ๋ - ์์ฒญ ๋ณต์กํ๊ธด ํ์ฃ CPU ์ค๋ฒํค๋๊ฐ ์์ฒญ ๊ฑธ๋ฆฐ๋ค
์ปฌ๋ง ๋ ์ด์ด๋ฅผ ์ฐ๋ ๊ฒ์ ์ถ์ฒ
Read/Write enabled ํ์ฑํ ํ์ง ์๊ธฐ?
-> ์๋ ํ
์ค์ณ ๋ฐ์ดํฐ๋ GPU์์ ์ฝ์ ์ ์๋๋ก GPU ๋ฉ๋ชจ๋ฆฌ์ ์์ฃผ, ์ ์ ์คํฌ๋ฆฝํธ์์ Texture.GetPixel/SetPixel() ํ๊ธฐ์ํด CPU์๋ ๋ฉ๋ชจ๋ฆฌ ์ฌ๋ ค๋์์ง ์ฌ๋ถ ์ต์
(๊ธฐ๋ณธ ๋นํ์ฑํ) -> Mesh๋
ํ
์ค์ณ ์ค์๋ค
Max Size๋ฅผ ์ฌ์ฉํ์ง ์๋ ๊ฒ
- ๋ด๋ถ ์ง์? ๊ตํ?
๐ซ ๋ฉ๋ชจ
MipMap
2์ ๋ฐฐ์๋ก ์์์ง๋ (๋ค ํฉ์ณ์ ์๋ณธ์ 33% ์ ๋?)
์นด๋ฉ๋ผ ๊ฑฐ๋ฆฌ๋ง๋ค ๋ค๋ฅด๊ฒ
๐ซง ์ฐธ๊ณ
- UNTIE SEOUL 2025
- โ๋ฅํ๊ทโ: โUnity ํ๋ก์ ํธ ๊ฐ๋ฐ์ ๋ฐ๋์ ์ฒดํฌํด์ผ ํ ์ต์ ํ ๊ด๋ จ ๊ธฐ๋ฅ ๊ณต์ โ
- โElbert Perezโ: โ๋ถ๋๋ฌ์ด ๋ชจ๋ฐ์ผ ๊ฒ์: ์ต๊ณ ์ ์ฑ๋ฅ์ ์ํ ๊ทธ๋ํฝ ์ต์ ํโ
Canvas ์ง์ ์์ง์ด๋ ๊ฒ์ ๊ด์ฐฎ์ง๋ง
Canvas ๋ด Element๋ฅผ ์์ง์ด๋ ๊ฒ์ Rebuild
RenderTexture ์ค์ ๋์ด ์์ผ๋ฉด, ์นด๋ฉ๋ผ ๊บผ์ ธ์์ด๋ ๋ ๋๋ง?
Disclaimer
CameraStacking URP