'전체 글'에 해당되는 글 183건

  1. 2012.05.17 RenderTech-VertexLit
  2. 2012.05.17 RenderTech-ForwardRendering
  3. 2012.05.17 RenderTech-DeferredLighting

http://unitykoreawiki.com/index.php?n=KrMain.RenderTech-VertexLit

 

 

Vertex Lit Rendering Path Details

이 페이지는 Vertex Lit rendering path의 자세한 내용을 다룹니다.

Vertex Lit 경로는 일반적으로 오브젝트 꼭지점에서 계산된 모든 빛으로부터의 조명과 함께 하나의 패스에서 각각의 오브젝트들을 그립니다.

패스를 그리는 가장 빠른 방법이며 가장 폭넓은 하드웨어 지원을 가집니다 (그러나 그것은 콘솔에서 작동하지 않음을 명심하십시오).

모든 조명이 꼭지점 레벨에서 계산되기 때문에 이 렌더링 경로는 픽셀당 효과의 대부분을 지원하지 않습니다: 그림자, 일반 매핑, light cookies, 고도로 구체화된 반사 하이라트는 지원되지 않습니다.

 

 

여기서 일반 맵핑은 노멀맵을 말하는거임 ㅡㅡ;;

'TA > Unity Shader 레퍼런스' 카테고리의 다른 글

Writing vertex and fragment shaders  (0) 2012.07.12
Blending  (0) 2012.06.25
Fallback  (0) 2012.05.21
RenderTech-ForwardRendering  (0) 2012.05.17
RenderTech-DeferredLighting  (0) 2012.05.17
Posted by 프리랜서 디자이너

http://unitykoreawiki.com/index.php?n=KrMain.RenderTech-ForwardRendering

 

포워드 렌더링 패스 상세사항

이 페이지는 Forward rendering path에 대한 자세한 서술합니다.

하나 혹은 여러 개의 패스의 각 포워드 렌더링 패스는 오브젝트에 영향을 주는 라이트에 달려 있습니다. 라이트들은 또한 포워드 렌더링에 의해 그들의 설정과 강도에 따라 다르게 다루어지고, 좌우되지요.

구현 상세사항

포워드 렌더링에서, 각 오브젝트에 적용되는 가장 밝은 라이트들은 퍼 픽셀 라이트 모드로 온전하게 렌더링 됩니다. 그리고, 4개까지의 라이트들은 버텍스 당 라이트로 계산됩니다. 다른 라이트들은 Spherical Harmonics (SH) 로 계산됩니다. 이것은 많이 빠르지만 근사값에 불과합니다. 라이트가 픽셀당 라이트인지 아닌지는 다음 사항들에 의합니다:

  • Render Mode가 Not Important로 설정된 라이트는 항상 버텍스당(per-vertex)이거나 SH 입니다.
  • 가장 밝은 방향성 라이트는 언제나 픽셀 당 라이트 입니다.
  • Render Mode가 Important로 설정된 라이트는 언제나 픽셀 당 (per-pixel) 입니다.
  • 만일 위 결과가 현재 Pixel Light Count Quality Setting보다 덜한 라이트라면, 밝기를 감소하기 위해서 더 많은 라이트가 픽셀 당으로 랜더링 됩니다.

각 오브젝트의 랜더링은 다음과 같이 발생합니다:

  • 기본패스는 한 개의 픽셀 당 방향성 라이트와 모든 버텍스당/SH 라이트에 적용합니다.
  • 다른 픽셀 당 라이트는 추가적인 패스에, 각 라이트 당 한 패스로 랜더링 됩니다.

예를 들어, 만약 어떤 오브젝트가 여러 개의 라이트에 영향을 받는다면 (아래 그림의 공이 A에서 H 까지의 라이트 영향을 받으면):

A 부터 H 까지의 각 라이트는 같은 색과 강도를 가지고 있다고 합시다. 이들 모두는 자동 렌더링 모드라고 한다면, 그래서 이들은 이 오브젝트를 위해 정확하게 이 순서로 정렬 될 것입니다. 가장 밝은 라이트들은 픽셀당 라이트 모드로 렌더링 됩니다. (A에서 D) 그리고 최대 4개까지 버텍스당 라이트 모드로 (D에서 G) , 그리고 최종적으로 나머지 라이트는 SH가 됩니다. (G에서 H 까지):

라이트 그룹은 겹쳐집니다; 예를 들어 마지막 픽셀 당 라이트는 버텍스 당 라이트 모드와 섞이고 그래서 오브젝트와 라이트가 움직임에 따라 더 적은 "light popping"이 생깁니다.

기본 패스

기본 패스는 하나의 픽셀 당 방향성 라이트와 모든 SH 라이트와 함께 오브젝트를 랜더링 합니다. 이 패스는 또한 쉐이더에서 모든 라이트 맵, 은은하고 방사적 라이팅을 추가합니다. 이 패스에서 랜더링 된 방향성 라이팅은 Shadows을 가질 수 있습니다.

추가 패스들

추가 패스들은 해당 오브젝트에 추가되는 각 픽셀당 라이트를 위해 랜더링 됩니다. 이러한 패스들의 라이트들은 쉐도우를 가질 수 없습니다 (그래서 결과적으로, Forward Rendering은 쉐도우를 가진 하나의 방향성 라이트를 지원합니다).

성능 고려사항

SH (Spherical Harmonics, 구면 조화 함수)라이트는 매우 빨리 랜더링 될 수 있습니다. 그들은 CPU에 아주 작은 비용만 부과하며 GPU에 적용은 actually free입니다(그것은, 기본 패스는 항상 SH 라이팅을 연산합니다; 그러나 SH 라이트는 작동하는 방식 때문에 그 비용은 얼마나 많은 SH 라이트가 있느냐에 상관없이 항성 정확하게 동일합니다).

SH 라이트의 단점은:

  • 그들이 오브젝트의 픽셀이 아닌 버텍스에서 연산됩니다. 그것은 라이트 쿠키나 노멀 맵을 지원하지 않는 다는 것을 의미합니다.
  • SH라이팅은 매우 낮은 주파수를 가지고 있습니다. SH 라이트를 가지고는 선명한 라이트 전환을 할 수 없습니다. 그들은 또한 분산 라이팅 (반사성 하이라이트에는 너무 낮은 주파수)에만 영향을 미칩니다.
  • SH 라이팅은 지역적이지 않습니다; 점이건 집중조명이건 일부 표면에 근접한 SH 라이트는 "look wrong" 것 입니다.

요약하면, SH 라이팅은 대부분 작은 동적 오브젝트에 사용하기에 충분합니다.

'TA > Unity Shader 레퍼런스' 카테고리의 다른 글

Writing vertex and fragment shaders  (0) 2012.07.12
Blending  (0) 2012.06.25
Fallback  (0) 2012.05.21
RenderTech-VertexLit  (0) 2012.05.17
RenderTech-DeferredLighting  (0) 2012.05.17
Posted by 프리랜서 디자이너

http://unitykoreawiki.com/index.php?n=KrMain.RenderTech-DeferredLighting

지연된(Deferred) 라이트 랜더링 경로의 상세사항

이 페이지는 Deferred Lighting rendering path의 상세사항을 설명합니다. 지연된 라이팅(Deferred Lighting)에 대한 기술 적인 개요는 Deferred Lighting Approaches article을 참조하십시오.

Deferred Lighting은 대부분의 라이팅과 쉐이드 충실도의 랜더링 경로입니다:

  • 얼마나 많은 라이트가 오브젝트에 영향을 끼칠 수 있는지에 대한 제한은 없습니다.
  • 모든 라이트는 픽셀 당 평가됩니다. 이것은 그것이 노멀 맵과 어떻게 적절하게 상호작용 할 수 할 수 있는지 등을 의미합니다.
  • 모든 라이트는 쿠키를 가질 수 있습니다.
  • 모든 라이트는 쉐도우를 가질 수 있습니다.

지연된 라이팅의 이점은:

  • 라이팅 비용은 스크린 상의 라이트 크기에 비례합니다. 이 라이트가 몇 개의 오브젝트 위에서 빛나는 지는 중요하지 않습니다. 작은 라이트 = 저렴 입니다!

일관성. 모든 라이트를 위한 라이팅은 픽셀 당 계산됩니다; 커다란 triangles을 분해하는 라이팅 연산은 없습니다.

단점들:

  • 엘리어싱 제거 기능 없음.
  • 지연된 라이팅은 반 투명 오브젝트는 처리할 수 없습니다. 이들은 Forward Rendering을 사용하여 랜더링 됩니다.
  • 제한 된 라이팅 모델 지원 (Blinn-Phong). 모든 라이팅은 같은 방식으로 연산 됩니다; 다른 오브젝트라도 아주 상이한 라이팅 모델은 가질 수 없습니다.
  • "receive shadows" 플래그를 지원하지 않고 라이트 Culling Masks에 대한 제한적인 지원 제공.

지연된 라이팅의 요구사항

  • Unity Pro가 필수.
  • Shader Model 3.0 혹은 더 최신 그래픽 카드, Depth 랜더러 텍스처와 양면 스텐실 버퍼 지원. 2004년 이후에 만든 대부분의 그래픽 카드는 이 기능을 지원함: GeForce FX 그리고 더 최신, Radeon X1300 그리고 그 이후, Intel 965 / GMA X3100 그리고 그 이후.
  • 현재 모바일 플랫폼 상에서는 동작하지 않습니다.

성능 고려사항

지연된 라이팅에서 실제 라이트의 비용은 해당 라이트가 빛을 내는 픽셀 수에 비례합니다; 그러나 장면의 복잡도와는 관련이 없습니다. 그러므로 작은 점이나 집중 조명은 랜더링 비용이 저렴합니다. 점이나 집중 조명은 전적으로 혹은 부분적으로 GPU에서 오브젝트가 픽셀을 건너뛰는 장면에 의해 가려지므로 더 저렴합니다.

물론 쉐이드가 있는 라이트는 없는 것보다 값비쌉니다. 지연된 라이팅에서 그림자를 던지는 주체는 각각의 그림자를 드리우는 라이트를 위한 한번 혹은 그 이상 랜더링을 할 필요가 있습니다. 그리고 쉐도우가 적용되는 그 라이팅 쉐이더는 쉐도우가 없는 것보다 더 값비쌉니다.

구현 시 상세사항

지연된 라이팅이 사용될 때, 유니티의 랜더링 과정은 다음과 같이 진행됩니다:

  1. 기본 패스: 오브젝트가 랜더링 되며 depth, normals, and specular power을 가진 스크린-공간 버퍼를 만들어냅니다.
  2. 라이팅 패스: 라이팅이 이전 버퍼로부터 연산됩니다. 라이팅은 다른 스크린 공간 버퍼로 연산됩니다.
  3. 최종 패스: 오브젝트가 다시 랜더링 됩니다. 연산된 라이팅을 가지고 와서 색상 텍스처와 합치고 ambient/emissive 라이팅을 추가 합니다.

지연된 라이팅을 처리 할 수 없는 쉐이더를 가진 오브젝트들은 이 과정을 마치고 RenderTech-ForwardRendering 경로를 사용하여 랜더링 됩니다.

기본 패스(Base Pass)

기본 패스는 각 오브젝트를 한번 랜더링 합니다. 뷰 공간의 노멀과 반사 파워(specular power)는 하나의 ARGB32 Render Texture으로 랜더링 됩니다 (RGB 채널에서 노멀로, A에서 반사 파워로). 만일 플랫폼과 하드웨어가 Z 버퍼를 텍스처로 읽는 것을 지원한다면, 그러면 Depth는 명시적으로 랜더링 되지 않습니다. 만일 Z 버퍼가 텍스처로 접근할 수 없다면, 그 depth는 추가적인 랜더링 패스에서 shader replacement을 사용하여 랜더링 됩니다.

기본 패스의 결과는 노멀과 반사파워를 가진 장면 콘텐츠와 랜더러 텍스처로 채워진 Z 버퍼입니다.

라이팅 패스

라이팅 패스는 depth, normal 그리고 반사파워를 기반으로 라이팅을 연산합니다. 라이팅은 스크린 공간에서 연산되므로, 장면의 복잡도와는 관련이 없습니다. 라이팅 버퍼는 하나의 ARGB32 랜더러 텍스처로 RGB 채널에 분산 라이팅이, A 채널에 흑백 반사 라이팅이 있습니다. 라이팅 값은 대수 인코딩을 사용하여 ARGB32 텍스처에서 일반적으로 가능한 범위보다 더 확장된 동적 범위를 제공하기 위하여 암호화됩니다.

라이팅 모델은 Blinn-Phong에 고정됩니다.

카메라의 근접 평면을 지나지 않는 점과 집중 조명은 장면(scene)에 대한 Z buffer test 가 허용된 상태로 3D 형태로 랜더링 됩니다. 이것은 부분적으로 혹은 전적으로 가려진 점이나 집중조명을 랜더링 하기 아주 저렴하게 만들어 줍니다. 근접 평면을 가로지르는 방향성 라이트(Directional lights)와 점/집중조명(Point/Spot lights)은 풀 스크린 쿼즈로써 랜더링 됩니다.

만일 라이트의 그림자가 허용되면, 그 들 역시 이 패스에서 랜더링 되고 적용됩니다. 쉐도우는 "free"가 아님을 주의하십시오; 그림자 던지기(shadow casters)도 랜더링이 되어야 하고 좀더 복잡한 라이트 쉐이더가 적용되어야 합니다.

최종 패스

최종 패스는 최종 랜더링 이미지를 생산합니다. 여기서 모든 오브젝트는 다시 랜더링 됩니다; 쉐이더는 라이팅을 가져오고, 텍스처와 합하여 방사적인 라이팅을 추가합니다.

라이트맵은 역시 최종 패스에 적용됩니다. 카메라 가까이, 현실세계 라이팅이 사용되고 오직 bake 된 간접 라이팅만 추가 됩니다. 이것은 화면 겹치기(crossfades)로 완전히 bake 된 라이팅으로 카메라에서 멀어집니다.

'TA > Unity Shader 레퍼런스' 카테고리의 다른 글

Writing vertex and fragment shaders  (0) 2012.07.12
Blending  (0) 2012.06.25
Fallback  (0) 2012.05.21
RenderTech-VertexLit  (0) 2012.05.17
RenderTech-ForwardRendering  (0) 2012.05.17
Posted by 프리랜서 디자이너