본문 바로가기
C#/C# WPF

[WPF] 3D 그래픽 성능 관련

by TcTT 2019. 3. 18.
반응형

WPF 에서 3D로 프로그래밍 시, 아무리 메모리관리를 잘 해줘도, 퍼포먼스가 나오지않아 이것저것 검색 결과 좋은 글이 있어 포스팅 한다..



- Material 부분 렌더링 속도에 영향 끼치는 정도

EmissiveMaterial(가장 빠름) => 그릴 경우 조명에 영향을 받지 않으며 마치 투명도를 설정한것처럼 보임.


DiffuseMaterial(중간) => 거의 기본형식으로 사용됩니다. 조명에 영향을 받으면서 2차원 모델을 직접 사용하는 것과 가장 비슷한효과
                                 => 빛나는 것처럼 빛을 반사하지는 않음

SpecularMaterial(가장 느림) => EmissiveMaterial 와 DiffuseMaterial 장점을 결합한 형태로 빛나는 효과를 적용하여 표현합니다.


- Brush부분 렌더링 속도에 영향 끼치는 정도(가장 빠름에서 가장 느림으로)

SolidColorBrush

LinearGradientBrush

ImageBrush

DrawingBrush(캐시됨)

VisualBrush(캐시됨)

RadialGradientBrush

DrawingBrush(캐시되지 않음)

VisualBrush(캐시되지 않음)


- ClipToBoundsProperty 부분 렌더링 속도에 영향 끼치는 정도

WPF(Windows Presentation Foundation)에서 Viewport3D의 내용을 Viewport3D의 직사각형에 맞게 명시적으로 자를 필요가 없으면 항상 Viewport3D.ClipToBounds를 false로 설정하십시오. WPF(Windows Presentation Foundation) 앤티 앨리어싱된 자르기는 속도가 매우 느릴 수 있으며, ClipToBounds는 Viewport3D에서 기본적으로 사용할 수 있도록 설정되므로 속도가 느려집니다.


- IsHitTestVisible 부분 렌더링 속도에 영향 끼치는 정도

WPF(Windows Presentation Foundation)에서 마우스 적중 테스트를 수행할 때 Viewport3D의 콘텐츠를 고려할 필요가 없으면 항상 Viewport3D.IsHitTestVisible을 false로 설정하십시오. 3D 콘텐츠의 적중 테스트는 소프트웨어를 통해 수행되며 망상 조직이 큰 경우 속도가 느려질 수 있습니다. IsHitTestVisible은 Viewport3D에서 기본적으로 활성화되므로 속도가 느립니다.
 


- 조명 속도(가장 빠름에서 가장 느림으로):

AmbientLight

DirectionalLight

PointLight

SpotLight 



- MeshGeometry3D

망상 조직 크기를 다음 제한 아래로 유지하십시오.

Positions: 20,001 Point3D 인스턴스

TriangleIndices: 60,003 Int32 인스턴스



- MaterialGroup

MaterialGroup에 있는 각 Material로 인해 다른 렌더링 패스가 발생하므로 대부분의 재질을 비롯하여 아주 간단한 재질이라도 GPU의 채우기 수요를 크게 높일 수 있습니다.MaterialGroup 에서 재질 수를 최소화하십시오



- GeometryModel3D

다른 재질 또는 변환이 필요한 경우에만 다른 모델을 만드십시오.또는 재질 및 변환이 같은 여러 개의 GeometryModel3D 인스턴스를 소수의 큰 GeometryModel3D 및 MeshGeometry3D 인스턴스로 결합하십시오



- TileBrush

브러시의 내용이 정적이 아니어서 3D 장면에 VisualBrush 또는 DrawingBrush를 사용해야 하는 경우 브러시를 캐시해 보십시오(연결된 속성 CachingHint를 Cache로 설정).연결된 속성 CacheInvalidationThresholdMinimum 및 CacheInvalidationThresholdMaximum을 통해 최소 및 최대 범위 무효화 임계값을 설정하여 원하는 수준의 품질의 유지하면서도 캐시된 브러시가 너무 자주 다시 생성되지 않도록 하십시오.기본적으로 DrawingBrush 및 VisualBrush는 캐시되지 않습니다. 즉, 브러시로 칠하는 내용을 다시 렌더링해야 할 때마다 브러시의 전체 내용을 중간 표면에 먼저 다시 렌더링해야 합니다. 


링크 참조 : http://msdn.microsoft.com/ko-kr/library/bb613553.aspx

출처 : http://devzone.egloos.com/255353


반응형

'C# > C# WPF' 카테고리의 다른 글

WPF Marquee Text  (0) 2019.06.18
WPF MVVM  (0) 2018.08.01
개발방식 WPF로 변경  (0) 2018.07.20