반응형

원문 : http://www.hourences.com/book/tutorialsue3water.htm

정보

내용 : 언리얼엔진에 대형 야외 물 표현에 대한 메트리얼 생성 방법에 대한 튜토리얼입니다
대상 : 언리얼엔진 사용자 - 중간에서 고급까지
관련링크 : 메트리얼 튜토리얼 1
마지막 업데이트 : 2007년 10월
메트리얼 튜토리얼 2
메트리얼 튜토리얼
물 자습서 2 - 실내
매트리얼 표현

소개
물의 메트리얼은 대부부분 복합적인 매트리얼을 사용합니다. 복합 매트리얼을 만들려면 자신이 분명히 원하는것을 정리 해야 합니다. 무엇이 원하는 결과를 내는데 필요한 기능인지. 이 경우, 물 매트리얼을 만드는데,매트리얼은 unlit 입니다.랜러딜이 훨씬 빨리되고 물이 절대적 라이트를 더이상 사용하지 않습니다
*** 켜져있지 않다는데 제가 이해하기로는 투명을 말하는듯 합니다***
그것은 당신이 필요로 하는것은 기본적으로 노말 매핑이 표면에 사용되지 않는것을  .이 feature 는 당신이 전형적인 픽셀쉐이더와 비슷하게 보이기를 원합니다.또한 unlit 랜더링의 의미는 phong 쉐이딩 그리고 반사되지 않는 렌더링을 말합니다. 이두가지가 필요합니다.
Diffuse/Emissive를 가짜로 사용하여 그효과를 remake 합니다
***이거 해석하는데 골이 아파 죽겠네요. 영어는 확실히 어렵네요..ㅜ.ㅜ***

그래서 메트리얼은 다음과 같은것이 필요합니다:
1. 랜덤하게 움직임
2. 여러 suface(표면) 이 왜곡되어야 합니다
3. 하늘을 반영해야 합니다
3. 어떤 스펙큘러(specularity)  를 필요합니다
4. 멀리 보이는 부분에서는 페이드아웃 되어야 합니다

실시간으로 반영이 가능하지만 하드웨어를 상당히 요구 합니다. 따라서 보통때에는 쓸모가 없습니다.이 튜토얼에서는 static reflections 를 초점을 맞춥니다.

Apart from lacking real time reflection, it must be noted that my water is quite over the top and that it is possible to build this material using fewer expressions, or to leave certain features out. However, for the sake of the tutorial, I went all the way.
물위쪽의 실시간반영은 매우 어렵기 때문에 특정기능을 쓰지 않습니다. 그러나 튜터리얼에서는 모든것을 다 씁니다
***아 이건정말 뭐라고 해석하기가 너무 어려워서 대충 넘어갑니다..ㅜ.ㅜ 죄송...****


물매트리얼을 만들기 위해서는 기본 비트맵이 필요합니다. 아래의 파일을 다운로드 받아 에디터에서 import 합니다

"waternormal"과 "wave" 가 둘다 사용하여 왜곡을 표현합니다,"dot" 는 가짜 specularity 에 사용합니다. 그리고 "Skyreflection" 은 기본 reflection에 사용합니다.예전과 같이 택스쳐를 움직여 실제 물처럼 표현하지 않습니다. 이제모든일을 실시간으로 표현합니다. 표면에 텍스쳐가 필요로 한것은 습지,더러운물, 하수구등이 필요합니다
또한, 압축파일에 있는 reflec.tga 의 경우 물튜토리얼2-indoor water 에서 사용할것입니다. 이 튜토리얼에서는 사용하지 않습니다. 이것 외에 simpleplanemesh.ase 도 포함되어 있습니다. 이것은 텍스쳐 스케링링을 자동으로 함으로서 bsp 상세정보, bsp 시트 조명과 문제를 일으킬수 있으므로 사용합니다

또한. waternormal.tga를 압축하지 않는 것은 좋은 아이디어 입니다. 텍스쳐는 광범위하게 사용될기 때문에 압축을 하면 눈에띄게 다르게 나올수 있습니다. 이것은 성능에 영향을 끼치기 때문에 최상의 결과를 원하는 경우에 사용합니다
***텍스쳐를 원본 그대로 사용하게 되면 넓은 면적을 사용하게 될때 상당히 좋은 결과가 나오지만 성능에 영향이 있기 때문에 최상의 모냥을 보고 싶다면 압축하지 말라고 하는거네요...***import 할때 defercompression 를 체크하시거나 가져온 이후에 더블클릭하여 속성창에서 해당 부분을 체크함으로서 압축을 할수 있습니다

매트리얼의 전체적인 구조는 다음과 같습니다

사용자 삽입 이미지

***이거 보고 토하는줄 알았다는****

이것은 상당히 간단한 표현그룹을 함께 연결합니다. 각그룹에서 보고하여 개별적으로 훨씬 덜 어렵게 생각될수 있을겁니다. 각 그룹에서는

A) "waternormal" 텍스쳐 위에 기본적인 두세개의 블랜딩이 왜곡됩니다
B) 텍스쳐 위에 블랜딩과 왜곡을 해 줍니다
C) B와 유사한 블랜딩. 텍스쳐에 왜곡현상을 더욱더 많이하여 최고의 결과를 냅니다.C 포커스 중심으로 왜곡이 더 크게 합니다
E) "dots" 텍스쳐를 사용하여 specularity 를 만듭니다
F) 표면아래의 왜곡을 만듭니다
G) 마지막 그룹으로 실제 하늘 텍스쳐를 가지고 있으며. 중앙에 있어 다른 모든 그룹이 함께 결합합니다

** 아하하하하...잠시 토하고 오겠습니다...진짜로....****


그룹 A
사용자 삽입 이미지
보이는 것과 같이 해당 A그룹은 값과 표현을 만듭니다.waternormal.tga 를 두번 각 시간이 다르게 팬속도와 크기를 설정하여 합치게 하여 무작위의 결과를 나오게 합니다
***
사용자 삽입 이미지
***
참고 특별한 한가지, Componentmask 를 사용하여 파란색 채널을 빼야 합니다..이것은 UV coordinates 때문에 좌표로 사용된다 할수 있습니다. 엔진은 rgb 입력을 받아들이게 되는데 RGB 값은 3개의 값입니다 R,G그리고 B, UV 에서는 두개의 좌표를 쓰기때문에 하나의 좌표를 뺍니다.(U and V  == R and G 이경우에만요)

*** UV 사용할때 두개의 좌표를 사용하기 때문에 블루채널을 빼고 사용이 된다는 말인듯 합니다.
뭐랄까...UV에 대해서 누가 설명좀...;ㅁ;  ***


Also of note is the Texture Coordinate at the end of the group, without this expression the sky texture would render entirely wrong.
또한 텍스쳐 표현 그룹의 끝에 스카이 택스쳐를 틀리게 랜더하지 않습니다.

그룹B


B그룹은 기본적으로 Waves.tga 를 블랜드하여 각각 다른 크기와 속도를 가지고 있도록 합니다. 마지막 두 BumpOffset 에서 Coordinate 표현에 대한 A그룹의 좌표를 추가합니다.

색상채널을 사용하는 방법은 단하나의 waternormal.tga 를 사용해야 합니다.
동일한 TextureSample 에서 파란색 채널을 사용합니다. RGB output 을 사용하기 위하여 당신은 모든채널을 사용하면 안됩니다. 이부분은 그룹 A에서 설명한것과 비슷합니다

***UV채널과 마찬가지로 BumpOffset 에서도 하나의 좌표를 사용하기 때문에 블루채널만을 사용한다는 이야기인듯? ***

그룹C

그룹 B 의 최종 도출값은 C그룹의  BumpOffset 의 Coordinate의 값으로 입력됩니다. 기본적으로 B 그룹과 비슷한 부분이 많이 있습니다.Waves.tga 와 waternormal.tga 를 섞어 큰 물결을 표현해 줍니다.

*** 여기는 두리뭉실하게 쓴 부분이 많습니다. 그룹 B와 유사하게 제작되며 그룹 C는 큰 물결부분을 표시 해주는것을 주 목적으로 하여 그룹 B와 합쳐져서 전체적인 물결을 만들게 됩니다 ***

그룹 D

그룹 A,B,C 가 물결을 표현 하며 그 아래의 빈공간 부분이 이동하는 것을 표현하기 위한 그룹 D 입니다
그룹 D 에서는 태양의 반사되는 물부분을 표현하게 됩니다. 그룹에 있는 두개의 Constant3Vectors 가 태양의 위치에 대한 좌표를 설정할수 있게 됩니다. 이 각도는 카메라 각도와 통합되어 Dot product ,카메라 각도에 따른 태양의 실제 직선 광선 부분을 하게 됩니다.

*** 그러니까 스팟 라이트를 설정하는거라고 생각하시면 될듯 합니다 태양=스팟라이트 ***

업데이트 : 마지막 빌드에서 Coordinate Transform 표현식은 Vector Transform 으로 변경되었습니다.
*** 이건좀 확인해 봐야 할듯 합니다...죄송...***

그룹 E

그룹 E는 물의 하이라이트부분에 매우 작은 하이라이트를 만들기 위해 작성되었습니다. 기본적으로 두개의 택스쳐 dots.tga 의 사이즈 를 랜덤하게 교차하여 점의 랜덤한 점 택스쳐를 도출합니다. 도출된 랜덤한 점들에 하늘 택스쳐를 입히고 밝기를 설정해 줍니다.
*** dots 두개를 사이즈와 팬속도를 랜덤하게 섞어서 결과값에 하늘 택스쳐를 입힌다는 말이네요 (좀 쉽게 쓰라고!!!)***

그룹 F


그룹 F는 간단한 하나입니다. 원한다면 당신은 그룹 A와 B 혹은 C에서 비슷한 설정이 중복되어 있는 것을 볼수 있습니다.해당 부분을 복사하여도 좋고 (Ctrl W)새로 만드는것도 즐거운 일입니다. 그룹 F 는 간단히 값을 조정하여  좀더 많은 왜곡을 표현해 줄수 있습니다.You can already connect the final Multiply directly to the Distortion input on the Material.(당신은 이미 매트리얼에 대한 값을 입력할수 있습니다.)

*** 괄호친 부분은 정말 뭐라고 말해야 할지 애매하네요;; ***

그룹  G
당신은 거의 다 왔습니다 G 그룹에서는 모든것을 함께 결합하게 됩니다. Opacity 를 조정하여 물의 불투명도를 조정합니다. C 그룹의 결과값이 UV 좌표로 BumpOffset 되어 Constant3Vector 과 결합되어 물을 조금 부드럽게 되며 파란색 줄을 추가됩니다.
Power 의 값에서 변경되며 발기와 강도가 증가하는 상수가 곱하여 결과값을 나오게 됩니다.
This result in turn is added on an Add expression, which has a Mulitply expression as its second input. This Multiply expression combines the Add expression that holds the sky before its contrast was altered, with the the final Multiply expression of the sun (Group D). Once that's done, the Add expression is connected to another Add expression, which blends the highlight dots of Group E on top. This whole thing is then used on Emissive at the end of the material. You're done with that part!The only thing left to do is to take care of the opacity and the fading, this only takes two expressions. A DepthBiasedAlpha to automatically fade out, with its scale set to 500, and a constant at 0.4. The constant determines the actual amount of opacity, a higher value means more opaque and would be more desirable for deeper water.
*** 이부분은 그닥 설명할 필요가 없을 듯 합니다. 각 그룹의 결과값을 섞은후 더해주고 해서 값을 나온다는 부분입니다 ***

마지막으로 당신은 메트리얼의 속성에서 BLEND_Translucent 와  MLM_Unlit를 설정해야 합니다. 이부분은 매트리얼 튜토일얼 1에서 설명한것과 같이 TwoSided 가 될수 있도록 할수 있습니다.

자 끝났습니다. 이 예제에서 설명한 물은 상당히 큰 표면에 적용될때 사용하는것이 좋습니다 작은 영역에서 이것을 사용하시려면 왜곡의 규모를 조정하고 Dot 샘플을 수정해야 합니다 또한 DepthBiasedAlpha 의 규모도 작아 대형으로 될수 있어 가장자이에 페이드 하는 표면이 필요할수 있습니다

일반적으로 전체에 Heightfog Actor를 추가하는것이 좋습니다.

결과

*** 히유 겨우 끝냈습니다 몇번을 토하고 왔는지...여기까지는 상당히 어려운 부분이 많이 있습니다. 표현식이라던지 내용부분에 대한 정리가 없어 정말 많이 헤매게 되더군요. 다음은 내부 물에 대한 예제이지만 내부 물 예제 전에 표현식에 대한 정리 되어 있는 부분을 해석하고 넘어가도록 하겠습니다.***
반응형

+ Recent posts