꼭짓점 색은 무엇입니까?


31

내 질문은 제목으로 쓰여진 것입니다. 이 용어 "정점 색"은 많이 나타납니다. 이것을 이해하는데 어려움을 겪고 있습니다.

예를 들면 다음과 같습니다.

3D 공간에서 꼭짓점이 단순하지 않습니까? 그렇다면 어떻게 점에 색을 입힐 수 있습니까? 아니면이 "색상"이 다른 의미입니까?

언리얼 엔진의 머티리얼 에디터에 "Vertex Color"노드가 있습니다.

누군가 내 질문에 빛을 비출 수 있습니까? "정점 색상이란 무엇입니까?"라고 Google에 올렸을 때 유용한 정보를 찾을 수 없었지만 너무 기술적 인 문서는 없었습니다.


2
지오메트리에서 꼭짓점은 공간의 한 지점 일뿐입니다. 그러나 3D 렌더링의 경우 멋진 모양을 원합니다. 색상, 질감 좌표 또는 골격 가중치와 같이 각 정점에 더 많은 정보를 첨부하여 메시를 더 쉽게 애니메이션으로 만들거나 조명에 사용할 일반적인 방향을 지정할 수 있습니다. 계산.
— user253751

3
혼동의 큰 부분은 3D / 그래픽에서 "정점"과 "위치"라는 용어가 빈번하게 혼동되기 때문이라고 생각합니다. 수학적으로 “3D 공간에서 꼭짓점이 아닌가?”라는 말 은 정확하지만 게임 엔진 및 그래픽 영역에서는 안됩니다 . 위치는 3D 공간에서 간단한 점입니다. (메쉬) 정점은 거의 항상 위치를 갖는 데이터 조각이지만, 법선, 탄젠트, 텍스처 좌표, 색상 및 / 또는 기타 여러 데이터 조각을 가질 수도 있습니다 . 메쉬 정점은 실제로 정점 렌더링 단계에서 처리되는 데이터 덩어리입니다.
— Slipp D. Thompson

답변:


29

정점 색상은 완전히 텍스처링 된 3D 메시가있을 때 관련이 없습니다. 그러나 질감이 없지만 컬러 메쉬가 있으면 흥미로워집니다. 이 경우 모든 정점에 색상을 지정합니다. 그런 다음 셰이더는 세 정점의 색상을 보간하여 다각형의 각 픽셀에 색상을 지정합니다.

정점 색상은 때때로 텍스처와 결합하여 흥미로울 수도 있습니다. Gouraud Shading 과 같은 음영 처리 알고리즘을 사용하려면 각 정점의 조명 강도를 계산하고 정점에 밝은 색상을 정점 색상으로 할당하고 질감을 렌더링 할 때 각 질감 픽셀의 색상 값에 곱하십시오 보간 된 색 이를 통해 픽셀 셰이더 대신 정점 셰이더에서 광원을 계산할 수 있습니다. 정점 셰이더는 일반적으로 훨씬 덜 자주 실행되기 때문에 일반적으로 훨씬 빠릅니다.


2
btw, 정점 색상은 동적 번개 / 그림자가없는 일부 오래된 게임에서 사용되었습니다. 예를 들어 2004 년의 Richard Burns Rally는 정점 색상을 사용하여 다양한 모양의 텍스처를 만들고 그림자를 적용합니다.
— martin

증인은 정점 색상과 라이트 맵을 많이 사용하지만 텍스처는 많지 않은 최근 게임입니다.
— user253751

@Philipp "정점 셰이더는 일반적으로 훨씬 덜 자주 실행되기 때문에"왜? 버텍스 쉐이더가 렌더링 파이프 라인의 일부가 아니므로 각 프레임이 실행됩니까? 왜 그렇게 덜 자주? 픽셀 쉐이더에있는 것처럼 정점 "컬러"를 매 프레임마다 계산하지 않아도됩니까?
— Nikos

1
@Nikos 정점 셰이더는 정점 당 한 번 호출됩니다. 그런 다음 픽셀 셰이더는 픽셀 당 한 번 호출됩니다. 3 개의 정점이있는 다각형은 일반적으로 화면에 3 개 이상의 픽셀을 생성합니다 (게임에서 3 픽셀 미만을 포괄하는 많은 다각형을 계산하는 경우 컬링 및 LOD와 관련하여 수행 할 수있는 작업을 조사 할 수 있습니다).
— 필립

25

이론적으로 정점 색상을 사용하면 텍스처를 신경 쓸 필요없이 모델에 색상을 지정할 수 있습니다. 이것은 CAD에서 일반적입니다.

여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오

실제로는 데이터를 꼭짓점으로 푸시하는 데 사용할 수있는 슬롯이 하나 더 있습니다. 그런 다음 꼭짓점 셰이더에서 미친 일을 합니다.

"3D 공간에서 꼭짓점이 단순하지 않습니까?"

3D로 처음 시작할 때 생각했던 것입니다. 나는 내가 틀렸다는 것을 빨리 배웠다 .

정점은 화면에 페인트하려는 삼각형의 모서리를 구성하는 데이터 얼룩으로 생각할 수 있습니다 ( "코너"부분이나 "삼각형", "페인트"또는 "화면"부분은 모두 참이 아닙니다) ). 위치는 버텍스 (Vertex)라고 부르는 데이터 블롭의 한 가지 선택 사항입니다.

정점에 추가 데이터를 첨부하면 할 수있는 일이 많이 있습니다. 가장 유명한 예는 UV 좌표를 추가하여 해당 삼각형에 텍스처를 그릴 수 있다는 것입니다. 점이 있으면 텍스처에 삼각형의 어느 부분을 그릴 지 결정할 수 없습니다. 텍스처 좌표도 필요합니다.

해당 얼룩에 포함 된 다른 표준 예제는 법선과 접선입니다. 중요한 것은 위치를 포함하여 모든 것이 선택 사항이라는 것입니다. 정점 색상은 화면에 예쁜 그림을 만들기 위해 사용하거나 남용 할 수있는 이러한 선택적 입력 중 하나입니다.


2
".. 삼각형의 가장자리를 구성하는 데이터 얼룩"이라고하더라도 반드시 그런 것은 아닙니다. 꼭짓점은 점으로 잘 표현 될 수 있습니다.
— 크롬 스터, 모니카

3
버텍스 컬러를 사용하여 얻을 수있는 셰이더 효과의 좋은 예를 들어 작년부터 "Animating With Math"에서 Natalie Burke의 GDC 토크를 확인하는 것이 좋습니다 (동영상은 회원 전용이지만 슬라이드는 무료입니다 ) . 그녀는 Destiny의 기어, 캐릭터 머리카락 및 천의 애니메이션 수와 버텍스 컬러 채널로 모양 및 제어 된 버텍스 쉐이더를 사용하여 적과 환경의 일부까지 달성 한 것을 보여줍니다.
— DMGregory

5
나는 그것들이 정점 색상이 아니라, 더 쉬운 인식을 위해 색상으로 표시된 정점 속성 이라고 주장 합니다.
— 크롬 스터, 모니카

FortNite 에 대한이 이야기 에서 정점 셰이더를 비슷하게 창의적으로 사용 하지만, 정확하게 기억한다면 대부분 정점의 UV 채널을 컬러 채널 대신 사용했다고 생각합니다.
— DMGregory

3
지오메트리 / 수학 기반의 관점에서 볼 때 정점은 공간의 한 지점 일뿐입니다. '정점 색상'은 GPU에서 사용하는 정점의 '아이디어'에 의해 정점에 적용되는 속성입니다. 색이 있거나없는 원과 같습니다. 원의 기하학적 / 수학적 '아이디어'에는 색상이 없지만 원의 렌더링 소프트웨어 '아이디어'는 색상을 원에 연결합니다. 따라서 @Kromster의 주장은 기술적으로 더 정확합니다.
— Pharap

8

꼭짓점은 색상을 가질 수 있으며 일반적인 것과 같은 속성입니다.

3D 환경에서 정점의 색상 정보에 따라 삼각형이 색칠됩니다. 꼭짓점 A에 가장 가까운 조각은 그 색을 얻고, 꼭짓점 B에 가장 가까운 조각은 B의 색을 얻으며, 색은 2 사이에서 보간됩니다.

버텍스 당 조명과 같은 방식으로 작동합니다

텍스처를 사용하지 않고 모델에 색상을 추가하는 쉬운 방법입니다.


다른 유사 정점 속성의 예를 들면 +1
— AC

정점 색상과 법선의 문제점은 정점이 메쉬의 일부 (곡선 표면의 근사)라고 가정한다는 것입니다. 예리한 가장자리 또는 다른 색상의면 (예 : 큐브)을 원할 경우 각면마다 별도의 꼭지점이 필요하므로 메모리 사용량이 크게 증가하고 렌더링 속도가 느려집니다.
— amI

@aml glsl에서 플랫 "연산자"를 사용하여 음영을 평평하게 출력 할 수 있습니다. 그것은 완전하게 동일하지는 않지만 작동합니다.
— Bálint

다른 보간 된 속성 : 텍스처 좌표와 z- 버퍼! 우리는 스크린 (또는 버퍼)의 삼각형을 그릴 때 그 보간되고, 삼각형의 3 개 개의 정점의 각각에 대한 일부 데이터를 계산하는 정점 셰이더 있고, 픽셀 셰이더 각 그린 픽셀의 보간 된 값으로 호출
— 사용자 1952009 년

@aml 물론 x2는 병목 현상이 없습니다. 그리고 지오메트리 쉐이더를 위해 만들어졌습니다. (예 : 깊이 텍스처를 삼각형으로 변환 )
— user1952009

2

여기에 확실한 대답이 있습니다. 정점 색상이 사용되는 일반적인 방법을 하나 더 알고 싶습니다.

단일 배치 / 드로우 호출 내에서 다양한 객체 색상 (또는 다른 속성).

파티클 시스템, 텍스트 및 배치 (일반적으로 아틀라스 처리 된) 스프라이트 렌더링에 사용됩니다.

임의의 시작 색상으로 파티클을 생성하거나 파티클 수명 동안 0 알파로 페이드되는 파티클 이미 터가 있다고 상상해보십시오. 이 색상 데이터를 전송하기 위해 셰이더 유니폼을 사용하려면 각각 다른 색상의 파티클을 자체 드로우 콜로 그려서 파티클 시스템을 훨씬 더 비싸게 만들어야합니다. 대신, 이러한 색상을 입자의 정점 데이터로 구워 한 번의 호출로 전체 배치를 함께 렌더링 할 수 있습니다.

Unity는이 기법을 사용하여 파티클 색상 변형과 배치로 함께 렌더링 된 TextMesh 또는 Sprite의 개별 문자를 채색합니다.

지오메트리 인스 턴싱과 비슷한 것을 할 수 있다고 생각하지만 두 가지 성능을 어떻게 비교하는지 모르겠습니다. 오늘날 버텍스 컬러를 통한 이러한 유형의 인스턴스 조정은 오늘날의 PC에 대한 모범 사례가 아닌 일부 모바일 장치와 같은 OpenGL 3.1 / DX9 이전 하드웨어를 지원하기 위해 더 오래 지속될 가능성이 있습니다. 일괄 처리 및 인스 턴싱으로 더 많은 성능 조정을 수행 한 사람들의 의견을 환영합니다.이 기술 이이 목적을 위해 정점 색상을 대체했는지 여부를 정리하는 데 도움이됩니다. :)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.