호바호바호바

hovamoon.egloos.com

포토로그



유니티 에서 Oren Nayar 구현 해봄.... Unity3D


아 쉐이더 자체를 안 짜본지 오래 되서 오랫만에 회사에서 시간도 난겸 한번 짜보았다....

오렌 네이어 자체는 이해를 하고 있는데

예전엔 HLSL 로 쉐이더 공부를 하였고, 유니티에서는 급 수정 작업에 들어갈때 쉐이더 들을 만졌는데...

완전히 처음부터 쉐이더 하나 만드려고 하니까 가이드를 하나 하나 읽어 봐야 하였다.

GeSHi © 2004-2007 Nigel McNie, 2007-2010 Benny Baumann, 2008-2009 Milian Wolff
  1. float4 OrenLayar(v2f i)
  2. {
  3. float3 n = normalize(i.normal);
  4.         float3 l = normalize(i.lightDir);
  5.         float3 v = normalize(i.viewDir);
  6.         float VdotN = dot(v, n);
  7.         float LdotN = dot(l, n);
  8.                                
  9.         float gamma = dot(- n * VdotN, l - n * LdotN);
  10.         float rough_sq = _Roughness  * _Roughness ;
  11.         float A = 1.0f - 0.5f * (rough_sq / (rough_sq + 0.57f));
  12.         float B = 0.45f * (rough_sq / (rough_sq + 0.09));
  13.         float2 tc = float2((VdotN + 1.0f) / 2.0f, (LdotN) /2.0f);
  14.         float C = tex2D(_LookUpTex, tc).r;
  15.         float3 final = (+ B * max(0.0f, gamma) * C);
  16.   return float4(max(0.0f, dot(n, l)) * final, 1.0f);
  17. }

결과는 잘 나오더라. 음 현재는 룩업 텍스쳐를 읽어 오는 방식인데.... 구글링 해보니 최적화 방법들도 있고...!




덧글

  • 힘세고강한왈도 2013/09/11 10:09 # 답글

    지금 유니티를 공부하는 중인데

    NGUI라는 게 굉장히 중요하다고 하더군요.

    근데 그게 뭔지조차도 잘 모르겠어서, 혹시 좀 알려주실 수 있으신지요?
  • Hova_Moon 2013/09/11 15:09 #

    NGUI 는 유니티 어셋 스토어에서 구매 할수 있는 일종의 유니티용 UI 플러그 인입니다.

    유니티 기존의 GUI 시스템이 성능 적인 면이 너무 좋지 않고 불편 하기 때문에

    상용 게임 제작에는 아마 거의 모두 GUI 플러그인을 구매 하고 있고 현재 가장 인기 있는것이

    NGUI 입니다.
  • 힘세고강한왈도 2013/09/12 09:15 #

    아하 감사합니다.
댓글 입력 영역