본인은 프로그래머이고,

물리학은 고등학교 때까지 배운게 다입니다.

언리얼 엔진으로 바람에 움직이는 잔디 한번 구현해 보려고 하는데...

고스트 오브 쓰시마라는 게임 개발자들이 발표한거 따라해서  Bezier 커브로 구현된 잔디 모델 만듬.


근데 이 개발자들이 자기들 게임에서 잔디가 어떤방식으로 바람에 반응해서 움직이는지 자세히 설명 안함.


그래서 그냥 대충 위아래로만 움직이게 sine wave 같은거 때려 박을까 아니면 다른 방법 없나 찾아보니까,


Bezier 커브로 모델링된 잔디에 rotational dynamic을 적용해서 잔디의 움직임을 구현한 그럴듯한 논문이 있었음.

이 논문에서는 위 아래로만 움직이는게 아니라 옆으로 회전도 하고, 트위스트도 하는 식이고 나름 물리학적인 배경도 설명함.



A simulation on grass swaying with dynamic wind force | The Visual Computer


위에 들어가면 영상도 볼 수 있음.



논문도 대충 읽어보니 꽤나 그럴듯해서 작업 시작하려고 했는데...


안에 사용된 수학 공식에 에러가 있음.



0cf0c32fe8c734a77ab6d9bb5bde2a701dde3e5551a8009ef0ece5688b6d3277d4382f9bb9ff73ec4950c97e5dd5bbb1a98037db6eed1d964dc492fb376e474f61d83fc622e970c308c75939f7b4a2e39e044e9445dfd2b71



잔디는 대충 위와 같은 방식. Ew, En은 길이 1의 유닛 벡터임. Ee는 잔디를 컨트롤 하는 베지어 커브의 엣지 길이.




바람으로 인한 포스 벡터



0cf0c32fe8c734a77ab6d9bb5bde2a701dde3e5551a8009ef0ece5688b6d3277d4382f9bb9ff73ec4950c97e5dd5bbb1a98037db6eed1d964dc492fb376e474f61d83fc622ea70c308c75939f7b4a2e387114a0637b16f2

바람 velocity  v 벡터를 Ew에 프로젝션 하고, 잔디 엣지의 면적 S를 곱하고 특정 계수를 곱함.







잔디가 되돌아가려는 포스 벡터



0cf0c32fe8c734a77ab6d9bb5bde2a701dde3e5551a8009ef0ece5688b6d3277d4382f9bb9ff73ec4950c97e5dd5bbb1a98037db6eed1d964dc492fb376e474f61d83fc620e370c308c75939f7b4a2e39ee2a455c4b30e7fc83


잔디의 강도 k, 잔디가 회전한 앵글, 실제 잔디 엣지의 끝부분 포인트 (위 이미지의 Pi+1)이 원래 포지션에서 얼마나 이동했는가에 대한 벡터를 곱함.





댐핑 포스 벡터 (여기서 부터 에러가 있음.)



0cf0c32fe8c734a77ab6d9bb5bde2a701dde3e5551a8009ef0ece5688b6d3277d4382f9bb9ff73ec4950c97e5dd5bbb1a98037db6eed1d964dc492fb376e474f61d83fc620e270c308c75939f7b4a2e36707d53159563d024


그래서 angular velocity랑 angular displacement는 다음과 같음.



0cf0c32fe8c734a77ab6d9bb5bde2a701dde3e5551a8009ef0ece5688b6d3277d4382f9bb9ff73ec4950c97e5dd5bbb1a98037db6eed1d964dc492fb376e474f61d83fc623eb70c308c75939f7b4a2e3fe62fca2648554c86a5


F는 잔디에 적용되는 전체 포스.

잔디에 적용되는 포스와 잔디 엣지 벡터의 크로스 프로덕트를 구해서 토크를 구한다.


그래서 앵글 가속을 구하고, 대략적인 앵글 속도를 수치해석으로 구하고 수치해석으로 앵글 변화를 구함.





근데 떼이타는 앵글 값임.

이건 scalar여야함. 벡터가 아님.




w도 앵글 속도이니까 스켈라 값이어야하는데 벡터로 표기되어있음.


위의 D도 뭔가 잘못된것.




그냥 물리학 부분은 대충 스킵하고 수치해석적으로 어떻게 계산해야하는지만 파악해서 적용하려고 했는데...

논문 저자가 뭔가를 잘못했다는 것을 깨닫고,

아침부터 토크란 무엇이고, 애초에 이런 시스템을 뭐라고하고, 댐핑 포스?는 어떻게 구해야하는지 인터넷 뒤져가고 gpt에게 물어보면서 공부함.


그러다 이런식의 시스템을 rotational dynamic이라고 부르는 것을 알게 되었고,

아니 뭘 어떻게 고쳐야하는지 공부했다.


그렇게 해서 정리한 수정해야할 사항들.


일단 위의 F= W + R + D는 잘못되었음. 그냥 빼야함.


D는 댐핑 포스가 아니고, 댐핑 토크 라고 해야하는게 맞는 것 같음.


그외에 필요한 수정사항.



02b3dc2febd7758a6f8bd38d5bf4352838033aedb563daacaf59f018e38986557a73231588a371565522c3880d8b4d7b513b5da220295c04f54dfd3a538d986

w는 회전 속도라서 vector값 아니고 scalar임.

그래서 D도 scalar임.


N = net torque이다.


엣지의 끝부분에 적용되는 W + R 포스와 엣지 벡터의 크로스 프로덕트를 구하고, 그 벡터의 길이를 구해서 바람과 잔디가 되돌아가려는 힘으로 인한 토크를 구하고,

그 토크에 댐핑 토크로 인한 토크를더해서 N을 구해야한다.


그래서 N은 스켈라이고, 벡터가 아님.


N  토크에 I를 나누면 앵글 가속도를 구하고,

그걸로 앵글 속도를 수치해석적으로 구하고,

전체 앵글 변화를 구해야함.




위의 세번째 줄 내가 맞게 고친거 맞지? 

물리학 잘하는 형들 좀 알려줘.


ㅠㅠ


이것 때문에 챗 지피티한테 물어보면서 물리 공부하고 하루종일 고생했다.


일단 저자한테 메일도 보내둠.