목차
Platform Specific Rendering Differences
Unity는 다양한 플랫폼에서 실행되고 여려 경우에 그것들이 어떻게 행동하는지에 차이가 있습니다. 대부분의 시간에 Unity는 사용자에게 차이점을 숨기나 때때로 사용자는 여전히 우연히 만날 수 있습니다.
Render Texture Coordinates
수직의 텍스쳐 좌표 컨벤션은Direct3D, OpenGL 와 OpenGL ES 사이에서 다릅니다:
- Direct3D에서 좌표는 위에서 0이고 아래로 증가합니다.
- OpenGL과OpenGL ES에서 좌표는 바닥에서 0이고 위로 증가합니다.
대부분의 시간에 이것은 하나의 Render Texture로 렌더링할 때를 제외하고는 정말로 중요하지 않습니다. 저런 경우에 Unity는 Direct3D 위에서 하나의 텍스쳐로 렌더링할 때 컨벤션이 플랫폼들 사이에서 매치하기 위해서 내부적으로 렌더링을 위아래로 바꿉니다.
이것이 행해지지 않는 하나의 경우가 Image Effects와 Anti-Aliasing이 사용될 때 입니다. 이 경우에, Unity는 anti-aliasing을 얻기 위해서 스크린으로 렌더합니다. 그리고 나서 이미지 효과와 함께 앞으로의 프로세싱을 위해서 렌더링을 RenderTexture으로 해결합니다. 이미지 효과를 위한 결과적인 소스 텍스쳐는 Direct3D에서 위아래로 바뀌지 않습니다 (모든 다른 렌더 텍스쳐와는 다르게).
사용자의 이미지 효과가 간단하다면 (하나의 텍스쳐를 한 번에 프로세스함), Graphics.Blit이 그것을 신경쓰기 때문에 이것은 정말로 중요하지 않습니다.
그러나 _만약 사용자가 사용자의 이미지 효과에서 한 개 이상의 RenderTexture을 함께 프로세스하고 있다면 그들은 다른 수직 방향에서 나올 것입니다 (오직 Direct3D에서 그리고 오직anti-aliasing이 사용될 때만). 사용자는 수동적으로 사용자의 꼭지점 쉐이더에서 이것처럼 스크린 텍스쳐를 위아래로 바꿀 필요가 있습니다:
// On D3D when AA is used, the main texture & scene depth texture // will come out in different vertical orientations. // So flip sampling of the texture when that is the case (main texture // texel size will have negative Y). #if SHADER_API_D3D9 if (_MainTex_TexelSize.y < 0) uv.y = 1-uv.y; #endif
이것의 예를 위해 Shader Replacement sample project에서 Edge Detection 씬을 확인하십시오. Edge detection는 스크린 텍스쳐와 카메라의 Depth+Normals texture를 사용합니다.
Using OpenGL Shading Language (GLSL) shaders with OpenGL ES 2.0
OpenGL ES 2.0는 OpenGL Shading Language (GLSL)를 위해서 오직 제한적인 본래의 지원만을 제공합니다. 예를 들어 OpenGL ES 2.0 레이어는 쉐이더로 내장된 파라미터를 제공하지 않습니다.
Unity는 OpenGL가 하는 것처럼 같은 방법으로 사용자를 위해서 내장 파라미터를 구현합니다. 그러나 다음의 내장 파라미터는 생략되고 있습니다:
- gl_ClipVertex
- gl_SecondaryColor
- gl_DepthRange
- halfVector property of the gl_LightSourceParameters structure
- gl_FrontFacing
- gl_FrontLightModelProduct
- gl_BackLightModelProduct
- gl_BackMaterial
- gl_Point
- gl_PointSize
- gl_ClipPlane
- gl_EyePlaneR, gl_EyePlaneS, gl_EyePlaneT, gl_EyePlaneQ
- gl_ObjectPlaneR, gl_ObjectPlaneS, gl_ObjectPlaneT, gl_ObjectPlaneQ
- gl_Fog
iPad2 and MSAA and alpha-blended geometry
MSAA가 활성화되고 알파 블렌디드 기하학이 RGBA colorMask 없이 그려질 때 애플 드라이버에 아티팩트를 낳는 버그가 있습니다. 아티팩트를 막기 위해서는 이 구성이 발생할 때 사용자는 RGBA colorMask를 강요합니다. 그러나 그것은 내장된 Glow FX 를 그릴 것입니다(강도 값을 위해서 그것이 DST_ALPHA을 필요로 하는 것처럼). 또한 사용자가 그들을 스스로 썼다면 사용자의 쉐이더를 업데이트 해주세요 (Pass Docs의 "Render Setup → ColorMask"를 참고해 주세요).
- 출처: 유니티코리아위키 (CC BY-NC-SA 2.0)