OpenGL ES 2.0으로 지연 렌더링 / 음영이 가능합니까?


20

나는 이것을 StackOverflow 에서 물었지만, 여기에 더 이해가 될 것이다.

OpenGL ES 2.0에서 지연 렌더링 / 음영을 구현 한 사람이 있습니까? MRT를 지원하지 않으므로 하나의 컬러 버퍼 만 있으면 "일반적인"방식으로 구현할 수있는 것이 아닙니다.

특히, 나는 iPad, iPhone4 (maaaybe iPhone 3gs) 및 Android에서 탐색하고 있습니다. iPad / iPhone4 / iPhone3gs의 GLESView 앱에는 GL_OES_RGB8_RGBA8 확장 프로그램이 있으며 아직 깊게 보이지 않았지만 8 비트 / 채널로 보면이 아이디어가 흥미 롭습니다. http://www.gamedev.net/topic/ 562138-opengl-es-20 및 지연 음영 /

다른 아이디어가 있습니까? 성능 측면에서도 가치가 있습니까?


예, 가능합니다.
Quazi Irfan

7
어떤 기술을 통해?
Jim Buck

답변:


15

네 가능합니다. 그러나 특히 가치가 없습니다.

먼저 NV_draw_buffers 확장명에 액세스 할 수 없으면 (이름에서 알 수 있듯이 NVIDIA 전용입니다. 따라서 Tegra에서 실행하지 않는 한 확장 프로그램이없는 경우) ES 2.0의 프레임 버퍼 객체는 하나의 이미지 로만 렌더링 할 수 있습니다. 한 번에. 따라서 G- 버퍼를 생성하려면 장면을 여러 번 렌더링해야하므로 지연 렌더링의 장점 중 하나를 제거해야합니다.

둘째, 모바일 플랫폼의 대역폭은 중간급 GPU에서도 얻을 수있는 것과 다릅니다. 그리고 대역폭은 지연 렌더링 (많은 조명의 경우)을 가치있게 만드는 데 중요합니다. 이 대역폭이 없으면 광 통과가 실제로 성능 측면에서 해를 끼칠 것입니다.

셋째, PowerVR 하드웨어는 실제로 이런 종류의 것을 위해 설계되지 않았습니다. 타일 ​​기반 렌더링 하드웨어를 사용하여 렌더링을 최적화합니다. 따라서 지연된 렌더링은 기존 스캔 변환 아키텍처보다 유용하지 않습니다.


6

주요 문제는 Fillrate입니다. 모바일 GPU에서는 채우기 속도가 낮아 기본 해상도에서 실시간으로 지연 음영 처리를 수행 할 수 없습니다.

iPhone 4 및 iPad 1의 경우 필 레이트는 말도 안됩니다. 충분한 충전 속도를 가진 유일한 장치 IOS는 iPad 2이지만 충분하다고 의심됩니다 ... 안드로이드에서는 Tegra 장치에만 MRT를 사용하는 GL_NV_draw_buffers가 있지만 충전 속도도 매우 낮습니다. Mali 400은 최고의 충전 속도를 보이는 것 같습니다. 울고 싶을 때는 전체 화면 해상도에서 색 사각형을 4 번 채우십시오. 많은 장치에서 60fps를 수행 할 수 없습니다.

데스크탑 GPU에서는 모바일 GPU로 10 배 (또는 그 이상)의 필 레이트를 갖습니다. 모바일 GPU는 CPU와 동일한 메모리를 사용하며 전용 메모리가 없다는 것을 잊지 마십시오.

WebGL (같은 API)에는 API의 제한이 아닌 몇 가지 예가 있습니다.


1
약점을 채우기 위해 +1 60fps에서 1536x2048 해상도에서 가우시안 블러를 얻을 수조차 없었습니다 (4 개의 샘플만으로도 프레임 속도가 30fps로 즉시 떨어졌습니다)
bobobobo

1
나는 이것이 구현의 미묘함에 달려 있으며 모바일 하드웨어에 가장 큰 영향을 미치는 것으로 이해한다고 생각합니다. 예를 들어, 이 사람들은 2012 년에 다소 성능이 우수한 DoF 블러 를 수행했습니다.
엔지니어

1

실제로 지연된 렌더러에 필요한 절대 최소값을 고려해야합니다. 디퍼 드 라이팅으로 돌아 가면 GBuffer에 저장해야하는 데이터의 양이 줄어들고 실제로 적은 양의 라이트를 지원하기 위해 장면의 절반을 3 배 이상 렌더링하는 것보다 훨씬 저렴합니다.

다음 GBuffer 형식을 사용합니다.

  • 조명 패스에 심도 버퍼를 재사용하십시오. 모바일 장치에서 이것이 얼마나 광범위하게 지원되는지 확실하지 않지만 자유 심도 텍스처입니다.
  • 그 안에 저장하는 단일 GBuffer 텍스처 : Normal U, Normal V, Param 0, Param 1
  • 조명 변수에 대한 두 가지 매개 변수가 많으므로 하드웨어가 동적 분기와 잘 작동하는 경우 하나를 여러 조명 기능에 대한 열거로 사용할 수 있습니다.

지연 조명은 장면을 두 번 렌더링한다는 점을 제외하고 지연 렌더링과 비슷합니다.

  1. 지오메트리 깊이, 법선 및 조명 매개 변수를 GBuffer에 렌더링합니다.
  2. 라이트를 누적 버퍼에 렌더링합니다.
  3. 머티리얼 셰이더로 지오메트리를 렌더링하고 여기에서도 조명을 합성하십시오. 조명 방정식의 역 연산자를 익히는 데 도움이된다면이 단계로 정말 멋진 것들을 많이 할 수 있습니다.
  4. 당신이 감당할 수있는 후 처리를 수행하고, 효율성을 위해 깊이와 정상적인 질감을 남용하도록하십시오.

조명 결과 저장 분산 버퍼는 표준 32 비트 색상 텍스처 만 필요하도록 확산 색상과 반사 광도 저장을 좋아했습니다. 확산 색상의 크로마를 계산하고이를 스펙 큘러 휘도와 결합하여 스펙 큘러 색상을 추정 할 수 있습니다.

그러나 가장 중요한 부분은 깊이 스텐실 버퍼를 최대한 활용하는 것입니다. 필요하지 않은 곳에 조명 코드를 렌더링하지 않도록하십시오. 장치의 표시 가능한 범위 아래에서 빛의 가시성을 떨어 뜨릴 것이라는 관점에서 조각 쉐이더에 일부 폐기 문을 추가하기까지합니다 (1e-3은 일반적으로 안전한 차단입니다).


discard많은 / 대부분의 모바일 GPU가 사용하는 타일 기반 파이프 라인에는 정말 좋지 않습니다.
엔지니어

1

지연된 조명을 고려하십시오. 요컨대, 디퍼 드 라이팅은 감소 된 디퍼 드 셰이딩 버전을 사용하여 스크린 스페이스 라이트 맵을 계산하는 기술입니다. 두 번째 단계에서 화면 공간 라이트 맵을 조명 정보로 사용하여 형상이 다시 렌더링됩니다.

이 기술은 더 적은 속성이 필요하기 때문에 G 버퍼의 크기를 줄이는 데 사용됩니다. 또한 G-Buffer와 스크린 스페이스 라이트 맵의 해상도가 스크린보다 낮다는 이점이 있습니다.

나는 엄격한 GLES 2.0 기반 렌더러를 시험해 보았지만 (실험적이지만) G-Buffer를 하나의 RGBA 텍스처로 끓였습니다 (예, 렌더 버퍼 대신 texture2D를 사용했습니다). 여기에는 알파 채널의 화면 공간 노멀 맵 + 깊이 버퍼가 포함되어 있습니다.

위치 속성 ( 여기에서 월드 라고 함 )은 Perspectivic 투영에서 .xy.z 로 구성되어 있다는 사실을 사용하여 조명 패스 중에 계산할 수 있습니다 .

xyfrustum=xyworld/zworld

다음 을 수행 하여 위치 속성의 xy 를 근사했습니다 .

xyworld=xyfrustumzworld

참고 : 투영 매트릭스 설정에 따라 추가 조정을 수행해야했습니다.

또한 주목할 가치 I는 생략 할 수있는 것을이다 .Z의 난 재구성 할 수 있기 때문에, 법선 벡터의 성분 .Z 에서 xy를 법선 벡터가되도록 정규화되어 있으므로 :

엑스2+와이2+2=1엑스2+와이2+2=12=1(엑스2+와이2)=1(엑스2+와이2)

이 기술을 사용하여 RGBA G-Buffer에서 다른 채널을 비울 수 있었고 이것을 사용하여 화면 공간 specular-map (또는 광택이있는 경우)을 저장했습니다.


BTW : 내 렌더러가 게임 엔진에 연결되지 않았습니다. Suzanne을 렌더링 한 것은 전적으로 Hello World 데모였습니다.
사이먼 슈미트

0

네, 가능합니다. 모바일 그래픽 칩은 매우 높은 해상도의 화면을 처리하도록 설계 되었기 때문에 충전 속도는 그리 문제가되지 않습니다. 실제로 조명 계산은 장면 복잡성과 독립적이므로 오버 드로우로 인해 속도가 느려지지 않기 때문에 지연 렌더링이 도움이됩니다. 다음은 4 세대 iPad에서의 구현입니다. http://www.youtube.com/watch?v=K4X1oF6b4V8

4 배의 성능을 원한다면 렌더링하는 텍스처의 절반 만 가능합니다. 어쨌든 망막 화면에서 3D 그래픽으로 다른 점을 볼 수는 없습니다.

모바일 그래픽 칩은 렌더링-텍스처 처리 방식으로 인해 지연 렌더링에 매우 뛰어납니다. 일반적으로 창 컨텍스트 대신 텍스처로 렌더링을 시작할 때 성능이 크게 저하되는 PC 그래픽 카드와 달리 모바일 그래픽은 성능 저하없이이를 수행하도록 설계되었습니다. 따라서 데스크탑 그래픽 카드에서 경험하는 초기 성능 저하없이 지연된 렌더러의 확장 성을 얻을 수 있습니다.

구현시 OpenGLES에 여러 대상에 대한 렌더링이 누락되어 별도의 패스에서 화면 색상과 법선을 그려야했습니다. 이 문제는 최신 버전의 OpenGLES에서 수정 될 수 있지만 솔루션이 소비자 용 모바일 하드웨어에서 아직 사용 가능한지 여부는 알 수 없습니다.


3
"모바일 그래픽 칩은 렌더-텍스처 처리 방식으로 인해 지연 렌더링에 매우 뛰어납니다. 일반적으로 창 컨텍스트 대신 텍스처로 렌더링을 시작할 때 성능이 크게 저하되는 PC 그래픽 카드와 달리 모바일 그래픽은 성능 저하없이이를 수행하도록 설계되었습니다. " 그것은 거기에 큰 주장입니다. 이 주장을 뒷받침 할만한 평판이 있습니까?
Panda Pajama
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.