안녕하세요
한 텍스쳐를 공유하는 파티클들을 동시에 렌더링 해야 하는경우
어떻게 하는게 빠를지 궁금합니다.
파티클은 그냥 단순 쿼드인 경우와 빔 같이 긴 텍스쳐 매핑한 라인 같은 경우도 있습니다.
지금 하고 있는 방법은 트라이 앵글 리스트를 만들어 모든 폴리곤을 집어넣고
DrawPrimitive 한번 호출하는 방법을 사용합니다.
이걸 스트립으로 만들어 DrawPrimitive 를 여러번 호출하는 걸로 바꿀까 생각중인데.
퍼포먼스 측면에서는 어떤게 더 좋을까요~?
DrawPrimitive 와 Triangle Strip
Moderator: 류광
퇴화된 삼각형이라 칭하나요? 네 그걸 저도 생각은 해봤는데비회원 wrote:일반적으로 Draw함수를 여러번 호출해서 좋을건 없습니다. ( 삼각형갯수가 같더라도요..)
얘기하신 두가지방법중에서는..Draw함수 한번호출이 더 나을것 같습니다.
또는 단순 쿼드라면..중간에 퇴화된삼각형(Degenerated Triangle )을 삽입하여
하나의 스트립으로 만들어서 Draw함수 한번 호출로 테스트해보는것도 좋겠네요.
단순 쿼드 2개를 붙인다고 가정할때 가시적이지 않은 (알파 0) 버텍스를 4개 더 찍어야 하고
또한 중복된 삼각형에 텍스쳐가 들어간다고 할때 더더욱 알파 오버랩 되어서 이쁘게
나오지 않게 될까봐 그냥 생각만 하고 있었습니다.
혹시 개념에 대해서 간단하게나마 설명 해 주실 수 있나요?
아.. 인덱스를 가지고 출력하게 만들경우입니다.
( 하지만 버텍스만으로 출력한다고 해도..스트립이므로 같은 방식이 될것같습니다. )
인덱스만 2개 추가하면 서로 다른 스트립을 연결할수 있거든요..
그리고 퇴화된삼각형(예전에 류광님이 이렇게 번역하셨던...)은 3점중 두점이 같은 삼각형입니다.
( 1,2,3 세점이 있다면 1,2,1 처럼.. )
삼각형의 면적이 0이기때문에 그래픽카드에서 잘 걸러준다고 하더군요..
실제 사용해보면..화면상에 이 삼각형들은 전혀 출력이 되지않습니다.
( 와이어프레임으로 출력할경우에 컬링옵션을 끄면 나타나기는 합니다. 여기저기 줄이 죽죽 )
버텍스가 1,2,3,4,5,6 이 있고,
삼각형A가 1,2,3
삼각형B가 4,5,6으로 분리되어있을경우
스트립으로 연결시킬때는..
1,2,3, 3, 4, 4, 5, 6
이렇게 첫삼각형의 끝인덱스(3)와 두번째삼각형의 첫인덱스(4)를 넣어줍니다.
그러면
1,2,3
2,3,3, // 추가
3,3,4, // 추가
3,4,4, // 추가
4,4,5, // 추가
4,5,6
이렇게 삼각형들이 만들어지게 됩니다.
삼각형갯수가 많이 늘어나서 배보다 배꼽이 커지는것 같아서 문제이긴합니다.
그렇기 때문에 더 괜찮은지 테스트를 해서 확인해봐야하구요..
바닥지형같이 연결해야할 스트립덩어리들이 크다면 저 정도 늘어나는건 무시하겠지만..파티클은 고작2개니..
제경우..맵 바닥은 저렇게 연결해서 모두 한방에 출력해서 프레임이 올라갔습니다만..파티클쪽은 아직 그냥
리스트로 출력중입니다.
( 하지만 버텍스만으로 출력한다고 해도..스트립이므로 같은 방식이 될것같습니다. )
인덱스만 2개 추가하면 서로 다른 스트립을 연결할수 있거든요..
그리고 퇴화된삼각형(예전에 류광님이 이렇게 번역하셨던...)은 3점중 두점이 같은 삼각형입니다.
( 1,2,3 세점이 있다면 1,2,1 처럼.. )
삼각형의 면적이 0이기때문에 그래픽카드에서 잘 걸러준다고 하더군요..
실제 사용해보면..화면상에 이 삼각형들은 전혀 출력이 되지않습니다.
( 와이어프레임으로 출력할경우에 컬링옵션을 끄면 나타나기는 합니다. 여기저기 줄이 죽죽 )
버텍스가 1,2,3,4,5,6 이 있고,
삼각형A가 1,2,3
삼각형B가 4,5,6으로 분리되어있을경우
스트립으로 연결시킬때는..
1,2,3, 3, 4, 4, 5, 6
이렇게 첫삼각형의 끝인덱스(3)와 두번째삼각형의 첫인덱스(4)를 넣어줍니다.
그러면
1,2,3
2,3,3, // 추가
3,3,4, // 추가
3,4,4, // 추가
4,4,5, // 추가
4,5,6
이렇게 삼각형들이 만들어지게 됩니다.
삼각형갯수가 많이 늘어나서 배보다 배꼽이 커지는것 같아서 문제이긴합니다.
그렇기 때문에 더 괜찮은지 테스트를 해서 확인해봐야하구요..
바닥지형같이 연결해야할 스트립덩어리들이 크다면 저 정도 늘어나는건 무시하겠지만..파티클은 고작2개니..
제경우..맵 바닥은 저렇게 연결해서 모두 한방에 출력해서 프레임이 올라갔습니다만..파티클쪽은 아직 그냥
리스트로 출력중입니다.
-
- Posts: 2764
- Joined: 2003-05-13 03:34
- Location: NCSOFT LE팀
DrawIndexedPrimitive() 를 쓰는 쪽이..
안녕하세요. 매크로 없는 메비~랍니다.
면적이 0인 삼각형을 그리기 위해서 중복되는 vertex를 끼워 넣는 것보다 DrawIndexedPrimitive() 의 호출쪽이 조금 더 효율적이라 생각합니다. 일단 파티클등에 쓰게 된다면 Vertex 개수가 상당히 많아지고 동적으로 업데이트가 되는 만큼 데이터를 써야하는 양이 늘어나게 됩니다. 그와 동시에 전송되는 데이터 용량이 늘어나는데 데이터를 늘리는 것은 속도에 별로 도움이 되지 않습니다. Index Buffer를 별도로 셋팅해야 한다는 불편함이 있지만 IndexBuffer를 사용하면 전송 용량도 줄이고 모든 도형이 '사각형,사각형,사각형' 식으로 나간다면 하나의 인덱스 버퍼로 여러번의 DrawIndexedPrimitive()를 호출해 줄 수 있습니다. 또 같은 인덱스로 UI 출력도 해줄 수 있으니까요.
면적이 0인 삼각형을 그리기 위해서 중복되는 vertex를 끼워 넣는 것보다 DrawIndexedPrimitive() 의 호출쪽이 조금 더 효율적이라 생각합니다. 일단 파티클등에 쓰게 된다면 Vertex 개수가 상당히 많아지고 동적으로 업데이트가 되는 만큼 데이터를 써야하는 양이 늘어나게 됩니다. 그와 동시에 전송되는 데이터 용량이 늘어나는데 데이터를 늘리는 것은 속도에 별로 도움이 되지 않습니다. Index Buffer를 별도로 셋팅해야 한다는 불편함이 있지만 IndexBuffer를 사용하면 전송 용량도 줄이고 모든 도형이 '사각형,사각형,사각형' 식으로 나간다면 하나의 인덱스 버퍼로 여러번의 DrawIndexedPrimitive()를 호출해 줄 수 있습니다. 또 같은 인덱스로 UI 출력도 해줄 수 있으니까요.
-
- Posts: 32
- Joined: 2004-08-17 16:53
- Contact: