현재 게임 프로젝트의 성능 최적화를 찾고 있습니다. 내 초기화 프로세스의 병목 현상으로 인해 내 모델의 질감이로드됩니다. 큰 텍스처로드 및 할당에는 최대 100ms가 소요됩니다. 제가 많은 것을 가지고 있기 때문에 이것은 문제입니다. 나는 내 코드를 분석하여 대부분의 시간 (약 96 %)이 CopyPixels (아래 참조) 호출에 소비되었다는 것을 알아 냈습니다.텍스처로드 성능을 향상시키는 방법은 무엇입니까?
아래의 모든 텍스처를 가져 오기 위해 사용하는 기능을 첨부했습니다. 이 함수는 매력처럼 작동하며 공식 SharpDX-samples-master 예제 코드를 기반으로합니다. 먼저 커스텀 파일 포맷에서 이미지 바이트를로드합니다 (큰 텍스처의 경우 약 2ms 소요). 그런 다음 형식 변환기를 만들고이를 사용하여 픽셀을 데이터 스트림에 복사합니다. 그러나 픽셀 복사는 매우 느립니다.
동일한 목표를 달성하는 더 빠른 방법이 있습니까? 당신은 비트 맵을 사용하는 것처럼
public static Resources.Texture ImportTexture(Resources.AResourceManager resourceManager, string resourcePackFileName, int bytePosition, out string resourceItemName)
{
// Load image bytes from file.
FileReader fileReader = new FileReader();
DataTypes.Content.ResourceItem resourceItem = fileReader.ImportTextureFromCollection(resourcePackFileName, bytePosition);
resourceItemName = resourceItem.Name;
// Create texture.
Resources.Texture tex = null;
using (SharpDX.WIC.BitmapDecoder bitmapDecoder = new SharpDX.WIC.BitmapDecoder(resourceManager.ImagingFactory, new MemoryStream(resourceItem.Data, false), SharpDX.WIC.DecodeOptions.CacheOnDemand))
{
using (SharpDX.WIC.FormatConverter formatConverter = new SharpDX.WIC.FormatConverter(resourceManager.ImagingFactory))
{
formatConverter.Initialize(bitmapDecoder.GetFrame(0), SharpDX.WIC.PixelFormat.Format32bppPRGBA, SharpDX.WIC.BitmapDitherType.None, null, 0.0, SharpDX.WIC.BitmapPaletteType.Custom);
SharpDX.DataStream dataStream = new SharpDX.DataStream(formatConverter.Size.Height * formatConverter.Size.Width * 4, true, true);
// This takes most of the time!
formatConverter.CopyPixels(formatConverter.Size.Width * 4, dataStream);
// Creating texture data structure.
tex = new Resources.Texture(formatConverter.Size.Width, formatConverter.Size.Height, formatConverter.Size.Width * 4)
{
DataStream = dataStream
};
}
}
return tex;
}
비트 맵을 사용하는 것처럼 보입니다. 대신 DDS 파일 사용을 고려 했습니까? 압축 형식과 압축되지 않은 형식을 모두 지원합니다. – Asesh
내 텍스처는 모두 PNG 파일입니다. 콘텐츠 파이프 라인에서는 모든 데이터 (모델 지오메트리, 텍스처, 애니메이션 등)를 리소스 팩에 저장하고 필요할 때 런타임에로드합니다. 그래서 PNG 파일의 바이트를 저장하고 위의 함수로 처리합니다. 다른 소스 파일 형식이 더 좋을 것이라고 생각하십니까? – Endgegner85
글쎄, 나는 그것을 시도 줄 것이다. 텍스쳐링을 위해 압축 된 (DXT5) DDS 파일을 사용합니다. 게다가, DDS 파일도 밉맵을 지원합니다 – Asesh