렌터링 업그레이드 세부사항
유니티 3은 많은 그래픽 관련 변화를 가져왔는데 기존 유니티 2.x 프로젝트에서 업그레이드할 때 어떤 것들은 변화가 필요할 것입니다. 쉐이더에 관련된 변화는 Shader Upgrade Guide 를 보세요.
포워드 렌더링(Forward Rendering) 경로 변경
유니티 2.x은 유니티 3에서 Forward라고 불리는 하나의 레더링 경로를 가지고 있었습니다. 유니티 2와 비교한 주요한 변화로는 다음이 있습니다:
- 가장 흔한 경우(빛 픽셀당 한 방향)에 이제 하나의 패스로 그려집니다(주로 두개의 패스였음).
- 포인트 & 스포트라이트 그림자는 지원되지 않습니다. 오직 단방향 빛만 그림자를 만들 수 있습니다. 더 많은 그림자를 원하면 Deferred Lighting 경로를 이용하세요.
- 대부분의 "Vertex" 빛은 구형 고조파(Spherical Harmonics) 빛으로 바뀌었습니다.
- 포워드 렌더링 경로는 온전히 쉐이더를 기반으로 하므로 OpenGL ES 2.0, Xbox 360, PS3에서 작동합니다 (즉 고정된 기능 렌더링을 지원하지 않는 플랫폼).
쉐이더 변경
더 자세한 사항은 Shader Upgrade Guide을 참조하세요. 사용자가 빛과 상호작용하는 쉐이더를 구현하기 원한다면 Surface Shaders를 사용해야 합니다.
아무도 알아 차리지 못할 눈에 띄지 않는 그래픽 변경'^TM^'
- Mac Radeon 9200 픽셀 쉐이더 지원 제거(!!ATIfs 어셈블리 쉐이더).
- pre-ShaderModel2.0 하드웨어에서 픽셀단위 빛 지원 제거. 그 결과 Diffuse Fast 쉐이더는 단지 VertexLit 입니다.
- 약해지지 않는 빛 제거. 모든 포인트와 스포트라이트 빛은 점점 약해집니다.
- 스크립트 콜백 제거:
OnPreCullObject
와RenderBeforeQueues
속성. - p-buffer 에 기반을 둔RenderTextures 제거. OpenGL 에 있는RenderTextures는 FBO지원을 필요로 합니다.
- 대부분의 Pass LightMode tags는 사라졌고 새로운 태그로 교체 되었습니다. 사용자는 어쨌든 보통 Surface Shaders를 사용해야할 것입니다.
- Texture instanceIDs는 더이상OpenGL 텍스쳐 이름이 아닙니다. 이것에 의존하는 C++ 플러그인에 영향을 줄 수 있습니다. 대신
texture.GetNativeTextureID()
를 사용하세요. - 쉐이더 키워드인SHADOWS_NATIVE 부터SHADOWS_DEPTH까지, SHADOWS_PCF4 부터 SHADOWS_SOFT까지 삭제.
- 객체에서 8개 이상의 꼭지점 빛에 영향을 받는 주위의 부스트 제거.
_ObjectSpaceCameraPos
와_ObjectSpaceLightPos0
의 제거 (_WorldSpaceCameraPos
와_WorldSpaceLightPos0
가 추가됨).- 쉐이더 텍스쳐 속성의
LightmapMode
태그는 아무것도 하지 않습니다. - Skybox 쉐이더는 depth buffer에 쓰여지지 않습니다.
GrabPass
(즉 굴절되는 유리 쉐이더)는 항상 화면 크기의 텍스쳐를 잡습니다.#pragma multi_compile_vertex
와#pragma multi_compile_fragment
는 사라졌습니다 .- ShaderLab의 다각형 오프셋은 더이상 변수를 참조 못합니다 (예를 들어
Offset [_Var1], [_Var2]
). TRANSFER_EYEDEPTH/OUTPUT_EYEDEPTH
를 toUNITY_TRANSFER_DEPTH/UNITY_OUTPUT_DEPTH
로 개명. 이것은 유니티3에서 float2로도 작동.- 특별한 쉐이더 패스 타입제거: R2TPass, OffscreenPass.
- 내장된
_Light2World0
,_World2Light0
쉐이더 메트릭스 삭제. - 내장된 쉐이더 벡터인 _SceneAmbient, _MultiModelAmbient, _MultiAmbient, _ModelAmbient, _MultiplyFog, _LightHackedDiffuse0, _ObjectCenterModelLightColor0 제거.
- 내장된 쉐이터 float인
_FirstPass
삭제. - 쉐이더 파일의 안개 모드는 변수에서 올 수 없음(예를들어
Fog { Mode [_MyFogMode] }
). 글로벌 안개 모드사용을 위해서는Fog { Mode Global }
와 같이 사용하세요. - ShaderLab에서
BlendColor
색 삭제. - 값이 있는 쉐이더 속성에 의한 텍스쳐 메트릭스 선언의 지원 삭제.
- "static" 쉐이더 속성 지원 삭제.
- 텍스쳐 경계 색 지원 삭제 (
RenderTexture.SetBorderColor
). ColorMaterial Ambient, Diffuse, Specular
지원 삭제(ColorMaterial AmbientAndDiffuse 와 Emission 는 남아있음). 플랫폼에 따른 사라진 것에 대한 지원은 혼란의 야기하고 별로 유용하지도 않습니다.- 내장된
_CameraToWorld
와_WorldToCamera
메트릭스가 이제 사용자가 기대했던 것을합니다. 이전에는 회전만 포함하며 Y축에서 카메라와 세계가 뒤집혔었습니다. 저희도 왜 그러는지 알지 못합니다:) Shader.ClearAll()
의 삭제. 2007년부터 사용되지 않았습니다. 이제 보내야할 때입니다.- 꼭지점 쉐이더는 이제 쉐이더 모델 2.0으로 컴파일 됩니다(이전에는 1.1). SM1.1로 컴파일하길 원하면 쉐이더에 #pragma target 1.1 를 추가하세요.
- 출처: 유니티코리아위키 (CC BY-NC-SA 2.0)