XNA“Burn”효과로 크레이터 추가 (GPU를 통해)


11

현재 XNA에서 2D "웜"복제본을 작업 중이며 기능 중 하나는 "변형 가능"지형입니다 (예 : 로켓이 지형에 닿으면 폭발이 일어나고 지형 덩어리가 사라짐).

현재이 작업을 수행하는 방법은 중앙에 가까워 질수록 점차적으로 빨간색 값이 높은 텍스처를 사용하는 것입니다. 이 "변형"텍스처의 모든 픽셀을 순환하고 현재 픽셀이 터 레인 픽셀과 겹치고 빨간색 값이 충분히 높은 경우 터 레인을 나타내는 색상 배열을 투명하게 수정합니다. 현재 픽셀의 빨강 값이 ​​충분히 높지 않으면 지형 색상을 어둡게합니다 (빨간색 값이 임계 값에 가까울수록 어두워집니다). 이 작업이 끝나면 SetData를 사용하여 지형 텍스처를 업데이트합니다.

나는 이것이 파이프 라인 마구간 등에 대해 읽었을뿐만 아니라 많은 분화구가 동시에 추가되면 상당히 게으르게 될 수 있기 때문에 이것이 그것을하는 좋은 방법이 아니라는 것을 알고 있습니다. 렌더 타겟 "핑퐁 (ping-ponging)"을 사용하여 타겟과 텍스처 사이에서 크레이터 생성을 GPU에서 리메이크하고 싶습니다. 그것은 문제가 아닙니다. 어떻게해야하는지 알고 있습니다. 문제는이 방법을 사용하여 화상 효과를 유지하는 방법을 모른다는 것입니다.

다음은 화상 효과가 지금 보이는 방식입니다.

화상 효과

아무도 비슷한 화상 효과를 만드는 방법을 알고 있습니까 (형성 된 분화구 주위의 가장자리를 어둡게)? 셰이더에 익숙하지 않지만, 필요한 경우 누군가 어떻게해야하는지 정말 감사하겠습니다. 다른 좋은 방법이 있다면 좋을 것입니다.


도움이 될 것입니다 : gamedev.stackexchange.com/q/6721/1163
Adam Harte

답변:


7

당신이 할 수있는 한 가지 방법은 당신이하고있는 것과 비슷합니다. "손상"텍스처와 실제 배경 텍스처가 있지만 매번 데이터를 복사하는 대신 두 개를 두 개의 별도 텍스처로 유지하십시오.

폭발이 일어 났을 때 약간 투명한 가장자리를 가진 손상 텍스처에 원을 그립니다. "굽기"영역이됩니다.

터 레인을 그릴 때마다 GPU에 두 가지 텍스처를 제공하고 셰이더에 배경 픽셀의 색상 (.rgb)에 1-손상 텍스처의 알파 값을 곱하도록합니다. 완전 검은 색 픽셀을 제거하십시오 (알파를 0으로 설정하거나 반투명 한 스코치 영역을 원하는지 여부에 따라 알파 (.rgb 대신 .rgba))와 확대 할 수 있습니다!

이것이 최선의 해결책이라고 생각하지는 않지만 이전에 수행 한 것과 상당히 유사하여 이전이 더 쉬워 질 수 있습니다. Vector3 (x, y, radius) 배열을 전달하고 해당 폭발 지점을 기반으로 셰이더에서 수학을 수행하는 것도 가능하지만 그 효율성에 대해서는 확신 할 수 없습니다.

도움이 되었기를 바랍니다!


감사! 그것은 또한 그것을하는 멋진 방법이며, 당신이 말했듯이 지금하고있는 것과 비슷합니다. 나는 HLSL에 대해 아무것도 모르지만 분명히 살펴볼 것입니다. 내가 할 수 있다고 들었던 또 다른 방법은 분화구 가장자리에 가까워지면서 검게하는 것이지만이 방법도 시도 할 것입니다.
Benixo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.