글 수 83
ss3d는 쉐이더를 전혀 사용하지 않습니다. 쉐이더를 사용하지 않는 경우는 2링크가 한계입니다. 그래서 SS3D엔진을 사용한 코룸은 리바TNT나 내장 비됴칩에서 돌아갑니다. 리니지2처럼 사양을 선택할 수 있는 입장이 아니기 때문에 낮은 사양도 고려해야하는것이 대부분 게임개발팀의 현실입니다. 그래서 쉐이더는 당분간도 계획이 없습니다.
엔진의 3계층은 각각의 DLL로 구현되어있습니다. 맨 아래 계층만이 D3D API를 사용합니다. 많이들 하는 방식처럼 D3D와 뗄수 없는 구조로 만들어져 있다면 D3D버젼이 올라가거나 하위 플랫폼이 바뀌면 꽤 어려운 상황에 직면하게 됩니다. 또한 D3D를 다뤄보지 않은 (OpenGL에 익숙하다든지) 프로그래머라면 전혀 손을 댈 수 없습니다.
그래서 가능한 많은 기능들이 중간계층 DLL로 집중되어있고 D3D를 다루는 계층은 최소한의 API만 제공하도록 만들었습니다.그러다보니 사양의 문제를 제외하고라도 쉐이더라든가 하는 특정 API에 특화된 기능에 치중하지 않습니다.
궁금해서 물어보는건지 '네가 모르는가본데 내가 한 수 가르쳐주마'라는 의도로 물어보는건진 모르겠습니다만, 3DAPI의 기능을 있는대로 다 사용한다고 해서 좋은 게임이 나온다든가 제대로 된 엔진이 나오는 것은 아닙니다. 저에게 있어 쉐이더라든가 새로 추가된 기능들은 약간의 장식에 불과합니다.장식은 뼈대가 제대로 되어있으면 나중에 추가하면 그만이죠.
SS3D엔진의 컨셉은 다음과 같습니다.
1.3D를 모르는 프로그래머도 3D게임을 만들수 있게 한다.
2.현재 구현되지 않는 기능일지라도 추후 추가할 수 있다.
3.추후 기능이 추가 되어도 진행중인 게임 프로젝트엔 영향을 주지 않는다.즉 소스를 거의 손댈 필요 없게 한다.
4.여러 플랫폼에서 동일한 바이너리 엔진을 사용할 수 있게 하여 유지보수의 혼란을 막는다.
일단 모든 항목에서 90%이상 달성했다고 생각합니다. 쉐이더는 추후 지원할 예정이지만 역시 전체 구조에서 보면 아주 작은 세부 사항에 지나지 않습니다. 중요한건 저렴한 비용으로 게임을 빨리 제작할 수 있게 해주는것이죠.
n링크 쓸 일에 대해서 말씀하셨는데, 쓸 일이 있는지 없는진 몰라도 전 게임 프로그래머가 아니기 때문에 게임에서 n링크를 쓸지 1링크만 쓸지에 대해선 별 관심이 없습니다. n링크도 지원하지 못하는 융통성 없는 코드를 짜는게 프로그래머로서 기분 나쁠 뿐이죠.
엔진의 3계층은 각각의 DLL로 구현되어있습니다. 맨 아래 계층만이 D3D API를 사용합니다. 많이들 하는 방식처럼 D3D와 뗄수 없는 구조로 만들어져 있다면 D3D버젼이 올라가거나 하위 플랫폼이 바뀌면 꽤 어려운 상황에 직면하게 됩니다. 또한 D3D를 다뤄보지 않은 (OpenGL에 익숙하다든지) 프로그래머라면 전혀 손을 댈 수 없습니다.
그래서 가능한 많은 기능들이 중간계층 DLL로 집중되어있고 D3D를 다루는 계층은 최소한의 API만 제공하도록 만들었습니다.그러다보니 사양의 문제를 제외하고라도 쉐이더라든가 하는 특정 API에 특화된 기능에 치중하지 않습니다.
궁금해서 물어보는건지 '네가 모르는가본데 내가 한 수 가르쳐주마'라는 의도로 물어보는건진 모르겠습니다만, 3DAPI의 기능을 있는대로 다 사용한다고 해서 좋은 게임이 나온다든가 제대로 된 엔진이 나오는 것은 아닙니다. 저에게 있어 쉐이더라든가 새로 추가된 기능들은 약간의 장식에 불과합니다.장식은 뼈대가 제대로 되어있으면 나중에 추가하면 그만이죠.
SS3D엔진의 컨셉은 다음과 같습니다.
1.3D를 모르는 프로그래머도 3D게임을 만들수 있게 한다.
2.현재 구현되지 않는 기능일지라도 추후 추가할 수 있다.
3.추후 기능이 추가 되어도 진행중인 게임 프로젝트엔 영향을 주지 않는다.즉 소스를 거의 손댈 필요 없게 한다.
4.여러 플랫폼에서 동일한 바이너리 엔진을 사용할 수 있게 하여 유지보수의 혼란을 막는다.
일단 모든 항목에서 90%이상 달성했다고 생각합니다. 쉐이더는 추후 지원할 예정이지만 역시 전체 구조에서 보면 아주 작은 세부 사항에 지나지 않습니다. 중요한건 저렴한 비용으로 게임을 빨리 제작할 수 있게 해주는것이죠.
n링크 쓸 일에 대해서 말씀하셨는데, 쓸 일이 있는지 없는진 몰라도 전 게임 프로그래머가 아니기 때문에 게임에서 n링크를 쓸지 1링크만 쓸지에 대해선 별 관심이 없습니다. n링크도 지원하지 못하는 융통성 없는 코드를 짜는게 프로그래머로서 기분 나쁠 뿐이죠.
저 역시 셰이더기반으로 엔진을 제작하고 있습니다만 (올해말을 클베 목표로 하기때문에 좀더 사양에 여유를 두고 있습니다.)너무 에뮬레이션을 믿으시는게 아닌가 합니다. 에뮬레이션이라도 어떤식으로든 버퍼에 접근해야 합니다. 그렇다면 내부적으로 락을 걸고 시피유로 불러들이지 않을까요..소스코드에서 Lock()을 호출하지 않았다고 락을 걸지 않는다고 가정할수는 없다고 생각합니다. 마소플머들이 천재라도 하드웨어의 제한을 프로그램으로 뛰어넘을수는 없을테니까요