고도 엔진에서 쉐이더에서 광선 직선 그리기 - Whitmem
고도 엔진에서 쉐이더에서 광선 직선 그리기
Game Development
2025-02-18 00:31 게시 3bf770531c44f17b11b5

0
0
60
이 페이지는 외부 공간에 무단 복제할 수 없으며 오직 있는 그대로 게시되며 부정확한 내용을 포함할 수 있습니다. 법률이 허용하는 한 가이드 라인에 맞춰 게시 내용을 인용하거나 출처로 표기할 수 있습니다.
This page is not to be distributed to external services; it is provided as is and may contain inaccuracies.
쉐이더에서 광선 그리기
기본적으로 쉐이더에서 광선을 그리기 위해서는 직선 식을 활용해야 한다. 쉐이더에서는 CPU 처럼 순차적으로 연산할 수 없기 때문에, 임의 텍스처를 통해 광선 색상을 가져와 해당 지점에 칠하거나 직접 직선식을 사용해서 그릴 수도 있다. 텍스처를 가져와 그리기 위해서는 텍스처를 이리저리 회전하고 늘리는 과정이 필요한데 비교적 다양한 처리가 쉽지 않다. 따라서 여기서는 임의로 직선을 하나 만들어 그리는 것을 소개한다.
먼저 쉐이더에서 받을 파라메터는 대표적으로 3개이다. 쉐이더 안에서 직선식을 구성하기 위한 시작 좌표, 끝 좌표이다. 당연히 2D 상에 그리는 것이기 때문에, 2차원 좌표로 2개 받는다. 단 여기 좌표계는 쉐이더에서 계산을 하기 때문에 UV 좌표계로 지정하였다. 즉 좌표 범위는 0,0 ~ 1.0,1.0 인 것이다. 월드 좌표로 계산하고 싶은 경우 임의 투영 및 변환 행렬을 적용해야 한다.
직선식 코드이다. 직선식을 유도하는 방법은 추후 새로운 게시글로 작성할 것이니, 이 홈페이지에 직선이라는 명칭으로 검색을 해보자. 아무튼 직선과 특정 점의 거리식을 구하는 코드이다. 이 식이 왜 필요하냐면, 쉐이더에서는 각 좌표마다 병렬로 코드가 실행되기 때문에, 각 자신 점이 점의 위치에 해당하는지 확인하고, 점의 위치에 가까운 경우 선을 그려야 하기 때문이다. 여기서는 부드러운 광선을 그리는 것이 목표이기 때문에, 점의 거리가 결국 색상이된다.
즉 점의 거리를 가져와 컬러 값에 그대로 대입해본다. 직선에 해당하는 곳에 가까울 수록 값은 0이 된다. 거리가 0이기 때문이다. 직선이 해당하는 곳이 제일 밝도록 1에서 빼주도록 한다.
1.0 에서 거리를 빼주면 직선에 가까울 수록 1이 된다. 따라서 해당 위치가 제일 밝아진다.
조금 더 광선이 밀집되도록 하기 위해 pow 식을 사용할 수 있다. 제곱을 거듭할 수록 값이 센 곳에 뭉쳐진다.
위와 같이 뭉쳐지는 것을 확인할 수 있다. 하지만 배경이 색상 0으로 대입되어 검정색인 것을 확인할 수 있는데, alpha 값에도 세기를 적용했기 때문이다. alpha 값도 광선 세기로 지정해준다.
그러면 투명하게 적용될 것을 볼 수 있다. 하지만 alpha 값을 조절하여 배경을 투명하게 하는 경우, 왜곡 처리 등이 불가능하다. 다음 게시글에서는 텍스처를 가져와 배경과 합성하여 왜곡 처리 하는 방법에 대해서 알아본다. 배경과 합성하면 다음과 같이 활용할 수 있다.
댓글 0개
댓글은 일회용 패스워드가 발급되며 사이트 이용 약관에 동의로 간주됩니다.
확인
Whitmemit 개인 일지 블로그는 개인이 운영하는 정보 공유 공간으로 사용자의 민감한 개인 정보를 직접 요구하거나 요청하지 않습니다. 기본적인 사이트 방문시 처리되는 처리 정보에 대해서는 '사이트 처리 방침'을 참고하십시오. 추가적인 기능의 제공을 위하여 쿠키 정보를 사용하고 있습니다. Whitmemit 에서 처리하는 정보는 식별 용도로 사용되며 기타 글꼴 및 폰트 라이브러리에서 쿠키 정보를 사용할 수 있습니다.
이 자료는 모두 필수 자료로 간주되며, 사이트 이용을 하거나, 탐색하는 경우 동의로 간주합니다.