diff --git a/docs/documentation.aux b/docs/documentation.aux index 12e5c425edcabbc50270c348f0c4ac2a83e7ff7f..88ff1e7adcf5df50f2dee5b0efc5c5f7e73dc99c 100644 --- a/docs/documentation.aux +++ b/docs/documentation.aux @@ -35,28 +35,36 @@ \@writefile{toc}{\contentsline {subsection}{\numberline {2.3}Follow-the-Leader (FTL)}{2}{subsection.2.3}\protected@file@percent } \@writefile{toc}{\contentsline {section}{\numberline {3}Position Based Simulation}{2}{section.3}\protected@file@percent } \@writefile{toc}{\contentsline {subsection}{\numberline {3.1}Algorithm Overview}{2}{subsection.3.1}\protected@file@percent } +\newlabel{section:algorithmOverview}{{3.1}{2}{Algorithm Overview}{subsection.3.1}{}} +\citation{MullerPBD} +\citation{MullerPBD} \citation{MullerPBD} \@writefile{loa}{\contentsline {algocf}{\numberline {1}{\ignorespaces pseudo code for the PBD simulation\relax }}{3}{algocf.1}\protected@file@percent } \newlabel{alg:pbd}{{1}{3}{Algorithm Overview}{algocf.1}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {3.2}The Solver}{3}{subsection.3.2}\protected@file@percent } \newlabel{sec:solver}{{3.2}{3}{The Solver}{subsection.3.2}{}} \citation{MullerPBD} -\citation{PixarVolumetricHair} -\citation{FTLHair} +\citation{UmenhofferSimulation} \@writefile{toc}{\contentsline {subsection}{\numberline {3.3}Distance Constraint}{4}{subsection.3.3}\protected@file@percent } +\newlabel{section:DistanceConstraint}{{3.3}{4}{Distance Constraint}{subsection.3.3}{}} \newlabel{eq:distance_constraint}{{1}{4}{Distance Constraint}{equation.3.1}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {3.4}Bending Constraint}{4}{subsection.3.4}\protected@file@percent } +\newlabel{section:bendingConstraint}{{3.4}{4}{Bending Constraint}{subsection.3.4}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {3.5}Collision Constraint}{4}{subsection.3.5}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {4}Implementation}{4}{section.4}\protected@file@percent } -\@writefile{toc}{\contentsline {subsection}{\numberline {4.1}Data:}{4}{subsection.4.1}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {5}Putting Hair on the Head}{4}{section.5}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {6}Results}{4}{section.6}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {7}Conclusion}{4}{section.7}\protected@file@percent } -\newlabel{sec:conclusion}{{7}{4}{Conclusion}{section.7}{}} -\@writefile{toc}{\contentsline {section}{\numberline {8}Future Work}{4}{section.8}\protected@file@percent } -\newlabel{sec:future_work}{{8}{4}{Future Work}{section.8}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {8.1}Hair-hair collisions}{4}{subsection.8.1}\protected@file@percent } -\newlabel{subsec:future_work_collision}{{8.1}{4}{Hair-hair collisions}{subsection.8.1}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {3.6}Position Constraint}{4}{subsection.3.6}\protected@file@percent } +\citation{PixarVolumetricHair} +\citation{FTLHair} +\@writefile{toc}{\contentsline {section}{\numberline {4}Implementation}{5}{section.4}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {4.1}Datastructures}{5}{subsection.4.1}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {4.2}Constraints}{5}{subsection.4.2}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {4.3}Putting the Hair in the Hair Simulation}{5}{subsection.4.3}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {5}Results}{5}{section.5}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {6}Conclusion}{5}{section.6}\protected@file@percent } +\newlabel{sec:conclusion}{{6}{5}{Conclusion}{section.6}{}} +\@writefile{toc}{\contentsline {section}{\numberline {7}Future Work}{5}{section.7}\protected@file@percent } +\newlabel{sec:future_work}{{7}{5}{Future Work}{section.7}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {7.1}Hair-hair Collisions}{5}{subsection.7.1}\protected@file@percent } +\newlabel{subsec:future_work_collision}{{7.1}{5}{Hair-hair Collisions}{subsection.7.1}{}} \citation{RappRealTime} \citation{UmenhofferSimulation} \bibstyle{ACM-Reference-Format} @@ -67,21 +75,27 @@ \bibcite{PixarVolumetricHair}{{4}{2006}{{Petrovic et~al\mbox {.}}}{{Petrovic, Henne, and Pixar}}} \bibcite{RappRealTime}{{5}{2014}{{Rapp}}{{Rapp}}} \bibcite{UmenhofferSimulation}{{6}{2016}{{Umenhoffer et~al\mbox {.}}}{{Umenhoffer, Marschal, and Suti}}} -\@writefile{toc}{\contentsline {subsection}{\numberline {8.2}Refinement and proper customizability of the propagation of hair strands on the head object.}{5}{subsection.8.2}\protected@file@percent } -\@writefile{toc}{\contentsline {subsection}{\numberline {8.3}Better customizability}{5}{subsection.8.3}\protected@file@percent } -\@writefile{toc}{\contentsline {subsection}{\numberline {8.4}Sequence for randomizing hair positions}{5}{subsection.8.4}\protected@file@percent } -\@writefile{toc}{\contentsline {subsection}{\numberline {8.5}Rendering}{5}{subsection.8.5}\protected@file@percent } -\@writefile{toc}{\contentsline {subsection}{\numberline {8.6}Moving to the GPU}{5}{subsection.8.6}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{Acknowledgments}{5}{section*.8}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{References}{5}{section*.10}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {A}Supplementary development}{5}{appendix.A}\protected@file@percent } -\@writefile{toc}{\contentsline {subsection}{\numberline {A.1}OBJ Reader}{5}{subsection.A.1}\protected@file@percent } -\@writefile{lot}{\contentsline {table}{\numberline {1}{\ignorespaces Supported OBJ Data Types\relax }}{5}{table.caption.11}\protected@file@percent } -\newlabel{tab:objdatatypes}{{1}{5}{Supported OBJ Data Types\relax }{table.caption.11}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {7.2}Bending Constraint Improvements}{6}{subsection.7.2}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {7.3}More and better customization}{6}{subsection.7.3}\protected@file@percent } +\newlabel{section:futureCustomization}{{7.3}{6}{More and better customization}{subsection.7.3}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {7.4}Better customizability}{6}{subsection.7.4}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {7.5}Sequence for randomizing hair positions}{6}{subsection.7.5}\protected@file@percent } +\newlabel{section:futureHalton}{{7.5}{6}{Sequence for randomizing hair positions}{subsection.7.5}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {7.6}Rendering}{6}{subsection.7.6}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {7.7}Moving to the GPU}{6}{subsection.7.7}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{Acknowledgments}{6}{section*.8}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{References}{6}{section*.10}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {A}Constraint Projection}{6}{appendix.A}\protected@file@percent } +\newlabel{appendix:ConstraintProjection}{{A}{6}{Constraint Projection}{appendix.A}{}} +\@writefile{toc}{\contentsline {section}{\numberline {B}Supplementary development}{6}{appendix.B}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {B.1}OBJ Reader}{6}{subsection.B.1}\protected@file@percent } +\newlabel{section:appendixOBJ}{{B.1}{6}{OBJ Reader}{subsection.B.1}{}} \newlabel{tocindent-1}{0pt} \newlabel{tocindent0}{0pt} \newlabel{tocindent1}{6.95pt} -\newlabel{tocindent2}{13.79999pt} +\newlabel{tocindent2}{12.72998pt} \newlabel{tocindent3}{0pt} -\@writefile{toc}{\contentsline {subsection}{\numberline {A.2}Recording the simulation on-the-fly}{6}{subsection.A.2}\protected@file@percent } -\newlabel{TotPages}{{6}{6}{}{page.6}{}} +\@writefile{lot}{\contentsline {table}{\numberline {1}{\ignorespaces Supported OBJ Data Types\relax }}{7}{table.caption.11}\protected@file@percent } +\newlabel{tab:objdatatypes}{{1}{7}{Supported OBJ Data Types\relax }{table.caption.11}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {B.2}Recording the simulation on-the-fly}{7}{subsection.B.2}\protected@file@percent } +\newlabel{TotPages}{{7}{7}{}{page.7}{}} diff --git a/docs/documentation.log b/docs/documentation.log index 81b3d63222ff2ae8cb74bd6e9021e25a713c8ca9..436d784f16f00a57e0090bf3555f69244ef6e655 100644 --- a/docs/documentation.log +++ b/docs/documentation.log @@ -1,4 +1,4 @@ -This is pdfTeX, Version 3.14159265-2.6-1.40.20 (TeX Live 2019/Debian) (preloaded format=pdflatex 2020.12.8) 9 DEC 2020 17:41 +This is pdfTeX, Version 3.14159265-2.6-1.40.20 (TeX Live 2019/Debian) (preloaded format=pdflatex 2020.12.8) 9 DEC 2020 22:42 entering extended mode restricted \write18 enabled. %&-line parsing enabled. @@ -740,8 +740,8 @@ LaTeX Info: Redefining \smaller on input line 151. \algocf@algoframe=\box59 \algocf@algobox=\box60 ) -Package hyperref Info: Option `colorlinks' set `true' on input line 25. -Package hyperref Info: Option `pdfdisplaydoctitle' set `true' on input line 25. +Package hyperref Info: Option `colorlinks' set `true' on input line 27. +Package hyperref Info: Option `pdfdisplaydoctitle' set `true' on input line 27. \c@theorem=\count303 @@ -759,107 +759,107 @@ File: l3backend-pdfmode.def 2020-02-03 L3 backend support: PDF mode (./documentation.aux) \openout1 = `documentation.aux'. -LaTeX Font Info: Checking defaults for OML/nxlmi/m/it on input line 25. +LaTeX Font Info: Checking defaults for OML/nxlmi/m/it on input line 27. LaTeX Font Info: Trying to load font information for OML+nxlmi on input line - 25. + 27. (/usr/share/texlive/texmf-dist/tex/latex/newtx/omlnxlmi.fd File: omlnxlmi.fd 2013/11/19 Fontinst v1.933 font definitions for OML/nxlmi. ) -LaTeX Font Info: ... okay on input line 25. -LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 25. -LaTeX Font Info: ... okay on input line 25. -LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 25. -LaTeX Font Info: ... okay on input line 25. -LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 25. -LaTeX Font Info: ... okay on input line 25. -LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 25. -LaTeX Font Info: ... okay on input line 25. -LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 25. -LaTeX Font Info: ... okay on input line 25. -LaTeX Font Info: Checking defaults for U/ntxexa/m/n on input line 25. +LaTeX Font Info: ... okay on input line 27. +LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 27. +LaTeX Font Info: ... okay on input line 27. +LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 27. +LaTeX Font Info: ... okay on input line 27. +LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 27. +LaTeX Font Info: ... okay on input line 27. +LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 27. +LaTeX Font Info: ... okay on input line 27. +LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 27. +LaTeX Font Info: ... okay on input line 27. +LaTeX Font Info: Checking defaults for U/ntxexa/m/n on input line 27. LaTeX Font Info: Trying to load font information for U+ntxexa on input line -25. +27. (/usr/share/texlive/texmf-dist/tex/latex/newtx/untxexa.fd File: untxexa.fd 2012/04/16 Fontinst v1.933 font definitions for U/ntxexa. ) -LaTeX Font Info: ... okay on input line 25. -LaTeX Font Info: Checking defaults for PD1/pdf/m/n on input line 25. -LaTeX Font Info: ... okay on input line 25. -LaTeX Font Info: Checking defaults for PU/pdf/m/n on input line 25. -LaTeX Font Info: ... okay on input line 25. -LaTeX Font Info: Checking defaults for LMS/ntxsy/m/n on input line 25. +LaTeX Font Info: ... okay on input line 27. +LaTeX Font Info: Checking defaults for PD1/pdf/m/n on input line 27. +LaTeX Font Info: ... okay on input line 27. +LaTeX Font Info: Checking defaults for PU/pdf/m/n on input line 27. +LaTeX Font Info: ... okay on input line 27. +LaTeX Font Info: Checking defaults for LMS/ntxsy/m/n on input line 27. LaTeX Font Info: Trying to load font information for LMS+ntxsy on input line - 25. + 27. (/usr/share/texlive/texmf-dist/tex/latex/newtx/lmsntxsy.fd File: lmsntxsy.fd 2016/07/02 Fontinst v1.933 font definitions for LMS/ntxsy. ) -LaTeX Font Info: ... okay on input line 25. -LaTeX Font Info: Checking defaults for LMX/ntxexx/m/n on input line 25. +LaTeX Font Info: ... okay on input line 27. +LaTeX Font Info: Checking defaults for LMX/ntxexx/m/n on input line 27. LaTeX Font Info: Trying to load font information for LMX+ntxexx on input lin -e 25. +e 27. (/usr/share/texlive/texmf-dist/tex/latex/newtx/lmxntxexx.fd File: lmxntxexx.fd 2016/07/03 Fontinst v1.933 font definitions for LMX/ntxexx. ) -LaTeX Font Info: ... okay on input line 25. +LaTeX Font Info: ... okay on input line 27. LaTeX Font Info: Font shape `T1/LinuxLibertineT-TLF/m/n' will be -(Font) scaled to size 8.0pt on input line 25. +(Font) scaled to size 8.0pt on input line 27. LaTeX Font Info: Trying to load font information for OT1+LinuxLibertineT-TLF - on input line 25. + on input line 27. (/usr/share/texlive/texmf-dist/tex/latex/libertine/OT1LinuxLibertineT-TLF.fd File: OT1LinuxLibertineT-TLF.fd 2017/03/20 (autoinst) Font definitions for OT1/ LinuxLibertineT-TLF. ) LaTeX Font Info: Font shape `OT1/LinuxLibertineT-TLF/m/n' will be -(Font) scaled to size 8.0pt on input line 25. +(Font) scaled to size 8.0pt on input line 27. <<ot1.cmap>> LaTeX Font Info: Font shape `OT1/LinuxLibertineT-TLF/m/n' will be -(Font) scaled to size 6.2pt on input line 25. +(Font) scaled to size 6.2pt on input line 27. LaTeX Font Info: Font shape `OT1/LinuxLibertineT-TLF/m/n' will be -(Font) scaled to size 5.5pt on input line 25. +(Font) scaled to size 5.5pt on input line 27. <<oml.cmap>> -LaTeX Font Info: Trying to load font information for U+msa on input line 25. +LaTeX Font Info: Trying to load font information for U+msa on input line 27. (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd File: umsa.fd 2013/01/14 v3.01 AMS symbols A ) -LaTeX Font Info: Trying to load font information for U+msb on input line 25. +LaTeX Font Info: Trying to load font information for U+msb on input line 27. (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd File: umsb.fd 2013/01/14 v3.01 AMS symbols B ) LaTeX Font Info: Trying to load font information for U+ntxmia on input line -25. +27. (/usr/share/texlive/texmf-dist/tex/latex/newtx/untxmia.fd File: untxmia.fd 2018/04/14 Fontinst v1.933 font definitions for U/ntxmia. ) LaTeX Font Info: Trying to load font information for U+ntxsym on input line -25. +27. (/usr/share/texlive/texmf-dist/tex/latex/newtx/untxsym.fd File: untxsym.fd 2015/03/20 Fontinst v1.933 font definitions for U/ntxsym. ) LaTeX Font Info: Trying to load font information for U+ntxsyc on input line -25. +27. (/usr/share/texlive/texmf-dist/tex/latex/newtx/untxsyc.fd File: untxsyc.fd 2012/04/12 Fontinst v1.933 font definitions for U/ntxsyc. ) -LaTeX Info: Redefining \microtypecontext on input line 25. +LaTeX Info: Redefining \microtypecontext on input line 27. Package microtype Info: Generating PDF output. Package microtype Info: Character protrusion enabled (level 2). Package microtype Info: Using default protrusion set `alltext'. Package microtype Info: Automatic font expansion enabled (level 2), (microtype) stretch: 20, shrink: 20, step: 1, non-selected. Package microtype Info: Using default expansion set `basictext'. -LaTeX Info: Redefining \showhyphens on input line 25. +LaTeX Info: Redefining \showhyphens on input line 27. Package microtype Info: No adjustment of tracking. Package microtype Info: No adjustment of interword spacing. Package microtype Info: No adjustment of character kerning. @@ -870,7 +870,7 @@ Package microtype Info: Loading generic protrusion settings for font family ABD: EveryShipout initializing macros \AtBeginShipoutBox=\box62 -Package hyperref Info: Link coloring ON on input line 25. +Package hyperref Info: Link coloring ON on input line 27. (/usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty Package: nameref 2019/09/16 v2.46 Cross-referencing by name of section @@ -880,9 +880,9 @@ Package: gettitlestring 2019/12/15 v1.6 Cleanup title references (HO) ) \c@section@level=\count305 ) -LaTeX Info: Redefining \ref on input line 25. -LaTeX Info: Redefining \pageref on input line 25. -LaTeX Info: Redefining \nameref on input line 25. +LaTeX Info: Redefining \ref on input line 27. +LaTeX Info: Redefining \pageref on input line 27. +LaTeX Info: Redefining \nameref on input line 27. (./documentation.out) (./documentation.out) \@outlinefile=\write4 @@ -963,38 +963,38 @@ Package caption Info: End \AtBeginDocument code. Excluding 'CCSXML' comment. LaTeX Font Info: Font shape `T1/LinuxLibertineT-TLF/m/n' will be -(Font) scaled to size 20.74pt on input line 113. +(Font) scaled to size 20.74pt on input line 120. LaTeX Font Info: Font shape `T1/LinuxLibertineT-TLF/b/n' will be -(Font) scaled to size 20.74pt on input line 113. +(Font) scaled to size 20.74pt on input line 120. LaTeX Font Info: Font shape `T1/LinuxLibertineT-TLF/b/n' will be -(Font) scaled to size 10.0pt on input line 113. +(Font) scaled to size 10.0pt on input line 120. LaTeX Font Info: Font shape `T1/LinuxLibertineT-TLF/b/n' will be -(Font) scaled to size 14.4pt on input line 113. +(Font) scaled to size 14.4pt on input line 120. LaTeX Font Info: Font shape `T1/LinuxLibertineT-TLF/m/n' will be -(Font) scaled to size 14.4pt on input line 113. +(Font) scaled to size 14.4pt on input line 120. LaTeX Font Info: Font shape `T1/LinuxLibertineT-TLF/m/n' will be -(Font) scaled to size 12.0pt on input line 113. +(Font) scaled to size 12.0pt on input line 120. LaTeX Font Info: Trying to load font information for T1+LinuxBiolinumT-TLF o -n input line 113. +n input line 120. (/usr/share/texlive/texmf-dist/tex/latex/libertine/T1LinuxBiolinumT-TLF.fd File: T1LinuxBiolinumT-TLF.fd 2017/03/20 (autoinst) Font definitions for T1/Lin uxBiolinumT-TLF. ) LaTeX Font Info: Font shape `T1/LinuxBiolinumT-TLF/m/n' will be -(Font) scaled to size 10.0pt on input line 113. +(Font) scaled to size 10.0pt on input line 120. Package microtype Info: Loading generic protrusion settings for font family (microtype) `LinuxBiolinumT-TLF' (encoding: T1). (microtype) For optimal results, create family-specific settings. (microtype) See the microtype manual for details. LaTeX Font Info: Font shape `OT1/LinuxLibertineT-TLF/m/n' will be -(Font) scaled to size 10.0pt on input line 113. +(Font) scaled to size 10.0pt on input line 120. Package microtype Info: Loading generic protrusion settings for font family (microtype) `LinuxLibertineT-TLF' (encoding: OT1). (microtype) For optimal results, create family-specific settings. (microtype) See the microtype manual for details. LaTeX Font Info: Font shape `OT1/LinuxLibertineT-TLF/m/n' will be -(Font) scaled to size 7.3pt on input line 113. +(Font) scaled to size 7.3pt on input line 120. (/usr/share/texlive/texmf-dist/tex/latex/microtype/mt-msa.cfg File: mt-msa.cfg 2006/02/04 v1.1 microtype config. file: AMS symbols (a) (RS) @@ -1002,53 +1002,56 @@ File: mt-msa.cfg 2006/02/04 v1.1 microtype config. file: AMS symbols (a) (RS) (/usr/share/texlive/texmf-dist/tex/latex/microtype/mt-msb.cfg File: mt-msb.cfg 2005/06/01 v1.0 microtype config. file: AMS symbols (b) (RS) ) -<teaser.png, id=123, 602.25pt x 401.5pt> +<teaser.png, id=139, 602.25pt x 401.5pt> File: teaser.png Graphic file (type png) <use teaser.png> -Package pdftex.def Info: teaser.png used on input line 113. +Package pdftex.def Info: teaser.png used on input line 120. (pdftex.def) Requested size: 505.89pt x 337.27606pt. LaTeX Font Info: Font shape `T1/LinuxLibertineT-TLF/b/n' will be -(Font) scaled to size 12.0pt on input line 113. +(Font) scaled to size 12.0pt on input line 120. LaTeX Font Info: Font shape `T1/LinuxLibertineT-TLF/m/n' will be -(Font) scaled to size 7.3pt on input line 113. +(Font) scaled to size 7.3pt on input line 120. LaTeX Font Info: Font shape `T1/LinuxLibertineT-TLF/m/n' will be -(Font) scaled to size 6.2pt on input line 113. +(Font) scaled to size 6.2pt on input line 120. LaTeX Font Info: Font shape `T1/LinuxBiolinumT-TLF/m/n' will be -(Font) scaled to size 8.0pt on input line 113. +(Font) scaled to size 8.0pt on input line 120. LaTeX Font Info: Font shape `T1/LinuxLibertineT-TLF/b/it' will be -(Font) scaled to size 10.0pt on input line 113. +(Font) scaled to size 10.0pt on input line 120. LaTeX Font Info: Trying to load font information for TS1+LinuxLibertineT-TLF - on input line 113. + on input line 120. (/usr/share/texlive/texmf-dist/tex/latex/libertine/TS1LinuxLibertineT-TLF.fd File: TS1LinuxLibertineT-TLF.fd 2017/03/20 (autoinst) Font definitions for TS1/ LinuxLibertineT-TLF. ) LaTeX Font Info: Font shape `TS1/LinuxLibertineT-TLF/m/n' will be -(Font) scaled to size 10.0pt on input line 113. +(Font) scaled to size 10.0pt on input line 120. Package microtype Info: Loading generic protrusion settings for font family (microtype) `LinuxLibertineT-TLF' (encoding: TS1). (microtype) For optimal results, create family-specific settings. (microtype) See the microtype manual for details. LaTeX Font Info: Font shape `T1/LinuxLibertineT-TLF/m/it' will be -(Font) scaled to size 10.0pt on input line 113. +(Font) scaled to size 10.0pt on input line 120. -Overfull \hbox (5.12202pt too wide) in paragraph at lines 113--113 +Overfull \hbox (5.12202pt too wide) in paragraph at lines 120--120 []\T1/LinuxLibertineT-TLF/b/it/10 Keywords: \T1/LinuxLibertineT-TLF/m/n/10 (-2 0) hair sim-u-la-tion, po-si-tion based dy-nam-ics, OpenGL [] -[1.1{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map} + +Underfull \vbox (badness 10000) has occurred while \output is active [] + + [1.1{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map} <./teaser.png>] LaTeX Font Info: Font shape `OT1/LinuxLibertineT-TLF/sb/n' will be -(Font) scaled to size 10.0pt on input line 215. +(Font) scaled to size 10.0pt on input line 222. LaTeX Font Info: Font shape `OT1/LinuxLibertineT-TLF/sb/n' will be -(Font) scaled to size 7.3pt on input line 215. +(Font) scaled to size 7.3pt on input line 222. LaTeX Font Info: Font shape `OT1/LinuxLibertineT-TLF/sb/n' will be -(Font) scaled to size 5.5pt on input line 215. +(Font) scaled to size 5.5pt on input line 222. -Overfull \hbox (14.9743pt too wide) in paragraph at lines 217--222 +Overfull \hbox (14.9743pt too wide) in paragraph at lines 224--229 \T1/LinuxLibertineT-TLF/m/n/10 (-20) tion $\OML/nxlmi/m/it/10 C[] \OT1/LinuxLib ertineT-TLF/m/n/10 (-20) : \U/ntxsym/m/n/10 R[] \LMS/ntxsy/m/n/10 7! \U/ntxsym/ m/n/10 R$\T1/LinuxLibertineT-TLF/m/n/10 (-20) . It op-er-ates on a set of in-di @@ -1057,7 +1060,7 @@ xlmi/m/it/10 ; i[] \LMS/ntxsy/m/n/10 2 [] -Overfull \hbox (20.05922pt too wide) in paragraph at lines 223--228 +Overfull \hbox (20.05922pt too wide) in paragraph at lines 230--235 []\T1/LinuxLibertineT-TLF/m/n/10 (-20) Constraint $\OML/nxlmi/m/it/10 c$ \T1/Li nuxLibertineT-TLF/m/n/10 (-20) with type \T1/LinuxLibertineT-TLF/m/it/10 (-20) equal-ity \T1/LinuxLibertineT-TLF/m/n/10 (-20) is sat-is-fied if $\OML/nxlmi/m/ @@ -1066,54 +1069,49 @@ it/10 C[]\LMS/ntxsy/m/n/10 [] -Overfull \hbox (12.99283pt too wide) in paragraph at lines 223--228 +Overfull \hbox (12.99283pt too wide) in paragraph at lines 230--235 \OT1/LinuxLibertineT-TLF/m/n/10 (-20) 0$\T1/LinuxLibertineT-TLF/m/n/10 (-20) . If its type is \T1/LinuxLibertineT-TLF/m/it/10 (-20) in-equal-ity\T1/LinuxLiber tineT-TLF/m/n/10 (-20) , then it is sat-is-fied if $\OML/nxlmi/m/it/10 C[]\LMS/ ntxsy/m/n/10 �[][]\OML/nxlmi/m/it/10 ; [] ; [][]\LMS/ntxsy/m/n/10 � ^^U [] - -Underfull \vbox (badness 10000) has occurred while \output is active [] - - [2.2] LaTeX Font Info: Trying to load font information for T1+zi4 on input line 25 -3. - +9. (/usr/share/texlive/texmf-dist/tex/latex/inconsolata/t1zi4.fd File: t1zi4.fd 2018/01/14 T1/zi4 (Inconsolata) ) LaTeX Font Info: Font shape `T1/zi4/m/n' will be -(Font) scaled to size 10.0pt on input line 253. +(Font) scaled to size 10.0pt on input line 259. Package microtype Info: Loading generic protrusion settings for font family (microtype) `zi4' (encoding: T1). (microtype) For optimal results, create family-specific settings. (microtype) See the microtype manual for details. LaTeX Font Info: Font shape `T1/zi4/m/n' will be -(Font) scaled to size 7.0pt on input line 253. +(Font) scaled to size 7.0pt on input line 259. -Overfull \hbox (18.40462pt too wide) in paragraph at lines 279--279 +Overfull \hbox (18.40462pt too wide) in paragraph at lines 285--285 [][]|[]\T1/zi4/m/n/10 projectConstraints($\OML/nxlmi/m/it/10 C[]; [] ; C[]; par ticles$\T1/zi4/m/n/10 ) [] LaTeX Font Info: Font shape `T1/LinuxLibertineT-TLF/m/n' will be -(Font) scaled to size 7.0pt on input line 279. +(Font) scaled to size 7.0pt on input line 285. LaTeX Font Info: Font shape `T1/zi4/m/n' will be -(Font) scaled to size 8.0pt on input line 284. - +(Font) scaled to size 8.0pt on input line 290. +[2.2] Underfull \vbox (badness 10000) has occurred while \output is active [] [3.3] -[4.4] Processing 'acks' comment. -\openout3 = `comment.cut'. - - Comment 'acks' writing to comment.cut. -Straight input of comment.cut. (./comment.cut) +[4.4] Underfull \vbox (badness 10000) has occurred while \output is active [] + [5.5] +Processing 'acks' comment. +\openout3 = `comment.cut'. -(./documentation.bbl + Comment 'acks' writing to comment.cut. +Straight input of comment.cut. (./comment.cut) (./documentation.bbl LaTeX Font Info: Font shape `T1/LinuxLibertineT-TLF/m/it' will be (Font) scaled to size 8.0pt on input line 49. LaTeX Info: Redefining \tempurl on input line 75. @@ -1126,36 +1124,40 @@ Underfull \hbox (badness 10000) in paragraph at lines 111--118 / MarkusRapp -[] MasterThesis -[] [] -) [5.5] -Overfull \hbox (11.38634pt too wide) in paragraph at lines 616--619 +) [6.6] +Overfull \hbox (11.38634pt too wide) in paragraph at lines 737--740 \T1/LinuxLibertineT-TLF/m/n/10 (-20) at 24 FPS, with the nam-ing con-ven-tion r en-derXXXX[.bmp/.png], [] -Overfull \hbox (3.58836pt too wide) in paragraph at lines 621--625 +Overfull \hbox (3.58836pt too wide) in paragraph at lines 742--746 \T1/zi4/m/n/10 make_video.sh \T1/LinuxLibertineT-TLF/m/n/10 (-20) script to as- sem-ble the \T1/zi4/m/n/10 output.mp4 \T1/LinuxLibertineT-TLF/m/n/10 (-20) and delete [] -[6.6] -Package atveryend Info: Empty hook `BeforeClearDocument' on input line 627. -Package atveryend Info: Empty hook `AfterLastShipout' on input line 627. + +Overfull \vbox (2.03061pt too high) has occurred while \output is active [] + + +[7.7] +Package atveryend Info: Empty hook `BeforeClearDocument' on input line 748. +Package atveryend Info: Empty hook `AfterLastShipout' on input line 748. (./documentation.aux) -Package atveryend Info: Executing hook `AtVeryEndDocument' on input line 627. -Package atveryend Info: Executing hook `AtEndAfterFileList' on input line 627. +Package atveryend Info: Executing hook `AtVeryEndDocument' on input line 748. +Package atveryend Info: Executing hook `AtEndAfterFileList' on input line 748. Package rerunfilecheck Info: File `documentation.out' has not changed. -(rerunfilecheck) Checksum: 5358B6976FE170B963D3406982B99A3E;5151. +(rerunfilecheck) Checksum: 76188F874CEF96D76FCC9FE7767FEB40;5679. ) Here is how much of TeX's memory you used: - 20377 strings out of 481239 - 308691 string characters out of 5920377 - 618628 words of memory out of 5000000 - 34670 multiletter control sequences out of 15000+600000 - 697072 words of font info for 334 fonts, out of 8000000 for 9000 + 20390 strings out of 481239 + 308938 string characters out of 5920377 + 619798 words of memory out of 5000000 + 34681 multiletter control sequences out of 15000+600000 + 696799 words of font info for 332 fonts, out of 8000000 for 9000 1302 hyphenation exceptions out of 8191 - 63i,19n,100p,804b,588s stack positions out of 5000i,500n,10000p,200000b,80000s + 63i,18n,100p,804b,584s stack positions out of 5000i,500n,10000p,200000b,80000s {/usr/share/texlive/texmf-dist/fonts/enc/dvips/libertine/lbtn_fygcup.enc}{/us r/share/texlive/texmf-dist/fonts/enc/dvips/inconsolata/i4-t1-4.enc}{/usr/share/ texlive/texmf-dist/fonts/enc/dvips/libertine/lbtn_oexx6f.enc}{/usr/share/texliv @@ -1180,10 +1182,10 @@ bertineTI.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/libertine/LinLi bertineTZ.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/newtx/txmiaX.pf b></usr/share/texlive/texmf-dist/fonts/type1/public/txfonts/txsyb.pfb></usr/sha re/texlive/texmf-dist/fonts/type1/public/newtx/txsys.pfb> -Output written on documentation.pdf (6 pages, 579210 bytes). +Output written on documentation.pdf (7 pages, 591369 bytes). PDF statistics: - 368 PDF objects out of 1000 (max. 8388607) - 317 compressed objects within 4 object streams - 85 named destinations out of 1000 (max. 500000) - 41726 words of extra memory for PDF output out of 42996 (max. 10000000) + 412 PDF objects out of 1000 (max. 8388607) + 360 compressed objects within 4 object streams + 90 named destinations out of 1000 (max. 500000) + 41758 words of extra memory for PDF output out of 42996 (max. 10000000) diff --git a/docs/documentation.out b/docs/documentation.out index 9b47192e5991a75b01afb3a59a973eb4f82016a8..d650ec07465e11fdbc5c0eec5c51c003f26fc83e 100644 --- a/docs/documentation.out +++ b/docs/documentation.out @@ -10,20 +10,24 @@ \BOOKMARK [2][-]{subsection.3.3}{\376\377\0003\000.\0003\000\040\000D\000i\000s\000t\000a\000n\000c\000e\000\040\000C\000o\000n\000s\000t\000r\000a\000i\000n\000t}{section.3}% 10 \BOOKMARK [2][-]{subsection.3.4}{\376\377\0003\000.\0004\000\040\000B\000e\000n\000d\000i\000n\000g\000\040\000C\000o\000n\000s\000t\000r\000a\000i\000n\000t}{section.3}% 11 \BOOKMARK [2][-]{subsection.3.5}{\376\377\0003\000.\0005\000\040\000C\000o\000l\000l\000i\000s\000i\000o\000n\000\040\000C\000o\000n\000s\000t\000r\000a\000i\000n\000t}{section.3}% 12 -\BOOKMARK [1][-]{section.4}{\376\377\0004\000\040\000I\000m\000p\000l\000e\000m\000e\000n\000t\000a\000t\000i\000o\000n}{}% 13 -\BOOKMARK [2][-]{subsection.4.1}{\376\377\0004\000.\0001\000\040\000D\000a\000t\000a\000:}{section.4}% 14 -\BOOKMARK [1][-]{section.5}{\376\377\0005\000\040\000P\000u\000t\000t\000i\000n\000g\000\040\000H\000a\000i\000r\000\040\000o\000n\000\040\000t\000h\000e\000\040\000H\000e\000a\000d}{}% 15 -\BOOKMARK [1][-]{section.6}{\376\377\0006\000\040\000R\000e\000s\000u\000l\000t\000s}{}% 16 -\BOOKMARK [1][-]{section.7}{\376\377\0007\000\040\000C\000o\000n\000c\000l\000u\000s\000i\000o\000n}{}% 17 -\BOOKMARK [1][-]{section.8}{\376\377\0008\000\040\000F\000u\000t\000u\000r\000e\000\040\000W\000o\000r\000k}{}% 18 -\BOOKMARK [2][-]{subsection.8.1}{\376\377\0008\000.\0001\000\040\000H\000a\000i\000r\000-\000h\000a\000i\000r\000\040\000c\000o\000l\000l\000i\000s\000i\000o\000n\000s}{section.8}% 19 -\BOOKMARK [2][-]{subsection.8.2}{\376\377\0008\000.\0002\000\040\000R\000e\000f\000i\000n\000e\000m\000e\000n\000t\000\040\000a\000n\000d\000\040\000p\000r\000o\000p\000e\000r\000\040\000c\000u\000s\000t\000o\000m\000i\000z\000a\000b\000i\000l\000i\000t\000y\000\040\000o\000f\000\040\000t\000h\000e\000\040\000p\000r\000o\000p\000a\000g\000a\000t\000i\000o\000n\000\040\000o\000f\000\040\000h\000a\000i\000r\000\040\000s\000t\000r\000a\000n\000d\000s\000\040\000o\000n\000\040\000t\000h\000e\000\040\000h\000e\000a\000d\000\040\000o\000b\000j\000e\000c\000t\000.}{section.8}% 20 -\BOOKMARK [2][-]{subsection.8.3}{\376\377\0008\000.\0003\000\040\000B\000e\000t\000t\000e\000r\000\040\000c\000u\000s\000t\000o\000m\000i\000z\000a\000b\000i\000l\000i\000t\000y}{section.8}% 21 -\BOOKMARK [2][-]{subsection.8.4}{\376\377\0008\000.\0004\000\040\000S\000e\000q\000u\000e\000n\000c\000e\000\040\000f\000o\000r\000\040\000r\000a\000n\000d\000o\000m\000i\000z\000i\000n\000g\000\040\000h\000a\000i\000r\000\040\000p\000o\000s\000i\000t\000i\000o\000n\000s}{section.8}% 22 -\BOOKMARK [2][-]{subsection.8.5}{\376\377\0008\000.\0005\000\040\000R\000e\000n\000d\000e\000r\000i\000n\000g}{section.8}% 23 -\BOOKMARK [2][-]{subsection.8.6}{\376\377\0008\000.\0006\000\040\000M\000o\000v\000i\000n\000g\000\040\000t\000o\000\040\000t\000h\000e\000\040\000G\000P\000U}{section.8}% 24 -\BOOKMARK [1][-]{section*.8}{\376\377\000A\000c\000k\000n\000o\000w\000l\000e\000d\000g\000m\000e\000n\000t\000s}{}% 25 -\BOOKMARK [1][-]{section*.10}{\376\377\000R\000e\000f\000e\000r\000e\000n\000c\000e\000s}{}% 26 -\BOOKMARK [1][-]{appendix.A}{\376\377\000A\000\040\000S\000u\000p\000p\000l\000e\000m\000e\000n\000t\000a\000r\000y\000\040\000d\000e\000v\000e\000l\000o\000p\000m\000e\000n\000t}{}% 27 -\BOOKMARK [2][-]{subsection.A.1}{\376\377\000A\000.\0001\000\040\000O\000B\000J\000\040\000R\000e\000a\000d\000e\000r}{appendix.A}% 28 -\BOOKMARK [2][-]{subsection.A.2}{\376\377\000A\000.\0002\000\040\000R\000e\000c\000o\000r\000d\000i\000n\000g\000\040\000t\000h\000e\000\040\000s\000i\000m\000u\000l\000a\000t\000i\000o\000n\000\040\000o\000n\000-\000t\000h\000e\000-\000f\000l\000y}{appendix.A}% 29 +\BOOKMARK [2][-]{subsection.3.6}{\376\377\0003\000.\0006\000\040\000P\000o\000s\000i\000t\000i\000o\000n\000\040\000C\000o\000n\000s\000t\000r\000a\000i\000n\000t}{section.3}% 13 +\BOOKMARK [1][-]{section.4}{\376\377\0004\000\040\000I\000m\000p\000l\000e\000m\000e\000n\000t\000a\000t\000i\000o\000n}{}% 14 +\BOOKMARK [2][-]{subsection.4.1}{\376\377\0004\000.\0001\000\040\000D\000a\000t\000a\000s\000t\000r\000u\000c\000t\000u\000r\000e\000s}{section.4}% 15 +\BOOKMARK [2][-]{subsection.4.2}{\376\377\0004\000.\0002\000\040\000C\000o\000n\000s\000t\000r\000a\000i\000n\000t\000s}{section.4}% 16 +\BOOKMARK [2][-]{subsection.4.3}{\376\377\0004\000.\0003\000\040\000P\000u\000t\000t\000i\000n\000g\000\040\000t\000h\000e\000\040\000H\000a\000i\000r\000\040\000i\000n\000\040\000t\000h\000e\000\040\000H\000a\000i\000r\000\040\000S\000i\000m\000u\000l\000a\000t\000i\000o\000n}{section.4}% 17 +\BOOKMARK [1][-]{section.5}{\376\377\0005\000\040\000R\000e\000s\000u\000l\000t\000s}{}% 18 +\BOOKMARK [1][-]{section.6}{\376\377\0006\000\040\000C\000o\000n\000c\000l\000u\000s\000i\000o\000n}{}% 19 +\BOOKMARK [1][-]{section.7}{\376\377\0007\000\040\000F\000u\000t\000u\000r\000e\000\040\000W\000o\000r\000k}{}% 20 +\BOOKMARK [2][-]{subsection.7.1}{\376\377\0007\000.\0001\000\040\000H\000a\000i\000r\000-\000h\000a\000i\000r\000\040\000C\000o\000l\000l\000i\000s\000i\000o\000n\000s}{section.7}% 21 +\BOOKMARK [2][-]{subsection.7.2}{\376\377\0007\000.\0002\000\040\000B\000e\000n\000d\000i\000n\000g\000\040\000C\000o\000n\000s\000t\000r\000a\000i\000n\000t\000\040\000I\000m\000p\000r\000o\000v\000e\000m\000e\000n\000t\000s}{section.7}% 22 +\BOOKMARK [2][-]{subsection.7.3}{\376\377\0007\000.\0003\000\040\000M\000o\000r\000e\000\040\000a\000n\000d\000\040\000b\000e\000t\000t\000e\000r\000\040\000c\000u\000s\000t\000o\000m\000i\000z\000a\000t\000i\000o\000n}{section.7}% 23 +\BOOKMARK [2][-]{subsection.7.4}{\376\377\0007\000.\0004\000\040\000B\000e\000t\000t\000e\000r\000\040\000c\000u\000s\000t\000o\000m\000i\000z\000a\000b\000i\000l\000i\000t\000y}{section.7}% 24 +\BOOKMARK [2][-]{subsection.7.5}{\376\377\0007\000.\0005\000\040\000S\000e\000q\000u\000e\000n\000c\000e\000\040\000f\000o\000r\000\040\000r\000a\000n\000d\000o\000m\000i\000z\000i\000n\000g\000\040\000h\000a\000i\000r\000\040\000p\000o\000s\000i\000t\000i\000o\000n\000s}{section.7}% 25 +\BOOKMARK [2][-]{subsection.7.6}{\376\377\0007\000.\0006\000\040\000R\000e\000n\000d\000e\000r\000i\000n\000g}{section.7}% 26 +\BOOKMARK [2][-]{subsection.7.7}{\376\377\0007\000.\0007\000\040\000M\000o\000v\000i\000n\000g\000\040\000t\000o\000\040\000t\000h\000e\000\040\000G\000P\000U}{section.7}% 27 +\BOOKMARK [1][-]{section*.8}{\376\377\000A\000c\000k\000n\000o\000w\000l\000e\000d\000g\000m\000e\000n\000t\000s}{}% 28 +\BOOKMARK [1][-]{section*.10}{\376\377\000R\000e\000f\000e\000r\000e\000n\000c\000e\000s}{}% 29 +\BOOKMARK [1][-]{appendix.A}{\376\377\000A\000\040\000C\000o\000n\000s\000t\000r\000a\000i\000n\000t\000\040\000P\000r\000o\000j\000e\000c\000t\000i\000o\000n}{}% 30 +\BOOKMARK [1][-]{appendix.B}{\376\377\000B\000\040\000S\000u\000p\000p\000l\000e\000m\000e\000n\000t\000a\000r\000y\000\040\000d\000e\000v\000e\000l\000o\000p\000m\000e\000n\000t}{}% 31 +\BOOKMARK [2][-]{subsection.B.1}{\376\377\000B\000.\0001\000\040\000O\000B\000J\000\040\000R\000e\000a\000d\000e\000r}{appendix.B}% 32 +\BOOKMARK [2][-]{subsection.B.2}{\376\377\000B\000.\0002\000\040\000R\000e\000c\000o\000r\000d\000i\000n\000g\000\040\000t\000h\000e\000\040\000s\000i\000m\000u\000l\000a\000t\000i\000o\000n\000\040\000o\000n\000-\000t\000h\000e\000-\000f\000l\000y}{appendix.B}% 33 diff --git a/docs/documentation.pdf b/docs/documentation.pdf index c4604a345db26609965dc476ab63e3229d1ff029..6000b9ac7760cec229859bd9ae37cbe76b3c4e1b 100644 Binary files a/docs/documentation.pdf and b/docs/documentation.pdf differ diff --git a/docs/documentation.tex b/docs/documentation.tex index 271ed4f23d911f76f0a3149632bca7c84e9e6941..8a404440efeac33b1f0977c12e85cf7fcd872a7b 100644 --- a/docs/documentation.tex +++ b/docs/documentation.tex @@ -17,19 +17,23 @@ \newcommand{\specialcell}[2][t]{% \begin{tabular}[#1]{@{}l@{}}#2\end{tabular}} - \usepackage[ruled, linesnumbered]{algorithm2e} +\usepackage[ruled, linesnumbered]{algorithm2e} % \usepackage{algorithmic} - \renewcommand{\b}{\boldsymbol} +\renewcommand{\b}{\boldsymbol} + +\setlength{\parskip}{0.2em} %% end of the preamble, start of the body of the document source. \begin{document} +% don't allow lines to overflow their columns +% \sloppy % \renewcommand{\@algocf@capt@plain}{top} % formerly {bottom} %% %% The "title" command has an optional parameter, %% allowing the author to define a "short title" to be used in page headers. \title[Hair Simulation]{Simulation of Curly Hair} -\subtitle{5th semester Project Laboratory report} +\subtitle{5th Semester Project Laboratory Report} %% %% The "author" command and its associated commands are used to define @@ -41,19 +45,22 @@ % \authornote{BSc student} \email{borcsok.barnabas@simonyi.bme.hu} \affiliation{% - \institution{Budapest University of Technology and Economics} + \institution{}%Budapest University of Technology and Economics} \city{} \country{} } -\author{Dr. Szécsi László} +\author{Dr. László Szécsi} \email{Advisor} \affiliation{% - \institution{Budapest University of Technology and Economics} + % \institution{Budapest University of Technology and Economics} + % \city{} + % \country{} + % \department[0]{Computer Graphics Group} + % \department[1]{Department of Control Engineering and Information Technology} + \institution{} \city{} \country{} - \department[0]{Computer Graphics Group} - \department[1]{Department of Control Engineering and Information Technology} } @@ -209,7 +216,7 @@ implementation to eliminate the stretching in the presence of greater forces. \section{Position Based Simulation} \subsection{Algorithm Overview} - +\label{section:algorithmOverview} We model an $S$ hair strand as a chain of $N$ particles and a set of $M$ constraints. Each particle $p \in [1,\ldots,N]$ has three atributes: mass ($m_p$), position ($\boldsymbol{x_p}$) and velocity ($\boldsymbol{v_p}$). @@ -228,7 +235,6 @@ strength of the constraint in a range from zero to one. Given these notations, the algorithm works in the following way: -\TODO{decide about syntax: array of particles (OOP) or array of v, x and m?} \begin{algorithm} \caption{pseudo code for the PBD simulation}\label{alg:pbd} @@ -317,8 +323,8 @@ used. In our case, simply applying a $k_s$ damping coefficient with value between $98\%$ to $99.9\%$ seemed to be a good enough solution. The initial constraints $C_1, \ldots, C_M$ are fixed throughout the simulation. -In addition to these initial constraints, line \lineRef{13} generates additional -$M_coll$ collisition constrants. These change from time step to time step. The +In addition to these initial constraints, line \lineRefSingle{13} generates additional +$M_{coll}$ collisition constrants. These change from time step to time step. The projection step in line \lineRefSingle{16} considers both the fixed and the collision constraints. Our implementation does not yet utilize this opportunity to dynamicaly generate collision constraints. This is one of the possible future @@ -345,13 +351,29 @@ speeds up convergence significantly, because pressure waves can propagate throught the chain of particles in a single solver step, and effect which is dependent on the order in which constraints are solved. -In our hair simulation case, we solve the distance constraints putting the hair -particles at the desired distance from each other starting at the scalp, and -moving outwards from there. - -\TODO{do constraint projection appendix} - -\subsection{Distance Constraint} +In our hair simulation case, we solve the distance constraints by putting the +hair particles at the desired distance from each other starting at the scalp, +and moving outwards from there. + +For projecting the constraints, we utilize the method proposed by +\citet{MullerPBD}. The details of computing the desired delta positions are +explained in the Appendix \ref{appendix:ConstraintProjection} +\nameref{appendix:ConstraintProjection}. An example derivation is given in +Section \ref{section:DistanceConstraint} \nameref{section:DistanceConstraint}. + +There are several ways of incorporating the stiffness parameter. The simplest +-- and the way we chose to utilize -- is simply multiplying the $\Delta \b{p}$ +correction by the $k \in [0 \ldots 1]$ stiffness paramter. For multiple +iteration loops of the solver, the effect of $k$ becomes non-linear. The +reamining error after $n_s$ solver iterations is $\Delta \b{p}(1-k)^{n_s}$. +\citet{MullerPBD} proposes to multiply the corrections not by $k$ directly, but +by $k' = 1 - (1-k)^{1/n_s}$. With this transformation, the error becomes $\Delta +\b{p}(1-k')^{n_s} = \Delta\b{p}(1-k)$, and thus linearly dependent on $k$ and +independent of $n_s$. The resulting stiffness is still dependent on the time +step of the simulation. Real time environments typically use fixed time steps in +which case this dependency is not problematic. + +\subsection{Distance Constraint} \label{section:DistanceConstraint} One of the most basic constraint is the Distance Constraint, forcing two given particles $d$ distance apart. It is an \emph{equality} type constraint, meaning that it is satisfied if $C_{distance} = 0$. @@ -359,26 +381,29 @@ that it is satisfied if $C_{distance} = 0$. \begin{equation} \label{eq:distance_constraint} C_{distance}(\b{p_1},\b{p_2}) = \lvert \b{p_1} - \b{p_2} \rvert - d \end{equation} - -Looking for $\Delta \b{p_1}$ and $\Delta \b{p_2}$ corrections such that - +We are looking for $\Delta \b{p_1}$ and $\Delta \b{p_2}$ corrections such that $$ -C_{distance}(\b{p_1}+\Delta \b{p_1}, \b{p_2}+\Delta \b{p_2}) = 0 +C_{distance}(\b{p_1}+\Delta \b{p_1}, \b{p_2}+\Delta \b{p_2}) = 0. $$ -, we follow the method proposed by \citet{MullerPBD} (see appendix \TODO{reference -appendix}). The derivatives with respect to the points are +In finding the desired delta values to satisfy the constraint, we follow the +method proposed by \citet{MullerPBD} \emph{(see Appendix + \nameref{appendix:ConstraintProjection})}. +The derivatives with respect to the positions are \begin{align*} \nabla_{\b{p_1}} C_{distance}(\b{p_1}, \b{p_2}) &= \b{n} \\\\ \nabla_{\b{p_2}} C_{distance}(\b{p_1}, \b{p_2}) &= -\b{n} \\\\ - \b{n} = \frac{\b{p_1}-\b{p_2}}{\lvert \b{p_1}-\b{p_2} \rvert} + \b{n} = \frac{\b{p_1}-\b{p_2}}{\lvert \b{p_1}-\b{p_2} \rvert}. \end{align*} - This makes the scaling factor -$s = \frac{\lvert \b{p_1} - \b{p_2}\rvert - d}{w_1 + w_2}$, and the final corrections -are: - +\begin{align*} + s &= \frac{C(\b{p_1},\b{p_2})} +{w_1 \lvert \nabla_{p_1}C(\b{p_1}, \b{p_2})\rvert ^ 2 + w_2 \lvert +\nabla_{p_2}C(\b{p_1}, \b{p_2})\rvert ^ 2}\\\\ + &= \frac{\lvert \b{p_1} - \b{p_2}\rvert - d}{w_1 + w_2}. +\end{align*} +The final corrections are: \begin{align*} \Delta \b{p_1} &= - \frac{w_1}{w_1 + w_2} (\lvert \b{p_1} - \b{p_2} \rvert - d) @@ -389,27 +414,46 @@ are: \frac{\b{p_1} - \b{p_2}}{\lvert \b{p_1} - \b{p_2} \rvert} \end{align*} -\TODO{Add figure illustrating these calculations} - Since the type of the Distance Constraint is \emph{equality}, the projection is straight forward: we move both by $\b{p_1}$ and $\b{p_2}$ by $\Delta \b{p_1}$ and $\Delta \b{p_2}$ respectively. -\subsection{Bending Constraint} - +\subsection{Bending Constraint} \label{section:bendingConstraint} +\citet{UmenhofferSimulation} uses the PBD technique to simulate cloth materials. +They utilize the bending constraint to define the bending resistance of the +material, giving it an extra stiffness. Their goal with the Bending Constraint +is to keep an initial angle between adjacent triangles formed by particles. They +offer the $C(p_1,p_2,p_3,p_4) = arccos(n_1 \cdot n_2) - \phi _0$ constraint, +where $n_1$ and $n_2$ are the normal vectors of the triangles, and $p_2 - p_1$ +forms the common side of the two triangles. The $\phi _0$ angle is measured +between the normals of the two triangles. + +At first, we thought about implementing something similar for our project, but +then simplified the ``Bending Constraint'' for our use-case to essentially + distance constraints $C_{distance}(p_{i-1}, p_{i+i})~for~i\in[1 \ldots +n_{particles}-1]$ of the same hair strand with the $d$ distance paramter of the +being lower than the $d$ parameter of other $C_distance$ constraints keeping the +particles a given $l_{seg}$ distance apart from each other, and assigning +a lower $k_{bending}$ stiffness parameter. + +This idea could be further developed when considering other $(p_j,p_k)$ pairs +and different distances between them. + +\TODO{add figure demonstrating the different bending constraint} \subsection{Collision Constraint} -Collision constraint can appear and disappear in each simulation step -(in \lineRef{12}{14} of Algorithm \ref{alg:pbd}). For a moving particle $\b{p}$ -and points $\b{q_1}, \b{q_2}, \b{q_3}$ forming a triangle with normal $\b{n}$, -the collision constraint is +One huge advantage of the position based approach is how simply collision +handling can be realized. In each simulation step $M_{coll}$ collision +constraints are generated in the \lineRef{12}{14} lines of Algorithm +\ref{alg:pbd}. For a moving particle $\b{p}$ and points $\b{q_1}, \b{q_2}, +\b{q_3}$ forming a triangle with normal $\b{n}$, the collision constraint is $$ -C(\b{p}, \b{q_1}, \b{q_2}, \b{q_3}) = (\b{p}-\b{q_1})\cdot \b{n} \geq 0 +C_{collision}(\b{p}, \b{q_1}, \b{q_2}, \b{q_3}) = (\b{p}-\b{q_1})\cdot \b{n} \geq 0 $$ -, where we check whether $\b{p}$ lies on the desirable side of the given -surface, by requiring that the magnitude of the vector from an arbitrary point +, where we check whether $\b{p}$ lies on the desired side of the given +surface. We require that the magnitude of the vector from an arbitrary point on the surface to $\b{p}$ projected onto the normal vector be greater than 0 by utilizing the dot product operation. \TODO{is this explanation too much?} @@ -423,12 +467,32 @@ $$ This formula moves the particle along the triangle normal exactly to the triangle's surface. +\subsection{Position Constraint} +Maybe the most straight-forward constraint is the Position Constraint, given as: +\begin{align*} + C_{collision}(\b{p}) &= \lvert \b{p} - \b{p_{goal}} \rvert = 0 + \\ + \Delta \b{p} &= \b{p_{goal}} - \b{p} +\end{align*} + +Moving the $\b{p}$ particle to the $\b{p_{goal}}$ position. + +We utilize the Position Constraint for keeping the first particle in each strand +on the surface of the head. + + \section{Implementation} -After introducing the general position based dynamics simulation method, we will -dive into the specifics we settled with for our implementation for simulating -hair. +After introducing the general position based dynamics simulation method, we dive +into the specifics we settled on for our hair simulation. + +The code is available at \url{http://git.sch.bme.hu/bobarna/brave-2}. + +\subsection{Datastructures} -\subsection{Data:} +The properties of particles introduced in chapter +\ref{section:algorithmOverview} +\nameref{section:algorithmOverview} got an additional color property. This is +decision was made so hair with a gradient color could be simulated. \begin{verbatim} class Particle { @@ -440,14 +504,49 @@ hair. } \end{verbatim} -\section{Putting Hair on the Head} +The strands are stored as a vector of vector of Particles. It is practical to +keep related data packed right after each other in the memory for improving the +performance of operations and function calls. + + +\subsection{Constraints} +A \texttt{Constraint} class with an abstract \texttt{solve()} method was +implemented, storing each derived constraint class \emph{(e.g. +PositionConstraint, BendingConstraint)} in a heterogen +collection and calling each overriden \texttt{solve()} method when projecting +the constraints in the iteration loop (line \lineRefSingle{16} of Algorithm +\ref{alg:pbd}). + +This implementation proved to be not fast enough, lagging even with low particle +counts. We could not discover the cause of this increased computing time, and +decided to settle on another solution. Instead of the above mentioned, we +store only the parameters that constraints operate on, and the simulation calls +the relevant solve functions with these stored parameters. + +\subsection{Putting the Hair in the Hair Simulation} +The $PBDSimulation$ class handles the simulation and rendering of the hair. It +takes a $HeadObject$ and propagates hairstrands starting from its surface. Each +strands first particle is fixed in place with a $PositionConstraint$, not +letting it move away from the scalp. + +The geometry of the $HeadObject$ is read from an \texttt{OBJ} file. (\emph{See +the Appendix \ref{section:appendixOBJ} \nameref{section:appendixOBJ}}.) + +The hair strands are propagated throughout the surface of the $HeadObject$ by +proposing random $(\b{u}, \b{v}) \in [0 \ldots 1] \times [0 \ldots 1]$ +coordinates and settling on them if they satisfy requirements for the position +of the hair -- like the corresponding face in world coordinates has an upward +pointing normal vector. This propagation of strands on the surface of the head +could be improved, as pointed out in sections +\nameref{section:futureCustomization} and \nameref{section:futureHalton}. + \section{Results} The implementation is available at \url{git.sch.bme.hu/bobarna/brave-2}. The program is able to handle up to around 500 individual hair strands, each consisting of around 30 particles in real time. With the implemented OBJ reader, -it is possible to achieve diverse visual results in no time. The +it is possible to achieve diverse visual results in no time. An example result shown in figure \TODO{include figure}, and can be seen in the supplementary videos \TODO{Google Drive (?) link with the videos}. @@ -472,7 +571,7 @@ of time was dedicated in the early stages of the project to investigate and explore the subject area. This left only a sub-optimal time for implementing all desired aspects of the simulation. -\subsection{Hair-hair collisions} +\subsection{Hair-hair Collisions} \label{subsec:future_work_collision} As it is computationally extensive to simulate each particle colliding with all of the other particles, a particle density field could be used. One such method @@ -482,11 +581,27 @@ utilized in the \citet{FTLHair} paper for handling hair-hair collisions. Such a method could be used to dynamically generate collision constraints in line \lineRefSingle{13} of Algorithm~\ref{alg:pbd}. -\subsection{Refinement and proper customizability of the propagation of hair -strands on the head object.} +\subsection{Bending Constraint Improvements} +As already mentioned in Section \ref{section:bendingConstraint} +\nameref{section:bendingConstraint}, a huge improvement could be made by +improving the bending constraint either by further exploring the possibilities +of defining different distance constraints between pairs of particles. + +An alternative route could be to explore the possibility of a different type of +bending constraint, for example by keeping a given angle between chunks of +subsequent particles. + +\subsection{More and better customization} +\label{section:futureCustomization} A drawable texture map is considered for the ability to tell the simulation where to put the hair strands on the surface of the head. +The \texttt{OBJ} reader could also be further developed into reading material, +texture and/or color data for the objects. + +A common interface for importing and exporting different hairstyles could be +developed. + \subsection{Better customizability} In the current implementation there is no way to properly customize the look and feel of the hair without accessing the source code. A possible improvement could @@ -496,6 +611,7 @@ much better control of the hair. Other properties, such as length of the hair segments and color of the hair could be set as well. \subsection{Sequence for randomizing hair positions} +\label{section:futureHalton} In the current implementation, a standard C++ random number generator is utilized. Utilizing a low-discrepancy number sequence such as the Halton sequence for randomizing hair strand positions would be an improvement. @@ -512,7 +628,7 @@ parts of the (OpenGL) rendering pipeline that could be utilized. \subsection{Moving to the GPU} The current implementation runs solely on the CPU. A big leap forward would be the utilization of the GPU. Compute shaders for computations are considered. The -paper by \citet{UmenhofferSimulation} discusses a parametrization of the +paper by \citet{UmenhofferSimulation} discusses a parallelization of the different constraint solves, although as they work on the same dataset, some computation problems are present during the parellelization of the problem. @@ -542,16 +658,21 @@ method and properties. %% If your work has an appendix, this is the place to put it. \appendix +\section{Constraint Projection} \label{appendix:ConstraintProjection} +asd + + \section{Supplementary development} \subsection{OBJ Reader} +\label{section:appendixOBJ} An OBJ reader utility was implemented as part of the project. As the OBJ file format \footnote{\url{http://paulbourke.net/dataformats/obj/}} describes a wide range -of properties for objects. The present OBJ reader handles only the subset of -these describtion options needed for the project. Lines containing other type of -object descriptions were ignored, resulting in a successful file read if -possible. +of properties for objects, our OBJ reader handles only the subset of +these description options -- those that are needed for the project. Not +supported line types were simply ignored, still resulting in +a successful file read if possible. \begin{table}[htb] \caption{Supported OBJ Data Types}