2024. 2. 16. 14:02ㆍUnity
아쉽게도 홈페이지에 올라와있는 모습과 쓰는 에셋과는 패널의 방향차이가 있었다.
https://www.hycorp.co.kr/hy/solarpower.php
텍스쳐가 90도 돌아가야할 것으로 보인다.
간단하게 UV 수정으로 90도 돌려준다.
의도한 대로 텍스쳐가 잘 돌아갔고 이제 패널을 좌우로 쭉 늘려서 긴 직사각형 모양으로 만들어서 배치해본다.
패널 자체 에셋을 X 축으로 20배 늘려주는 만큼,
메테리얼 Tiling의 Y 값도 기존 2에서 20을 곱한 40으로 늘렸다. 물론 Tiling 값은 조정이 얼마든지 가능하다.
네이버 지도에서 '솔라시도태양광발전소'를 검색하여 위성 지도를 평면도로 사용해볼 것이다.
유니티에 네이버 지도에서 가져온 위성 지도를 펼쳐보았다. (이걸 언제 다 채우지...)
어차피 패널을 전체적으로 설치할 예정이므로 효율적으로 패널을 배치할 수 있는 방법을 찾아봐야한다.
D 구역의 일부만 패널을 깔아본 결과 총 Tris 수는 대략 20만, 한 구역에 네 부분씩 총 열여섯 부분이 있다고 생각하면 320만 Tris 수가 나온다. 320만 폴리면 과거의 프로젝트를 생각했을 때, 그래도 유니티 상에서는 충분히 돌아갈만 하다고 생각한다.(회사에서 프로젝트를 진행할 때는 5000만~8000만일 때 프레임이 정말 안나왔다.)
일단 아직 씬을 만든 것이 아닌 테스트이기 때문에 이정도만 배치하도록 하고 다시 적외선 카메라 씬으로 넘어가서 비슷하
게 배치를 해서 열화상으로도 잘 보이는 지를 확인해 보도록 해야겠다.
적외선 카메라 씬
일단 fbx 파일을 프리팹으로 만든다.
프리팹 안에 프리팹을 똑같이 복사해서 thermalShadergraph 셰이더 그래프를 적용한다.
내부 프리팹의 Layer를 'thermal hot'으로 설정한다.
잘 적용은 되었으나...
PostProcessing을 쓰고 프리팹 내부에 프리팹이 하나 더 있는 형태라서 테스트했던 결과보다 더 많은 리소스를 차지한다는 것을 알게되었다! 다행히 Static Batching이 잘 되어서 전체 화면에서의 FPS는 20대를 유지하였다.
대략적으로 전체에 패널을 깔아보았을 때, FPS는 13~14를 표시하고 있다..... 좀 느린데
자글자글 효과
실제 적외선 카메라 세팅처럼 보이게 하려면 자글자글한 효과가 필요하다.
Simple Noise를 쓰면 너무 어둡게 자글자글해보인다.
Power를 쓰는 것도 방법이긴 한데, 생각해보니 자글자글 효과 보다는 내부에 칸이 나눠져 있는 형태를 먼저 구현해야 할 것 같다.
블렌더 Texture Painter로 칸 나누기 -비효율적
thermal_mat 메테리얼 만들기
복사 모양 아이콘 누르고 이름 설정, Alpha 끄기
Texture Paint 탭 클릭, 오른쪽에서 방금 만든 메테리얼 선택
높은 온도로 표시할 부분 흰색으로 칠하기
[Stroke]를 [Line]으로 바꾸고 alt 눌러서 직선 그리기는 가능하다.
이런 식으로 라인이 그려지긴 하지만 세로 줄을 40개를 그려야 한다. 간격은 알아서... 이걸 다 그리는 것은 매우 비효율적이라 다른 방법을 생각해보았다.
이렇게 하는 이유는 내가 높은 온도를 내고 싶은 부분은 밝게, 낮은 온도를 표시하고 싶은 부분은 어둡게 칠해서 대비를 주는 것이다. 내가 가지고 있는 원래 텍스쳐를 셰이더에서 이용해서 이 원리를 적용해도 될 것 같았다. 가령 Contrast로 밝고 어두운 대비를 준다던지...
따라서 셰이더 그래프를 변경해보았다!!!
적외선 셰이더 응용
원래 태양광 패널의 Panel 메테리얼에 쓰는 텍스쳐를 가져왔고 [Invert Colors] 노드로 반전을 줘서 파란 패널 부분은 밝게, 패널 사이의 밝았던 공간은 어둡게 바꿨다. 그리고 [Contrast] 노드로 밝은 부분은 더 밝게, 어두운 부분은 더 어둡게 강조해서 대비가 명확하게 만들었다. 이 결과물을 기존에 있던 것과 [Multiply]하면 그래도 나름 내가 원하는 모습이 되긴 했다!
하지만 중간과 끝 부분이 좀 이상해서 셰이더 자체에 Tiling, Padding을 줘서 이 부분을 수정해야 할 것 같다.
유니티 셰이더에는 [Tiling And Offset] 노드가 있다.(Tiling, Padding이 아니었다...)
이 노드를 어디다 연결하지 검색하다가 누른 블로그가 내 블로그였고, 과거의 나에게 도움을 받았다
[Tiling And Offset] 노드는 [Sample Texture 2D] 노드 전에 놓고 UV에 연결하면 되는 것이었다!
2줄, 40열 배열로 만들어서 적용한 결과는 너무나 만족스러운 결과물이었다!
완전히 같은 배열의 결과물을 만들어서 사실 일반 카메라와 적외선 카메라로 보는 메테리얼은 다른 메테리얼이지만 마치 똑같은 화면에 진짜 적외선 카메라를 씌운 것 같은 효과를 나타내었다. (물론 다른 메테리얼을 쓰고 카메라를 두 대 쓰는 만큼 비싸긴 하다)
멀리서 봤을 때는 대략 이렇게 보인다.
이제 위에서 잠깐 넘어갔던 자글자글하게 보여서 실제처럼 보이는 효과를 높여주는 작업을 해볼 것이다.
[Simple Noise] 노드를 사용했고, 처음엔 노이즈가 좀 이상해서 우여곡절을 겪었다.
먼저, 패널 텍스쳐에 썼던 [Tiling And Offset] 노드를 [Simple Noise]에도 동일하게 연결한다. 타일링 값을 유지해서 노이즈만 이상하게 보이게 하지 않기 위해서이다.
타일링을 적용하지 않은 경우, 에셋을 좌우로 스케일을 키웠기 때문에 노이즈도 같이 좌우로 늘려지는 현상을 보인다.
타일링을 적용한 후를 보면 노이즈가 좌우로 늘려지지 않고 적용되는 것을 볼 수 있다.
그런데 문제는 얼룩덜룩하긴 한데, 그 차이가 조금 선명해 보인다는 것이다. 자연스럽게 얼룩덜룩하려면 노이즈의 대비를 낮춰야 한다. 나는 [Clamp] 노드를 떠올렸다. 값을 제한함으로써 0~1의 범위가 아닌 0.4~0.5 정도의 값만 출력한다면 노이즈의 대비를 줄일 수 있을 것이라고 생각했다.
[Simple Noise] 노드를 [Clamp]에 연결한 후 0.5~0.6의 값을 주었고, 마지막에 [Power] 노드로 텍스쳐와 연결했다. [Power]노드를 쓴 이유는 더 밝고 원한는 색이 나와서이고, [Multiply]를 썼을 때는 생각보다 더 어두운 색이 나왔다.
아래는 최종 셰이더의 모습이다.
생각보다 괜찮은 비주얼이 나온 것 같다. (내 생각에는)
적외선 카메라 셰이더 기능 구현 완료
패널 회전축 피봇 설정하기
현재 상태로 패널을 회전하면 원하는대로 회전축이 설정되어있지 않아서 피봇을 수정해야 한다. 원래는 기둥의 밑바닥에 피봇이 있어서 올려줄 것이다. 블렌더에서 간단하게 수정할 수 있다.
유니티에서도 잘 적용 되었다. 근데 높이 조정하고 하다보니 thermal 메테리얼을 다시 갈아야 될듯 하다. 프리팹은 본 씬에서 다시 깔면 되기 때문에 태양광 패널 세팅은 이렇게 마무리 해도 될 것 같다.
'Unity' 카테고리의 다른 글
유니티 태양광패널 디지털 트윈 프로젝트(6) -3D 에셋에 마우스 호버 시 테두리 하이라이트 셰이더 만들기 -> 강조효과로 수정 (0) | 2024.02.23 |
---|---|
유니티 태양광패널 디지털 트윈 프로젝트(5) -3D 에셋에 마우스 호버 시 정보 출력 기능 만들기 (0) | 2024.02.20 |
유니티 태양광패널 디지털 트윈 프로젝트(3) -태양광 에셋 최적화 (1) | 2024.02.14 |
유니티 태양광패널 디지털 트윈 프로젝트(2) -적외선 카메라 셰이더 만들기 (0) | 2024.02.13 |
[Robot Arm Arduino Project] RAAP프로젝트 -로봇 완성 (0) | 2024.02.05 |