- Prof. Rahul Narain
Physics-Based Animation Prof. Rahul Narain About me Rahul Narain - - PowerPoint PPT Presentation
Physics-Based Animation Prof. Rahul Narain About me Rahul Narain - - PowerPoint PPT Presentation
COL781 guest lecture: Physics-Based Animation Prof. Rahul Narain About me Rahul Narain http://rahul.narain.name/ narain@cse.iitd.ac.in Assistant professor in CS&E Bharti IIA-517 Research interests: computer
About me
- Rahul Narain
http://rahul.narain.name/ narain@cse.iitd.ac.in
- Assistant professor in CS&E
Bharti IIA-517
- Research interests:
computer graphics, physics-based animation, numerical methods
Turbulent fluids and granular materials Cloth modeling Parallel algorithms for interactive simulation Crowd simulation
Basic types of animation
- Manual
- e.g. keyframing
- Recorded
- e.g. motion capture
- Algorithmic
- e.g. physics-based
Physics-based animation (a.k.a. simulation)
Basic types of animation
- Manual
- e.g. keyframing
- Recorded
- e.g. motion capture
- Algorithmic
- e.g. physics-based
more automation less artistic control
Physics-based animation (a.k.a. simulation)
Today’s agenda
- Basic principles of physics-based animation
- Mass-spring systems
- Preview of other techniques
Discretization
How to represent the continuous motion of an object?
x(0) x(t) Motion of a particle: x : ℝ → ℝ3 Flow field of a fluid: v : ℝ3 × ℝ → ℝ3 v(x, t)
Discretization
Discretization of space Discretization of time
- Time stepping
particles grids meshes
Discretization
Objects represented as collections of particles
- ith particle has mass mi, position xi, velocity vi
Time divided into discrete time steps
- Usually t0, t1 = t0 + ∆t, t2 = t0 + 2∆t, …
Given positions, velocities at tn, compute positions, velocities at tn+1
Equations of motion
Newton’s second law: f = ma Or, for each particle: fi = total force on particle i (including forces from environment and from other particles) Two questions:
- How to define fi?
- How to solve d2xi/dt2 = …?
d2xi dt2 = fi mi
<latexit sha1_base64="ncbAlpIVsTErq8DyBcEOzNE4SgM=">ADt3icbZLfatswFMbVuNva7k/T7bI3omGwq+CEQbvBIDAGa6HQwdIW4jSTZckRlWRPkrMY4yfa0+xy28tMTjOqyD0g8fn8vmNJhxPnGkThr+3OsH2o8dPdnb3nj57/mK/e/DyUmeFwmSM56p6xhpwpkY8MJ9e5IkjEnFzFtx8bfrUgSrNMfjVlTqYCpZJRhpGxqVn3U0QVwlUkJkrAZOb4UrGFC5nrL7Pm5thDT9Ax20tLEIu826vbAfrgK2xWAtemAdF7ODziRKMlwIg3mSOvJIMzNtELKMxJvRcVmuQI36KUTKyUSBA9rVbvreFrm0kgzZRd0sBV1q2okNC6FLF1NjfVPmuSD7FJYejJtGIyLwyR+O4gWnBoMtg0DyZMEWx4aQXCitm7QjxHtiXGtnjFCxixdK52XhJFQv7rYgkP3AmBJFSV1d/luoXxf2zbjRvsQulA2a5VDlZ+7dKBSx+WDizbP14eOHXUgdSH6YOTH146sBTH5458MyH5w48r5txHPjD1xbjYf9dP/zytjcaredyBxyCI/AGDMAxGIHP4AKMAQY/wS/wB/wN3gfAhrM76ydrXNK7ARwfd/TWpDrw=</latexit><latexit sha1_base64="ncbAlpIVsTErq8DyBcEOzNE4SgM=">ADt3icbZLfatswFMbVuNva7k/T7bI3omGwq+CEQbvBIDAGa6HQwdIW4jSTZckRlWRPkrMY4yfa0+xy28tMTjOqyD0g8fn8vmNJhxPnGkThr+3OsH2o8dPdnb3nj57/mK/e/DyUmeFwmSM56p6xhpwpkY8MJ9e5IkjEnFzFtx8bfrUgSrNMfjVlTqYCpZJRhpGxqVn3U0QVwlUkJkrAZOb4UrGFC5nrL7Pm5thDT9Ax20tLEIu826vbAfrgK2xWAtemAdF7ODziRKMlwIg3mSOvJIMzNtELKMxJvRcVmuQI36KUTKyUSBA9rVbvreFrm0kgzZRd0sBV1q2okNC6FLF1NjfVPmuSD7FJYejJtGIyLwyR+O4gWnBoMtg0DyZMEWx4aQXCitm7QjxHtiXGtnjFCxixdK52XhJFQv7rYgkP3AmBJFSV1d/luoXxf2zbjRvsQulA2a5VDlZ+7dKBSx+WDizbP14eOHXUgdSH6YOTH146sBTH5458MyH5w48r5txHPjD1xbjYf9dP/zytjcaredyBxyCI/AGDMAxGIHP4AKMAQY/wS/wB/wN3gfAhrM76ydrXNK7ARwfd/TWpDrw=</latexit><latexit sha1_base64="ncbAlpIVsTErq8DyBcEOzNE4SgM=">ADt3icbZLfatswFMbVuNva7k/T7bI3omGwq+CEQbvBIDAGa6HQwdIW4jSTZckRlWRPkrMY4yfa0+xy28tMTjOqyD0g8fn8vmNJhxPnGkThr+3OsH2o8dPdnb3nj57/mK/e/DyUmeFwmSM56p6xhpwpkY8MJ9e5IkjEnFzFtx8bfrUgSrNMfjVlTqYCpZJRhpGxqVn3U0QVwlUkJkrAZOb4UrGFC5nrL7Pm5thDT9Ax20tLEIu826vbAfrgK2xWAtemAdF7ODziRKMlwIg3mSOvJIMzNtELKMxJvRcVmuQI36KUTKyUSBA9rVbvreFrm0kgzZRd0sBV1q2okNC6FLF1NjfVPmuSD7FJYejJtGIyLwyR+O4gWnBoMtg0DyZMEWx4aQXCitm7QjxHtiXGtnjFCxixdK52XhJFQv7rYgkP3AmBJFSV1d/luoXxf2zbjRvsQulA2a5VDlZ+7dKBSx+WDizbP14eOHXUgdSH6YOTH146sBTH5458MyH5w48r5txHPjD1xbjYf9dP/zytjcaredyBxyCI/AGDMAxGIHP4AKMAQY/wS/wB/wN3gfAhrM76ydrXNK7ARwfd/TWpDrw=</latexit>Recap: Single-particle dynamics
Consider a point mass attached to a fixed point via a spring
- Total force = mg − ks(‖x‖ − ℓ0)e − kd(v · e)e + fuser
- Call this f(x(t), v(t))
dv/dt = f/m dx/dt = v . Simplest time stepping scheme (forward Euler): vnew = v + f(x, v)/m ∆t xnew = x + v ∆t .
fspring mg
Recap: Single-particle dynamics
What you covered in an earlier class is slightly difgerent: vnew = v + f(x, v)/m ∆t xnew = x + vnew ∆t . This is sometimes called semi-implicit Euler or symplectic Euler, actually much better than forward Euler.
Multi-particle dynamics
For each particle, Let's define and similarly v and f. Then we can just write where M = diag(m1 I, m2 I, …)
dvi dt = fi mi dxi dt = vi
<latexit sha1_base64="P7FkXtIWiJTP9dul3Otpak/3lMU=">AD73icdZLPb9MwFMedBlgpv9px5GJRgThVCUKCA5MmcWGTJg2JbpOaqnIcJ7VmO8F2SqOQv4Mb4sqfxJW/BKcrquMJyX6+n3eD+flxQWjSgfBb6/n37l76B/f/Dg4aPHT4ajwuVlxKTKc5ZLq9ipAijgkw1YxcFZIgHjNyGV9/aPnlikhFc/FZVwWZc5QJmlKMtHEtht+iVCJcRxzpeQw2Yg4hasFbXZe3cCXR9AKNRFpG8HNC0bR4D9V1rdV2XVYDMfBJNgY7IpwK8Zga+eLUW8WJTkuOREaM6TULAwKPa+R1BQz0gyiUpEC4WuUkZmRAnGi5vVmTA18YTwJTHNpHqHhxmtn1IgrVfHYRLZ3VC5rnbexWanTd/OaiqLUROCbRmnJoM5hO3OYUEmwZpURCEtq7grxEpmJafNn9rpgHkuaLfXel9QxN2dJBPmKc86RSOoaerdYJsOxv+wGTRusQ2FBU3V1pYurlrC65dWFmw6hZeWXjl5qYWTF2YWTBz4YkFT1x4asFTF5Z8KxpzDqG7vJ1xcXrSRhMwk9vxsfvt4vZB8/Ac/AKhOAtOAYfwTmYAgz+eH1v5B36X/zv/g/501oz9vmPAV75v/6C6A/VxI=</latexit><latexit sha1_base64="P7FkXtIWiJTP9dul3Otpak/3lMU=">AD73icdZLPb9MwFMedBlgpv9px5GJRgThVCUKCA5MmcWGTJg2JbpOaqnIcJ7VmO8F2SqOQv4Mb4sqfxJW/BKcrquMJyX6+n3eD+flxQWjSgfBb6/n37l76B/f/Dg4aPHT4ajwuVlxKTKc5ZLq9ipAijgkw1YxcFZIgHjNyGV9/aPnlikhFc/FZVwWZc5QJmlKMtHEtht+iVCJcRxzpeQw2Yg4hasFbXZe3cCXR9AKNRFpG8HNC0bR4D9V1rdV2XVYDMfBJNgY7IpwK8Zga+eLUW8WJTkuOREaM6TULAwKPa+R1BQz0gyiUpEC4WuUkZmRAnGi5vVmTA18YTwJTHNpHqHhxmtn1IgrVfHYRLZ3VC5rnbexWanTd/OaiqLUROCbRmnJoM5hO3OYUEmwZpURCEtq7grxEpmJafNn9rpgHkuaLfXel9QxN2dJBPmKc86RSOoaerdYJsOxv+wGTRusQ2FBU3V1pYurlrC65dWFmw6hZeWXjl5qYWTF2YWTBz4YkFT1x4asFTF5Z8KxpzDqG7vJ1xcXrSRhMwk9vxsfvt4vZB8/Ac/AKhOAtOAYfwTmYAgz+eH1v5B36X/zv/g/501oz9vmPAV75v/6C6A/VxI=</latexit><latexit sha1_base64="P7FkXtIWiJTP9dul3Otpak/3lMU=">AD73icdZLPb9MwFMedBlgpv9px5GJRgThVCUKCA5MmcWGTJg2JbpOaqnIcJ7VmO8F2SqOQv4Mb4sqfxJW/BKcrquMJyX6+n3eD+flxQWjSgfBb6/n37l76B/f/Dg4aPHT4ajwuVlxKTKc5ZLq9ipAijgkw1YxcFZIgHjNyGV9/aPnlikhFc/FZVwWZc5QJmlKMtHEtht+iVCJcRxzpeQw2Yg4hasFbXZe3cCXR9AKNRFpG8HNC0bR4D9V1rdV2XVYDMfBJNgY7IpwK8Zga+eLUW8WJTkuOREaM6TULAwKPa+R1BQz0gyiUpEC4WuUkZmRAnGi5vVmTA18YTwJTHNpHqHhxmtn1IgrVfHYRLZ3VC5rnbexWanTd/OaiqLUROCbRmnJoM5hO3OYUEmwZpURCEtq7grxEpmJafNn9rpgHkuaLfXel9QxN2dJBPmKc86RSOoaerdYJsOxv+wGTRusQ2FBU3V1pYurlrC65dWFmw6hZeWXjl5qYWTF2YWTBz4YkFT1x4asFTF5Z8KxpzDqG7vJ1xcXrSRhMwk9vxsfvt4vZB8/Ac/AKhOAtOAYfwTmYAgz+eH1v5B36X/zv/g/501oz9vmPAV75v/6C6A/VxI=</latexit><latexit sha1_base64="P7FkXtIWiJTP9dul3Otpak/3lMU=">AD73icdZLPb9MwFMedBlgpv9px5GJRgThVCUKCA5MmcWGTJg2JbpOaqnIcJ7VmO8F2SqOQv4Mb4sqfxJW/BKcrquMJyX6+n3eD+flxQWjSgfBb6/n37l76B/f/Dg4aPHT4ajwuVlxKTKc5ZLq9ipAijgkw1YxcFZIgHjNyGV9/aPnlikhFc/FZVwWZc5QJmlKMtHEtht+iVCJcRxzpeQw2Yg4hasFbXZe3cCXR9AKNRFpG8HNC0bR4D9V1rdV2XVYDMfBJNgY7IpwK8Zga+eLUW8WJTkuOREaM6TULAwKPa+R1BQz0gyiUpEC4WuUkZmRAnGi5vVmTA18YTwJTHNpHqHhxmtn1IgrVfHYRLZ3VC5rnbexWanTd/OaiqLUROCbRmnJoM5hO3OYUEmwZpURCEtq7grxEpmJafNn9rpgHkuaLfXel9QxN2dJBPmKc86RSOoaerdYJsOxv+wGTRusQ2FBU3V1pYurlrC65dWFmw6hZeWXjl5qYWTF2YWTBz4YkFT1x4asFTF5Z8KxpzDqG7vJ1xcXrSRhMwk9vxsfvt4vZB8/Ac/AKhOAtOAYfwTmYAgz+eH1v5B36X/zv/g/501oz9vmPAV75v/6C6A/VxI=</latexit>dv dt = M−1f dx dt = v
<latexit sha1_base64="HLGAlfkTFDXiDtPnegcV7C0+Ow=">AD6XicdZLfatswFMbleH+6tFvT7XI3YmFjNwv2GHQXGxR2sxYCHSxtIc6CLMuOiCQbSfZijB9id2O3farCHmZymlDFXg8IPp2fviP5+IQZo0p73o3Tcx8fPR470l/+Dps8PB0fMLleYSkwlOWSqvQqQIo4JMNWMXGWSIB4ychkuvzT8siBS0VR812VGZhwlgsYUI21S80ERxBLhKuBILySH0VqEMSzqu5yu4ZvPcEvGP6p3fr3dxTAI+vfUWN1bo5gPht7IWwfsCn8jhmAT5/Oj3jSIUpxzIjRmSKmp72V6ViGpKWak7ge5IhnCS5SQqZECcaJm1bpBNXxtMhGMU2mW0HCdtR0V4kqVPDQnmxeqNmuS/2PTXMcfZxUVWa6JwLcXxTmDOoVNt2FEJcGalUYgLKl5K8QLZLqlzT/ZuQXzUNJkoXe+pAq52UsiyE+co5EVAVRXd21te5gvMWmzbjBNhQWF2vtLBse1cWXLVhacGyW7iwcNH2xhaM2zCxYNKGpxY8bcMzC5614diC47o24+i3h68rLt6PfG/kf/swPm0Gcw98BK8Am+BD47BCfgKzsEYPDX6Tn7zoG7dH+5v90/t0d7zsbzAuyEe/0PS5FTiA=</latexit><latexit sha1_base64="HLGAlfkTFDXiDtPnegcV7C0+Ow=">AD6XicdZLfatswFMbleH+6tFvT7XI3YmFjNwv2GHQXGxR2sxYCHSxtIc6CLMuOiCQbSfZijB9id2O3farCHmZymlDFXg8IPp2fviP5+IQZo0p73o3Tcx8fPR470l/+Dps8PB0fMLleYSkwlOWSqvQqQIo4JMNWMXGWSIB4ychkuvzT8siBS0VR812VGZhwlgsYUI21S80ERxBLhKuBILySH0VqEMSzqu5yu4ZvPcEvGP6p3fr3dxTAI+vfUWN1bo5gPht7IWwfsCn8jhmAT5/Oj3jSIUpxzIjRmSKmp72V6ViGpKWak7ge5IhnCS5SQqZECcaJm1bpBNXxtMhGMU2mW0HCdtR0V4kqVPDQnmxeqNmuS/2PTXMcfZxUVWa6JwLcXxTmDOoVNt2FEJcGalUYgLKl5K8QLZLqlzT/ZuQXzUNJkoXe+pAq52UsiyE+co5EVAVRXd21te5gvMWmzbjBNhQWF2vtLBse1cWXLVhacGyW7iwcNH2xhaM2zCxYNKGpxY8bcMzC5614diC47o24+i3h68rLt6PfG/kf/swPm0Gcw98BK8Am+BD47BCfgKzsEYPDX6Tn7zoG7dH+5v90/t0d7zsbzAuyEe/0PS5FTiA=</latexit><latexit sha1_base64="HLGAlfkTFDXiDtPnegcV7C0+Ow=">AD6XicdZLfatswFMbleH+6tFvT7XI3YmFjNwv2GHQXGxR2sxYCHSxtIc6CLMuOiCQbSfZijB9id2O3farCHmZymlDFXg8IPp2fviP5+IQZo0p73o3Tcx8fPR470l/+Dps8PB0fMLleYSkwlOWSqvQqQIo4JMNWMXGWSIB4ychkuvzT8siBS0VR812VGZhwlgsYUI21S80ERxBLhKuBILySH0VqEMSzqu5yu4ZvPcEvGP6p3fr3dxTAI+vfUWN1bo5gPht7IWwfsCn8jhmAT5/Oj3jSIUpxzIjRmSKmp72V6ViGpKWak7ge5IhnCS5SQqZECcaJm1bpBNXxtMhGMU2mW0HCdtR0V4kqVPDQnmxeqNmuS/2PTXMcfZxUVWa6JwLcXxTmDOoVNt2FEJcGalUYgLKl5K8QLZLqlzT/ZuQXzUNJkoXe+pAq52UsiyE+co5EVAVRXd21te5gvMWmzbjBNhQWF2vtLBse1cWXLVhacGyW7iwcNH2xhaM2zCxYNKGpxY8bcMzC5614diC47o24+i3h68rLt6PfG/kf/swPm0Gcw98BK8Am+BD47BCfgKzsEYPDX6Tn7zoG7dH+5v90/t0d7zsbzAuyEe/0PS5FTiA=</latexit><latexit sha1_base64="HLGAlfkTFDXiDtPnegcV7C0+Ow=">AD6XicdZLfatswFMbleH+6tFvT7XI3YmFjNwv2GHQXGxR2sxYCHSxtIc6CLMuOiCQbSfZijB9id2O3farCHmZymlDFXg8IPp2fviP5+IQZo0p73o3Tcx8fPR470l/+Dps8PB0fMLleYSkwlOWSqvQqQIo4JMNWMXGWSIB4ychkuvzT8siBS0VR812VGZhwlgsYUI21S80ERxBLhKuBILySH0VqEMSzqu5yu4ZvPcEvGP6p3fr3dxTAI+vfUWN1bo5gPht7IWwfsCn8jhmAT5/Oj3jSIUpxzIjRmSKmp72V6ViGpKWak7ge5IhnCS5SQqZECcaJm1bpBNXxtMhGMU2mW0HCdtR0V4kqVPDQnmxeqNmuS/2PTXMcfZxUVWa6JwLcXxTmDOoVNt2FEJcGalUYgLKl5K8QLZLqlzT/ZuQXzUNJkoXe+pAq52UsiyE+co5EVAVRXd21te5gvMWmzbjBNhQWF2vtLBse1cWXLVhacGyW7iwcNH2xhaM2zCxYNKGpxY8bcMzC5614diC47o24+i3h68rLt6PfG/kf/swPm0Gcw98BK8Am+BD47BCfgKzsEYPDX6Tn7zoG7dH+5v90/t0d7zsbzAuyEe/0PS5FTiA=</latexit>x = x1 x2 . . .
<latexit sha1_base64="8yW+EA0RjzDQbcV2u2b1N4/oJQ8=">AEOHicdZLfa9swEMfleD+67EfT7XEvYqFjMBbsMtgeVijsZS0EWljaMjsLsiw7opZsJNlLMP7H9r4/Ym97G3vdXzDZTRPFXg8Md/e570m+U5AlVCrH+Wn17Dt3793fedB/+Ojxk93B3tNzmeYCkwlOk1RcBkiShHIyUVQl5DITBLEgIRfB1ceaXxRESJryz2qZkSlDMacRxUjp1Gzw2dIzYMILuAh9AMSU14GOiXolqjmQt9H27CgyYswlRJn/BwLejv+5FAuGwqBYPhjaSoNjlVwZeH62bjr+Ubd31SpBvf2mRxa5NiNhg6I6cx2HXclTMEKzud7fU8P0xzghXOEFSeq6TqWmJhKI4IVXfzyXJEL5CMfG0yxEjclo2867gvs6EMEqF/riCTdZUlIhJuWSBrqxvKNusTv6PebmK3k9LyrNcEY6vD4ryBKoU1suDIRUEq2SpHYQF1XeFeI70tJRe8dYpmAWCxnO19Sd6UToWhJNvOGUM6dX5YVuxlp1ML7Besy4xibkBuRdrTCwaGsXBly04dKAy27jwsBFWxsZMGrD2IBxGx4b8LgNTwx40oZjA46rSj9Ht/34us75wch1Ru7Z2+HRh9XD3AHPwQvwCrjgHTgCn8ApmABsvbOrC+WZ3+3f9m/7T/XpT1rpXkGtsz+w/YMnIR</latexit><latexit sha1_base64="8yW+EA0RjzDQbcV2u2b1N4/oJQ8=">AEOHicdZLfa9swEMfleD+67EfT7XEvYqFjMBbsMtgeVijsZS0EWljaMjsLsiw7opZsJNlLMP7H9r4/Ym97G3vdXzDZTRPFXg8Md/e570m+U5AlVCrH+Wn17Dt3793fedB/+Ojxk93B3tNzmeYCkwlOk1RcBkiShHIyUVQl5DITBLEgIRfB1ceaXxRESJryz2qZkSlDMacRxUjp1Gzw2dIzYMILuAh9AMSU14GOiXolqjmQt9H27CgyYswlRJn/BwLejv+5FAuGwqBYPhjaSoNjlVwZeH62bjr+Ubd31SpBvf2mRxa5NiNhg6I6cx2HXclTMEKzud7fU8P0xzghXOEFSeq6TqWmJhKI4IVXfzyXJEL5CMfG0yxEjclo2867gvs6EMEqF/riCTdZUlIhJuWSBrqxvKNusTv6PebmK3k9LyrNcEY6vD4ryBKoU1suDIRUEq2SpHYQF1XeFeI70tJRe8dYpmAWCxnO19Sd6UToWhJNvOGUM6dX5YVuxlp1ML7Besy4xibkBuRdrTCwaGsXBly04dKAy27jwsBFWxsZMGrD2IBxGx4b8LgNTwx40oZjA46rSj9Ht/34us75wch1Ru7Z2+HRh9XD3AHPwQvwCrjgHTgCn8ApmABsvbOrC+WZ3+3f9m/7T/XpT1rpXkGtsz+w/YMnIR</latexit><latexit sha1_base64="8yW+EA0RjzDQbcV2u2b1N4/oJQ8=">AEOHicdZLfa9swEMfleD+67EfT7XEvYqFjMBbsMtgeVijsZS0EWljaMjsLsiw7opZsJNlLMP7H9r4/Ym97G3vdXzDZTRPFXg8Md/e570m+U5AlVCrH+Wn17Dt3793fedB/+Ojxk93B3tNzmeYCkwlOk1RcBkiShHIyUVQl5DITBLEgIRfB1ceaXxRESJryz2qZkSlDMacRxUjp1Gzw2dIzYMILuAh9AMSU14GOiXolqjmQt9H27CgyYswlRJn/BwLejv+5FAuGwqBYPhjaSoNjlVwZeH62bjr+Ubd31SpBvf2mRxa5NiNhg6I6cx2HXclTMEKzud7fU8P0xzghXOEFSeq6TqWmJhKI4IVXfzyXJEL5CMfG0yxEjclo2867gvs6EMEqF/riCTdZUlIhJuWSBrqxvKNusTv6PebmK3k9LyrNcEY6vD4ryBKoU1suDIRUEq2SpHYQF1XeFeI70tJRe8dYpmAWCxnO19Sd6UToWhJNvOGUM6dX5YVuxlp1ML7Besy4xibkBuRdrTCwaGsXBly04dKAy27jwsBFWxsZMGrD2IBxGx4b8LgNTwx40oZjA46rSj9Ht/34us75wch1Ru7Z2+HRh9XD3AHPwQvwCrjgHTgCn8ApmABsvbOrC+WZ3+3f9m/7T/XpT1rpXkGtsz+w/YMnIR</latexit><latexit sha1_base64="8yW+EA0RjzDQbcV2u2b1N4/oJQ8=">AEOHicdZLfa9swEMfleD+67EfT7XEvYqFjMBbsMtgeVijsZS0EWljaMjsLsiw7opZsJNlLMP7H9r4/Ym97G3vdXzDZTRPFXg8Md/e570m+U5AlVCrH+Wn17Dt3793fedB/+Ojxk93B3tNzmeYCkwlOk1RcBkiShHIyUVQl5DITBLEgIRfB1ceaXxRESJryz2qZkSlDMacRxUjp1Gzw2dIzYMILuAh9AMSU14GOiXolqjmQt9H27CgyYswlRJn/BwLejv+5FAuGwqBYPhjaSoNjlVwZeH62bjr+Ubd31SpBvf2mRxa5NiNhg6I6cx2HXclTMEKzud7fU8P0xzghXOEFSeq6TqWmJhKI4IVXfzyXJEL5CMfG0yxEjclo2867gvs6EMEqF/riCTdZUlIhJuWSBrqxvKNusTv6PebmK3k9LyrNcEY6vD4ryBKoU1suDIRUEq2SpHYQF1XeFeI70tJRe8dYpmAWCxnO19Sd6UToWhJNvOGUM6dX5YVuxlp1ML7Besy4xibkBuRdrTCwaGsXBly04dKAy27jwsBFWxsZMGrD2IBxGx4b8LgNTwx40oZjA46rSj9Ht/34us75wch1Ru7Z2+HRh9XD3AHPwQvwCrjgHTgCn8ApmABsvbOrC+WZ3+3f9m/7T/XpT1rpXkGtsz+w/YMnIR</latexit>Time stepping
Can still apply the same scheme: vnew = v + M−1 f(x, v) ∆t xnew = x + vnew ∆t . Algorithm:
- Compute f = total force acting on each particle
- For each particle, update v, then update x
Mass-spring systems
Collection of particles with springs connecting them
xi xj fij fji
Mass-spring cloth
Simulate as particles but render as smooth surface
Mass-spring cloth
Create grid of particles Add springs to model internal forces structural springs
Mass-spring cloth
Create grid of particles Add springs to model internal forces shear springs
Mass-spring cloth
Create grid of particles Add springs to model internal forces bending springs
Mass-spring cloth
Create grid of particles Add springs to model internal forces bending springs
Other applications
Other applications
Advanced topics
- Collision handling
- Time integration schemes
- Realistic materials using the finite element method
- Fluids
Collision handling
Collision detection: check if objects intersect, if so return collision point and normal
- Discrete vs. continuous
Collision response: apply normal & frictional forces to fix it
- Penalty forces / collision impulses / more complex algorithms
Time integration schemes
Semi-implicit Euler has a “speed limit”: If ∆t or spring const too large, solution blows up! Unconditionally stable method: backward Euler: vnew = v + f(xnew, vnew)/m ∆t xnew = x + vnew ∆t . Requires solving a system of equations! (Newton’s method) Analysis of time stepping schemes:
- Accuracy vs. stability vs. conservation vs. compute cost
Finite elements
Instead of springs, divide object into collection of volumetric “elements” (triangles in 2D, tetrahedra in 3D)
- Spring rest length → element rest shape
- Spring constant → stress-strain relationship
X1 x1 X2 X3 x2 x3
Fluids
Particles
- Mass, velocity, pressure, etc.
stored on particles
- Particles move with fluid
Grids
- Velocity, pressure, etc. stored
- n grid vertices / cells
- Grid doesn’t move
Forces: pressure, viscosity, surface tension, …
Online notes for further reading
Foundations:
- Bargteil and Shinar, “An Introduction to Physics-based Animation”
https://cal.cs.umbc.edu/Courses/PhysicsBasedAnimation/ Finite elements for animation:
- Sifakis and Barbič, “FEM Simulation of 3D Deformable Solids”
http://www.femdefo.org/ Fluid simulation:
- Bridson and Müller-Fischer, “Fluid Simulation for Computer
Animation” https://www.cs.ubc.ca/~rbridson/fluidsimulation/