TeamSOC / SOCEngine

MIT License
4 stars 0 forks source link

갈아엎기 #60

Closed Jin02 closed 6 years ago

Jin02 commented 6 years ago

From @Jin02 on November 26, 2016 23:48

구조가 엉망이다. 전부 다 갈아엎어야 한다.

왜 쓰는지 모를 몇몇 객체의 상속 구조부터, 굳이 쓸 필요없는 Director 구조, 비효율적인 Scene, 대체 내가 왜 이렇게 짠걸까 의문이 드는 ShadowRenderer와 LightManager 등등..

렌더링 작업을 정말로 하고싶지만.. 현재 지금 엔진 구조를 가지고 그대로 쭉 가기에는 무리가 있다.

안그래도, 지금 PCSS( #36 ) 추가 하고 싶은데 코드를 엉망으로 짜놔서 간단한 기능을 추가하는데도 어려움을 겪고 있다. 이 뿐만 아니라 #55 #34 #65 #67 #54 #53 등등.. 구조가 너무 엉망이라 섣불리 구현을 할 수가 없는 것들이 너무나 많다.

여튼 처음부터 전부 다 갈아엎어야 한다. 그리고 나서 렌더링 개발을 다시 들어간다. 그렇지 않으면, 다음 휴가를 나와도 전역을 해도 개발하는데 언제나 무리가 생길 것 같다.

Copied from original issue: Jin02/SOCEngine#60

Jin02 commented 6 years ago

C++14를 사용할 예정이다.

참고해볼만한건.

Jin02 commented 6 years ago

Input 기능도 현재 구현한건 다 지워버리고 Direct Input을 사용한다. http://ppparkje.tistory.com/24

Jin02 commented 6 years ago

바빠서 정리를 제대로 못했다

Re branch에서 작업 중 이고, 어느정도 다 끝났으면 #60 -> master로 정리해서 올릴 생각이다.

Jin02 commented 6 years ago

전역전까지 이거 만드는것 보다는 밀린 서적들 읽는게 우선이라고 생각하여 최근에는 작업을 안하고 있다. 아마도 휴가나 외박이 아니라면 1달에 한번 있을 외출나가서 4~5시간 정도 코딩하는게 전부일 것 같다.

이것 저것 고쳐보면서 리펙토링을 해야하는데, 컴파일도 못하는 이 상황에서는 그냥 이론들이나 공부하는게 훨씬 나을 것 같다.

Jin02 commented 6 years ago

이야.. 이거 전역하기 전까지 전부 리펙토링 할 수는 있을까.. 한도끝도 없는 작업들이다 ㅜㅜ...

Jin02 commented 6 years ago

github.com/Jin02/SOCEngine/compare/17.06.08...%23Re

6월 8일부터 16일까지 휴가동안 작업했던 내역이다. 전체적으로 손을 많이 봤다.

이제 남은건 Renderer랑 전체적으로 기능들을 이어주는 작업(?)이 남았다. 큰 기능들은 전부 갈아엎었다.

Jin02 commented 6 years ago

8월 기준으로 남은 작업은 렌더러만 남았다. 큰 작업들은 어느정도 이어서 구현을 해두었다.

MeshRenderer가 정말 큰 작업이고, 이게 끝난다면 ShadowRenderer나 SkyRenderer, MainRenderer는 그냥 거저먹기로 들어오는 것들이니 큰 걱정은 하지 않아도 된다.

이 MeshRenderer 작업도 평소에 손코딩하고 정리하면서 공부하다가 다음 9월 외출나갈때 빠르게 구현하면 된다.

이건 8월 12일부터 8월 18일까지 출타 기간, 군 내부에서 작업했던 내역이다. github.com/Jin02/SOCEngine/compare/17.08.18...%23Re

Jin02 commented 6 years ago

9월 외출 github.com/Jin02/SOCEngine/compare/17.09.02...%23Re

MeshRenderer 작업을 못했다. MeshManager부터 MeshPool 등 여러 문제가 산재해 있어서 작업을 할 수 없었다.

아마도.. 렌더러 작업은 다음 달 10월 외출때 가능할 것 같다 ㅠ-.. 그래도 이런 작업속도로 가면 전역하기전에 리펙토링은 완료할 수 있을 것 같다.

그나저나 이게 1년짜리 이슈가 되어 버렸다니 -_-.. 그래도 이제 리펙토링만 해결한다면, 이전과 달리 조금이지만 덜 부끄러운 코드가 될 것 같아서 다행이다.

Jin02 commented 6 years ago

10월 외출 및 사지방 웹코딩으로는 몇몇 자잘한 구조 문제들 수정 및 Culling 인터페이스를 구현했다.

이전 엔진 구조에서는 매쉬 렌더링을 하는데 있어서 제약이 많이 심했다. 물론 코드도 그렇게 효율적이지 않았기에 성능도 많이 떨어졌다.

하나씩 뭐가 잘못되었는지 설명하기는 너무 귀찮고 -_-..

https://github.com/Jin02/SOCEngine/blob/master/SOCEngine/SOCEngine/Rendering/Camera/MeshCamera.cpp#L286

예전에는 이랬고, 지금은 이런 느낌이다.

MeshUtility::ClassifyTransparentMesh(     _transparentMeshes, viewDir, pool, objMgr, transformPool,         [thisCam](const Mesh& mesh, const Transform& tarnsform)         {             Vector3 worldPos = transform.GetWorldPosition();             return thisCam->_frustum.In(worldPos, mesh.GetRadius());         }     );

...

MeshRenderer::RenderUsingSortedMeshVectorByVB(_transparentMeshes,                             camCB, defaultRenderType);

렌더 함수에서는 이전처럼 일일히 그리기전에 검사하는 그런게 아니라 받은 그대로 렌더링만 한다.

이렇게 구현해야하는게 정말 기본적인건데 -_- 저때는 왜 내가 저렇게 구현했는지 이해를 할 수 없다.

Jin02 commented 6 years ago

https://github.com/Jin02/SOCEngine/commit/b9529b3180a5427779ff655aacea4adbe59dd9a7

여기까지 -_-.. 일단 여기까지 생성까지 문제없이 된다. (매쉬 불러오는거나 쉐이더 컴파일 등등..) 이제 남은건.. 렌더링 하는거 뿐이다 ㅜㅜ..

이제 슬슬 리펙토링의 끝이 보인다.

이건 11월 작업물이고, 모든 휴가와 외박을 다 썼다. 이제 남은건.. 12월 2일 외출 단 하루 남았다 -ㅠ-..

확실한건 전역전까지 리펙토링하는건 불가능하다. ㅇㅇ.. 불가능하다..

Jin02 commented 6 years ago

기본적인건 끝냈다.

이전에는 이랬었다.

별 차이가 없어보이긴 하겠지만.. 이전에는 오른쪽 벽을 보면 색이 약간씩 깨지는걸 볼 수 있다.

지금은 그런거 없이 부드럽게 렌더링한다 :) 이거 외에도 MSAA 처리도 덧붙였다.

성능 향상도 미약하지만 있다.

Jin02 commented 6 years ago

이제 실외 렌더링 해야한다.. Skybox(+대기산란), IBL, PCSS 등등

이것만 끝내면 리펙토링 끝.. 끝이다 ㅜㅜ..

Jin02 commented 6 years ago

스카이박스 끝

대기산란하고, IBL로 넘어가야한다

Jin02 commented 6 years ago

PCSS는 겸사겸사 했다.

그리고.. IBL도 끝냈다. 이걸로 PBR은 끝.

Jin02 commented 6 years ago

끝! 끝끝끝끝끝! 마스터에 올려놨다