2D 수면 표면 프로파일


9

버텍스 조각 쉐이더로 수면 두께의 효과를 만들려고합니다.

3D 게임 환경에 있지만 스크롤보기이므로 "2D"보기입니다. 다음 은 프래그먼트 셰이더를 사용하여 실제 2D에서 이러한 효과를 만드는 좋은 자습서입니다.
그러나 이것은 내 생각에 사용할 수 없습니다. 나는 비행기 만 가지고있는 순간에 굴절을 적용했다.

굴절

그리고 나는 물 두께 효과를 적용하고 싶습니다. 그러나 나는 그것을하는 방법을 모른다.
순간 정점을 사용하여 물 변형 / 변위를 만들려고하지 않습니다. 이점이 아닙니다.

간단한 쿼드로 가능한지 모르겠지만 아마도 이와 같은 객체를 사용해야합니다.

체계

여기 몇 가지 예가 있어요.

1 2 4 레이맨

이 효과를 만드는 방법에 대한 아이디어가 없습니다.

고마워요!

[ 편집 ] 효과를 더 잘 참조 할 수 있도록 Rayman 워터 효과를 추가했습니다.


현재 물 효과는 어떻습니까? 게시물의 첫 번째 스크린 샷이 자신의 스크린 샷 인 경우 장면 위에 왜곡 된 쉐이더를 사용하여 2D 쿼드를 그리는 것처럼 보입니다. 맞다면 튜토리얼의 지침을 따르지 않는 이유는 무엇이며 왜곡 된 2D 텍스처를 사용하는 것입니까?
Nathan Reed

배경을 왜곡하는 정점 조각 셰이더가있는 3D 쿼드가 있습니다 (배경은 Unity GrabPass 기능으로 캡처됩니다). 2D 텍스처를 사용하는 것이 좋은 생각이라고 생각하지 않습니다. 사용자 정의 가능한 매개 변수로 더 일반적인 것을 생각하고 있었지만 다른 방법은없는 것 같습니다.
MaT

답변:


1

습성을 지정하는 값을 셰이더에 있습니다. 0보다 작은 것은 공기를 의미하고 1보다 큰 것은 물을 의미하며 그 사이에는 메 니스 커스를 의미합니다.

의사 코드는 다음과 같습니다.

vec2 uv2 = bigWaves(uv); // modify the texture coords to create a wavy water effect
float wetness = (uv2.y - 0.1) * 100;

if( wetness<0.0 )
{
    gl_Fragment = texture2D(screen_texture,uv); // is air - no refraction or effect
}
else if( wetness>1.0 )
{
    vec2 uv3 = smallWaves(uv2); // modify the texture coords to create a ripply water effect
    gl_Fragment = texture2D(screen_texture,uv3); // is water - with refraction
}
else
{
    gl_Fragment = vec4(1,1,1,1); // solid white meniscus
}

이것이 내가 할 수있는 가장 간단한 방법입니다. 그것이 저라면, 반월 상 연골 반열에 약간 더 복잡한 일을하고 거기에 더 많은 굴절을 적용 할 것이지만, 미학적 반복이 필요하기 때문에 무엇을 말할 수는 없습니다. 또한 물 샘플을 착색하고 흐리게 처리합니다. 그러나 나는 모든 것을 당신에게 맡길 것입니다.


예, 좋은 생각입니다! 나는 흐림과 색조에 전적으로 동의합니다. 또한 depth (Y) 그라디언트 (아마도 다른 depth (Z) 그라디언트)를 추가하고 있습니다. 메 니스 커스 영역에서도 다른 굴절 효과를 추가해야하지만 현재 Rayman과 같은 파급 효과를 얻으려고합니다. 그러나 나는 방법을 모른다. 어쩌면 메니 스커 스가이 복제 효과를 갖기 위해 다른 질감을 사용해야 할 수도 있습니다. 내가 무슨 뜻인지 알지 모르겠어
MaT
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.