shader tip with Intel

반응형

이전에 포스팅한 테그라에서의 유니티 버그는 대략 마무리 되었고

이번에는 듀얼 os를 지원하는 태블릿들 테스트중..

그런데 특정 셰이더 쓰는 애들은 mask가 안된다.

머징 이생퀴들은... 에러도 딱히 안났는디...크흠크흠..

구글신이 말하길.. Intel은 Half Float 지원안한단다...


아래 내용을 조금 해석해 보자면...

half float 이나 float 자료형은 몇가지 응용프로그램 영역에서 인기있는 유형이다.

half float 타입을 저장유형으로 간주하기 때문에 종종 데이터를 half type으로 저장하더라도,

계산은 이러한 유형의 값에서 수행되지 않는다.

일반적으로 어느 계산을 하기전에 32비트 float 타입으로 값을 변환시킨다.


half float 타입의 지원은 단지 32비트 float으로, 또는 32비트 float에서의 변환으로 제한된다.

half float 타입을 사용해서 얻을 수 있는 이점은 아래와 같다.

. 저장공간 절약

. bandwidth과 chche 메모리의 소비 감소

. 많은 프로그램에서의 충분한 정확도와 정밀도 


예를 들어 아래의 코드를 보자.

float4 frag(v2f IN) : COLOR 

{

half4 mask = tex2D (_MaskTex, IN.uv_MainTex);

clip(mask.r-0.5);

half4 c = tex2D (_MainTex, IN.uv_MainTex);

return c;

}

원래는 아무 문제가 없는 코드다.

pvrtc, mali, adreno, tegra 와 pc에서 잘 실행된다.


하지만 인텔칩셋에선 clip이 제대로 결과값이 제대로 나오지 않는다.

그렇다고 float4 하기에는 다른 칩셋들에게 미안하고...

결론은 아래와 같이 상위로 빼서 처리를 했다.

fixed4 c;

float4 frag(v2f IN) : COLOR 

{

fixed4 mask = tex2D (_MaskTex, IN.uv_MainTex);

clip(mask.r-0.5);

fixed4 tex = tex2D (_MainTex, IN.uv_MainTex);

c.rgb = tex.rgb;

return c;

}



Reference Link

- Overview: Intrinsics to Convert Half Float Types

-


'Unity > Unity Study' 카테고리의 다른 글

Optimizing Shader Load Time  (2) 2017.01.16
특정 android mobile chipset에서 half 문제  (0) 2016.09.21
unity bug with tegra k1  (0) 2016.09.03
unity material parameter 변경  (0) 2016.05.12
ngui uitexture shader update  (0) 2016.05.03
TAGS.

Comments