라벨이 Unity인 게시물 표시

[UNITY] Shader 전역 변수 _Time 모바일 기기에서 버그

*  발생 현상.  유니티 모바일 빌드(android, ios) 에서 쉐이더 글로벌 변수 _Time 를 사용하는곳에 프레임 지날수록 오차가 더 생겨서 폴리곤 이동, UV 애니메이션이 툭툭 끊어지는 현상 발생.  특히 폴리곤이 적은 파티클, 평면, 박스형태에서 잘 발생 * 해결방법 ( 모든 조건 충족해야함 ) 1. C# 코드에서 매프레임 업데이트로 쉐이더에 시간 넣어줌.  Shader.SetGlobalFloat( "_MyTime", Time.time ) 2. 시간변수 필요한 쉐이더 내부에 float _MyTime; 정의한뒤 사용. * 발생 원인 추측. 유니티에서 사용하는 시간은 float 타입이고, 쉐이더 내부에서는 float4 형태의 벡터로 넘겨주는데 PC 에서는 제대로 사용되지만 모바일에서는 half  타입 혹은 미세한 값을 날려버리는게 아닌가 추측됨. *  half 타입 계산변수와 float 타입 시간 계산이 혼재될 경우 half2 offset = half2(0.5, 0.0); half2 uv = (IN.uv_MainTex + off) * _MyTime; float 타입 _MyTime 과 half 타입 계산이 섞여있을때 PC 에서는 문제없이 작동하지만, 모바일에서 _MyTime 을 half 로 변경한뒤 계산하는걸로 추측됨 (이펙트 끊어지는 문제 발생) half2 uv = (IN.uv_MainTex + off) * float2(_MyTime, _MyTime); 이렇게 타입을 직접 지정하면 문제 발생안함 * 시간을 벡터 형태로 넘길경우 시간을 Shader.SetGlobalVector 를 이용해서 유니티 기본제공하는 _Time 변수처럼 셋팅하면 움직임이 튀는 문제 발생

[Unity] 유니티 Tier settings 에 따른 쉐이더 컴파일 용량 차이

이미지
 유니티 Project settings -> Graphics 탭에  Tier Settings 항목들이 아래와 같이 있는데,  미리설정된 Tier 중 현재 Tier를 실시간으로 선택할 수 있어서 기기 스펙에 따른 그래픽 옵션 설정이 가능하지만, 단점은 컴파일 되는 쉐이더의 길이가 늘어나서 쉐이더 파일이 차지하는 메모리 용량이 늘어난다. 단순히 계산해서 만약 쉐이더파일 하나가 컴파일된 결과가 50라인이라고 하면,  "50라인 * (Tier 1,2,3 에 대응하는 3종류)  =  150 라인"이 된다. 실제로는 Tier 마다 세부 선택 항목이 달라서 쉐이더 라인수는 Tier 마다 다르다.  이 기능 쓰지 않으려면, 모든 Tier 의 세부 사항들을 똑같이 설정하면, 한종류의 컴파일된 쉐이더 파일을 얻을 수 있다.

[UNITY3D] 쉐이더 내에서 "행렬 * 벡터" 연산

mul(UNITY_MATRIX_MVP, *)  <== 이런 형태의 "행렬 * 벡터 연산"에서 행렬과 벡터길이가 맞지 않으면, PC 에선 적절히 변형해서 적용되지만 안드로이드, iOS 같은 모바일 기기에서 쉐이더 에러발생함. (쉐이더를 이용하는 모델링들이 분홍색으로 출력됨) mul( (float3x3)UNITY_MATRIX_MVP, vector3 ) <== 이렇게 행렬과 벡터 크기를 정확히 맞춰줘야함.

[Unity3D] Use 32-bit Display Buffer. 옵션

이미지
RenderTexture 사용해서 알파값을 조절할 경우 ( 캐릭터 렌더링, 아이템 등드ㅇ ) "Use 32-bit Display Buffer" 체크를 끄면 안됨. 끌경우 RGBA 에서  RGB 텍스쳐로 변경됨 ( 32 bit --> 24 bit ) //- Unity 5.4.x , Unity 2017 1.x 에서 확인.

[엔진] 게임 엔진에서 공통적으로 겪는 문제점

   좀 다뤄봤다고 말할수 있는 게임엔진이 2개 (해당 엔진으로 개발을 1년 이상하고 적극적으로 활용한것 기준)이고, 좀 관심 가져보고 조금 살펴보기만하고 적극적으로 사용해보진 못한것 2개 정도 되었는데, 공통적으로 하는 실수들 이 생각나서 최대한 줄여서 몇가지 적어봅니다.  참고로 적극적으로 사용해본 엔진은 Gamebryo, Unity3D 이고, 조금 살펴보기만한 엔진은 Unreal Engine4, Orge3D 입니다. (Orge3D 는 기억도 안남;;) Gamebryo 와 Unity3D 사용경험으로 작성 했습니다.  < 2017년 7월 18일 기준 > * 엔진은 만능이다?  자체 제작 엔진으로 게임을 만들던 시절(DirectX SDK 을 직접 이용) 엔진에 대한 막연한 환상을 가지는 경우가 많았습니다. 그리고 다음 프로젝트에서 상용엔진을 구매해서 프로젝트를 시작했습니다.(당시에는 유명게임 엔진들을 회사에서 직접 구매해서 사용했고, 개발사 입장에서 부담스러운 가격이었습니다)   사람들은 이제 엔진을 사용해서 게임을 만들면 엄청난 게임이 나오리라 생각했지만, 실상은 그렇지 않고, 그저 조금더 시간이 단축되고 프로그래머들이 조금더 편해질 뿐 결과물은 평범했습니다.  지금은 많은 사람들이 알고 있는 점이지만 엔진홍보나 기타 교육기관에서 매우 쉽게 만들수 있다고 말하지만 실상은 그렇지 않습니다. 물론 초반에 그럴듯하게 어느정도 까지는 매우 빠르게 만들 수 있지만, 게임 완성이라는 점에서는 달라지지 않았습니다. * 멀티플렛폼 지원 엔진일 경우 테스트 (프로그래머)  알고 있는 사람들이 많지만 번거로워서 잘 지켜지지 않는 경우가 많은점 입니다. 보통 개발자는 pc에서 개발을 합니다. 엔진레벨에서 A 라는 api 가 제공될 경우 pc 에서 잘 작동하는걸 테스트 한뒤 마무리하는 경우가 많습니다.  실제로 여러번 겪은 ...