2022년 5월 15일 일요일

URP)CameraStackManager

CameraStackManager

 
https://github.com/do-won-kim/CameraStack

unity urp로 넘어오면서 카메라가 제법 많이 변경이 있었는데 그중 눈에 띄는 점은 depth가 사라진 점과 depth only 가 사라진 것이다.

depth는 stack이라는 리스트로 depth only는 overlay camera로 구현이 가능한데 사실 기존에 UI canvas쪽을 screen space - overlay를 사용하던 프로젝트는 카메라를 여러대 쓰는게 아니라서 별로 신경쓸 점이 없다.

하지만 불행이도 우리 프로젝트는 screen space - camera를 사용중이였고 그에따라 ui camera가 따로 존재해서 overlay camera 기능을 사용해주어야 했다.

canvas를 전부 overlay로 바꾸는것은 이펙트 때문에 작업량이 많아져서 불가능 했기 때문에 기존 형태에서 자동으로 씬 이동이나 overlay 카메라가 켜지거나 꺼질때 혹은 base 카메라가 추가되거나 꺼지거나 할때 자동으로 stack 이라는 리스트를 관리해줄 필요성이 있어서 해당 매니저를 제작하게 되었다.


-camera stacking 스크립트-

사용법은 간단하다 CsCameraStacking 스크립트를 카메라에 부착해주고 depth값을 넣어주면된다.
밑에 bool 값은 overlay로 시작하는 카메라가 아니라 basecamera로 시작하는 카메라에 달린 스크립트에 체크 해주면 된다.

만들때 오래걸리지는 않았지만 이 카메라 변경점은 urp로 넘어올 때 많이 당황했던 부분 중 하나였다.


프로파일링 데이터 엑셀 추출 툴

 프로파일링 데이터 엑셀 추출 툴

https://github.com/do-won-kim/Tools/tree/main/Profiling


한창 최적화를 할 때 테스트 데이터를 저장해서 필요한 장소만 수정 할 수 있도록 엑셀 데이터를 뽑는 툴을 만든 적이 있었는데 이 후 다른 작업을 하게되면서 잊고 있었는데 갑자기 생각이 나서 odin 제거하고 기본 유니티에디터 스크립트로 수정한 버전

유니티 에디터에서 촬영하는 버전과 android와 연결해서 촬영하는 버전 두개가 있다.

자세한 사용방법은 깃허브의 리드미로 대체 합니다.

2022년 5월 9일 월요일

Simple)Material Copy Tool

 Material Copy Tool



간단한 툴 요청이 들어와서 만들게 된 텍스처를 제외한 머테리얼 값 카피 툴이다.

사용법은 별거 없다.
GetAllMaterial 버튼을 누르면 assets 폴더 하위의 모든 머테리얼 중 base와 같은 쉐이더를 가진 머테리얼을 Add한다.

ClearMaterial은 수정할 머테리얼 리스트 clear

ImportProperty 버튼은 기준 머테리얼에 있는 값들을 텍스처를 제외하고 리스트에 덮어씌운다음 에셋들을 모두 저장한다.

퇴근 두시간 전쯤에 요청이 들어와 Odin으로 간단하게 만들었다.


22-05-09 기준 Odin으로 작성된 버전만 커밋되어 있다. 추후 유니티 기본 에디터로 수정 예정
22-05-23 유니티 에디터 코드로만 작성된 버전 업로드

2022년 5월 2일 월요일

Custom Shader GUI Basic Frame

 Custom Shader GUI Basic Frame


유니티에서 쉐이더를 만들게 되면 프로퍼티에 따라서 GUI도 알아서 자동으로 나온다.
하지만 보통 사용하게 되는 그래픽팀에서는 작업을 위해서 여러 수정을 요청 할때가 많고 그럴때는 shadergui 라는 스크립트를 상속받아 프로그래머가 직접 커스텀을 해줘야한다.

                                -URP 기본쉐이더인 Lit shader의 custom gui-

지금까지는 baseshadergui 라는 스크립트를 상속받아 적당히 만들었지만 이번에 몇개의 큰쉐이더들의 gui를 크게 바꿔야 할 때가 오자 상당히 코드도 난잡해져있고 수정하기 복잡해져서 갈아엎고 새로 만들었다.

-ShaderGUI를 상속받은 CustomShaderGUI-

심플하게 필요한 기능과 필수로 구현해야할 부분만 따로 빼서 만들었다.
간단하게 설명하자면 MakeFoldoutHeaderGroup은 foldout 형식의 gui를 만들게 해준다.
header의 이름과 짤렸지만 안쪽에 들어갈 함수를 넣으면 아래와 같은 형식의 gui가 만들어진다.

DoPopup은 이름 그대로 팝업 형식을 만들때 쓴다 유용하기 때문에 baseshadergui에 있는 것을 그대로 가져왔다.

쉐이더에서 사용할 모든 프로퍼티들은 FindProperties에 넣으면되고 MaterialChanged에서는 주로 쉐이더 키워드들을 컨트롤 할때 사용하고 DrawSurceinputs에 원하는 순서로 프로퍼티들을 정렬하면된다.

실제 사용 gui 스크립트는 최상단의 링크에 있는 LitSpecularWithMaskGUI.cs를 참고

아무튼 gui 스크립트들이 대부분 좀 난잡했는데 깔끔해지니 기분이 좋다.