쉐이더에서 이전에 렌더링 된 화면의 내용이 인 인 특수 변수가 이미 있습니다. 그것은GLSL 쉐이더에서 모델 - 화면 좌표 혼동
uniform sampler2D _GrabTexture;
에 저장됩니다에게 그것의 어떤 내용이어야한다 :
(I 전체 화면을 얻을 또한 유니티의 GUI를 무시하세요} 유니티의 GrabPass {사용하고 보조 노트로.)이제 내 비행기 모델의 텍스처로 _GrabTexture를 사용하여 패스를 번 더 렌더링 할 수 있습니다. 결과는 내 _GrabTexture와 완전히 동일합니까?
(요점은 나는 비행기의 질감 이제 양식 그래서 전에 한 번 더 패스 렌더링 해당 화면의 질감에 등, 선명, 흐림과 같은 몇 가지 효과를 적용 할 수있다.)
내가 마지막이 노력하고있어 패스. 변수는 Vertex & Fragment Shader에서 선언됩니다.
uniform sampler2D _GrabTexture;
varying vec4 v_Position;
버텍스 쉐이더 :
void main()
{
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
v_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}
스토어 화면이 조각 셰이더에 사용되는, 다양한 각 모델의 꼭지점의 좌표입니다.
조각 쉐이더 :
void main()
{
gl_FragColor = texture2D(_GrabTexture,vec2(v_Position));
}
지금 _GrabTexture 화면 질감에 액세스하는 것을 저장된 다양한 위치를 사용합니다. 전체 화면이므로 이미 화면 좌표에있는 내 v_Position에 올바른 픽셀이 올바르게 있어야합니다. 당신은 비행기의 질감이 보여주는 이전에 렌더링 화면 '의 종류'하지만 좌표를 잘 작성하지 볼 수 있듯이
는하지만 결과는
입니다. 결과가 첫 번째 이미지와 동일하도록 수정하려면 어떻게해야합니까?
감사합니다. Unity의 GLSL에서 texelFetch를 지원하지 않기 때문에 전환이 발생합니다. (나는 또한'gl_FragCoord'를 안다. 그러나 그것이 내 마음을 어떻게 미끄러 뜨렸는지 궁금해했다.) 그러나 단점은 쉐이더 코드에서 런타임시'sampler2D'의 너비와 높이를 알 수 없어 내 스크린에 따라 설정해야한다는 것이다. – 5argon
@Sargon : 제복을 사용하여 텍스처 크기를 추가 vec2로 전달합니다. – datenwolf