본문 바로가기
Shader

셰이더로 동그라미 그리기

by 대마왕J 2019. 1. 28.

말그대로 동그라미 그리기. 


여러가지 상황에서 써먹을 수 있는 녀석들이라 정리해 두는 것이 유용하다 

입체로도 응용할 수 있어서, 마둠파님의 InnerAo나 여러 볼류메트릭 기법등에서도 유용한 공식이니 정리해 두면 좋을듯. 



첫 번째 방법 


float dist = distance(IN.uv_MainTex, float2(0.5, 0.5));


UV의 각 수치를 0.5,0.5에서 얼마나 멀리 떨어졌는지를 계산한다. 




이걸 Pow 처리하거나 이래저래 처리하면 요래조래 쓸 수 있다



o.Emission = pow(1-dist,7);



두 번째 방법


float dist2 = pow(cos(abs(IN.uv_MainTex.x * 2-1)) * cos(abs(IN.uv_MainTex.y * 2 - 1)),10);



이건 좀 복잡하니 설명을 해보자


dist2 = abs(IN.uv_MainTex.x * 2 - 1);

로 아래와 같이 만듭시다


이건 리니어한 결과물이다. 1 ~ 0 ~ 1 의 결과물


이걸 cos 시켜주면 다음과 같습니다 


dist2 = cos(abs(IN.uv_MainTex.x * 2 - 1));




그냥 허여멀건한것 처럼 보이지만 사실 이게 cos그래프이니 배불뚝이 그래프입니다. 


그리고 이걸 세로버전으로 하나 더 만들어서 .. 


dist2 = cos(abs(IN.uv_MainTex.y * 2 - 1));



둘을 곱해줍니다. 입체일 경우에는 z 까지...


dist2 = cos(abs(IN.uv_MainTex.x * 2 - 1)) * cos(abs(IN.uv_MainTex.y * 2 - 1));



이제 이걸 pow 처리한 다음 이래저래 사용하면 됩니다 


dist2 = pow(cos(abs(IN.uv_MainTex.x * 2-1)) * cos(abs(IN.uv_MainTex.y * 2 - 1)),10);





세 번째 방법


float dist2 =sqrt(dot((IN.uv_MainTex.x * 2-1),(IN.uv_MainTex.x * 2-1)));


그냥 UV를 dot 해준다 그리고 sqrt 

반응형

댓글