Silverlight에서 게임 관련 렌더링을 일부 수행하고 있습니다. 회전하는 이미지에 픽셀 쉐이더를 첨부하면 볼 수 있습니다. 이상한, 퍼지, pixelation 효과.회전 변환을 사용하는 픽셀 쉐이더를 사용할 때 Silverlight에서 픽셀/필터링 문제 발생
다음은 문제의 스크린 샷입니다. 왼쪽의 이미지는 변형 된 것입니다. 오른쪽 이미지에는 변형과 픽셀 쉐이더가 있습니다.
http://andrewrussell.net/offsite/2010/stack-sites/cat-girl-pixels.png
당신은 (픽셀 쉐이더를 추가하는 실버 라이트 컨트롤을 클릭) 액션 here on my blog에서 볼 수 있습니다.
문제의 픽셀 쉐이더는 이미지의 색조를 밝히는 데 사용되는 SilverSprite의 것입니다. 당신은 view its source code here 일 수 있습니다.
적용 대상 변환은 MatrixTransform
입니다 (직접 계산 된 변환, 축척, 회전 행렬 사용). 이미지를 회전 할 때 문제가 나타납니다.
셰이더와 변환이 모두 적용되는 요소는 Canvas
코드에 추가 된 Image
입니다. 이미지의 ImageSource
은 WriteableBitmap
이지만 효과는 BitmapImage
과 함께 발생합니다.
내 질문 : 이 퍼지 픽셀 화의 원인은 무엇입니까? 및 줄이거 나 제거하기 위해 수행 할 수있는 작업은 무엇입니까?
이것은 뻔한 질문으로 보일지 모르겠지만 쉐이더를 사용하지만 변환을하지 않으면 pixelation을 얻을 수 있습니까? – AnthonyWJones
@Anthony : 흥미롭게도 그렇습니다. 그것은 훨씬 덜 분명하지만 ("모호하지"않습니다). 출력은 픽셀 스프라이트 (pixel-for-pixel)와 원래 스프라이트의 위치가 마치'Math.Floor'를 통과 한 것처럼 일치합니다. 픽셀 쉐이더도 제거하지만 분수 위치를 계속 사용하면 스프라이트가 픽셀간에 "블렌드"됩니다 (쌍 선형 보간으로 보임). –
흥미로운 것은 회전없이 스케일 업 변환을 사용하면 출력은 쌍 선형 필터링을 사용하는 스프라이트이며 픽셀 쉐이더가 부착되어 있는지 여부도 마찬가지입니다 (여전히 'Math.Floor'작업을 수행하고있을 것입니다) 말할 수는 없지만). 스케일링 된 스프라이트를 회전 시키면 셰이더에서 여전히 "퍼지"효과를 얻게됩니다. 그러나 원래의 예제처럼 여전히 1 출력 픽셀 오프셋 스케일입니다. –