특정 android mobile chipset에서 half 문제
반응형
half 관련 문제는 intel만 있는줄 알았는데...
문제를 일으킨 핸드폰은 아래와 같다.
핸드폰 이름 : G3
모델 번호 : LG-F400K
Android 버전 : 6.0
GPU : Adreno TM 330
문제를 일으키지 않은 핸드폰
1.
핸드폰 이름 : G Pro
모델 번호 : LG-F240L
Android 버전 : 4.4.2
GPU : Adreno TM 320
2.
핸드폰 이름 : SN-N900L, 삼성 갤럭시 노트3
모델 번호 : SN-N900L
Android 버전 : 5.0
GPU : Adreno TM 330
문제가 발생했던 코드는 아래와 같다.
float2 coord = i.uv.xy;
half4 color = tex2D(_MainTex, coord);
half3 b0 = tex2D(_Bloom0, coord).rgb * _BloomIntensity0;
half3 b1 = tex2D(_Bloom1, coord).rgb * _BloomIntensity1;
fixed3 outline = (color.r+color.g+color.b + b0.r+b0.g+b0.b + b1.r+b1.g+b1.b)*_BlurColor.rgb
color.rgb = lerp( outline, color.rgb, sign( (color.r + color.g + color.b)));
fixed blackOffset = 0.0;
float colorAlpha = (outline.r+outline.g+outline.b);
color.a = colorAlpha;
return color;
결과물에 _BlurColor 값이 적용이 안되는 버그가 발생했다.
이것 역시 half 자료형을 제대로 처리 해 주지 못해서 난 문제인듯 하다.
보통 color은 fixed를 사용하고 uv는 half를 높은 정밀도가 필요하면 float를 사용하는데
특정 폰에서만 문제가 발생해서 결국 아래와 같이 코드를 바꿔주었다.
fixed4 frag ( v2f_simple i ) : COLOR
{
float4 finalColor = tex2D(_MainTex, i.uv);
fixed3 b0 = tex2D(_Bloom0, i.uv).rgb * _BloomIntensity0;
fixed3 b1 = tex2D(_Bloom1, i.uv).rgb * _BloomIntensity1;
fixed3 outline = (finalColor.r+finalColor.g+finalColor.b + b0.r+b0.g+b0.b + b1.r+b1.g+b1.b)*_BlurColor.rgb;
finalColor.rgb = lerp( _BlurColor, finalColor.rgb, sign( (finalColor.r + finalColor.g + finalColor.b)));
finalColor.a = (outline.r+outline.g+outline.b);
return finalColor;
}
하지만 이렇게 하면 fixed를 잘 처리해 주는 애들까지 float를 써야 하는 거라서
그냥 왠만하면 아래와 같이 고치긴 했었다.
fixed4 finalColor;
fixed4 frag(...) : COLOR
{
finalColor = tex2D(..,.);
}
하지만 이번에는 위와 같이 해도 되지 않아서 어쩔수 없이 float로 바꿔주었다.
그래서 결과론적으로 이렇게 결론을 내렸다.
fixed4 color;
float4 frag(..) : ..
{
..
}
위와 같이 반환값이 float인 경우는 함수 외부로 fixed4를 사용해도 된다.
어차피 float4로 변환해서 반환될 테니까.
fixed4 frag()
{
float4 color;
...
}
위와 같은 경우는 최종결과값을 함수내부에 넣어줘야 한다.
칩셋들만의 fixed, half의 처리 방식이 틀려서 그런거니 어쩔수 없음.
'Unity > Unity Study' 카테고리의 다른 글
Unity 5.5 AssetBundle.LoadAssetAsync (0) | 2017.01.18 |
---|---|
Optimizing Shader Load Time (2) | 2017.01.16 |
shader tip with Intel (0) | 2016.09.08 |
unity bug with tegra k1 (0) | 2016.09.03 |
unity material parameter 변경 (0) | 2016.05.12 |
TAGS.