유성 / 오염 수 렌더링? 물은 균일하게 기름진 것이 아니라,

거기에있는 모든 셰이더 마법사는 다음과 같이 유성 / 오염 된 물 효과를 얻는 방법에 대한 아이디어를 가지고 있습니다.

유성수

이상적으로, 물은 균일하게 기름진 것이 아니라, 대신에 일부 원천 (예 : 화학 플랜트의 오염 배출구)에서 생성 된 후 수역 전체로 확산 될 수 있습니다. 이 부분에 대한 나의 생각은 “오일 맵”을 물 표면의 각 지점에서 오일 밀도를 결정하는 2D 텍스처로 유지하는 것입니다. 그것은 수위와 함께 자연스럽게 확산되고 움직일 것입니다. 그 시점의 도시 (동적 파도에 대한 파동 입자 시뮬레이션이 있으며 이미 수면의 거품과 비슷한 것을하고 있습니다). 그러나 기름이 물과 같은 속도로 움직이지 않을 수 있기 때문에 물리적으로 얼마나 정확한지 잘 모르겠습니다.

그리고 나는 그 모든 trippy 색상을 만드는 방법을 모른다 :-). 생각?



답변

기름 매끄러운 색의 물리적 인 기초는 무지개 빛깔 이며, 뉴턴의 고리 와도 관련이 있습니다. 구체적으로, 오일 층의 두께는 광의 파장 정도이다. 주어진 파장에서 어떤 각도에서든 빛이 오일의 상단과 하단 표면에서 반사되기 때문에 두 반사는 위상이 맞지 않아 서로 상쇄됩니다. 다른 각도에서 반사는 위상이 같고 합쳐집니다. 이것은 모든 파장에 대해 다른 각도에서 발생하므로 흰색 빛으로 기름을 비추면 모든 색상이 생성됩니다. 단일 주파수 (예 : 레이저 광)로 조명을 켜면 일련의 밝고 어두운 링만 보입니다.

오일 층의 굴절을 무시하고 상황의 지오메트리를 해결하면 주어진 파장에 대해 반사 된 빛의 밝기가 다음과 같아야 함을 알 수 있습니다

sin(2.0 * pi * oilThickness / (dot(L, H) * wavelength)) * 0.5 + 0.5

이론적으로 이것은 모든 파장에 걸쳐 통합되어야하지만 실제로는 빨강, 녹색 및 파랑에 대해 실제로 수행 할 수 있습니다. 각각 700, 550 및 400 nm라고 가정 해 봅시다. 오일 두께를 변경하면 색상 고리의 겉보기 반경이 변경됩니다. 아마도 2.0 * pi * oilThickness / wavelength셰이더에 제공된 단일 RGB 값으로 균일 한 값으로 래핑합니다 . 원하는 경우 다양한 오일 두께를 시뮬레이트하기 위해 텍스처에 곱할 수 있습니다. 위 이미지에서 가장 흥미로운 텍스처를 얻을 수 있습니다.

그러면 BRDF에 곱할 수있는 RGB 색상 값이 생성됩니다. 이 dot(L, H)요소는 점 / 방향 조명에 사용되며 dot(N, V)환경 맵 반사에도 적용 할 수 있습니다.

면책 조항 : 나는 이것을 셰이더에서 시도하지 않았으며 다이어그램을 그려서 “작동해야합니다”라고 확신했습니다. 그래서 시도하면 결과를 알려주십시오! 🙂