GPU Gems 의이 기사 는 굴절에 대해 깊이있게 다루어 꽤 좋은 결과를 줄 수 있습니다.
가장 기본적인 의미에서
기본 굴절 기술의 첫 번째 단계는 장면 지오메트리를 텍스처로 렌더링하여 모든 굴절 메시를 건너 뛰는 것입니다. 이 텍스처는 후속 패스에서 렌더링 될 굴절 객체 뒤에 보이는 객체를 결정하는 데 사용할 수 있습니다. 이 텍스처를 S로 표시합니다.
두 번째 단계는 굴절 메쉬를 렌더링하여 굴절 모양을 시뮬레이션하기 위해 섭동이 적용된 텍스처 S에서 값을 찾습니다. 섭동은 노멀 맵 N을 사용하여 달성 될 수 있으며, 여기서 노멀 맵 레드 및 그린 (XY) 컴포넌트는 투영 된 텍스처 좌표에 변위를 추가하기 위해 작은 값으로 사용 및 스케일링됩니다. 이 방법은 쉐이더에서 간단하게 구현할 수 있습니다.
- 텍스처 N을 가져옵니다
- 작은 값으로 조정 된 XY 구성 요소 사용 (예 : 0.05)
- 이 변위 값을 S의 투영 된 텍스처 좌표에 추가
다음 목록은이 접근 방식을 보여주는 셰이더를 보여줍니다.
half4 main(float2 bumpUV : TEXCOORD0,
float4 screenPos : TEXCOORD1,
uniform sampler2D tex0,
uniform sampler2D tex1,
uniform float4 vScale) : COLOR
{
// fetch bump texture, unpack from [0..1] to [-1..1]
half4 bumpTex=2.0 * tex2D(tex0, bumpUV.xy) - 1.0;
// displace texture coordinates
half2 newUV = (screenPos.xy/screenPos.w) + bumpTex.xy * vScale.xy;
// fetch refraction map
return tex2D(tex1, newUV);
}
다음 이미지는이 세 단계를 보여줍니다.
같은 기사에서 훨씬 더 매력적인 모습을 얻을 수있는 고급 기술이 있습니다.
유니티에서 비슷한 효과를 내기 위해, 굴절 쉐이더 위키 페이지를 보길 원할 것입니다