일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Windows Build
- URP
- ColorGradingLutPass
- 벡터
- 가상 바이트
- 3d
- 메모리 누수
- C언어
- ASW(Application SpaceWarp)
- VR
- 프로그래밍 기초
- Cartoon Rendering
- 개인 바이트
- Specular
- working set
- Private Bytes
- Cell Shader
- URP로 변경
- Cell Look
- Virtual Byte
- OculusMotionVectorPass
- 게임 수학
- AppSW
- Rim Light
- Three(Two) Tone Shading
- Toon Shader
- 작업 집합
- Today
- Total
WinCNT
스크립트로 정점(버텍스) 컬러 변경하기 본문
버텍스 컬러에 별도의 정보를 스크립트를 미리 Bake하려는 작업을 하게 되었다
우선 스크립트에서 버텍스 컬러를 변경하는 방법을 찾아봤는데
실제로 사용했던 방법을 간단히 정리해보고자 한자
Mesh.SetColors()
결론부터 말하자면 변경하려는 Mesh의 SetColors()이란 함수를 사용하면 된다
SetColors()의 파라미터는 각 버텍스에 대해 지정할 색의 배열이다
(즉, 색의 배열의 크기는 Mesh의 버텍스 개수와 같아야 한다)
참고로 유니티에서 버텍스 컬러의 정보는 MeshFilter의 sharedMesh에 있다
예를 들면 다음과 같다
// GameObject의 Mesh에서 sharedMesh를 취득
Mesh mesh = GetComponent<MeshFilter>().sharedMesh;
// 색 배열
Color[] vertCol = new Color[mesh.vertices.Length];
for (int i = 0; i < vertCol.Length; i++)
{
// 버텍스마다 색 지정하는 처리를 적당히 추가...
switch (i % 3)
{
case 0:
vertCol[i] = Color.red;
break;
case 1:
vertCol[i] = Color.green;
break;
case 2:
vertCol[i] = Color.blue;
break;
}
}
// Vertex Color를 변경
mesh.SetColors(vertCol);
위의 소스 코드가 작동한 Mesh는 아래와 같은 결과가 된다
(정확히는 버텍스 컬러를 출력하는 셰이더의 머테리얼을 적용해야 하지만 여기선 생략)
알게 된 주의점
MeshFilter의 mesh
참고로 MeshFilter의 mesh에도 버텍스의 정보가 있으며 색 변경도 가능하다
Mesh mesh = GetComponent<MeshFilter>().mesh;
단, 에디터 모드인 상태에서 색 변경을 하면 다음과 같은 경고가 나타난다
Instantiating mesh due to calling MeshFilter.mesh during edit mode. This will leak meshes. Please use MeshFilter.sharedMesh instead.
실제로 에디터 모드에서 변경하면 Mesh Filter의 Mesh가 새로 생성된 Instance로 바뀌는 것을 볼 수 있었다
아무튼 MeshFilter.sharedMesh를 사용하도록 하자
유니티 종료 시하면 변경된 값이 초기화되는 현상
MeshFilter.sharedMesh를 사용하더라도 유니티를 종료하면 변경한 내용들이 초기화 된다
이는 SetColors()가 기동 중인 유니티의 Mesh를 변경하는 것일 뿐, 실제의 모델링 데이터 자체를 변경하는 것은 아니기 때문이(라고 생각된)다
변경된 내용을 저장하려면 별도의 처리가 필요한 것 같다
딱히 지금 필요한 것은 아니기 때문에 참고 사이트만 찾아서 아래에 정리해둬야겠다
마무리
역시 간단히 변경할 수 있어서 쉽게 끝났다
현재의 태스크에 최종적으로 필요한 내용이니 잘 정리해두자
참고 사이트
【Unity】プログラミングで作ったメッシュを頂点カラーで色を塗る方法 - 渋谷ほととぎす通信
이건 변경한 Mesh를 저장하는 방법(인 것 같다)
【Unity】Mesh Filter の Mesh を保存する - うにてぃブログ
自前作成した mesh は AssetDatabase に保存しないと Prefab 化した時に mesh データが失われる - 強火で進め
'Unity > Unity 관련' 카테고리의 다른 글
유니티 스크립트 게임 오브젝트의 레이어와 카메라의 컬링 마스크를 설정하기 (0) | 2023.05.19 |
---|---|
유니티 에디터 모드에서 다이얼로그(Dialogue)창 띄우기 (0) | 2023.04.26 |
URP에서 특정 카메라의 렌더링 후에 호출되는 함수 (0) | 2023.04.25 |
Texture를 PNG파일로 저장하기 (0) | 2023.03.23 |
Unity의 인스펙터에 버튼 표시하기 (0) | 2023.02.17 |