2015년 11월 27일 금요일

Unity 서피스 셰이더에서 discard나 return을 사용할때 주의할 점

사내 프로젝트에서 요상한 문제를 겪었다.

다른 폰에서는 별다른 문제가 없는데, 유독 Galaxy S4(초기모델)에서만 픽셀이 깨지는 현상이 발견된 것이다.

처음에는 셰이더의 Spec 연산시에 음수(-)값이 나오는 것이 아닌가 하는 문제로 좁혀져서 각종 벡터연산에 saturate()를 집어넣는 방식으로 해결하려 했지만 결국 버그가 잡히지 않았다. 게다가 알파채널이 있는 경우에만 발생하는 것도 이상했다.

그러는 가운데, Galaxy S4초기 모델의 특징은 PowerVR이 사용되었다는 것에 착안하고 구글링을 해보니 유사한 현상이 Stackoverflow에 보고된 사례를 접하게 되었다.

내용을 읽어보면 PowerVR의 병렬처리 구조상 if()문 내에서 discard나 return문이 있을 경우에 원치않는 statement가 처리될 수도 있다는 것이다.

예를 들어서 우리의 경우 mask텍스처의 b채널에 alpha정보를 보관하고 있었기에 다음과 같이 처리를 하였다.


inline void surf (Input IN, inout SurfOut o)
{
   fixed4 mask = tex2D(_MaskMap, IN.uv_MainTex);
if( mask.b <= _Cutoff )
discard;

fixed4 main = tex2D(_MainTex, IN.uv_MainTex);
fixed4 n = tex2D(_BumpMap, IN.uv_MainTex);
        .
        .
        .
}

이렇게 코딩하면 오류가 발생한다는 것이다.

이 코드를 바로 잡으려면

inline void surf (Input IN, inout SurfOut o)
{
        fixed4 mask = tex2D(_MaskMap, IN.uv_MainTex);
if( mask.b <= _Cutoff )
        {
discard;
        }
        else
        {
         fixed4 main = tex2D(_MainTex, IN.uv_MainTex);
           fixed4 n = tex2D(_BumpMap, IN.uv_MainTex);
                .
                .
                .
        }
}

이렇게 해야 GPU의 병렬처리시에 오류를 막을 수 있다.

if() {}블록 다음에는 반드시 else {}블록으로 처리를 해야만 GPU가 제대로 지원한다는 것을 명심하자. 

2015년 11월 20일 금요일

[자작요리] 굴짬뽕 맛이 나는 나가사키 짬뽕 만들기

주말에 집에 혼자 있다가 냉장고를 기웃거려보니 바지락 남은 것이 있더라.

그래서, 급요리 모드로 변경해서 뚝딱 뚝딱 짬뽕을 끓여봤음

최종 완성버전의 비쥬얼


그럼 이제 조리 과정을 살펴보자 ㅋㅋㅋㅋㅋ
먼저 재료!

오늘의 주재료

오늘의 부재료
일단 바지락은 필수, 마늘, 양파, 청양고추는 my favorite vegetables.


먼저 마늘을 기름에 볶아서 마늘향을 기름에 입힌다

이제 야채를 볶으면 야채에 마늘향이 충분히 스며든다

소금간은 필요없고 청양고추와 통후추로 간단히 매운맛과 향을 추가한다

바지락 투하

쉐낏쉐낏 볶아주면 바지락 뚜껑이 열림
내가 바지락을 화나게 한건가?

물 600밀리를 붓고(설명서는 500이지만 난 재료를 추가했으니 물도 추가)

보글 보글 끓으면 스프추가

드디어 면 투척!

면은 공기와 자주 접촉할수록 탱글한 식감이 살아남

혼자 먹을 것이니 가급적 가장 크고 아름다운 그릇을 찾는다
혼자 있을때야말로 식구들의 간섭없이 최대한 우아하게 먹어보자

비쥬얼은 그럴듯하다

오~ 면발이 살아있군
게다가, 이 맛은...중국식 굴짬뽕 맛이다!
왜 굴짬뽕 맛이 나냐고 물으신다면 굴짬뽕맛이 나서....
바지락이나 굴이나 같은 어패류니까 그러려니 함

밥을 말아먹지 않을 수 음슴

결국 국물까지다 먹음
저 멀리 바지락의 조개무덤이 보임

다음엔 나가사키 홍짬뽕에 도전해 보겠음.
오늘은 마늘 기름으로 맑은 짬뽕의 깊은 국물맛을 내봤지만,
다음에는 고추기름을 만들어서 미칠듯한 매운맛을 구현해 보겠음. ㅋㅋ