모든 시간은 큰 머리 쉐이더하게 - 통합을 말하기

  사용자는 자신의 개발 환경을 지정할 필요가 있으므로 엔진이, 사용자에게 개발 환경을 제공하기 위해 일반화 될 수 없습니다 전에 또한 우리는, 당신이 그것을 셰이더를 작성하는 가장 친숙한 방법으로 사용할 수있다.

  너무 많은 시나리오가 결정되지 않을 수 있기 때문에보기의 제공자의 관점에서, 그것은 충족 요구에 설정의 수많은 세트를 제공하는 등 일반적으로는 치료 후와 쉐이더 또는 치료 후를 만들기 위해 사용합니까 절대적 세계 좌표 객체 수득 상단 위치 보간 위상 프래그먼트 내에 표시되지 않는다.

  사용자의 관점에서, 멀티 플랫폼, 반복의 멀티 버전, 코드의 양 후에 만 ​​단순히 모르는 결국, 증가 유지하는 방법 보호, 예를 들면 : 

0. 변수 선언

    sampler2D _MainTex;    
    half4 _MainTex_ST;
    half4 _MainTex_TexelSize;

  구조체 APPDATA
    {
        float4 정점 : POSITION;
        float2 자외선 : TEXCOORD0;
    };

    구조체 v2f
    {
        float2 자외선 : TEXCOORD0;
        float4 정점 : SV_POSITION;
    };

1. 초기 코드

    v2f 버트 (APPDATA V)
    {
        v2f O;
        o.vertex = UnityObjectToClipPos (v.vertex);
        o.uv = v.uv;
        반환 O를;
    }

2. UV 인장 변위 코드

    v2f 버트 (APPDATA V)
    {
        v2f O;
        o.vertex = UnityObjectToClipPos (v.vertex);
        o.uv = TRANSFORM_TEX (v.uv, _MainTex);
        반환 O를;
    }

VR 3. 내가 사용!

    v2f 버트 (APPDATA V)
    {
        v2f O;
        o.vertex = UnityObjectToClipPos (v.vertex);
        o.uv = UnityStereoScreenSpaceUVAdjust (v.uv, _MainTex_ST);
        반환 O를;
    }

4. 나는 사후 처리에 사용!

    v2f 버트 (APPDATA V)
    {
        v2f O;
        o.vertex = UnityObjectToClipPos (v.vertex);
        o.uv = v.uv;
# 만약 UNITY_UV_STARTS_AT_TOP  
         경우 (_MainTex_TexelSize.y < 0 )
        {
            o.uv.y = 1 - o.uv.y;
        }
#endif 다음 
        반환 을;
    }

5. 치료 UV 인장 변위 후 -!이 코드를 바로 몰라!

    v2f 버트 (APPDATA V)
    {
        v2f O;
        o.vertex = UnityObjectToClipPos (v.vertex);
        o.uv = v.uv;
# 만약 UNITY_UV_STARTS_AT_TOP  
         경우 (_MainTex_TexelSize.y < 0 )
        {
            o.uv.y = 1 - o.uv.y;
        }
#endif 다음 
        o.uv = TRANSFORM_TEX (o.uv, _MainTex);
        반환 O를;
    }

 내가 VR의 후 처리를 계속 사용하려면 6.! - 나는 떠돌아 다녔다!

    v2f 버트 (APPDATA V)
    {
        v2f O;
        o.vertex = UnityObjectToClipPos (v.vertex);
        o.uv = v.uv;
# 만약 UNITY_UV_STARTS_AT_TOP  
         경우 (_MainTex_TexelSize.y < 0 )
        {
            o.uv.y = 1 - o.uv.y;
        }
#endif 다음 
        o.uv = UnityStereoScreenSpaceUVAdjust (v.uv, _MainTex_ST);
        반환 O를;
    }

 

  공식 코드가 변화의 버전과 같은 체크 아웃이 단지 공식 코드도 변경되어 있으므로,이 단일 UV-변수 문제,이 이외의 문제 이상의 대상 플랫폼을 제공 상상되지 않습니다 훨씬 더 ...... 코드의 복사본을 하늘로 추정된다 멀티 쉐이더 프로젝트 팀의 다양한 변경됩니다있다.

  위의 같은 UV 변수, 당신이 _MainTex_ST 세트를 가지고, 그것은 TRANSFORM_TEX (v.uv, _MainTex)로해야 정상입니다, 그것은, 또는 내가 VR이와 싱글 패스 모드를 사용하는 사용 후 확실히 UnityStereoScreenSpaceUVAdjust을 (호출하는 것 v.uv, _MainTex_ST)가 자신의 매크로 플랫폼 판사에게 당신을 추가 할 모든 권리를 나에게 정점 무대를 포기하고 계산하는 시간에 전달뿐만 아니라 각 개발자에 할 수없는,이 플랫폼은 편집기에서 옵션을 아직 같은 장소에서 사용하기에 적합하지 않습니다.

  UNITY_UV_STARTS_AT_TOP처럼이 판단은, 각 화면을 추가 할 후 처리해야하며, (셰이더를 설정하는 사용자가 D3D 나 OpenGL을 표준의 사용이 경우, 우리는 명확하게 화면을 알 수있을 것입니다 0이 나타나는 횟수를 참조 , 습관의 OpenGL을 시작한 시점 0) 위치가 너무 던져 수 없습니다 저장 할 수있는, D3D 습관의 왼쪽 하단 모서리에서 측정, 왼쪽 상단부터 계산한다.

 

추천

출처www.cnblogs.com/tiancaiwrk/p/11950169.html