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.