GLSL, 하나 이상의 쉐이더 프로그램 모두?


17

OpenGL을 사용하여 3D 데모를하고 있는데 GLSL이 다소 "제한적"이라는 것을 알았습니다. 어쨌든 나는 다양한 유형의 재료를 가지고 있습니다. 일부 머티리얼에는 앰비언트 및 디퓨즈 컬러가 있으며, 일부 머티리얼에는 앰비언트 오 클루 전 맵이 있으며, 일부 머티리얼에는 스페 큘러 맵 및 범프 맵 등이 있습니다.

하나의 꼭짓점 / 조각 셰이더 쌍으로 모든 것을 지원하는 것이 좋습니까, 아니면 많은 정점 / 조각 셰이더를 만들어 현재 선택한 재질을 기준으로 선택하는 것이 더 낫습니까? OpenGL 또는 D3D에서 일반적인 쉐이더 전략은 무엇입니까?



이것은 잘못된 이분법이므로 셰이더 관리를위한 하나 이상의 접근 방식을 선택해야합니다. 업계에서 15 년 동안, 우리가 극단적 인 상황을 고수 한 프로젝트는 한 번도 해 본 적이 없지만, 항상 두 가지 방법을 사용하여 쉐이더를 관리하는 두 가지 방법 사이의 균형을 맞췄습니다.
Trevor Powell

답변:


12

대답은, 그것은 약간 다릅니다.

기본적으로 두 개의 사고 학교가 있습니다. 모든 것을위한 작고 최적의 쉐이더와 동네 짱 셰이더 캠프.

작은 쉐이더는 바로 그 것입니다. 한 가지 일을 잘하십시오. Uber-Shader는 유니폼을 통해 런타임에 기능을 제어하거나 전 처리기 매크로 및 / 또는 생성 된 셰이더 소스를 통해 여러 가지 셰이더로 컴파일합니다.

최적의 솔루션은 아마 하이브리드는 아니지만 일종의 하이브리드입니다. 어쩌면 일부 경우에는 특수 쉐이더와 결합 된 몇 가지 동네 짱 쉐이더 또는 동네 짱 쉐이더 일 수 있습니다.

작은 쉐이더

장점 :

  • 더 빠르고 더 최적 일 것
  • 당신이 원하는 것을합니까
  • 이상하고 맞춤화 된 물건을 쉽게 할 수 있습니다

단점 :

  • 특히 기능 수가 증가 할 때 쉽게 벗어날 수 있습니다.
  • 셰이더가 매우 적은 경우를 제외하고 더 많은 작업

우버 셰이더

장점 :

  • 한 곳의 모든 것
  • 보다 아티스트에게 친숙 함 (기능 A를 기능 X와 함께 처음 사용하는 경우 반드시 코더 시간이 필요하지 않음)

단점 :

  • 더 긴 셰이더 컴파일 시간
  • 덜 최적의 결과 (특징을 켜거나 끄기 위해 유니폼을 사용하는 경우 특히)
  • 디버깅 / 최적화가 더 어려울 수 있음

Uber-shader이 표현에서 좋은 것은 아닙니다 #ifdef.
brigadir

2
uber-shader의 또 다른 전문가는 전환 셰이더가 성능면에서 비용이 들기 때문에 전환 빈도가 낮 으면 성능을 향상시킬 수 있다는 것입니다.
Jherico
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.