본문 바로가기
카테고리 없음

[shader] SSAO 근거리 농도 조절기능 추가 [봉인]

by 대마왕J 2012. 3. 14.

예전에는 SSAO를 진하게 넣으면 원거리에서 fog를 덮고, 진한 SSAO가 나온다는게 문제였었습니다.




그래서 원거리는 SSAO가 나오지 않는 인자를 추가했었지요.



그랬더니 이번에 대두되는 문제는, 근거리에서의 SSAO가 너무 강하게 나온다는 문제...
아니 그러니까 SSAO 자체를 진하게 쓰는건 그다지 ... ㅎㅎㅎ
그치만 아트 팀이 하고 싶다면, 그건 해야 하는 겁니다. 굉장히 불합리하지만 않다면, 해야지요. :) 그게TA의 기본 목표.


어쨌건 이런 씬이 있습니다. SSAO가 잘 안보이길래, 무척 강하게 옵션을 넣어 봤습니다.


즉 SSAO만 추출해서 렌더링하면 이렇게 나옵니다.
지금처럼 얼굴복잡한 남자는 괜찮지만, 곱고 투명한 피부를 가지고 있는 여성은 이렇게 나오면 좀 그렇습니다.
그렇다고 후처리 효과에서 캐릭터만 제거할 수 있는 방법이 있는것도 아니어서...

어쨌건 Z 버퍼 연산으로 근거리 값을 만들어 내어서, 근거리가 되었을때 , 즉 카메라가 돌리-인 되었을 때 카메라에서 가까운 일정 영역은 SSAO 영향이 적게 먹는 기능을 만들었습니다.
옵션으로 뺄까 ... 하다가, 남는 채널 데이터가 없는데다가 빈번하게 쓰일 기능도 아니어서 일단 쉐이더 안에 하드코딩으로 해 놓았습니다.

아래가 pow 수치 1200일때


 pow 800 일때




pow 400 일때입니다.
근거리의 SSAO가 확연히 연해진걸 보실 수 있으실 겁니다.
카메라에서 가까워야만 효과가 없어지므로, 카메라를 돌리- 아웃하면 효과가 다시 나타나게 되어 있는 구조입니다.





그래서 나온 결과물. 얼핏 보면 잘 모르시겠지만, 얼굴과 겨드랑이에 강하게 드리우던 SSAO가 없어져 있습니다.

이 기능은 , AD의 요청에 따라 제작해 놓고 현재 봉인 상태입니다.
추후 기능이 필요하게 되었을 때 적용하기로 결정하였습니다.


혹시 몰라서 봉인한 부분 여기다 백업 !

 //depth mask term by JP
 half4 DepthNormTex = tex2D (_CameraDepthNormalsTexture, i.uv[1]);
 float DepthMask = DecodeFloatRG (DepthNormTex.zw);
 DepthMask = smoothstep(0,_NoiseScale.z,DepthMask);
 
 //near mask term by JP
// float DepthInvMask = 1- DepthMask;
// DepthInvMask = pow(DepthInvMask,400.0);
// //depth mask combine
// DepthMask += DepthInvMask;

 
 ao += DepthMask;
 ao = saturate(ao);
 c.rgb *= ao;
 
 return c;

반응형

댓글