4

저는 WebGL에 멍청한 사람입니다. 나는 WebGL 개발을위한 전략적 선택 인 것처럼 ND-Buffers와 G-Buffers의 여러 게시물을 읽었습니다.ND-Buffer와 G-Buffer의 차이점은 무엇입니까?

ND- 버퍼와 G- 버퍼는 파이프 렌더링과 관련이 있습니까? ND 버퍼는 지연 렌더링에서만 순방향 렌더링과 G 버퍼에서만 사용됩니까?

두 가지를 모두 구현하는 JavaScript 코드 예제는 차이점을 이해하는 데 유용 할 것입니다.

+0

게시물에 대한 링크를 공유 할 수 있습니까? –

+0

여기 육즙이 많습니다. (http://upcommons.upc.edu/bitstream/handle/2117/82591/114624.pdf) – deblocker

답변

3

G 버퍼는 지연 렌더링에서 일반적으로 사용되는 버퍼 집합입니다.

Wikipedia

은 종종 g 버퍼

확산 색상 정보

Diffuse color

세계 공간 또는 화면 공간 법선

World space normals

에있는 데이터의 종류의 좋은 예를 제공합니다

깊이 버퍼/Z 버퍼

Depth buffer

이들 3 개 버퍼의 조합은 사용자가 다음을 생성하도록 결합 셰이더를 실행할 수있는 구조 및 재료 데이터로부터 이들 3 버퍼를 생성하는 "g 버퍼"

이라 최종 이미지. 실제로 g 버퍼 들어가는 어떤

Final image

은 특정 엔진/렌더러에 달려있다. 예를 들어 Unity3D's deferred renders 중 하나는 확산 색, 교합, 반사 색상, 거칠기, 보통, 깊이, 스텐실, 방사, 조명, 라이트 맵, 반사 probs를 포함합니다.

ND 버퍼는 "일반 깊이 버퍼"를 나타냅니다.이 버퍼는 일반적인 g 버퍼에서 일반적으로 발견되는 부분 집합이됩니다.

SO에 대한 논란의 여지가 너무 큽니다 샘플에 관해서는

하지만 previvous 답변을 좀 더 정보를 추가 할 an article about deferred rendering in WebGL on MDN

+0

TWGL을 사용하여 지연 쉐이딩의 예를 찾을 수 없습니다. 어디에서 찾을 지 알고 있습니까? 아니면 하나를 만들 계획입니까? 이것은 위대 할 것이다! – deblocker

+0

http://sijietian.com/WebGL/deferredshading/index.html –

2

렌더링 경로를 선택하는 것은 어떤 API를 사용하더라도 3D 렌더러의 주요 아키텍처 결정입니다. 이러한 선택은 렌더러가 지원해야하는 기능 세트와 성능 요구 사항에 크게 달려 있습니다.

상기 피쳐의 실질적인 세트는 이른바 screen-space 효과로 구성된다. if는 화면의 각 픽셀에 대한 중요한 데이터를 renderbuffers 세트로 렌더링 한 다음 해당 데이터 (지오메트리가 아님)를 사용하여 프레임에 필요한 새로운 데이터를 계산한다는 의미입니다. Ambient Occlusion은 이러한 효과의 좋은 예입니다. 픽셀의 일부 공간 값을 기반으로 나중에 각 픽셀을 적절히 음영 처리하는 데 사용할 수있는 "마스크"를 계산합니다.

또한 거의 독점적으로 화면 공간 계산에 의존하는 렌더링 패스가 있습니다. 실제로 그것은 Deferred Shading입니다. G- 버퍼가 들어있는 곳입니다. 픽셀의 색상을 계산하는 데 필요한 모든 데이터는 G- 버퍼로 렌더링됩니다.이 버퍼는 해당 데이터를 저장하는 렌더 버퍼 세트입니다. 디퓨즈 컴포넌트, 스페 큘러 컴포넌트, shininess, normal, position, depth 등은 자체적 인 데이터 (따라서 G 버퍼의 렌더링 버퍼의 의미)가 다를 수 있습니다. 프레임 렌더링의 일부로 현대의 지연 셰이딩 엔진은 스크린 공간 주변 오 클루 전 (SSAO) : 여러 G 버퍼의 렌더 버퍼에서 데이터를 사용합니다 (일반적으로 위치, 보통 및 깊이입니다).

ND 버퍼 정보. 그것은 널리 사용되는 용어가 아닙니다 (Google은이 질문 외에 관련 정보를 찾지 못했습니다). 저는 ND가 Normal-Depth를 의미한다고 생각합니다. 특정 알고리즘과 효과에 대한 G 버퍼의 특정 사례 일뿐입니다 (논문에서 SSAO).

따라서 G 버퍼 (및 G 버퍼의 하위 집합으로 ND 버퍼)를 사용하고 구현중인 음영 알고리즘 및 효과에 따라 다릅니다. 그러나 모든 화면 공간 계산에는 G- 버퍼의 일부 형식이 필요합니다.

P. 링크 한 논문에 부정확성이 있습니다. 저자는 방법의 장점으로 GLES 2.0의 ND 버퍼에 구현할 수있는 기능을 나열합니다. 그러나 GLES 2.0에는 깊이 텍스처가 없습니다 (실제로는 확장자가 OES_depth_texture입니다).

+0

GLES 2.0이이 기능을 지원한다고 말하는 것은 부정확하지 않습니다. 모든 목적과 목적을 위해 GLES 2.0을 지원하는 대다수의 장치는 필요한 모든 확장을 지원합니다.어쩌면 그는 더 명확 해졌고 GLES 2.0을 그 확장자로 말했을 것입니다. 그러나 나는 그가 OES_depth_texture가 더 쉽게 개발할 수 있다는 사실을 – gman

+0

이 진실이 아니라고 깜빡했는지는 의심 스럽지만, D- 버퍼는 RGB 텍스처 첨부물에 기록함으로써 재구성 될 수 있습니다. 동일한 작업을 수행하기 위해 추가 계산이 필요하다고 생각하십니까? 아마도 조금 혼란스러운 것은 초기화 버퍼 ND 버퍼를 정당화하는 "OES_normal_texture"확장과 같지 않은가? BTW는 그런 멋진 매니아 작품을 비판하는 의도가 아니 었습니다. 단지 예일뿐입니다 :-) – deblocker

+0

@deblocker 단 하나의 색상 첨부 파일에 깊이를 쓸 수 있지만 GLES 2.0 w/o 확장자는 최고 8 비트입니다 RGBA는 4 개의 값 (깊이 및 3D 법선)에 대해 32 비트입니다. 이로 인해 렌더링 결과가 좋지 않을 수 있습니다. –

1

이있다.

WebGL 개발을 위해 전략적 선택 인 것처럼 ND-Buffers 및 G-Buffers의 여러 게시물을 읽었습니다.

지연 렌더링의 가장 중요한 부분 중 하나는 지정된 플랫폼이 MRT (다중 렌더링 대상)를 지원하는 경우입니다. 그렇지 않은 경우 각 렌더링 사이의 셰이더에서 부분 계산을 공유 할 수 없으며 "레이어"가있는 것처럼 여러 번 렌더링을 실행해야합니다 (유니티 3D의 경우 최대 11 배 ?). 이로 인해 프로그램 속도가 느려질 수 있습니다.

Is deferred rendering/shading possible with OpenGL ES 2.0 ?

WebGL을이 MRT를 지원하지 않습니다이 질문에 더 읽기하지만 확장명이 : 그래서 그것을 https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/

: https://www.khronos.org/registry/webgl/extensions/WEBGL_draw_buffers/

또한 깊이 텍스처에 대한 확장이를 지연 렌더링 기술을 사용할 수 있어야하지만, 속도는 추측하기 어렵습니다.

+0

모바일 장치에 대한 나의 2 차 질문에 대한 명확한 대답으로이 내용을 사용할 것입니다. 고마워 – deblocker

관련 문제