언리얼 엔진 5에 PCG + 나이아가라 같이 쓸 수 있는 기능 새로 추가 되었는데 정말 강력함.



고스트 오브 스시마 개발진들이 발표한 내용 참조해서 언리얼 엔진5로 구현하고자 마음 먹음.

근데 개발자들이 모션은 어떻게 만드는지 말 안해줌.


그래서 뭔가 물리학 기반의 모션을 넣어보자고 생각함.

논문 검색함.

고오스 처럼 Bezier 커브 사용한 잔디를 사용한 Siggraph 논문 발견함.



1ff3da36e2f206a26d81f6e24f807768


오 이거 갖다 쓰면 되겠다.

고오스처럼 Bezier 쓰는걸 보니 어쩌면 고오쓰 개발진들도 이 논문에 영향을 받은게 아닐까?


어, 근데 이거 뭐임, 수식 표기가 이상하네.

에러가 있군.


참 Siggraph논문도 이런 사소한 에러를  만들기도 하구나.


아니,  근데 그럼 올바른 수식이 뭐지? 


1ff3c028e2f206a26d81f6e74683726979




올바른 수식 계산을 위해 물리 공부함.


원래 물리 같은거 이해 안하고, 그냥 논문에 있는 계산식 HLSL 코드로 복사 붙이기만 할 생각이었다.



3ea99c35e8d334aa22e782e00e897068bb212a5ee879f828b0673d1e682f1a9807cb8474261b0ccb197a3cacf9ab71d8bcad8306



어... 공부하다보니까...


이거 단순히 표기 오류만 있는게 아니라 계산 방식이 틀렸잖아!



2cedd668efc23f8650bbd58b3683716b1400


아니, Siggraph 논문이 이래도 되는거임?



논문에서는 그냥 물리적인 계산 그대로 쓰면 모션이 이상하다면서 여러가지 몇몇 절차를 덧붙이는데...

이거 그냥 계산 틀려서 그렇게 된거 아님?


근데 생각해보니까, 계산 틀린거 제외해도 물리적으로 이렇게 동작하면 안될 것 같은데...



논문을 파고 들면 파고 들수록 물리적인 디테일 몇개 빠진거랑,

추가로 보완한 절차가 서로 나쁜 시너지를 일으키도록 되어 있는 것 포함해서 몇개 모순점을 발견함.



2fba9c20bdd460a036f2d0b917c5686a063f7210cc84ce7d1c750b49e692f54651c1288683b55ceabdbcae69dabc8321e5a361974852d7816a13b5d9



이 논문의 잔디 모션은, 약한 바람에서 잔디의 움직임이 일정 범위 일때만 제데로 동작하도록 되어 있어!

안되겠다, 그냥 다 집어 치우고 기본적인 아이디어만 가져다 쓰고 틀려보이는거 다 뜯어 고치고, 몇개 물리적인 디테일 빠진것도 보완하자.





1ffd9877ac9c28a8699fe8b115ef046c3b19e6a460


그리고 몇주간 엄청 계산했다.


논문에서 빠진 물리적 디테일 몇개는 계산식을 만들려고 하니까 생각보다 복잡함.

결국 완벽한 계산식이 아닌 나름 근거를 가지고 대략적인 계산식을 만들어야 했음.



하지만 나름의 계산 알고리즘을 완성했다!




0294e068efc23f8650bbd58b3683716fb59c



아주, 그냥 나만의 추가적인 연구를 진행했고, 이거 가지고 논문 쓰면 Siggraph에도 합격 할 수 있겠다.



근데 이거 다이나믹 모션임.

잔디 하나하나 마다 현재 속도, 현재 변위를 저장해야함.

제데로 쓰려면 gpgpu를 해야함.


어떻게 최적화 어떻게 할건지가 고민이었는데,

언리얼 엔진에서 최근 추가한 기능인 PCG랑 나이아가라 데이터 채널 같이 쓸 수 있게 해주는 기능이 구세주 였음.

정말 강력한 기능임.



1ffd9877ac9c32b6699fe8b115ef046c26b5618e4be6


근데, 이거 아직 베타버전이고, 이거 어떻게 설명하는지 알려주는 가이드나 튜토리얼은 찾을 수 없었다.


나도 어쩌다가 이런 기능이 새로 추가되었다는 블로그 포스트 하나 찾아서 알게되었고,

유튜브 영상에서는 언리얼 엔진 다루는 유튜버들 중에서 딱 한명만 이런 기능 새로 생겼다고 언급하고 넘어가는 영상만 하나 발견함.


그래서 내가 바닥부터 사용법 알아냈음.

에러도 하나 발견함.

현재 PCG로 NDC에 int값 쓰려고 하면 엔진 크래시 하는 에러 있으니, 인터저 쓰려고 하지 마셈.