각 픽셀마다 UV 좌표를 받음.
UV좌표를 화면 중심을 기준으로 변환 -> 0.0이 되도록 좌표 조정
시간 변수 설정으로 쉐이더에서 애니메이션 효과를 주기 위해서 _Time.y를 사용
관측자 위치 설정(ro)
->가상의 카메라(엔진에서는 카메라)의 위치 설정
ro=(0,0,time)
여기에 sin 파형을 더해서 애니메이션을 만듬
카메라 위치에 임의의 displacement(변위) 적용
변위를 적용해서
ro_xy+=위치xdspAmp
dspAmp는 임의로 저장된 스케일링 계수
관측자의 타켓 계산
카메라의 오른쪽 및 위쪽 벡터를 정함(즉 관측의 방향을 정리, 이를 통해서 중심에서 패턴을 발산하는 모양을 어떻게 관측할 것인가를 보기 위해서)
빛방향(Ray direction, 빛 방향) 방향 계산 회전 적용
픽셀에 대한 광선 적용 및, 광선에 회전 적용
여기서 Rotation Matrix는
다음을 사용
이후 Ray marching 기법을 이용해서 구름을 그림
1.픽셀에 대해서 관측자에 대해서 시작하는 ray를 발사하고,
2.거리장 Signed Distance Field)를 사용해서
3.거리함수를 통함 표면과 볼륨을 계산
4.광선이 물체와 충돌하지 않을때, 광선을 거리 함수가 반환한 거리 만큼 보냄
5. 광선이 물체에 매우 가까워져 최대 이동 횟수를 초과할 경우 렌더링 중단. 충돌에 발생한 지점에 effect계산
광선 마칭을 위한 초기 거리와 안개 변수
t=1.5
fogT=0.0
광선 마칭은 130회까지 반복되고, 누적 투명도가 0.99이상일 경우 중단되게 설정
현재 위치 계산
이후에 ComputeDensity 함수를 사용, 현재 위치에서의 밀도계산
누적 색상
1.계산된 색상과 투명도를 누적시킴
2.거리를 업데이트하여 거리를 재설정함
밀도 계산 함수 내부에서 노이즈 패턴 생성
밀도 계산
->여기서 반복을 통해서 밀도 계산->작은 노이즈를 겹치고 큰 패턴을 만들어서 프랙탈 노이즈를 생성함.
여기서 임의의 프랙탈 노이즈 매트릭스를 삽입함.
이후 감마 보정 및 비네팅 효과를 준다.
(화면의 edge로 갈 수록 어두워지는 효과)
이 댓글은 게시물 작성자가 삭제하였습니다.
굳 ㅇㅅㅇ
고마웡
야추 - dc App
감사합니다
개추를벅벅
감사합니다..
유니티로 쉐이딩하면쉽냐
테크니컬 할거임?
게임 개인 개발
개인 개발하는데 쉐이더 + 코딩까지 대단하네
감사합니다
이새끼 TA냐
해당 댓글은 삭제되었습니다.
ㅇㅅㅇ
딱 입시쉐이더수준
역시 형님입니다