일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 3d
- Windows Build
- URP로 변경
- 가상 바이트
- OculusMotionVectorPass
- 개인 바이트
- 벡터
- ColorGradingLutPass
- URP
- Cartoon Rendering
- Toon Shader
- ASW(Application SpaceWarp)
- VR
- C언어
- 프로그래밍 기초
- Private Bytes
- working set
- AppSW
- 작업 집합
- Virtual Byte
- Rim Light
- Cell Shader
- 메모리 누수
- Specular
- 게임 수학
- Three(Two) Tone Shading
- Cell Look
- Today
- Total
목록전체 글 (258)
WinCNT
서론 유니티의 게임 오브젝트, 컴포넌트에 대한 == null 체크가 무겁다는 것은 Rider조차 알고 있는 사실 몰라도 Rider가 알려주는 사실이라도고 한다 그렇다고 Null 체크를 아예 안 할 수도 없고, 남의 코드를 최적화하는 상황에 처해서, 굳이 여기서 Null 체크 안 해도 같은데…라고 생각해도, 코드를 마음대로 고칠 수 없어서 대안책만 제시할 수 있는 상황일 수도 있다지금 필자의 상황 이번에는 그 대안책을 조사하다가 알게 된 내용을 정리하려고 한다 Fake Null, ReferenceEquals() 등의 이야기는 안 합니다 Fake Null 등에 대해서는 이미 좋은 글이 많아서 밑의 참고 사이트에 정리해봤다 알아두면 좋은 내용이었지만 아쉽게도 현재 필자의 상황과는 맞지 않았다 그래서 Fake ..
서론 퍼포먼스 체크한 것을 Slack으로 보내서 저장하는 일에 착수했다 아무것도 모르는 필자에게 사수가 “해줘”를 시전했지만, 레퍼런스가 없으면 너무 빡센 일이 될 게 분명해서 꼬치꼬치 캐물으니 다른 프로젝트에서 비슷한 처리를 하는 파일을 소개시켜줬다 왜 처음부터 알려주지 않는거지? Slack에서 토큰 취득하기 우선은 Slack API에서 APP을 만들고 토큰을 받아야 한다는 것 같다 https://api.slack.com/apps Slack API: Applications | Slack Your Apps Don't see an app you're looking for? Sign in to another workspace. api.slack.com 일단 기능은 봇을 선택 OAuth & Permission..
발생한 이슈 최적화 작업을 맡은 프로젝트에서, VR의 어플리케이션 설정이 적용되지 않는 이슈가 발생했다 결론부터 말하자면 원인은 어이 없을 정도로 매우 단순했다 하지만 자계(…)의 의미를 담아 글을 남기고자 한다 이슈 상세 성능 테스트를 위해 프레임을 72에서 120으로 바꾸려고 했는데, 잘 되지 않았다 원인이 보이지 않아서 다양한 가설을 세워서 검증해봤다 가설 1 : 설정 방법이 틀렸나? 이를 검증하기 위해 새로운 프로젝트를 만들어서 간단한 VR씬으로 검증해봤다 void Start() { #if ENABLE_VR && !UNITY_EDITOR // VRC Refresh Rate // OVRPlugin.systemDisplayFrequency = 72; // OVRPlugin.systemDisplayFr..
서론 어느 VR 게임의 프로젝트를 최적화 작업을 하던 도중, UI가 무겁다는 사실을 알게 되었다 (무거운 이유는 기회가 있다면 따로 작성하려고 한다) 하지만 문제는 필자 자신이 아직 유니티의 UI에 대해서 잘 모른다는 것! …사실 UI 자체를 잘 모른다는 느낌도 든다 아무튼 최적화 작업을 위해 우선 유니티의 UI 시스템에 대해 공부하기로 했다 참고로 Unity에는 UI 툴킷, Unity UI 패키지(uGUI), IMGUI라는 3개의 UI 시스템이 있다고 한다 사용자 인터페이스(UI) 생성 - Unity 매뉴얼 사용자 인터페이스(UI) 생성 - Unity 매뉴얼 Unity는 Unity 에디터에서 제작된 애플리케이션과 Unity 에디터를 위한 사용자 인터페이스(UI)를 생성하는 데 사용되는 다음의 세 가지 ..
발생한 이슈 SRP Batcher가 작동하지 않아서 모든 오브젝트를 하나씩 그리고 있는 상황이 발생했다 이슈 상세 직접적인 원인 자체는 단순했다 라이트 맵 구현을 위해 셰이더에 Meta Pass를 추가했는데 그로 인해 CBuffer에 문제가 생겨서 SRP Batcher의 호환성이 깨져버린 것이었다 발생 원인 #include"UnityStandardMeta.cginc" #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/MetaInput.hlsl" //#include "Packages/com..
서론 유니티에서 UI나 Sprite Renderer 등을 새로 만들면 디폴트의 머티리얼(셰이더)가 설정된다 그건 매우 고마운데 아쉽게도 그 소스 코드는 바로 볼 수 없게 되어 있었다 그래서 방법이 없나 찾다가 알게 된 내용을 정리하고자 한다 디폴트 셰이더의 코드는 바로 볼 수 없다 애초에 필자가 왜 디폴트 셰이더의 코드가 궁금했냐고 하면 어김 없이 SRP Batcher 때문이었다 SpriteRenderer를 추가했는데 SRP Batcher가 작동하지 않는다는 걸 알게 되었다 그래서 설정된 머티리얼과 셰이더를 확인해보니 다음과 같았다 아니나 다를까 SRP Batcher가 not compatible이었다 그래서 평소처럼 원인을 찾기 위해 마우스 우클릭 → edit shader를 눌렀으나… 평소랑 다르게 소스..
서론 URP에서는 기존의 방식으로 Overdraw를 확인할 수 없길래 다른 방법이 있나 찾아봤던 내용을 정리하고자 한다 Overdraw Overdraw란 화면의 한 픽셀에 두 번 이상 그리는 것을 의미한다 사실 좀 더 다양한 정의가 있는데 아래의 참고 사이트로 대체한다 Overdraw Problem On Opaque Object Overdraw Problem On Opaque Object I want to ask more specifically about overdraw. Lets say you have a fairly simple character mesh, with a typical singe pass opaque shader which has... forum.unity.com 일반적으로 Overdr..
발생한 이슈 처음 VR기기(Oculus Quest 2)로 간단한 테스트용 씬을 만들었을 때 발생한 이슈를 정리해봤다 딱히 무거운 처리가 없는데도 불구하고 VR기기에서 실행해보면 GPU Utilization(GPU U)가 95 언저리에, FPS도 상당히 떨어진 상태였다 이슈 상세 프레임 디버그를 살펴보면 FinalBlit 이전까지는 GPU 사용량이 정상적이지만, FinalBlit에서 갑자기 90퍼 이상으로 급증했다 FinalBlit 이전 FinalBlit 단계 발생 원인 Oculus XR Plugin의 OptimizeBufferDiscards라는 설정이 있는데 이 설정에 체크를 안 한 것이 원인인 것 같다 왜 체크를 안 해서 해당 이슈가 발생했는지까지는 아직 조사하지 않았다 참고로 해당 설정에 대한 설명은..
서론 현재 수정 작업을 맡은 셰이더가 있는데, Emissive를 추가하려고 보니 Emissive Color 프로퍼티가 없었다 사수에게 확인해보니 이 셰이더는 Emissive는 HDR 텍스처로 컨트롤할 방침이라는 얘기를 들었다 그럼 뭐다? 구현은 내가 찾아서 해야 한다는 거지… HDR Texture 테스트용 HDR Texture는 아트 팀장님이 포토샵으로 만들어주셨다 포토샵의 컬러 피커로 Cyan색에 강도를 추가한 단색 텍스처이다 사실 아트 팀장님께 부탁하기 전에 혼자서 Photopea에서 만들어 보려고 했지만, HDR 관련 항목을 찾지 못해 실패했다 이게 될지 안 될지는 해봐야 안다… DecodeHDR 함수와 _HDR HDR 파일을 임포트 해서 텍스처로 사용하면! 놀랍게도 아무 일도 일어나지 않는다… 이..
서론 라이트 맵을 커스텀 셰이더에서 사용하는 것은 레퍼런스도 많고 Unity의 함수를 편하게 가져다 사용할 수도 있기에 이전에 삽질했던 것에 비해서 어렵지 않았다 물론 깊이 파면 어렵겠지만 이미 내 HP는 0이기 때문에 파지 않으려고 한다… 라이트 맵의 텍스처 채널 라이트 맵을 구우면 각각의 게임 오브젝트에 알맞은 라이트 맵이 할당된다 할당되는 UV의 채널은 UV1이며, Mesh 클래스의 프로퍼티로는 uv2인데(즉 Mesh.uv2), 아무튼 TEXCOORD1에 할당된다고만 알고 있으면 될 것 같다 Unity - Manual: Generating lightmap UVs Unity - Manual: Generating lightmap UVs Lightmap UVs introduction Generating ..