2013-10-17 3 views
2

셰이더를 작성했으며 카메라 앞에 위치한 평면에 추가했을 때 제대로 작동합니다 (이 경우 카메라에는 셰이더가 없습니다). 하지만이 쉐이더를 카메라에 추가하면 화면에 아무것도 표시되지 않습니다. 여기 내 코드입니다, 당신은 내가 Camera.RenderWithShader 메서드와 호환되도록 그것을 어떻게 바꿀 수 있는지 알려줄 수 있습니까?유니티에서 카메라 렌더링을위한 셰이더 사용

Shader "Custom/she1" { 
    Properties { 
    top("Top", Range(0,2)) = 1 
    bottom("Bottom", Range(0,2)) = 1 
} 
    SubShader { 

     // Draw ourselves after all opaque geometry 
     Tags { "Queue" = "Transparent" } 

     // Grab the screen behind the object into _GrabTexture 
     GrabPass { } 

     // Render the object with the texture generated above 
     Pass { 


CGPROGRAM 
#pragma debug 
#pragma vertex vert 
#pragma fragment frag 
#pragma target 3.0 

      sampler2D _GrabTexture : register(s0); 
      float top; 
      float bottom; 

struct data { 

    float4 vertex : POSITION; 

    float3 normal : NORMAL; 

}; 



struct v2f { 

    float4 position : POSITION; 

    float4 screenPos : TEXCOORD0; 

}; 



v2f vert(data i){ 

    v2f o; 

    o.position = mul(UNITY_MATRIX_MVP, i.vertex); 

    o.screenPos = o.position; 

    return o; 

} 



half4 frag(v2f i) : COLOR 

{ 

    float2 screenPos = i.screenPos.xy/i.screenPos.w; 
    float _half = (top + bottom) * 0.5; 
    float _diff = (bottom - top) * 0.5; 
    screenPos.x = screenPos.x * (_half + _diff * screenPos.y); 
     screenPos.x = (screenPos.x + 1) * 0.5; 
    screenPos.y = 1-(screenPos.y + 1) * 0.5 ; 
    half4 sum = half4(0.0h,0.0h,0.0h,0.0h); 
    sum = tex2D(_GrabTexture, screenPos); 
    return sum; 

} 
ENDCG 
     } 
    } 

Fallback Off 
} 

답변

2

당신의 셰이더가 카메라의 모든 것을 음영 처리하는 대체 셰이더라고 생각합니다.

맞습니까?

그래서 이것은

여기
Camera.main.SetReplacementShader(Shader.Find("Your Shader"),"RenderType") 

좀 더 정보입니다 작업을해야하는 경우 : http://docs.unity3d.com/Documentation/Components/SL-ShaderReplacement.html

편집 : 당신이 렌즈 효과처럼 워프 전체 카메라를 기대하고 있습니까? 왜냐하면 당신의 평면과 같은 객체에는 적용되지만 전체 카메라보기에는 적용되지 않기 때문에 이미지 효과를 필요로하기 때문에 이처럼 쉐이더를 사용해서 얻지 못할 것이기 때문입니다. 먼저 유니티 프로가 필요합니다. 그렇다면 이미지 효과 패키지를 가져 와서 어안 스크립트를 봅니다. 자신의 쉐이더로 어안 스크립트를 복제 할 수 있는지 확인하십시오. 해당 스크립트없이 fisheye 쉐이더를 연결했을 때 나는 현재 쉐이더 코드와 똑같은 결과를 얻고있었습니다. 이미지 효과 패키지에 대한 액세스 권한이 없다면 어안 스크립트와 쉐이더를 알려주고 아프게 보내주십시오.

+0

유니티 프로가 있습니다. 하지만 어안 대본이 없습니다. 코드를 나와 공유 할 수 있습니까? Fisheye 스크립트 외에 추가해야하는 모듈이나 라이브러리가 있습니까? – user1021110

+0

다음 링크를 참조하십시오. 24 시간 후에 파일을 삭제합니다. https://www.dropbox.com/s/rs8nx7fn1lgkg70/Image%20Effects%20%28Pro%20Only%29.unityPackage – MichaelTaylor3D

+0

감사합니다. 나는 그것을 다운로드했다. 나는 결과를 여기서 남겨 둘 것이다. 도와 줘서 고마워. – user1021110

0

나는 여러 가지 방법을 시도 해왔다. 셰이더 자체는 메인 카메라 앞에있는 비행기에 추가 할 때 매우 잘 작동합니다. 그러나 아래 코드로 기본 카메라에 추가하면 아무것도 보이지 않습니다. (그냥 빈 화면) 오류 메시지없이. 위의 쉐이더를 repl 변수에 할당합니다.

using UnityEngine; 
using System.Collections; 

public class test2 : MonoBehaviour { 

    // Use this for initialization 
    public Shader repl = null; 
    void Start() { 

     Camera.main.SetReplacementShader(repl,"Opaque"); 

    } 

    // Update is called once per frame 
    void Update() { 

    } 
} 

위의 셰이더는 장면을 사다리꼴 모양으로 왜곡합니다.

+0

쉐이더를 컴파일하여 테스트 객체에 적용했는데 약간의 굴절로 완전히 투명했습니다. 올바르게 작동시키는 데 필요한 트릭이 있습니까? – MichaelTaylor3D

+0

아니요. 아닙니다. Unity 웹 사이트의 주요 질문을 참조하십시오. [링크] (http://answers.unity3d.com/questions/560327/shader-problem-to-distort-the-final-render-result.html) – user1021110

+0

신경 쓰지 마라. 나는 무슨 일이 일어나고 있는지 알았다고 생각합니다. 내 대답. – MichaelTaylor3D

관련 문제