[사진 : 서브웨이 서퍼 플레이 스크린샷]



출처 : http://answers.unity3d.com/questions/288835/how-to-make-plane-look-curved.html

http://devkorea.co.kr/bbs/board.php?bo_table=m03_lecture&wr_id=3315&page=0&sca=&sfl=&stx=&sst=&sod=&spt=0&page=0&currentId=42


위의 사진처럼 땅이 평평하지 않고 휘어지는 듯한 효과를 연출하기 위함이다. 

땅 자체를 곡선으로 만들수도 있겠지만 

카메라가 보는 부분의 렌더링을 수정함으로써 효과를 낼 수 있다.



BendTheWorldShader.unitypackage


위의 파일은 예제 파일이며, 

https://dl.dropboxusercontent.com/u/7761356/UnityAnswers/Web/BendTheWorld/WebPlayer.html

웹에서도 실행을 해볼 수 있다.



적용 방법 : 


위의 예제파일이나, 웹에서 보듯이 shader프로그래밍을 하면 된다.

shader 파일을 생성한다.



shader 파일에 아래와 같이 코드를 입력한다.





작성한 shader 파일을 texture의 shader로 적용한다.





그러면 카메라의 위치에서 멀리 있는 객체일수록 z축의 아래로 쳐져 있는 듯한 효과를 나타낼 수 있다. 




이제, 휘어지게 보여질 객체에 스크립트에서 처리해야 한다



mOffset =  new Vector2(0.0f,-1.8f)

        mModelsRenderer = mModel.GetComponentsInChildren<Renderer>();

mModelsMeshFilter = mModel.GetComponentsInChildren<MeshFilter>();

foreach( Renderer render in mModelsRenderer )

render.material.SetVector("_QOffset", mOffset );

foreach( MeshFilter meshfilter in mModelsMeshFilter )

meshfilter.mesh.bounds = new Bounds( Vector3.zero, Vector3.one * 3000 );



render.material.SetVector("_QOffset", mOffset )

 는 휘어지는 방향과 크기를 정하며


meshfilter.mesh.bounds = new BoundsVector3.zero, Vector3.one * 3000 );

는 mesh범위를 키워 카메라에서 멀리 있어도 휘어지는 효과 그대로 화면에 보이도록 함이다.


  1. 우왕국 2014.10.23 20:56

    좋은 내용이라 담아 갑니다~

  2. 2015.10.07 21:07

    비밀댓글입니다

  3. blueasa 2016.05.16 12:04 신고

    좋은 자료 감사합니다. :)

+ Recent posts