Twig \ Error \ RuntimeError
An exception has been thrown during the rendering of a template ("Template "modular/bio.txt.twig" is not defined.").
Previous exceptions
  • Template "modular/bio.txt.twig" is not defined. (404)
  • Template "modular/bio.txt.twig" is not defined. (0)
Twig\Error\RuntimeError thrown with message "An exception has been thrown during the rendering of a template ("Template "modular/bio.txt.twig" is not defined.")." Stacktrace: #82 Twig\Error\RuntimeError in /home/jhiemstraxartec/public_html/test/user/themes/minimaxing/templates/partials/sections/bios.html.twig:6 #81 RuntimeException in /home/jhiemstraxartec/public_html/test/system/src/Grav/Common/Twig/Twig.php:292 #80 Twig\Error\LoaderError in /home/jhiemstraxartec/public_html/test/vendor/twig/twig/src/Loader/ChainLoader.php:142 #79 Twig\Loader\ChainLoader:getCacheKey in /home/jhiemstraxartec/public_html/test/vendor/twig/twig/src/Environment.php:351 #78 Twig\Environment:getTemplateClass in /home/jhiemstraxartec/public_html/test/vendor/twig/twig/src/Environment.php:445 #77 Twig\Environment:loadTemplate in /home/jhiemstraxartec/public_html/test/vendor/twig/twig/src/Environment.php:423 #76 Twig\Environment:load in /home/jhiemstraxartec/public_html/test/vendor/twig/twig/src/Environment.php:384 #75 Twig\Environment:render in /home/jhiemstraxartec/public_html/test/system/src/Grav/Common/Twig/Twig.php:281 #74 Grav\Common\Twig\Twig:processPage in /home/jhiemstraxartec/public_html/test/system/src/Grav/Common/Page/Page.php:859 #73 Grav\Common\Page\Page:processTwig in /home/jhiemstraxartec/public_html/test/system/src/Grav/Common/Page/Page.php:732 #72 Grav\Common\Page\Page:content in /home/jhiemstraxartec/public_html/test/vendor/twig/twig/src/Template.php:690 #71 Twig\Template:getAttribute in /home/jhiemstraxartec/public_html/test/cache/twig/a6/a6e71229c07c4ac03d31c4ed1a3b887e66b4114333548c3d78e7922329d932c3.php:46 #70 __TwigTemplate_19ae740d6c6dfa56d6a338bbb51557a8029350bcb3024b07d3cca702e4a69634:doDisplay in /home/jhiemstraxartec/public_html/test/vendor/twig/twig/src/Template.php:443 #69 Twig\Template:displayWithErrorHandling in /home/jhiemstraxartec/public_html/test/vendor/twig/twig/src/Template.php:414 #68 Twig\Template:display in /home/jhiemstraxartec/public_html/test/cache/twig/6c/6c1d65ea28cc330dbce01f6ef934f905e3f32b4a038c5fa70ecf5b43ea230884.php:30 #67 __TwigTemplate_a78487088a0ec74ac1aef8f1f93868851d1727715fab3c67f9d695c8bcc1596c:doDisplay in /home/jhiemstraxartec/public_html/test/vendor/twig/twig/src/Template.php:443 #66 Twig\Template:displayWithErrorHandling in /home/jhiemstraxartec/public_html/test/vendor/twig/twig/src/Template.php:414 #65 Twig\Template:display in /home/jhiemstraxartec/public_html/test/cache/twig/f4/f448589b8fa5e8e96d271b869702bdf2c5f6c03d9e1ebdec2a1766abd9e01266.php:84 #64 __TwigTemplate_1fd2da7f05a02335033099a06781b7d00f84f79ced9a93dc72d9cf5790c09ebd:block_content in /home/jhiemstraxartec/public_html/test/vendor/twig/twig/src/Template.php:216 #63 Twig\Template:displayBlock in /home/jhiemstraxartec/public_html/test/cache/twig/05/05d859bec41ac5da994bb517e48f7a9558c5995f959256a93748d96374b382ab.php:306 #62 __TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee:block_body in /home/jhiemstraxartec/public_html/test/vendor/twig/twig/src/Template.php:216 #61 Twig\Template:displayBlock in /home/jhiemstraxartec/public_html/test/cache/twig/05/05d859bec41ac5da994bb517e48f7a9558c5995f959256a93748d96374b382ab.php:90 #60 __TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee:doDisplay in /home/jhiemstraxartec/public_html/test/vendor/twig/twig/src/Template.php:443 #59 Twig\Template:displayWithErrorHandling in /home/jhiemstraxartec/public_html/test/vendor/twig/twig/src/Template.php:414 #58 Twig\Template:display in /home/jhiemstraxartec/public_html/test/cache/twig/f4/f448589b8fa5e8e96d271b869702bdf2c5f6c03d9e1ebdec2a1766abd9e01266.php:35 #57 __TwigTemplate_1fd2da7f05a02335033099a06781b7d00f84f79ced9a93dc72d9cf5790c09ebd:doDisplay in /home/jhiemstraxartec/public_html/test/vendor/twig/twig/src/Template.php:443 #56 Twig\Template:displayWithErrorHandling in /home/jhiemstraxartec/public_html/test/vendor/twig/twig/src/Template.php:414 #55 Twig\Template:display in /home/jhiemstraxartec/public_html/test/vendor/twig/twig/src/Template.php:422 #54 Twig\Template:render in /home/jhiemstraxartec/public_html/test/vendor/twig/twig/src/TemplateWrapper.php:47 #53 Twig\TemplateWrapper:render in /home/jhiemstraxartec/public_html/test/vendor/twig/twig/src/Environment.php:384 #52 Twig\Environment:render in /home/jhiemstraxartec/public_html/test/system/src/Grav/Common/Twig/Twig.php:395 #51 Grav\Common\Twig\Twig:processSite in /home/jhiemstraxartec/public_html/test/system/src/Grav/Common/Service/OutputServiceProvider.php:28 #50 Grav\Common\Service\OutputServiceProvider:Grav\Common\Service\{closure} in /home/jhiemstraxartec/public_html/test/vendor/pimple/pimple/src/Pimple/Container.php:118 #49 Pimple\Container:offsetGet in /home/jhiemstraxartec/public_html/test/system/src/Grav/Common/Processors/RenderProcessor.php:28 #48 Grav\Common\Processors\RenderProcessor:process in /home/jhiemstraxartec/public_html/test/system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php:45 #47 Grav\Framework\RequestHandler\RequestHandler:handle in /home/jhiemstraxartec/public_html/test/system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php:57 #46 Grav\Framework\RequestHandler\RequestHandler:handle in /home/jhiemstraxartec/public_html/test/system/src/Grav/Common/Processors/DebuggerAssetsProcessor.php:28 #45 Grav\Common\Processors\DebuggerAssetsProcessor:process in /home/jhiemstraxartec/public_html/test/system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php:45 #44 Grav\Framework\RequestHandler\RequestHandler:handle in /home/jhiemstraxartec/public_html/test/system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php:57 #43 Grav\Framework\RequestHandler\RequestHandler:handle in /home/jhiemstraxartec/public_html/test/system/src/Grav/Common/Processors/PagesProcessor.php:69 #42 Grav\Common\Processors\PagesProcessor:process in /home/jhiemstraxartec/public_html/test/system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php:45 #41 Grav\Framework\RequestHandler\RequestHandler:handle in /home/jhiemstraxartec/public_html/test/system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php:57 #40 Grav\Framework\RequestHandler\RequestHandler:handle in /home/jhiemstraxartec/public_html/test/system/src/Grav/Common/Processors/TwigProcessor.php:27 #39 Grav\Common\Processors\TwigProcessor:process in /home/jhiemstraxartec/public_html/test/system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php:45 #38 Grav\Framework\RequestHandler\RequestHandler:handle in /home/jhiemstraxartec/public_html/test/system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php:57 #37 Grav\Framework\RequestHandler\RequestHandler:handle in /home/jhiemstraxartec/public_html/test/system/src/Grav/Common/Processors/AssetsProcessor.php:28 #36 Grav\Common\Processors\AssetsProcessor:process in /home/jhiemstraxartec/public_html/test/system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php:45 #35 Grav\Framework\RequestHandler\RequestHandler:handle in /home/jhiemstraxartec/public_html/test/system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php:57 #34 Grav\Framework\RequestHandler\RequestHandler:handle in /home/jhiemstraxartec/public_html/test/system/src/Grav/Common/Processors/SchedulerProcessor.php:29 #33 Grav\Common\Processors\SchedulerProcessor:process in /home/jhiemstraxartec/public_html/test/system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php:45 #32 Grav\Framework\RequestHandler\RequestHandler:handle in /home/jhiemstraxartec/public_html/test/system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php:57 #31 Grav\Framework\RequestHandler\RequestHandler:handle in /home/jhiemstraxartec/public_html/test/system/src/Grav/Common/Processors/BackupsProcessor.php:28 #30 Grav\Common\Processors\BackupsProcessor:process in /home/jhiemstraxartec/public_html/test/system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php:45 #29 Grav\Framework\RequestHandler\RequestHandler:handle in /home/jhiemstraxartec/public_html/test/system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php:57 #28 Grav\Framework\RequestHandler\RequestHandler:handle in /home/jhiemstraxartec/public_html/test/system/src/Grav/Common/Processors/TasksProcessor.php:59 #27 Grav\Common\Processors\TasksProcessor:process in /home/jhiemstraxartec/public_html/test/system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php:45 #26 Grav\Framework\RequestHandler\RequestHandler:handle in /home/jhiemstraxartec/public_html/test/system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php:57 #25 Grav\Framework\RequestHandler\RequestHandler:handle in /home/jhiemstraxartec/public_html/test/system/src/Grav/Common/Processors/RequestProcessor.php:52 #24 Grav\Common\Processors\RequestProcessor:process in /home/jhiemstraxartec/public_html/test/system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php:45 #23 Grav\Framework\RequestHandler\RequestHandler:handle in /home/jhiemstraxartec/public_html/test/system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php:57 #22 Grav\Framework\RequestHandler\RequestHandler:handle in /home/jhiemstraxartec/public_html/test/system/src/Grav/Common/Processors/ThemesProcessor.php:27 #21 Grav\Common\Processors\ThemesProcessor:process in /home/jhiemstraxartec/public_html/test/system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php:45 #20 Grav\Framework\RequestHandler\RequestHandler:handle in /home/jhiemstraxartec/public_html/test/system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php:57 #19 Grav\Framework\RequestHandler\RequestHandler:handle in /home/jhiemstraxartec/public_html/test/system/src/Grav/Common/Processors/PluginsProcessor.php:30 #18 Grav\Common\Processors\PluginsProcessor:process in /home/jhiemstraxartec/public_html/test/system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php:45 #17 Grav\Framework\RequestHandler\RequestHandler:handle in /home/jhiemstraxartec/public_html/test/system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php:57 #16 Grav\Framework\RequestHandler\RequestHandler:handle in /home/jhiemstraxartec/public_html/test/system/src/Grav/Common/Processors/InitializeProcessor.php:78 #15 Grav\Common\Processors\InitializeProcessor:process in /home/jhiemstraxartec/public_html/test/system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php:45 #14 Grav\Framework\RequestHandler\RequestHandler:handle in /home/jhiemstraxartec/public_html/test/system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php:57 #13 Grav\Framework\RequestHandler\RequestHandler:handle in /home/jhiemstraxartec/public_html/test/system/src/Grav/Common/Processors/DebuggerProcessor.php:27 #12 Grav\Common\Processors\DebuggerProcessor:process in /home/jhiemstraxartec/public_html/test/system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php:45 #11 Grav\Framework\RequestHandler\RequestHandler:handle in /home/jhiemstraxartec/public_html/test/system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php:57 #10 Grav\Framework\RequestHandler\RequestHandler:handle in /home/jhiemstraxartec/public_html/test/system/src/Grav/Common/Processors/ErrorsProcessor.php:27 #9 Grav\Common\Processors\ErrorsProcessor:process in /home/jhiemstraxartec/public_html/test/system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php:45 #8 Grav\Framework\RequestHandler\RequestHandler:handle in /home/jhiemstraxartec/public_html/test/system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php:57 #7 Grav\Framework\RequestHandler\RequestHandler:handle in /home/jhiemstraxartec/public_html/test/system/src/Grav/Common/Processors/LoggerProcessor.php:48 #6 Grav\Common\Processors\LoggerProcessor:process in /home/jhiemstraxartec/public_html/test/system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php:45 #5 Grav\Framework\RequestHandler\RequestHandler:handle in /home/jhiemstraxartec/public_html/test/system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php:57 #4 Grav\Framework\RequestHandler\RequestHandler:handle in /home/jhiemstraxartec/public_html/test/system/src/Grav/Common/Processors/ConfigurationProcessor.php:28 #3 Grav\Common\Processors\ConfigurationProcessor:process in /home/jhiemstraxartec/public_html/test/system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php:45 #2 Grav\Framework\RequestHandler\RequestHandler:handle in /home/jhiemstraxartec/public_html/test/system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php:57 #1 Grav\Framework\RequestHandler\RequestHandler:handle in /home/jhiemstraxartec/public_html/test/system/src/Grav/Common/Grav.php:249 #0 Grav\Common\Grav:process in /home/jhiemstraxartec/public_html/test/index.php:53
Stack frames (83)
82
Twig
\
Error
\
RuntimeError
/
user
/
themes
/
minimaxing
/
templates
/
partials
/
sections
/
bios.html.twig
6
81
RuntimeException
/
system
/
src
/
Grav
/
Common
/
Twig
/
Twig.php
292
80
Twig
\
Error
\
LoaderError
/
vendor
/
twig
/
twig
/
src
/
Loader
/
ChainLoader.php
142
79
Twig
\
Loader
\
ChainLoader
getCacheKey
/
vendor
/
twig
/
twig
/
src
/
Environment.php
351
78
Twig
\
Environment
getTemplateClass
/
vendor
/
twig
/
twig
/
src
/
Environment.php
445
77
Twig
\
Environment
loadTemplate
/
vendor
/
twig
/
twig
/
src
/
Environment.php
423
76
Twig
\
Environment
load
/
vendor
/
twig
/
twig
/
src
/
Environment.php
384
75
Twig
\
Environment
render
/
system
/
src
/
Grav
/
Common
/
Twig
/
Twig.php
281
74
Grav
\
Common
\
Twig
\
Twig
processPage
/
system
/
src
/
Grav
/
Common
/
Page
/
Page.php
859
73
Grav
\
Common
\
Page
\
Page
processTwig
/
system
/
src
/
Grav
/
Common
/
Page
/
Page.php
732
72
Grav
\
Common
\
Page
\
Page
content
/
vendor
/
twig
/
twig
/
src
/
Template.php
690
71
Twig
\
Template
getAttribute
/
cache
/
twig
/
a6
/
a6e71229c07c4ac03d31c4ed1a3b887e66b4114333548c3d78e7922329d932c3.php
46
70
__TwigTemplate_19ae740d6c6dfa56d6a338bbb51557a8029350bcb3024b07d3cca702e4a69634
doDisplay
/
vendor
/
twig
/
twig
/
src
/
Template.php
443
69
Twig
\
Template
displayWithErrorHandling
/
vendor
/
twig
/
twig
/
src
/
Template.php
414
68
Twig
\
Template
display
/
cache
/
twig
/
6c
/
6c1d65ea28cc330dbce01f6ef934f905e3f32b4a038c5fa70ecf5b43ea230884.php
30
67
__TwigTemplate_a78487088a0ec74ac1aef8f1f93868851d1727715fab3c67f9d695c8bcc1596c
doDisplay
/
vendor
/
twig
/
twig
/
src
/
Template.php
443
66
Twig
\
Template
displayWithErrorHandling
/
vendor
/
twig
/
twig
/
src
/
Template.php
414
65
Twig
\
Template
display
/
cache
/
twig
/
f4
/
f448589b8fa5e8e96d271b869702bdf2c5f6c03d9e1ebdec2a1766abd9e01266.php
84
64
__TwigTemplate_1fd2da7f05a02335033099a06781b7d00f84f79ced9a93dc72d9cf5790c09ebd
block_content
/
vendor
/
twig
/
twig
/
src
/
Template.php
216
63
Twig
\
Template
displayBlock
/
cache
/
twig
/
05
/
05d859bec41ac5da994bb517e48f7a9558c5995f959256a93748d96374b382ab.php
306
62
__TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee
block_body
/
vendor
/
twig
/
twig
/
src
/
Template.php
216
61
Twig
\
Template
displayBlock
/
cache
/
twig
/
05
/
05d859bec41ac5da994bb517e48f7a9558c5995f959256a93748d96374b382ab.php
90
60
__TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee
doDisplay
/
vendor
/
twig
/
twig
/
src
/
Template.php
443
59
Twig
\
Template
displayWithErrorHandling
/
vendor
/
twig
/
twig
/
src
/
Template.php
414
58
Twig
\
Template
display
/
cache
/
twig
/
f4
/
f448589b8fa5e8e96d271b869702bdf2c5f6c03d9e1ebdec2a1766abd9e01266.php
35
57
__TwigTemplate_1fd2da7f05a02335033099a06781b7d00f84f79ced9a93dc72d9cf5790c09ebd
doDisplay
/
vendor
/
twig
/
twig
/
src
/
Template.php
443
56
Twig
\
Template
displayWithErrorHandling
/
vendor
/
twig
/
twig
/
src
/
Template.php
414
55
Twig
\
Template
display
/
vendor
/
twig
/
twig
/
src
/
Template.php
422
54
Twig
\
Template
render
/
vendor
/
twig
/
twig
/
src
/
TemplateWrapper.php
47
53
Twig
\
TemplateWrapper
render
/
vendor
/
twig
/
twig
/
src
/
Environment.php
384
52
Twig
\
Environment
render
/
system
/
src
/
Grav
/
Common
/
Twig
/
Twig.php
395
51
Grav
\
Common
\
Twig
\
Twig
processSite
/
system
/
src
/
Grav
/
Common
/
Service
/
OutputServiceProvider.php
28
50
Grav
\
Common
\
Service
\
OutputServiceProvider
Grav
\
Common
\
Service
\
{closure}
/
vendor
/
pimple
/
pimple
/
src
/
Pimple
/
Container.php
118
49
Pimple
\
Container
offsetGet
/
system
/
src
/
Grav
/
Common
/
Processors
/
RenderProcessor.php
28
48
Grav
\
Common
\
Processors
\
RenderProcessor
process
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
45
47
Grav
\
Framework
\
RequestHandler
\
RequestHandler
handle
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
57
46
Grav
\
Framework
\
RequestHandler
\
RequestHandler
handle
/
system
/
src
/
Grav
/
Common
/
Processors
/
DebuggerAssetsProcessor.php
28
45
Grav
\
Common
\
Processors
\
DebuggerAssetsProcessor
process
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
45
44
Grav
\
Framework
\
RequestHandler
\
RequestHandler
handle
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
57
43
Grav
\
Framework
\
RequestHandler
\
RequestHandler
handle
/
system
/
src
/
Grav
/
Common
/
Processors
/
PagesProcessor.php
69
42
Grav
\
Common
\
Processors
\
PagesProcessor
process
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
45
41
Grav
\
Framework
\
RequestHandler
\
RequestHandler
handle
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
57
40
Grav
\
Framework
\
RequestHandler
\
RequestHandler
handle
/
system
/
src
/
Grav
/
Common
/
Processors
/
TwigProcessor.php
27
39
Grav
\
Common
\
Processors
\
TwigProcessor
process
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
45
38
Grav
\
Framework
\
RequestHandler
\
RequestHandler
handle
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
57
37
Grav
\
Framework
\
RequestHandler
\
RequestHandler
handle
/
system
/
src
/
Grav
/
Common
/
Processors
/
AssetsProcessor.php
28
36
Grav
\
Common
\
Processors
\
AssetsProcessor
process
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
45
35
Grav
\
Framework
\
RequestHandler
\
RequestHandler
handle
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
57
34
Grav
\
Framework
\
RequestHandler
\
RequestHandler
handle
/
system
/
src
/
Grav
/
Common
/
Processors
/
SchedulerProcessor.php
29
33
Grav
\
Common
\
Processors
\
SchedulerProcessor
process
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
45
32
Grav
\
Framework
\
RequestHandler
\
RequestHandler
handle
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
57
31
Grav
\
Framework
\
RequestHandler
\
RequestHandler
handle
/
system
/
src
/
Grav
/
Common
/
Processors
/
BackupsProcessor.php
28
30
Grav
\
Common
\
Processors
\
BackupsProcessor
process
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
45
29
Grav
\
Framework
\
RequestHandler
\
RequestHandler
handle
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
57
28
Grav
\
Framework
\
RequestHandler
\
RequestHandler
handle
/
system
/
src
/
Grav
/
Common
/
Processors
/
TasksProcessor.php
59
27
Grav
\
Common
\
Processors
\
TasksProcessor
process
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
45
26
Grav
\
Framework
\
RequestHandler
\
RequestHandler
handle
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
57
25
Grav
\
Framework
\
RequestHandler
\
RequestHandler
handle
/
system
/
src
/
Grav
/
Common
/
Processors
/
RequestProcessor.php
52
24
Grav
\
Common
\
Processors
\
RequestProcessor
process
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
45
23
Grav
\
Framework
\
RequestHandler
\
RequestHandler
handle
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
57
22
Grav
\
Framework
\
RequestHandler
\
RequestHandler
handle
/
system
/
src
/
Grav
/
Common
/
Processors
/
ThemesProcessor.php
27
21
Grav
\
Common
\
Processors
\
ThemesProcessor
process
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
45
20
Grav
\
Framework
\
RequestHandler
\
RequestHandler
handle
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
57
19
Grav
\
Framework
\
RequestHandler
\
RequestHandler
handle
/
system
/
src
/
Grav
/
Common
/
Processors
/
PluginsProcessor.php
30
18
Grav
\
Common
\
Processors
\
PluginsProcessor
process
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
45
17
Grav
\
Framework
\
RequestHandler
\
RequestHandler
handle
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
57
16
Grav
\
Framework
\
RequestHandler
\
RequestHandler
handle
/
system
/
src
/
Grav
/
Common
/
Processors
/
InitializeProcessor.php
78
15
Grav
\
Common
\
Processors
\
InitializeProcessor
process
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
45
14
Grav
\
Framework
\
RequestHandler
\
RequestHandler
handle
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
57
13
Grav
\
Framework
\
RequestHandler
\
RequestHandler
handle
/
system
/
src
/
Grav
/
Common
/
Processors
/
DebuggerProcessor.php
27
12
Grav
\
Common
\
Processors
\
DebuggerProcessor
process
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
45
11
Grav
\
Framework
\
RequestHandler
\
RequestHandler
handle
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
57
10
Grav
\
Framework
\
RequestHandler
\
RequestHandler
handle
/
system
/
src
/
Grav
/
Common
/
Processors
/
ErrorsProcessor.php
27
9
Grav
\
Common
\
Processors
\
ErrorsProcessor
process
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
45
8
Grav
\
Framework
\
RequestHandler
\
RequestHandler
handle
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
57
7
Grav
\
Framework
\
RequestHandler
\
RequestHandler
handle
/
system
/
src
/
Grav
/
Common
/
Processors
/
LoggerProcessor.php
48
6
Grav
\
Common
\
Processors
\
LoggerProcessor
process
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
45
5
Grav
\
Framework
\
RequestHandler
\
RequestHandler
handle
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
57
4
Grav
\
Framework
\
RequestHandler
\
RequestHandler
handle
/
system
/
src
/
Grav
/
Common
/
Processors
/
ConfigurationProcessor.php
28
3
Grav
\
Common
\
Processors
\
ConfigurationProcessor
process
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
45
2
Grav
\
Framework
\
RequestHandler
\
RequestHandler
handle
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
57
1
Grav
\
Framework
\
RequestHandler
\
RequestHandler
handle
/
system
/
src
/
Grav
/
Common
/
Grav.php
249
0
Grav
\
Common
\
Grav
process
/
index.php
53
/
home
/
jhiemstraxartec
/
public_html
/
test
/
user
/
themes
/
minimaxing
/
templates
/
partials
/
sections
/
bios.html.twig
<section>
    {% set creators = page.find('/components/creators') %}
    {{ creators.content }}
    <ul class="small-image-list">
        {% for module in creators.collection %}
            {{ module.content }}
        {% endfor %}
    </ul>
</section>
 
Arguments
  1. "An exception has been thrown during the rendering of a template ("Template "modular/bio.txt.twig" is not defined.")."
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
system
/
src
/
Grav
/
Common
/
Twig
/
Twig.php
        $output = '';
        try {
            // Process Modular Twig
            if ($item->modularTwig()) {
                $twig_vars['content'] = $content;
                $extension = $item->templateFormat();
                $extension = $extension ? ".{$extension}.twig" : TEMPLATE_EXT;
                $template = $item->template() . $extension;
                $output = $content = $local_twig->render($template, $twig_vars);
            }
 
            // Process in-page Twig
            if ($item->shouldProcess('twig')) {
                $name = '@Page:' . $item->path();
                $this->setTemplate($name, $content);
                $output = $local_twig->render($name, $twig_vars);
            }
 
        } catch (\Twig_Error_Loader $e) {
            throw new \RuntimeException($e->getRawMessage(), 404, $e);
        }
 
        return $output;
    }
 
    /**
     * Process a Twig template directly by using a template name
     * and optional array of variables
     *
     * @param string $template template to render with
     * @param array  $vars     Optional variables
     *
     * @return string
     */
    public function processTemplate($template, $vars = [])
    {
        // override the twig header vars for local resolution
        $this->grav->fireEvent('onTwigTemplateVariables');
        $vars += $this->twig_vars;
 
Arguments
  1. "Template "modular/bio.txt.twig" is not defined."
    
Exception message: Template "modular/bio.txt.twig" is not defined.
/
home
/
jhiemstraxartec
/
public_html
/
test
/
vendor
/
twig
/
twig
/
src
/
Loader
/
ChainLoader.php
 
        return $this->hasSourceCache[$name] = false;
    }
 
    public function getCacheKey($name)
    {
        $exceptions = [];
        foreach ($this->loaders as $loader) {
            if ($loader instanceof ExistsLoaderInterface && !$loader->exists($name)) {
                continue;
            }
 
            try {
                return $loader->getCacheKey($name);
            } catch (LoaderError $e) {
                $exceptions[] = \get_class($loader).': '.$e->getMessage();
            }
        }
 
        throw new LoaderError(sprintf('Template "%s" is not defined%s.', $name, $exceptions ? ' ('.implode(', ', $exceptions).')' : ''));
    }
 
    public function isFresh($name, $time)
    {
        $exceptions = [];
        foreach ($this->loaders as $loader) {
            if ($loader instanceof ExistsLoaderInterface && !$loader->exists($name)) {
                continue;
            }
 
            try {
                return $loader->isFresh($name, $time);
            } catch (LoaderError $e) {
                $exceptions[] = \get_class($loader).': '.$e->getMessage();
            }
        }
 
        throw new LoaderError(sprintf('Template "%s" is not defined%s.', $name, $exceptions ? ' ('.implode(', ', $exceptions).')' : ''));
    }
}
Arguments
  1. "Template "modular/bio.txt.twig" is not defined."
    
Exception message: Template "modular/bio.txt.twig" is not defined.
/
home
/
jhiemstraxartec
/
public_html
/
test
/
vendor
/
twig
/
twig
/
src
/
Environment.php
    /**
     * Gets the template class associated with the given string.
     *
     * The generated template class is based on the following parameters:
     *
     *  * The cache key for the given template;
     *  * The currently enabled extensions;
     *  * Whether the Twig C extension is available or not;
     *  * PHP version;
     *  * Twig version;
     *  * Options with what environment was created.
     *
     * @param string   $name  The name for which to calculate the template class name
     * @param int|null $index The index if it is an embedded template
     *
     * @return string The template class name
     */
    public function getTemplateClass($name, $index = null)
    {
        $key = $this->getLoader()->getCacheKey($name).$this->optionsHash;
 
        return $this->templateClassPrefix.hash('sha256', $key).(null === $index ? '' : '___'.$index);
    }
 
    /**
     * Gets the template class prefix.
     *
     * @return string The template class prefix
     *
     * @deprecated since 1.22 (to be removed in 2.0)
     */
    public function getTemplateClassPrefix()
    {
        @trigger_error(sprintf('The %s method is deprecated since version 1.22 and will be removed in Twig 2.0.', __METHOD__), E_USER_DEPRECATED);
 
        return $this->templateClassPrefix;
    }
 
    /**
     * Renders a template.
Arguments
  1. "modular/bio.txt.twig"
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
vendor
/
twig
/
twig
/
src
/
Environment.php
    /**
     * Loads a template internal representation.
     *
     * This method is for internal use only and should never be called
     * directly.
     *
     * @param string $name  The template name
     * @param int    $index The index if it is an embedded template
     *
     * @return \Twig_TemplateInterface A template instance representing the given template name
     *
     * @throws LoaderError  When the template cannot be found
     * @throws RuntimeError When a previously generated cache is corrupted
     * @throws SyntaxError  When an error occurred during compilation
     *
     * @internal
     */
    public function loadTemplate($name, $index = null)
    {
        return $this->loadClass($this->getTemplateClass($name), $name, $index);
    }
 
    /**
     * @internal
     */
    public function loadClass($cls, $name, $index = null)
    {
        $mainCls = $cls;
        if (null !== $index) {
            $cls .= '___'.$index;
        }
 
        if (isset($this->loadedTemplates[$cls])) {
            return $this->loadedTemplates[$cls];
        }
 
        if (!class_exists($cls, false)) {
            if ($this->bcGetCacheFilename) {
                $key = $this->getCacheFilename($name);
            } else {
Arguments
  1. "modular/bio.txt.twig"
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
vendor
/
twig
/
twig
/
src
/
Environment.php
     *
     * @param string|TemplateWrapper|\Twig\Template $name The template name
     *
     * @throws LoaderError  When the template cannot be found
     * @throws RuntimeError When a previously generated cache is corrupted
     * @throws SyntaxError  When an error occurred during compilation
     *
     * @return TemplateWrapper
     */
    public function load($name)
    {
        if ($name instanceof TemplateWrapper) {
            return $name;
        }
 
        if ($name instanceof Template) {
            return new TemplateWrapper($this, $name);
        }
 
        return new TemplateWrapper($this, $this->loadTemplate($name));
    }
 
    /**
     * Loads a template internal representation.
     *
     * This method is for internal use only and should never be called
     * directly.
     *
     * @param string $name  The template name
     * @param int    $index The index if it is an embedded template
     *
     * @return \Twig_TemplateInterface A template instance representing the given template name
     *
     * @throws LoaderError  When the template cannot be found
     * @throws RuntimeError When a previously generated cache is corrupted
     * @throws SyntaxError  When an error occurred during compilation
     *
     * @internal
     */
    public function loadTemplate($name, $index = null)
Arguments
  1. "modular/bio.txt.twig"
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
vendor
/
twig
/
twig
/
src
/
Environment.php
        @trigger_error(sprintf('The %s method is deprecated since version 1.22 and will be removed in Twig 2.0.', __METHOD__), E_USER_DEPRECATED);
 
        return $this->templateClassPrefix;
    }
 
    /**
     * Renders a template.
     *
     * @param string|TemplateWrapper $name    The template name
     * @param array                  $context An array of parameters to pass to the template
     *
     * @return string The rendered template
     *
     * @throws LoaderError  When the template cannot be found
     * @throws SyntaxError  When an error occurred during compilation
     * @throws RuntimeError When an error occurred during rendering
     */
    public function render($name, array $context = [])
    {
        return $this->load($name)->render($context);
    }
 
    /**
     * Displays a template.
     *
     * @param string|TemplateWrapper $name    The template name
     * @param array                  $context An array of parameters to pass to the template
     *
     * @throws LoaderError  When the template cannot be found
     * @throws SyntaxError  When an error occurred during compilation
     * @throws RuntimeError When an error occurred during rendering
     */
    public function display($name, array $context = [])
    {
        $this->load($name)->display($context);
    }
 
    /**
     * Loads a template.
     *
Arguments
  1. "modular/bio.txt.twig"
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
system
/
src
/
Grav
/
Common
/
Twig
/
Twig.php
 
        // override the twig header vars for local resolution
        $this->grav->fireEvent('onTwigPageVariables', new Event(['page' => $item]));
        $twig_vars = $this->twig_vars;
 
        $twig_vars['page'] = $item;
        $twig_vars['media'] = $item->media();
        $twig_vars['header'] = $item->header();
 
        $local_twig = clone $this->twig;
 
        $output = '';
        try {
            // Process Modular Twig
            if ($item->modularTwig()) {
                $twig_vars['content'] = $content;
                $extension = $item->templateFormat();
                $extension = $extension ? ".{$extension}.twig" : TEMPLATE_EXT;
                $template = $item->template() . $extension;
                $output = $content = $local_twig->render($template, $twig_vars);
            }
 
            // Process in-page Twig
            if ($item->shouldProcess('twig')) {
                $name = '@Page:' . $item->path();
                $this->setTemplate($name, $content);
                $output = $local_twig->render($name, $twig_vars);
            }
 
        } catch (\Twig_Error_Loader $e) {
            throw new \RuntimeException($e->getRawMessage(), 404, $e);
        }
 
        return $output;
    }
 
    /**
     * Process a Twig template directly by using a template name
     * and optional array of variables
     *
Arguments
  1. "modular/bio.txt.twig"
    
  2. array:27 [
      "config" => Config {}
      "system" => array:27 [
        "absolute_urls" => false
        "timezone" => ""
        "default_locale" => null
        "param_sep" => ":"
        "wrapped_site" => false
        "reverse_proxy_setup" => false
        "force_ssl" => false
        "force_lowercase_urls" => true
        "custom_base_url" => "http://www.3dvalley.com"
        "username_regex" => "^[a-z0-9_-]{3,16}$"
        "pwd_regex" => "(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}"
        "intl_enabled" => true
        "languages" => array:9 [
          "supported" => []
          "default_lang" => null
          "include_default_lang" => true
          "pages_fallback_only" => false
          "translations" => true
          "translations_fallback" => true
          "session_store_active" => false
          "http_accept_language" => false
          "override_locale" => false
        ]
        "home" => array:2 [
          "alias" => "/home"
          "hide_in_urls" => false
        ]
        "pages" => array:26 [
          "theme" => "minimaxing"
          "order" => array:2 [
            "by" => "default"
            "dir" => "asc"
          ]
          "list" => array:1 [
            "count" => 20
          ]
          "dateformat" => array:3 [
            "default" => null
            "short" => "jS M Y"
            "long" => "F jS \a\t g:ia"
          ]
          "publish_dates" => true
          "process" => array:2 [
            "markdown" => true
            "twig" => false
          ]
          "twig_first" => false
          "never_cache_twig" => false
          "events" => array:2 [
            "page" => true
            "twig" => true
          ]
          "markdown" => array:5 [
            "extra" => true
            "auto_line_breaks" => false
            "auto_url_links" => false
            "escape_markup" => false
            "special_chars" => array:2 [
              ">" => "gt"
              "<" => "lt"
            ]
          ]
          "types" => array:7 [
            0 => "txt"
            1 => "xml"
            2 => "html"
            3 => "htm"
            4 => "json"
            5 => "rss"
            6 => "atom"
          ]
          "append_url_extension" => ""
          "expires" => 604800
          "cache_control" => null
          "last_modified" => false
          "etag" => true
          "vary_accept_encoding" => false
          "redirect_default_route" => false
          "redirect_default_code" => "301"
          "redirect_trailing_slash" => true
          "ignore_files" => array:1 [
            0 => ".DS_Store"
          ]
          "ignore_folders" => array:2 [
            0 => ".git"
            1 => ".idea"
          ]
          "ignore_hidden" => true
          "hide_empty_folders" => false
          "url_taxonomy_filters" => true
          "frontmatter" => array:2 [
            "process_twig" => false
            "ignore_fields" => array:2 [
              0 => "form"
              1 => "forms"
            ]
          ]
        ]
        "cache" => array:13 [
          "enabled" => true
          "check" => array:1 [
            "method" => "file"
          ]
          "driver" => "apcu"
          "prefix" => "g"
          "purge_at" => "0 4 * * *"
          "clear_at" => "0 3 * * *"
          "clear_job_type" => "standard"
          "clear_images_by_default" => true
          "cli_compatibility" => false
          "lifetime" => 604800
          "gzip" => true
          "allow_webserver_gzip" => false
          "redis" => array:1 [
            "socket" => false
          ]
        ]
        "twig" => array:7 [
          "cache" => true
          "debug" => true
          "auto_reload" => true
          "autoescape" => false
          "undefined_functions" => true
          "undefined_filters" => true
          "umask_fix" => false
        ]
        "assets" => array:12 [
          "css_pipeline" => true
          "css_pipeline_include_externals" => true
          "css_pipeline_before_excludes" => true
          "css_minify" => true
          "css_minify_windows" => false
          "css_rewrite" => true
          "js_pipeline" => true
          "js_pipeline_include_externals" => true
          "js_pipeline_before_excludes" => true
          "js_minify" => true
          "enable_asset_timestamp" => false
          "collections" => array:1 [
            "jquery" => "system://assets/jquery/jquery-2.x.min.js"
          ]
        ]
        "errors" => array:2 [
          "display" => 1
          "log" => true
        ]
        "log" => array:2 [
          "handler" => "file"
          "syslog" => array:1 [
            "facility" => "local6"
          ]
        ]
        "debugger" => array:3 [
          "enabled" => false
          "shutdown" => array:1 [
            "close_connection" => true
          ]
          "twig" => true
        ]
        "images" => array:6 [
          "default_image_quality" => 85
          "cache_all" => false
          "cache_perms" => "0755"
          "debug" => false
          "auto_fix_orientation" => false
          "seofriendly" => false
        ]
        "media" => array:5 [
          "enable_media_timestamp" => false
          "unsupported_inline_types" => []
          "allowed_fallback_types" => []
          "auto_metadata_exif" => false
          "upload_limit" => 33554432
        ]
        "session" => array:9 [
          "enabled" => true
          "initialize" => true
          "timeout" => 1800
          "name" => "grav-site"
          "uniqueness" => "path"
          "secure" => false
          "httponly" => true
          "split" => true
          "path" => "/"
        ]
        "gpm" => array:5 [
          "releases" => "stable"
          "proxy_url" => null
          "method" => "auto"
          "verify_peer" => true
          "official_gpm_only" => true
        ]
        "accounts" => array:2 [
          "type" => "data"
          "storage" => "file"
        ]
        "strict_mode" => array:2 [
          "yaml_compat" => true
          "twig_compat" => true
        ]
      ]
      "theme" => array:2 [
        "enabled" => true
        "dropdown" => array:1 [
          "enabled" => false
        ]
      ]
      "site" => array:14 [
        "title" => "3Dvalley"
        "default_lang" => "en"
        "author" => array:2 [
          "name" => "Admin"
          "email" => "webmaster@3dvalley.com"
        ]
        "taxonomies" => array:2 [
          0 => "category"
          1 => "tag"
        ]
        "metadata" => array:1 [
          "description" => "Free 3D models and textures"
        ]
        "summary" => array:4 [
          "enabled" => true
          "format" => "short"
          "size" => 300
          "delimiter" => "==="
        ]
        "redirects" => array:12 [
          "/tutorials/3d-studio-max-hotkeys-and-mouse-essentials" => "/tutorials/threed-studio-max-hotkeys-and-mouse-essentials "
          "/tutorials/3d-studio-max-tutorial-modeling-a-plunger" => "/tutorials/modeling-a-plunger-in-3d-studio-max"
          "/tutorials/modeling-a-brake-rotor" => "/tutorials/modeling-brake-rotor-in-3d-studio-max"
          "/models" => "/3d-models"
          "/free-textures" => "/textures"
          "/textures.shtml" => "/textures"
          "/tutorials/rendering-objects-in-a-solidwire-mix" => "/tutorials/rendering-wip-images-in-3d-studio-max"
          "/tutorials/modeling-a-highly-detailed-basketball-in-3d-studio-max" => "/tutorials/modeling-a-highly-detailed-basketball-in-3ds-max/"
          "/models.shtml" => "/3d-models"
          "/c/tutorials" => "/tutorials"
          "/models/models_household.shtml" => "/3d-models/household"
          "/downloadables/3DStudioMAX-hotkeys.pdf" => "/tutorials/threed-studio-max-hotkeys-and-mouse-essentials"
        ]
        "routes" => null
        "blog" => array:1 [
          "route" => "/blog"
        ]
        "header" => array:2 [
          "title" => "I'm Jonathan Doe."
          "description" => "I'm a Manila based <span>graphic designer</span>, <span>illustrator</span> and <span>webdesigner</span> creating awesome and effective visual identities for companies of all sizes around the globe. Let's <a class="smoothscroll" href="#about">start scrolling</a> and learn more <a class="smoothscroll" href="#about">about me</a>."
        ]
        "copyright" => array:2 [
          0 => array:1 [
            "line" => "Copyright 2014 CeeVee"
          ]
          1 => array:1 [
            "line" => "Design by <a title="Styleshout" href="http://www.styleshout.com/">Styleshout</a>"
          ]
        ]
        "social" => array:7 [
          0 => array:2 [
            "url" => "#"
            "icon" => "facebook"
          ]
          1 => array:2 [
            "url" => "#"
            "icon" => "twitter"
          ]
          2 => array:2 [
            "url" => "#"
            "icon" => "google-plus"
          ]
          3 => array:2 [
            "url" => "#"
            "icon" => "linkedin"
          ]
          4 => array:2 [
            "url" => "#"
            "icon" => "instagram"
          ]
          5 => array:2 [
            "url" => "#"
            "icon" => "dribbble"
          ]
          6 => array:2 [
            "url" => "#"
            "icon" => "skype"
          ]
        ]
        "twitter" => array:7 [
          "id" => "657554810648948736"
          "domId" => "tw-widget1"
          "maxTweets" => 3
          "enableLinks" => "true"
          "showInteraction" => "false"
          "showImages" => "false"
          "showUser" => "false"
        ]
        "acxtest" => "TEST"
      ]
      "uri" => Uri {}
      "assets" => Assets {}
      "taxonomy" => Taxonomy {}
      "browser" => Browser {}
      "base_dir" => "/home/jhiemstraxartec/public_html/test"
      "home_url" => "/"
      "base_url" => ""
      "base_url_absolute" => "http://www.3dvalley.com"
      "base_url_relative" => ""
      "base_url_simple" => ""
      "theme_dir" => "/home/jhiemstraxartec/public_html/test/user/themes/minimaxing"
      "theme_url" => "/user/themes/minimaxing"
      "html_lang" => "en"
      "language_codes" => LanguageCodes {}
      "json" => "</script><script>"
      "myvar" => "</script><script>"
      "form" => null
      "form_max_filesize" => 32
      "form_json_response" => []
      "page" => Page {}
      "media" => Media {}
      "header" => {}
      "content" => "<p>.3DS &amp; .MAX</p>"
    ]
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
system
/
src
/
Grav
/
Common
/
Page
/
Page.php
        $excerpts = new Excerpts($this, $defaults);
 
        // Initialize the preferred variant of Parsedown
        if ($extra) {
            $parsedown = new ParsedownExtra($excerpts);
        } else {
            $parsedown = new Parsedown($excerpts);
        }
 
        $this->content = $parsedown->text($this->content);
    }
 
 
    /**
     * Process the Twig page content.
     */
    private function processTwig()
    {
        $twig = Grav::instance()['twig'];
        $this->content = $twig->processPage($this, $this->content);
    }
 
    /**
     * Fires the onPageContentProcessed event, and caches the page content using a unique ID for the page
     */
    public function cachePageContent()
    {
        $cache = Grav::instance()['cache'];
        $cache_id = md5('page' . $this->id());
        $cache->save($cache_id, ['content' => $this->content, 'content_meta' => $this->content_meta]);
    }
 
    /**
     * Needed by the onPageContentProcessed event to get the raw page content
     *
     * @return string   the current page content
     */
    public function getRawContent()
    {
        return $this->content;
Arguments
  1. Page {}
    
  2. "<p>.3DS &amp; .MAX</p>"
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
system
/
src
/
Grav
/
Common
/
Page
/
Page.php
                        if ($process_twig) {
                            $this->processTwig();
                        }
                        if ($process_markdown) {
                            $this->processMarkdown();
                        }
 
                        // Content Processed but not cached yet
                        Grav::instance()->fireEvent('onPageContentProcessed', new Event(['page' => $this]));
 
                    } else {
                        if ($process_markdown) {
                            $this->processMarkdown();
                        }
 
                        // Content Processed but not cached yet
                        Grav::instance()->fireEvent('onPageContentProcessed', new Event(['page' => $this]));
 
                        if ($process_twig) {
                            $this->processTwig();
                        }
                    }
 
                    if ($cache_enable) {
                        $this->cachePageContent();
                    }
                }
            }
 
            // Handle summary divider
            $delimiter = $config->get('site.summary.delimiter', '===');
            $divider_pos = mb_strpos($this->content, "<p>{$delimiter}</p>");
            if ($divider_pos !== false) {
                $this->summary_size = $divider_pos;
                $this->content = str_replace("<p>{$delimiter}</p>", '', $this->content);
            }
 
            // Fire event when Page::content() is called
            Grav::instance()->fireEvent('onPageContent', new Event(['page' => $this]));
        }
/
home
/
jhiemstraxartec
/
public_html
/
test
/
vendor
/
twig
/
twig
/
src
/
Template.php
            if ($ignoreStrictCheck || !$this->env->isStrictVariables()) {
                return;
            }
 
            throw new RuntimeError(sprintf('Neither the property "%1$s" nor one of the methods "%1$s()", "get%1$s()"/"is%1$s()" or "__call()" exist and have public access in class "%2$s".', $item, $class), -1, $this->getSourceContext());
        }
 
        if ($isDefinedTest) {
            return true;
        }
 
        if ($this->env->hasExtension('\Twig\Extension\SandboxExtension')) {
            $this->env->getExtension('\Twig\Extension\SandboxExtension')->checkMethodAllowed($object, $method);
        }
 
        // Some objects throw exceptions when they have __call, and the method we try
        // to call is not supported. If ignoreStrictCheck is true, we should return null.
        try {
            if (!$arguments) {
                $ret = $object->$method();
            } else {
                $ret = \call_user_func_array([$object, $method], $arguments);
            }
        } catch (\BadMethodCallException $e) {
            if ($call && ($ignoreStrictCheck || !$this->env->isStrictVariables())) {
                return;
            }
            throw $e;
        }
 
        // @deprecated in 1.28
        if ($object instanceof \Twig_TemplateInterface) {
            $self = $object->getTemplateName() === $this->getTemplateName();
            $message = sprintf('Calling "%s" on template "%s" from template "%s" is deprecated since version 1.28 and won\'t be supported anymore in 2.0.', $item, $object->getTemplateName(), $this->getTemplateName());
            if ('renderBlock' === $method || 'displayBlock' === $method) {
                $message .= sprintf(' Use block("%s"%s) instead).', $arguments[0], $self ? '' : ', template');
            } elseif ('hasBlock' === $method) {
                $message .= sprintf(' Use "block("%s"%s) is defined" instead).', $arguments[0], $self ? '' : ', template');
            } elseif ('render' === $method || 'display' === $method) {
                $message .= sprintf(' Use include("%s") instead).', $object->getTemplateName());
/
home
/
jhiemstraxartec
/
public_html
/
test
/
cache
/
twig
/
a6
/
a6e71229c07c4ac03d31c4ed1a3b887e66b4114333548c3d78e7922329d932c3.php
    protected function doDisplay(array $context, array $blocks = [])
    {
        // line 1
        echo "<section>
\t";
        // line 2
        $context["creators"] = $this->getAttribute(($context["page"] ?? null), "find", [0 => "/components/creators"], "method");
        // line 3
        echo "\t";
        echo $this->getAttribute(($context["creators"] ?? null), "content", []);
        echo "
\t<ul class=\"small-image-list\">
\t\t";
        // line 5
        $context['_parent'] = $context;
        $context['_seq'] = twig_ensure_traversable($this->getAttribute(($context["creators"] ?? null), "collection", []));
        foreach ($context['_seq'] as $context["_key"] => $context["module"]) {
            // line 6
            echo "\t\t\t";
            echo $this->getAttribute($context["module"], "content", []);
            echo "
\t\t";
        }
        $_parent = $context['_parent'];
        unset($context['_seq'], $context['_iterated'], $context['_key'], $context['module'], $context['_parent'], $context['loop']);
        $context = array_intersect_key($context, $_parent) + $_parent;
        // line 8
        echo "\t</ul>
</section>
";
    }
 
    public function getTemplateName()
    {
        return "partials/sections/bios.html.twig";
    }
 
    public function isTraitable()
    {
        return false;
Arguments
  1. Page {}
    
  2. "content"
    
  3. []
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
vendor
/
twig
/
twig
/
src
/
Template.php
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        } catch (\Throwable $e) {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        }
 
        return ob_get_clean();
    }
 
    protected function displayWithErrorHandling(array $context, array $blocks = [])
    {
        try {
            $this->doDisplay($context, $blocks);
        } catch (Error $e) {
            if (!$e->getSourceContext()) {
                $e->setSourceContext($this->getSourceContext());
            }
 
            // this is mostly useful for \Twig\Error\LoaderError exceptions
            // see \Twig\Error\LoaderError
            if (-1 === $e->getTemplateLine()) {
                $e->guess();
            }
 
            throw $e;
        } catch (\Exception $e) {
            $e = new RuntimeError(sprintf('An exception has been thrown during the rendering of a template ("%s").', $e->getMessage()), -1, $this->getSourceContext(), $e);
            $e->guess();
 
            throw $e;
        }
    }
 
Arguments
  1. array:35 [
      "config" => Config {#1}
      "system" => array:27 [
        "absolute_urls" => false
        "timezone" => ""
        "default_locale" => null
        "param_sep" => ":"
        "wrapped_site" => false
        "reverse_proxy_setup" => false
        "force_ssl" => false
        "force_lowercase_urls" => true
        "custom_base_url" => "http://www.3dvalley.com"
        "username_regex" => "^[a-z0-9_-]{3,16}$"
        "pwd_regex" => "(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}"
        "intl_enabled" => true
        "languages" => array:9 [
          "supported" => []
          "default_lang" => null
          "include_default_lang" => true
          "pages_fallback_only" => false
          "translations" => true
          "translations_fallback" => true
          "session_store_active" => false
          "http_accept_language" => false
          "override_locale" => false
        ]
        "home" => array:2 [
          "alias" => "/home"
          "hide_in_urls" => false
        ]
        "pages" => array:26 [
          "theme" => "minimaxing"
          "order" => array:2 [
            "by" => "default"
            "dir" => "asc"
          ]
          "list" => array:1 [
            "count" => 20
          ]
          "dateformat" => array:3 [
            "default" => null
            "short" => "jS M Y"
            "long" => "F jS \a\t g:ia"
          ]
          "publish_dates" => true
          "process" => array:2 [
            "markdown" => true
            "twig" => false
          ]
          "twig_first" => false
          "never_cache_twig" => false
          "events" => array:2 [
            "page" => true
            "twig" => true
          ]
          "markdown" => array:5 [
            "extra" => true
            "auto_line_breaks" => false
            "auto_url_links" => false
            "escape_markup" => false
            "special_chars" => array:2 [
              ">" => "gt"
              "<" => "lt"
            ]
          ]
          "types" => array:7 [
            0 => "txt"
            1 => "xml"
            2 => "html"
            3 => "htm"
            4 => "json"
            5 => "rss"
            6 => "atom"
          ]
          "append_url_extension" => ""
          "expires" => 604800
          "cache_control" => null
          "last_modified" => false
          "etag" => true
          "vary_accept_encoding" => false
          "redirect_default_route" => false
          "redirect_default_code" => "301"
          "redirect_trailing_slash" => true
          "ignore_files" => array:1 [
            0 => ".DS_Store"
          ]
          "ignore_folders" => array:2 [
            0 => ".git"
            1 => ".idea"
          ]
          "ignore_hidden" => true
          "hide_empty_folders" => false
          "url_taxonomy_filters" => true
          "frontmatter" => array:2 [
            "process_twig" => false
            "ignore_fields" => array:2 [
              0 => "form"
              1 => "forms"
            ]
          ]
        ]
        "cache" => array:13 [
          "enabled" => true
          "check" => array:1 [
            "method" => "file"
          ]
          "driver" => "apcu"
          "prefix" => "g"
          "purge_at" => "0 4 * * *"
          "clear_at" => "0 3 * * *"
          "clear_job_type" => "standard"
          "clear_images_by_default" => true
          "cli_compatibility" => false
          "lifetime" => 604800
          "gzip" => true
          "allow_webserver_gzip" => false
          "redis" => array:1 [
            "socket" => false
          ]
        ]
        "twig" => array:7 [
          "cache" => true
          "debug" => true
          "auto_reload" => true
          "autoescape" => false
          "undefined_functions" => true
          "undefined_filters" => true
          "umask_fix" => false
        ]
        "assets" => array:12 [
          "css_pipeline" => true
          "css_pipeline_include_externals" => true
          "css_pipeline_before_excludes" => true
          "css_minify" => true
          "css_minify_windows" => false
          "css_rewrite" => true
          "js_pipeline" => true
          "js_pipeline_include_externals" => true
          "js_pipeline_before_excludes" => true
          "js_minify" => true
          "enable_asset_timestamp" => false
          "collections" => array:1 [
            "jquery" => "system://assets/jquery/jquery-2.x.min.js"
          ]
        ]
        "errors" => array:2 [
          "display" => 1
          "log" => true
        ]
        "log" => array:2 [
          "handler" => "file"
          "syslog" => array:1 [
            "facility" => "local6"
          ]
        ]
        "debugger" => array:3 [
          "enabled" => false
          "shutdown" => array:1 [
            "close_connection" => true
          ]
          "twig" => true
        ]
        "images" => array:6 [
          "default_image_quality" => 85
          "cache_all" => false
          "cache_perms" => "0755"
          "debug" => false
          "auto_fix_orientation" => false
          "seofriendly" => false
        ]
        "media" => array:5 [
          "enable_media_timestamp" => false
          "unsupported_inline_types" => []
          "allowed_fallback_types" => []
          "auto_metadata_exif" => false
          "upload_limit" => 33554432
        ]
        "session" => array:9 [
          "enabled" => true
          "initialize" => true
          "timeout" => 1800
          "name" => "grav-site"
          "uniqueness" => "path"
          "secure" => false
          "httponly" => true
          "split" => true
          "path" => "/"
        ]
        "gpm" => array:5 [
          "releases" => "stable"
          "proxy_url" => null
          "method" => "auto"
          "verify_peer" => true
          "official_gpm_only" => true
        ]
        "accounts" => array:2 [
          "type" => "data"
          "storage" => "file"
        ]
        "strict_mode" => array:2 [
          "yaml_compat" => true
          "twig_compat" => true
        ]
      ]
      "theme" => array:2 [
        "enabled" => true
        "dropdown" => array:1 [
          "enabled" => false
        ]
      ]
      "site" => array:14 [
        "title" => "3Dvalley"
        "default_lang" => "en"
        "author" => array:2 [
          "name" => "Admin"
          "email" => "webmaster@3dvalley.com"
        ]
        "taxonomies" => array:2 [
          0 => "category"
          1 => "tag"
        ]
        "metadata" => array:1 [
          "description" => "Free 3D models and textures"
        ]
        "summary" => array:4 [
          "enabled" => true
          "format" => "short"
          "size" => 300
          "delimiter" => "==="
        ]
        "redirects" => array:12 [
          "/tutorials/3d-studio-max-hotkeys-and-mouse-essentials" => "/tutorials/threed-studio-max-hotkeys-and-mouse-essentials "
          "/tutorials/3d-studio-max-tutorial-modeling-a-plunger" => "/tutorials/modeling-a-plunger-in-3d-studio-max"
          "/tutorials/modeling-a-brake-rotor" => "/tutorials/modeling-brake-rotor-in-3d-studio-max"
          "/models" => "/3d-models"
          "/free-textures" => "/textures"
          "/textures.shtml" => "/textures"
          "/tutorials/rendering-objects-in-a-solidwire-mix" => "/tutorials/rendering-wip-images-in-3d-studio-max"
          "/tutorials/modeling-a-highly-detailed-basketball-in-3d-studio-max" => "/tutorials/modeling-a-highly-detailed-basketball-in-3ds-max/"
          "/models.shtml" => "/3d-models"
          "/c/tutorials" => "/tutorials"
          "/models/models_household.shtml" => "/3d-models/household"
          "/downloadables/3DStudioMAX-hotkeys.pdf" => "/tutorials/threed-studio-max-hotkeys-and-mouse-essentials"
        ]
        "routes" => null
        "blog" => array:1 [
          "route" => "/blog"
        ]
        "header" => array:2 [
          "title" => "I'm Jonathan Doe."
          "description" => "I'm a Manila based <span>graphic designer</span>, <span>illustrator</span> and <span>webdesigner</span> creating awesome and effective visual identities for companies of all sizes around the globe. Let's <a class="smoothscroll" href="#about">start scrolling</a> and learn more <a class="smoothscroll" href="#about">about me</a>."
        ]
        "copyright" => array:2 [
          0 => array:1 [
            "line" => "Copyright 2014 CeeVee"
          ]
          1 => array:1 [
            "line" => "Design by <a title="Styleshout" href="http://www.styleshout.com/">Styleshout</a>"
          ]
        ]
        "social" => array:7 [
          0 => array:2 [
            "url" => "#"
            "icon" => "facebook"
          ]
          1 => array:2 [
            "url" => "#"
            "icon" => "twitter"
          ]
          2 => array:2 [
            "url" => "#"
            "icon" => "google-plus"
          ]
          3 => array:2 [
            "url" => "#"
            "icon" => "linkedin"
          ]
          4 => array:2 [
            "url" => "#"
            "icon" => "instagram"
          ]
          5 => array:2 [
            "url" => "#"
            "icon" => "dribbble"
          ]
          6 => array:2 [
            "url" => "#"
            "icon" => "skype"
          ]
        ]
        "twitter" => array:7 [
          "id" => "657554810648948736"
          "domId" => "tw-widget1"
          "maxTweets" => 3
          "enableLinks" => "true"
          "showInteraction" => "false"
          "showImages" => "false"
          "showUser" => "false"
        ]
        "acxtest" => "TEST"
      ]
      "uri" => Uri {#2}
      "assets" => Assets {#3}
      "taxonomy" => Taxonomy {#4}
      "browser" => Browser {#5}
      "base_dir" => "/home/jhiemstraxartec/public_html/test"
      "home_url" => "/"
      "base_url" => ""
      "base_url_absolute" => "http://www.3dvalley.com"
      "base_url_relative" => ""
      "base_url_simple" => ""
      "theme_dir" => "/home/jhiemstraxartec/public_html/test/user/themes/minimaxing"
      "theme_url" => "/user/themes/minimaxing"
      "html_lang" => "en"
      "language_codes" => LanguageCodes {#6}
      "json" => "</script><script>"
      "myvar" => "</script><script>"
      "form" => null
      "form_max_filesize" => 32
      "form_json_response" => []
      "pages" => Page {#7}
      "page" => Page {#8}
      "header" => {#9}
      "media" => Media {#10}
      "content" => """
        <p>Like most tasks in 3D Studio Max and similar products, rigging robots is easy, if you know how. Depending on the complexity of the robot, some may find it even easier than rigging a human or animal character. This is because most parts of a robot do not deform during movement, with the exception of cabling and other flexible parts, so you don’t have to ‘skin’ it. One of the primary challenges in building a cool robot, which still looks cool when animated, is creating realistic mechanical joints.</p>\n
        \n
        <p>The first version of our example robotic leg below is not very realistic however, because it would collapse like a bone structure without muscles. In the second version, we will add some robotic ‘muscles’, and the third version will include a hose. Click on the download links below some of the pictures to download the corresponding scene.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/robotrigging_mainthumb_ani.gif" /></p>\n
        <h4>1. A Human Leg</h4>\n
        <p>When rigging a human leg, the mesh deforms when the knee bends, pushing vertexes away from each other on one side and towards each other on the opposite side. This is accomplished by using a Skin modifier that binds vertexes of the mesh to the bones. The colors of the vertexes indicate the weight values which dictate how much influence moving the joint will have on those vertexes. Red vertexes represent the most rigid parts.</p>\n
        <h4>2. Our Example Robot Leg</h4>\n
        <p>Robots are typically made of metal, plastic, or some other hard and rigid material that does not deform. The following picture shows the five objects that form the basis of our example leg.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p2a.jpg" /> <img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p2b.jpg" /></p>\n
        <h4>3. Rigging Our Example Robot Leg</h4>\n
        <p>As usual, I have to make a note that the following is just a way of doing this, which doesn’t necessarily means it is the way (we’ll actually show another way later on). Picture 3a below shows the (unsmoothed) wireframe of the objects that make up this leg. Click the link below it to download the scene, or download the scene including the bones by clicking the link below Picture 3h, or just watch the pictures if you do not feel like actually doing any of this right now.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3a.gif" />\n
        Picture 3a.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_start.zip">Download start scene here</a></p>\n
        <p>The red dots in the picture above represent the pivot of the object. In the scene you can download, I have already moved them to the correct position. The UpperLeg’s pivot is positioned at exactly the same position as the pivot of Cylinder01, and LowerLeg’s pivot is at the same position as the pivot of Cylinder02. When switching to the top view, they are all aligned. It is essential that the bones you add start or end exactly at those pivot points.</p>\n
        <p>A way of making sure the bones are positioned correctly is to snap to pivots. When you use this method it is also essential that all the pivots are aligned when viewing from the top. If in your robot they aren’t and it is too complex or difficult to align them, you can skip the following snap settings and just draw the bones, select them all and move them to the center of the leg (Top view). To use the snap setting, right-click the Snaps Toggle button on the main toolbar and select Pivot and clear others if necessary (see Picture 3b). Now click the Snaps Toggle button again (with the left mouse button) to enable it.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3b.gif" />\n
        Picture 3b.</p>\n
        <p>Click the Bones button in the Systems section on the Create tab of the Command Panel as displayed in Picture 3c below. Choose SplineIKSolver as the IK Solver and enable Assign to Children (you can use another IK Solver or none at all, if you prefer).</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3c.gif" />\n
        Picture 3c.</p>\n
        <p>Now draw the bones, by clicking on the spots 1, 2, and 3 shown in Picture 3d and then right-click anywhere in the viewport to stop. Spots 1, 2 and 3 are the pivot points of Cylinder01, Cylinder02, and Cylinder03.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3d.gif" />\n
        Picture 3d.</p>\n
        <p>When the Spline IK Solver dialog shown in Picture 3e below opens, just click OK.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3e.gif" />\n
        Picture 3e.</p>\n
        <p>Now before you link the bones to the leg, you should make sure that the pivots of the bones are positioned correctly on the pivot of the limbs, the Spline IK Solver we added moved them slightly. To move a bone’s pivot, click the Affect Pivot Only button on the Hierarchy tab of the Command Panel, and disable the Enabled button on the Motion tab of the Command Panel.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3f.gif" />\n
        Picture 3f.</p>\n
        <p>Then select the pivot of the bone and move it to the correct position. Make sure you zoom in and place it exactly in the center of the limbs’ pivots. You also might want to disable the snap to pivot setting first by clicking the Snaps Toggle button again. If for some reason you cannot get them in the right position, there is no need to continue, as the whole setup depends on the pivots’ position.</p>\n
        <p>When you are sure the pivots are positioned correctly, select Cylinder01 and link it to UpperLeg. Select Cylinder02 and link it to the LowerLeg, and select Cylinder03 to LowerLeg as well. To link one object to another click the Select and Link button on the main tool bar, select the object you want to link and drag to the object you want to link to. If you do it correctly, the object you link to, will flash white once.</p>\n
        <p>We will use the same select and link method to link the objects to the bones, instead of using a Skin modifier. Link UpperLeg to the upper bone, and link LowerLeg to the lower bone.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3g.gif" />\n
        Picture 3g.</p>\n
        <p>When you done all of the above, or download the scene including the bones by using the link below, select the IK Chain or any of the point helpers and move it. The knee joint should now operate as shown in Picture 3g, without any of the objects deforming during movement.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3h.gif" />\n
        Picture 3h.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_end.zip">Download scene here.</a></p>\n
        <h4>4. Another Approach</h4>\n
        <p>Before we continue with this leg and add some muscles, we will use another method of rigging this leg. As someone kindly pointed out to me, there is no absolute need to use bones . If you are new to rigging characters or robots in particular, you may want to go for the bones method discussed above, but a robot is often a skeleton by itself, eliminating the need for bones. 3D Studio Max allows any object to act like a bone, and allows you also to assign IK solvers to any hierarchical set of objects. Also in this type of ‘bone’ setup, it is absolutely imperative that the pivots of the objects are in the correct position. We will illustrate this with some pictures later.</p>\n
        <p>To make this work with the previous example (delete the previous bone structure or use the scene you downloaded earlier), and link the objects to each other as followed:</p>\n
        <p>Cylinder03 -&gt; LowerLeg\n
        LowerLeg -&gt; Cylinder02</p>\n
        <p>Cylinder02 -&gt; UpperLeg</p>\n
        <p>UpperLeg -&gt; Cylinder01</p>\n
        <p>Press the Schematic View (Open) button on the main toolbar to check if the hierarchy is now correct as displayed in Picture 4a.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4a.gif" />\n
        Picture 4a.</p>\n
        <p>Now all you need to do is add an IK Solver to this hierarchy to make it act like a robotic leg. You can use the IK Solver you prefer, but in this example, we are going to use the History Independent solver. Select Cylinder03, choose HI Solver from the IK Solvers section in the Animation menu, and select Cylinder01. To prevent you from linking the solver to UpperLeg instead of Cylinder01, use the Select by Name option, which basically means you should press the H key on your keyboard after you choose HI Solver from the menu, and then pick Cylinder01 from the list, instead of clicking on it in the viewport.</p>\n
        <p>If you performed the previous tasks correctly, the results should be like in Picture 4b with the IK Chain selected. If you move the IK Chain the leg should work. To make the task of animating this leg a bit more convenient, you should link the IK Chain to a Point Helper.</p>\n
        <p>A Point helper can be created by clicking the Point button in the Helpers section of the Create tab on the Command Panel, and clicking somewhere in the viewport, as depicted in Picture 4b below. In this case, I suggest you place it somewhere at the bottom of the leg. Use the same Select and Link method as discussed earlier to link the IK Chain to the Point helper, so you can animate the leg by moving the Point helper.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4b.gif" />\n
        Picture 4b.</p>\n
        <p>If your robot has a complex geometry and animating the individual objects slows down your computer too much, you can configure 3D Studio Max to display the objects as bones. When using our example leg from the previous steps, you should select Cylinder01, 02, 03, UpperLeg, and LowerLeg, and select Bone Tools from the Character menu. Enable the Bone On option on the Bone Tools dialog as shown below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4c.gif" />\n
        Picture 4c.</p>\n
        <p>Next, open the Display tab on the Command Panel, scroll down, and in the Link Display section enable the Display Links option and the Link Replaces Object option.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4d.gif" />\n
        Picture 4d.</p>\n
        <p>The results should be as depicted in Picture 4e below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4e.gif" />\n
        Picture 4e.</p>\n
        <p>Alternatively, you can enable only the Display Links option and right above the Link Display section enable the Display as Box option in the Display Properties section. The results should be as depicted in Picture 4f below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4f.gif" />\n
        Picture 4f.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_ik_end.zip">Download the scene here.</a></p>\n
        <h4>5. Muscles</h4>\n
        <p>As I mentioned earlier, the leg used in the example above is not very realistic; it needs some muscles to make it move automatically and at the same time give it some strength. You can make up your own mechanisms, but you can also use one of the three main methods used in modern real world robots:</p>\n
        <p>Electrical motors</p>\n
        <p>For the example leg from above, this would be the easy way out, as you would ‘only’ have to increase the size of the knee joint and modify it into to something like shown below in Photo I, so it becomes viable an electrical motor could fit inside. Additionally, rigging the robot is easy as you can use one of the methods we discussed earlier.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/motoman_sv3x.jpg" />\n
        Photo I. Industrial robot arm powered by electrical motors.</p>\n
        <p>Hydraulic/Pneumatic/Magnetic pistons</p>\n
        <p>Another commonly used method to power robots are pistons. A piston (see Photo II below) is basically consists of a metal bar that goes inside a tube. Pressurized air or oil is pumped into the piston to push out metal bar. This is usually the sound you here when a robot moves. If you want to make them realistic, you should attach a hose to it, which leads to a compressor somewhere in or on the robot. These hydraulic or pneumatic pistons are much more powerful than electrical motors. Smaller pistons may use magnetic force to either pull or push the metal bar. The latter would have electrical wires attached to it, instead of a hose.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/photo_ii.gif" />\n
        Photo II. Crane powered by hydraulic pistons.</p>\n
        <p>Picture 5a and 5b show our second example leg. It includes a piston that is made of two cylinders called Piston_PA and Piston_PB. Two additional cylinders (P_Axis_A and P_Axis_B) form the axis of the piston’s parts.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5a.gif" /> <img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5b.gif" />\n
        Picture 5a. &amp; Picture 5b.</p>\n
        <p>As you can see in Picture 5c below, we already rigged the leg with two bones and an IKSplineSolver. You can download the scene by clicking the link below the picture.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5c.gif" />\n
        Picture 5c.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_pistons_start.zip">Download the scene here.</a></p>\n
        <p>First, we will link the piston’s parts to the leg as followed:</p>\n
        <p>P_Axis_A -&gt; UpperLeg\n
        P_Axis_B -&gt; LowerLeg</p>\n
        <p>Piston_PA -&gt; P_Axis_A</p>\n
        <p>Piston_PB -&gt; P_Axis_B</p>\n
        <p>The hierarchy of the leg should now be exactly like in Picture 5d.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5d.gif" />\n
        Picture 5d.</p>\n
        <p>If we would bend the knee, by using the lower helper (Point3) for example, the two parts of the piston will not stay aligned correctly and will ‘break’ as shown in Picture 5e below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5e.gif" />\n
        Picture 5e.</p>\n
        <p>(If you moved the leg, press use Undo (Ctrl-Z) to move it back to its original position.)</p>\n
        <p>To make sure the metal bar stays inside the tube, we need to use a constraint, in this case the Look At constraint. As in the previous parts of this tutorial, the placement of the pivots of the piston’s parts is essential to make it work. The pivots for P_Axis_A and Piston_PA are exactly on the same position, and the pivots for P_Axis_B and Piston_PB are also exactly on the same position. We have already done this in the downloadable scene by selecting the parts that have the pivots on the same axis, enabling the Affect Pivot Only button (see Picture 3f) and using the Align tool (on both the Front, Top, and Left view).</p>\n
        <p>We will need to add two Look At constraints, one for each part of the piston. Select Piston_PA and select Look At from the Constraints section in the Animation menu, as depicted in Picture 5f below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5f.gif" />\n
        Picture 5f.</p>\n
        <p>Press the H key on your keyboard, select P_Axis_B, and click the Pick button. Piston_PA now changes its orientation. To make sure it point in the original direction, enable the Keep Initial Offset option on the Parameters section on the Motion tab of the Command Panel, as depicted in Picture 5g below. (The parameters section opened automatically when you added the Look At constraint.)</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5g.gif" />\n
        Picture 5g.</p>\n
        <p>Repeat this step for the other part of the piston, in other words: select Piston_PB, select Look At constraint from the Animation menu, pick the P_Axis_A as the target (using the H button to pick it). Also enable the Keep Initial Offset option again. So what we did is make one part of the piston ‘looks at’ the opposite part’s axis. The orientation is depicted with a blue line. If you select the helper Point03 and move it again, you will see that the metal bat slides neatly into the tube, as shown in Picture 5h below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5h.gif" />\n
        Picture 5h.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_pistons_end.zip">Download the scene here.</a></p>\n
        <p>To make it more realistic, we need to attach a pipe or hose to the hydraulic or pneumatic piston, and we need to make sure it moves and/or bends when the leg moves. There are many ways of doing this, but a relatively easy one is to use the extended primitive Hose. The advantage of using the Hose primitive is that you don’t need to rig it; no bones, and no IK. Instead, we are going to add two extra Cylinders, in addition to the Hose, and let the Hose start and end at those cylinders.</p>\n
        <p>In Picture 5i below you can see where we placed the two cylinders. The cylinder on the left is linked to UpperLeg, and the other is linked to Piston_PA. These cylinders represent the entry points of the hose, or the connector of a wire for example. You will probably want to use something more sophisticated than a cylinder, but make sure it is a separate object.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5i.gif" />\n
        Picture 5i.</p>\n
        <p>Next, create the hose by selecting Extended Primitives on the Create tab of the Command Panel, clicking the Hose button, and drawing a hose in any viewport, as shown in Picture 5j below. Don’t worry about its size, location, or shape yet.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5j.gif" />\n
        Picture 5j.</p>\n
        <p>On the Modify tab of the Command Panel, enable the Bound to Object Pivots. Click the Pick Top Object button and click on the left cylinder. Click the Pick Bottom Object button and click on the right cylinder (or use the H key on your keyboard).</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5k.gif" />\n
        Picture 5k.</p>\n
        <p>Depending on the orientation of the cylinders we use to connect the hose and the viewport you created them on, you may have to rotate the pivot of one or both cylinders. So if necessary, select the cylinder, enable the Affect Pivot Only button (picture 3f), and rotate the pivot. While you rotate the pivot, the hose will bend with it so you can easily see when it is at the right angle.</p>\n
        <p>When the hose is correctly aligned to the cylinders, click the hose again, scroll down below on the Modify tab, and disable the Flex Section Enable option as shown below in Picture 5l. Also decrease the Diameter: value in the Hose Shape section to a value that is less than the cylinders.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5l.gif" />\n
        Picture 5l.</p>\n
        <p>As you can see, the hose is too long and needs to hang more tightly against the leg. You can do this by decreasing the Tension values (see Picture 5k). In the final images below, we used 25 for both cylinders. If you move the leg again using on of the helpers, you will notice that the hose will stay in position and even bend when it has to. Click on one of the images to see the final animation.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5m.gif" /> <img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5n.gif" />\n
        Picture 5m.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_piston_hose.zip">Download the final scene here.</a></p>\n
        <p>I hope you enjoyed this tutorial and that it contributed something to your 3D Studio Max modeling skills.</p>
        """
      "grav" => Grav {#11}
      "theme_config" => array:2 [
        "enabled" => true
        "dropdown" => array:1 [
          "enabled" => false
        ]
      ]
      "creators" => Page {#12}
      "_parent" => array:31 [
        "config" => Config {#1}
        "system" => array:27 [
          "absolute_urls" => false
          "timezone" => ""
          "default_locale" => null
          "param_sep" => ":"
          "wrapped_site" => false
          "reverse_proxy_setup" => false
          "force_ssl" => false
          "force_lowercase_urls" => true
          "custom_base_url" => "http://www.3dvalley.com"
          "username_regex" => "^[a-z0-9_-]{3,16}$"
          "pwd_regex" => "(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}"
          "intl_enabled" => true
          "languages" => array:9 [
            "supported" => []
            "default_lang" => null
            "include_default_lang" => true
            "pages_fallback_only" => false
            "translations" => true
            "translations_fallback" => true
            "session_store_active" => false
            "http_accept_language" => false
            "override_locale" => false
          ]
          "home" => array:2 [
            "alias" => "/home"
            "hide_in_urls" => false
          ]
          "pages" => array:26 [
            "theme" => "minimaxing"
            "order" => array:2 [
              "by" => "default"
              "dir" => "asc"
            ]
            "list" => array:1 [
              "count" => 20
            ]
            "dateformat" => array:3 [
              "default" => null
              "short" => "jS M Y"
              "long" => "F jS \a\t g:ia"
            ]
            "publish_dates" => true
            "process" => array:2 [
              "markdown" => true
              "twig" => false
            ]
            "twig_first" => false
            "never_cache_twig" => false
            "events" => array:2 [
              "page" => true
              "twig" => true
            ]
            "markdown" => array:5 [
              "extra" => true
              "auto_line_breaks" => false
              "auto_url_links" => false
              "escape_markup" => false
              "special_chars" => array:2 [
                ">" => "gt"
                "<" => "lt"
              ]
            ]
            "types" => array:7 [
              0 => "txt"
              1 => "xml"
              2 => "html"
              3 => "htm"
              4 => "json"
              5 => "rss"
              6 => "atom"
            ]
            "append_url_extension" => ""
            "expires" => 604800
            "cache_control" => null
            "last_modified" => false
            "etag" => true
            "vary_accept_encoding" => false
            "redirect_default_route" => false
            "redirect_default_code" => "301"
            "redirect_trailing_slash" => true
            "ignore_files" => array:1 [
              0 => ".DS_Store"
            ]
            "ignore_folders" => array:2 [
              0 => ".git"
              1 => ".idea"
            ]
            "ignore_hidden" => true
            "hide_empty_folders" => false
            "url_taxonomy_filters" => true
            "frontmatter" => array:2 [
              "process_twig" => false
              "ignore_fields" => array:2 [
                0 => "form"
                1 => "forms"
              ]
            ]
          ]
          "cache" => array:13 [
            "enabled" => true
            "check" => array:1 [
              "method" => "file"
            ]
            "driver" => "apcu"
            "prefix" => "g"
            "purge_at" => "0 4 * * *"
            "clear_at" => "0 3 * * *"
            "clear_job_type" => "standard"
            "clear_images_by_default" => true
            "cli_compatibility" => false
            "lifetime" => 604800
            "gzip" => true
            "allow_webserver_gzip" => false
            "redis" => array:1 [
              "socket" => false
            ]
          ]
          "twig" => array:7 [
            "cache" => true
            "debug" => true
            "auto_reload" => true
            "autoescape" => false
            "undefined_functions" => true
            "undefined_filters" => true
            "umask_fix" => false
          ]
          "assets" => array:12 [
            "css_pipeline" => true
            "css_pipeline_include_externals" => true
            "css_pipeline_before_excludes" => true
            "css_minify" => true
            "css_minify_windows" => false
            "css_rewrite" => true
            "js_pipeline" => true
            "js_pipeline_include_externals" => true
            "js_pipeline_before_excludes" => true
            "js_minify" => true
            "enable_asset_timestamp" => false
            "collections" => array:1 [
              "jquery" => "system://assets/jquery/jquery-2.x.min.js"
            ]
          ]
          "errors" => array:2 [
            "display" => 1
            "log" => true
          ]
          "log" => array:2 [
            "handler" => "file"
            "syslog" => array:1 [
              "facility" => "local6"
            ]
          ]
          "debugger" => array:3 [
            "enabled" => false
            "shutdown" => array:1 [
              "close_connection" => true
            ]
            "twig" => true
          ]
          "images" => array:6 [
            "default_image_quality" => 85
            "cache_all" => false
            "cache_perms" => "0755"
            "debug" => false
            "auto_fix_orientation" => false
            "seofriendly" => false
          ]
          "media" => array:5 [
            "enable_media_timestamp" => false
            "unsupported_inline_types" => []
            "allowed_fallback_types" => []
            "auto_metadata_exif" => false
            "upload_limit" => 33554432
          ]
          "session" => array:9 [
            "enabled" => true
            "initialize" => true
            "timeout" => 1800
            "name" => "grav-site"
            "uniqueness" => "path"
            "secure" => false
            "httponly" => true
            "split" => true
            "path" => "/"
          ]
          "gpm" => array:5 [
            "releases" => "stable"
            "proxy_url" => null
            "method" => "auto"
            "verify_peer" => true
            "official_gpm_only" => true
          ]
          "accounts" => array:2 [
            "type" => "data"
            "storage" => "file"
          ]
          "strict_mode" => array:2 [
            "yaml_compat" => true
            "twig_compat" => true
          ]
        ]
        "theme" => array:2 [
          "enabled" => true
          "dropdown" => array:1 [
            "enabled" => false
          ]
        ]
        "site" => array:14 [
          "title" => "3Dvalley"
          "default_lang" => "en"
          "author" => array:2 [
            "name" => "Admin"
            "email" => "webmaster@3dvalley.com"
          ]
          "taxonomies" => array:2 [
            0 => "category"
            1 => "tag"
          ]
          "metadata" => array:1 [
            "description" => "Free 3D models and textures"
          ]
          "summary" => array:4 [
            "enabled" => true
            "format" => "short"
            "size" => 300
            "delimiter" => "==="
          ]
          "redirects" => array:12 [
            "/tutorials/3d-studio-max-hotkeys-and-mouse-essentials" => "/tutorials/threed-studio-max-hotkeys-and-mouse-essentials "
            "/tutorials/3d-studio-max-tutorial-modeling-a-plunger" => "/tutorials/modeling-a-plunger-in-3d-studio-max"
            "/tutorials/modeling-a-brake-rotor" => "/tutorials/modeling-brake-rotor-in-3d-studio-max"
            "/models" => "/3d-models"
            "/free-textures" => "/textures"
            "/textures.shtml" => "/textures"
            "/tutorials/rendering-objects-in-a-solidwire-mix" => "/tutorials/rendering-wip-images-in-3d-studio-max"
            "/tutorials/modeling-a-highly-detailed-basketball-in-3d-studio-max" => "/tutorials/modeling-a-highly-detailed-basketball-in-3ds-max/"
            "/models.shtml" => "/3d-models"
            "/c/tutorials" => "/tutorials"
            "/models/models_household.shtml" => "/3d-models/household"
            "/downloadables/3DStudioMAX-hotkeys.pdf" => "/tutorials/threed-studio-max-hotkeys-and-mouse-essentials"
          ]
          "routes" => null
          "blog" => array:1 [
            "route" => "/blog"
          ]
          "header" => array:2 [
            "title" => "I'm Jonathan Doe."
            "description" => "I'm a Manila based <span>graphic designer</span>, <span>illustrator</span> and <span>webdesigner</span> creating awesome and effective visual identities for companies of all sizes around the globe. Let's <a class="smoothscroll" href="#about">start scrolling</a> and learn more <a class="smoothscroll" href="#about">about me</a>."
          ]
          "copyright" => array:2 [
            0 => array:1 [
              "line" => "Copyright 2014 CeeVee"
            ]
            1 => array:1 [
              "line" => "Design by <a title="Styleshout" href="http://www.styleshout.com/">Styleshout</a>"
            ]
          ]
          "social" => array:7 [
            0 => array:2 [
              "url" => "#"
              "icon" => "facebook"
            ]
            1 => array:2 [
              "url" => "#"
              "icon" => "twitter"
            ]
            2 => array:2 [
              "url" => "#"
              "icon" => "google-plus"
            ]
            3 => array:2 [
              "url" => "#"
              "icon" => "linkedin"
            ]
            4 => array:2 [
              "url" => "#"
              "icon" => "instagram"
            ]
            5 => array:2 [
              "url" => "#"
              "icon" => "dribbble"
            ]
            6 => array:2 [
              "url" => "#"
              "icon" => "skype"
            ]
          ]
          "twitter" => array:7 [
            "id" => "657554810648948736"
            "domId" => "tw-widget1"
            "maxTweets" => 3
            "enableLinks" => "true"
            "showInteraction" => "false"
            "showImages" => "false"
            "showUser" => "false"
          ]
          "acxtest" => "TEST"
        ]
        "uri" => Uri {#2}
        "assets" => Assets {#3}
        "taxonomy" => Taxonomy {#4}
        "browser" => Browser {#5}
        "base_dir" => "/home/jhiemstraxartec/public_html/test"
        "home_url" => "/"
        "base_url" => ""
        "base_url_absolute" => "http://www.3dvalley.com"
        "base_url_relative" => ""
        "base_url_simple" => ""
        "theme_dir" => "/home/jhiemstraxartec/public_html/test/user/themes/minimaxing"
        "theme_url" => "/user/themes/minimaxing"
        "html_lang" => "en"
        "language_codes" => LanguageCodes {#6}
        "json" => "</script><script>"
        "myvar" => "</script><script>"
        "form" => null
        "form_max_filesize" => 32
        "form_json_response" => []
        "pages" => Page {#7}
        "page" => Page {#8}
        "header" => {#9}
        "media" => Media {#10}
        "content" => """
          <p>Like most tasks in 3D Studio Max and similar products, rigging robots is easy, if you know how. Depending on the complexity of the robot, some may find it even easier than rigging a human or animal character. This is because most parts of a robot do not deform during movement, with the exception of cabling and other flexible parts, so you don’t have to ‘skin’ it. One of the primary challenges in building a cool robot, which still looks cool when animated, is creating realistic mechanical joints.</p>\n
          \n
          <p>The first version of our example robotic leg below is not very realistic however, because it would collapse like a bone structure without muscles. In the second version, we will add some robotic ‘muscles’, and the third version will include a hose. Click on the download links below some of the pictures to download the corresponding scene.</p>\n
          <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/robotrigging_mainthumb_ani.gif" /></p>\n
          <h4>1. A Human Leg</h4>\n
          <p>When rigging a human leg, the mesh deforms when the knee bends, pushing vertexes away from each other on one side and towards each other on the opposite side. This is accomplished by using a Skin modifier that binds vertexes of the mesh to the bones. The colors of the vertexes indicate the weight values which dictate how much influence moving the joint will have on those vertexes. Red vertexes represent the most rigid parts.</p>\n
          <h4>2. Our Example Robot Leg</h4>\n
          <p>Robots are typically made of metal, plastic, or some other hard and rigid material that does not deform. The following picture shows the five objects that form the basis of our example leg.</p>\n
          <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p2a.jpg" /> <img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p2b.jpg" /></p>\n
          <h4>3. Rigging Our Example Robot Leg</h4>\n
          <p>As usual, I have to make a note that the following is just a way of doing this, which doesn’t necessarily means it is the way (we’ll actually show another way later on). Picture 3a below shows the (unsmoothed) wireframe of the objects that make up this leg. Click the link below it to download the scene, or download the scene including the bones by clicking the link below Picture 3h, or just watch the pictures if you do not feel like actually doing any of this right now.</p>\n
          <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3a.gif" />\n
          Picture 3a.</p>\n
          <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_start.zip">Download start scene here</a></p>\n
          <p>The red dots in the picture above represent the pivot of the object. In the scene you can download, I have already moved them to the correct position. The UpperLeg’s pivot is positioned at exactly the same position as the pivot of Cylinder01, and LowerLeg’s pivot is at the same position as the pivot of Cylinder02. When switching to the top view, they are all aligned. It is essential that the bones you add start or end exactly at those pivot points.</p>\n
          <p>A way of making sure the bones are positioned correctly is to snap to pivots. When you use this method it is also essential that all the pivots are aligned when viewing from the top. If in your robot they aren’t and it is too complex or difficult to align them, you can skip the following snap settings and just draw the bones, select them all and move them to the center of the leg (Top view). To use the snap setting, right-click the Snaps Toggle button on the main toolbar and select Pivot and clear others if necessary (see Picture 3b). Now click the Snaps Toggle button again (with the left mouse button) to enable it.</p>\n
          <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3b.gif" />\n
          Picture 3b.</p>\n
          <p>Click the Bones button in the Systems section on the Create tab of the Command Panel as displayed in Picture 3c below. Choose SplineIKSolver as the IK Solver and enable Assign to Children (you can use another IK Solver or none at all, if you prefer).</p>\n
          <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3c.gif" />\n
          Picture 3c.</p>\n
          <p>Now draw the bones, by clicking on the spots 1, 2, and 3 shown in Picture 3d and then right-click anywhere in the viewport to stop. Spots 1, 2 and 3 are the pivot points of Cylinder01, Cylinder02, and Cylinder03.</p>\n
          <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3d.gif" />\n
          Picture 3d.</p>\n
          <p>When the Spline IK Solver dialog shown in Picture 3e below opens, just click OK.</p>\n
          <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3e.gif" />\n
          Picture 3e.</p>\n
          <p>Now before you link the bones to the leg, you should make sure that the pivots of the bones are positioned correctly on the pivot of the limbs, the Spline IK Solver we added moved them slightly. To move a bone’s pivot, click the Affect Pivot Only button on the Hierarchy tab of the Command Panel, and disable the Enabled button on the Motion tab of the Command Panel.</p>\n
          <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3f.gif" />\n
          Picture 3f.</p>\n
          <p>Then select the pivot of the bone and move it to the correct position. Make sure you zoom in and place it exactly in the center of the limbs’ pivots. You also might want to disable the snap to pivot setting first by clicking the Snaps Toggle button again. If for some reason you cannot get them in the right position, there is no need to continue, as the whole setup depends on the pivots’ position.</p>\n
          <p>When you are sure the pivots are positioned correctly, select Cylinder01 and link it to UpperLeg. Select Cylinder02 and link it to the LowerLeg, and select Cylinder03 to LowerLeg as well. To link one object to another click the Select and Link button on the main tool bar, select the object you want to link and drag to the object you want to link to. If you do it correctly, the object you link to, will flash white once.</p>\n
          <p>We will use the same select and link method to link the objects to the bones, instead of using a Skin modifier. Link UpperLeg to the upper bone, and link LowerLeg to the lower bone.</p>\n
          <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3g.gif" />\n
          Picture 3g.</p>\n
          <p>When you done all of the above, or download the scene including the bones by using the link below, select the IK Chain or any of the point helpers and move it. The knee joint should now operate as shown in Picture 3g, without any of the objects deforming during movement.</p>\n
          <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3h.gif" />\n
          Picture 3h.</p>\n
          <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_end.zip">Download scene here.</a></p>\n
          <h4>4. Another Approach</h4>\n
          <p>Before we continue with this leg and add some muscles, we will use another method of rigging this leg. As someone kindly pointed out to me, there is no absolute need to use bones . If you are new to rigging characters or robots in particular, you may want to go for the bones method discussed above, but a robot is often a skeleton by itself, eliminating the need for bones. 3D Studio Max allows any object to act like a bone, and allows you also to assign IK solvers to any hierarchical set of objects. Also in this type of ‘bone’ setup, it is absolutely imperative that the pivots of the objects are in the correct position. We will illustrate this with some pictures later.</p>\n
          <p>To make this work with the previous example (delete the previous bone structure or use the scene you downloaded earlier), and link the objects to each other as followed:</p>\n
          <p>Cylinder03 -&gt; LowerLeg\n
          LowerLeg -&gt; Cylinder02</p>\n
          <p>Cylinder02 -&gt; UpperLeg</p>\n
          <p>UpperLeg -&gt; Cylinder01</p>\n
          <p>Press the Schematic View (Open) button on the main toolbar to check if the hierarchy is now correct as displayed in Picture 4a.</p>\n
          <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4a.gif" />\n
          Picture 4a.</p>\n
          <p>Now all you need to do is add an IK Solver to this hierarchy to make it act like a robotic leg. You can use the IK Solver you prefer, but in this example, we are going to use the History Independent solver. Select Cylinder03, choose HI Solver from the IK Solvers section in the Animation menu, and select Cylinder01. To prevent you from linking the solver to UpperLeg instead of Cylinder01, use the Select by Name option, which basically means you should press the H key on your keyboard after you choose HI Solver from the menu, and then pick Cylinder01 from the list, instead of clicking on it in the viewport.</p>\n
          <p>If you performed the previous tasks correctly, the results should be like in Picture 4b with the IK Chain selected. If you move the IK Chain the leg should work. To make the task of animating this leg a bit more convenient, you should link the IK Chain to a Point Helper.</p>\n
          <p>A Point helper can be created by clicking the Point button in the Helpers section of the Create tab on the Command Panel, and clicking somewhere in the viewport, as depicted in Picture 4b below. In this case, I suggest you place it somewhere at the bottom of the leg. Use the same Select and Link method as discussed earlier to link the IK Chain to the Point helper, so you can animate the leg by moving the Point helper.</p>\n
          <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4b.gif" />\n
          Picture 4b.</p>\n
          <p>If your robot has a complex geometry and animating the individual objects slows down your computer too much, you can configure 3D Studio Max to display the objects as bones. When using our example leg from the previous steps, you should select Cylinder01, 02, 03, UpperLeg, and LowerLeg, and select Bone Tools from the Character menu. Enable the Bone On option on the Bone Tools dialog as shown below.</p>\n
          <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4c.gif" />\n
          Picture 4c.</p>\n
          <p>Next, open the Display tab on the Command Panel, scroll down, and in the Link Display section enable the Display Links option and the Link Replaces Object option.</p>\n
          <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4d.gif" />\n
          Picture 4d.</p>\n
          <p>The results should be as depicted in Picture 4e below.</p>\n
          <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4e.gif" />\n
          Picture 4e.</p>\n
          <p>Alternatively, you can enable only the Display Links option and right above the Link Display section enable the Display as Box option in the Display Properties section. The results should be as depicted in Picture 4f below.</p>\n
          <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4f.gif" />\n
          Picture 4f.</p>\n
          <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_ik_end.zip">Download the scene here.</a></p>\n
          <h4>5. Muscles</h4>\n
          <p>As I mentioned earlier, the leg used in the example above is not very realistic; it needs some muscles to make it move automatically and at the same time give it some strength. You can make up your own mechanisms, but you can also use one of the three main methods used in modern real world robots:</p>\n
          <p>Electrical motors</p>\n
          <p>For the example leg from above, this would be the easy way out, as you would ‘only’ have to increase the size of the knee joint and modify it into to something like shown below in Photo I, so it becomes viable an electrical motor could fit inside. Additionally, rigging the robot is easy as you can use one of the methods we discussed earlier.</p>\n
          <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/motoman_sv3x.jpg" />\n
          Photo I. Industrial robot arm powered by electrical motors.</p>\n
          <p>Hydraulic/Pneumatic/Magnetic pistons</p>\n
          <p>Another commonly used method to power robots are pistons. A piston (see Photo II below) is basically consists of a metal bar that goes inside a tube. Pressurized air or oil is pumped into the piston to push out metal bar. This is usually the sound you here when a robot moves. If you want to make them realistic, you should attach a hose to it, which leads to a compressor somewhere in or on the robot. These hydraulic or pneumatic pistons are much more powerful than electrical motors. Smaller pistons may use magnetic force to either pull or push the metal bar. The latter would have electrical wires attached to it, instead of a hose.</p>\n
          <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/photo_ii.gif" />\n
          Photo II. Crane powered by hydraulic pistons.</p>\n
          <p>Picture 5a and 5b show our second example leg. It includes a piston that is made of two cylinders called Piston_PA and Piston_PB. Two additional cylinders (P_Axis_A and P_Axis_B) form the axis of the piston’s parts.</p>\n
          <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5a.gif" /> <img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5b.gif" />\n
          Picture 5a. &amp; Picture 5b.</p>\n
          <p>As you can see in Picture 5c below, we already rigged the leg with two bones and an IKSplineSolver. You can download the scene by clicking the link below the picture.</p>\n
          <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5c.gif" />\n
          Picture 5c.</p>\n
          <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_pistons_start.zip">Download the scene here.</a></p>\n
          <p>First, we will link the piston’s parts to the leg as followed:</p>\n
          <p>P_Axis_A -&gt; UpperLeg\n
          P_Axis_B -&gt; LowerLeg</p>\n
          <p>Piston_PA -&gt; P_Axis_A</p>\n
          <p>Piston_PB -&gt; P_Axis_B</p>\n
          <p>The hierarchy of the leg should now be exactly like in Picture 5d.</p>\n
          <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5d.gif" />\n
          Picture 5d.</p>\n
          <p>If we would bend the knee, by using the lower helper (Point3) for example, the two parts of the piston will not stay aligned correctly and will ‘break’ as shown in Picture 5e below.</p>\n
          <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5e.gif" />\n
          Picture 5e.</p>\n
          <p>(If you moved the leg, press use Undo (Ctrl-Z) to move it back to its original position.)</p>\n
          <p>To make sure the metal bar stays inside the tube, we need to use a constraint, in this case the Look At constraint. As in the previous parts of this tutorial, the placement of the pivots of the piston’s parts is essential to make it work. The pivots for P_Axis_A and Piston_PA are exactly on the same position, and the pivots for P_Axis_B and Piston_PB are also exactly on the same position. We have already done this in the downloadable scene by selecting the parts that have the pivots on the same axis, enabling the Affect Pivot Only button (see Picture 3f) and using the Align tool (on both the Front, Top, and Left view).</p>\n
          <p>We will need to add two Look At constraints, one for each part of the piston. Select Piston_PA and select Look At from the Constraints section in the Animation menu, as depicted in Picture 5f below.</p>\n
          <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5f.gif" />\n
          Picture 5f.</p>\n
          <p>Press the H key on your keyboard, select P_Axis_B, and click the Pick button. Piston_PA now changes its orientation. To make sure it point in the original direction, enable the Keep Initial Offset option on the Parameters section on the Motion tab of the Command Panel, as depicted in Picture 5g below. (The parameters section opened automatically when you added the Look At constraint.)</p>\n
          <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5g.gif" />\n
          Picture 5g.</p>\n
          <p>Repeat this step for the other part of the piston, in other words: select Piston_PB, select Look At constraint from the Animation menu, pick the P_Axis_A as the target (using the H button to pick it). Also enable the Keep Initial Offset option again. So what we did is make one part of the piston ‘looks at’ the opposite part’s axis. The orientation is depicted with a blue line. If you select the helper Point03 and move it again, you will see that the metal bat slides neatly into the tube, as shown in Picture 5h below.</p>\n
          <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5h.gif" />\n
          Picture 5h.</p>\n
          <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_pistons_end.zip">Download the scene here.</a></p>\n
          <p>To make it more realistic, we need to attach a pipe or hose to the hydraulic or pneumatic piston, and we need to make sure it moves and/or bends when the leg moves. There are many ways of doing this, but a relatively easy one is to use the extended primitive Hose. The advantage of using the Hose primitive is that you don’t need to rig it; no bones, and no IK. Instead, we are going to add two extra Cylinders, in addition to the Hose, and let the Hose start and end at those cylinders.</p>\n
          <p>In Picture 5i below you can see where we placed the two cylinders. The cylinder on the left is linked to UpperLeg, and the other is linked to Piston_PA. These cylinders represent the entry points of the hose, or the connector of a wire for example. You will probably want to use something more sophisticated than a cylinder, but make sure it is a separate object.</p>\n
          <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5i.gif" />\n
          Picture 5i.</p>\n
          <p>Next, create the hose by selecting Extended Primitives on the Create tab of the Command Panel, clicking the Hose button, and drawing a hose in any viewport, as shown in Picture 5j below. Don’t worry about its size, location, or shape yet.</p>\n
          <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5j.gif" />\n
          Picture 5j.</p>\n
          <p>On the Modify tab of the Command Panel, enable the Bound to Object Pivots. Click the Pick Top Object button and click on the left cylinder. Click the Pick Bottom Object button and click on the right cylinder (or use the H key on your keyboard).</p>\n
          <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5k.gif" />\n
          Picture 5k.</p>\n
          <p>Depending on the orientation of the cylinders we use to connect the hose and the viewport you created them on, you may have to rotate the pivot of one or both cylinders. So if necessary, select the cylinder, enable the Affect Pivot Only button (picture 3f), and rotate the pivot. While you rotate the pivot, the hose will bend with it so you can easily see when it is at the right angle.</p>\n
          <p>When the hose is correctly aligned to the cylinders, click the hose again, scroll down below on the Modify tab, and disable the Flex Section Enable option as shown below in Picture 5l. Also decrease the Diameter: value in the Hose Shape section to a value that is less than the cylinders.</p>\n
          <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5l.gif" />\n
          Picture 5l.</p>\n
          <p>As you can see, the hose is too long and needs to hang more tightly against the leg. You can do this by decreasing the Tension values (see Picture 5k). In the final images below, we used 25 for both cylinders. If you move the leg again using on of the helpers, you will notice that the hose will stay in position and even bend when it has to. Click on one of the images to see the final animation.</p>\n
          <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5m.gif" /> <img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5n.gif" />\n
          Picture 5m.</p>\n
          <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_piston_hose.zip">Download the final scene here.</a></p>\n
          <p>I hope you enjoyed this tutorial and that it contributed something to your 3D Studio Max modeling skills.</p>
          """
        "grav" => Grav {#11}
        "theme_config" => array:2 [
          "enabled" => true
          "dropdown" => array:1 [
            "enabled" => false
          ]
        ]
        "creators" => Page {#12}
      ]
      "_seq" => Collection {}
      "module" => Page {}
      "_key" => "_latestmodel1"
    ]
    
  2. []
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
vendor
/
twig
/
twig
/
src
/
Template.php
    {
        return $this;
    }
 
    /**
     * Returns all blocks.
     *
     * This method is for internal use only and should never be called
     * directly.
     *
     * @return array An array of blocks
     */
    public function getBlocks()
    {
        return $this->blocks;
    }
 
    public function display(array $context, array $blocks = [])
    {
        $this->displayWithErrorHandling($this->env->mergeGlobals($context), array_merge($this->blocks, $blocks));
    }
 
    public function render(array $context)
    {
        $level = ob_get_level();
        ob_start(function () { return ''; });
        try {
            $this->display($context);
        } catch (\Exception $e) {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        } catch (\Throwable $e) {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
Arguments
  1. array:30 [
      "config" => Config {}
      "system" => array:27 [
        "absolute_urls" => false
        "timezone" => ""
        "default_locale" => null
        "param_sep" => ":"
        "wrapped_site" => false
        "reverse_proxy_setup" => false
        "force_ssl" => false
        "force_lowercase_urls" => true
        "custom_base_url" => "http://www.3dvalley.com"
        "username_regex" => "^[a-z0-9_-]{3,16}$"
        "pwd_regex" => "(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}"
        "intl_enabled" => true
        "languages" => array:9 [
          "supported" => []
          "default_lang" => null
          "include_default_lang" => true
          "pages_fallback_only" => false
          "translations" => true
          "translations_fallback" => true
          "session_store_active" => false
          "http_accept_language" => false
          "override_locale" => false
        ]
        "home" => array:2 [
          "alias" => "/home"
          "hide_in_urls" => false
        ]
        "pages" => array:26 [
          "theme" => "minimaxing"
          "order" => array:2 [
            "by" => "default"
            "dir" => "asc"
          ]
          "list" => array:1 [
            "count" => 20
          ]
          "dateformat" => array:3 [
            "default" => null
            "short" => "jS M Y"
            "long" => "F jS \a\t g:ia"
          ]
          "publish_dates" => true
          "process" => array:2 [
            "markdown" => true
            "twig" => false
          ]
          "twig_first" => false
          "never_cache_twig" => false
          "events" => array:2 [
            "page" => true
            "twig" => true
          ]
          "markdown" => array:5 [
            "extra" => true
            "auto_line_breaks" => false
            "auto_url_links" => false
            "escape_markup" => false
            "special_chars" => array:2 [
              ">" => "gt"
              "<" => "lt"
            ]
          ]
          "types" => array:7 [
            0 => "txt"
            1 => "xml"
            2 => "html"
            3 => "htm"
            4 => "json"
            5 => "rss"
            6 => "atom"
          ]
          "append_url_extension" => ""
          "expires" => 604800
          "cache_control" => null
          "last_modified" => false
          "etag" => true
          "vary_accept_encoding" => false
          "redirect_default_route" => false
          "redirect_default_code" => "301"
          "redirect_trailing_slash" => true
          "ignore_files" => array:1 [
            0 => ".DS_Store"
          ]
          "ignore_folders" => array:2 [
            0 => ".git"
            1 => ".idea"
          ]
          "ignore_hidden" => true
          "hide_empty_folders" => false
          "url_taxonomy_filters" => true
          "frontmatter" => array:2 [
            "process_twig" => false
            "ignore_fields" => array:2 [
              0 => "form"
              1 => "forms"
            ]
          ]
        ]
        "cache" => array:13 [
          "enabled" => true
          "check" => array:1 [
            "method" => "file"
          ]
          "driver" => "apcu"
          "prefix" => "g"
          "purge_at" => "0 4 * * *"
          "clear_at" => "0 3 * * *"
          "clear_job_type" => "standard"
          "clear_images_by_default" => true
          "cli_compatibility" => false
          "lifetime" => 604800
          "gzip" => true
          "allow_webserver_gzip" => false
          "redis" => array:1 [
            "socket" => false
          ]
        ]
        "twig" => array:7 [
          "cache" => true
          "debug" => true
          "auto_reload" => true
          "autoescape" => false
          "undefined_functions" => true
          "undefined_filters" => true
          "umask_fix" => false
        ]
        "assets" => array:12 [
          "css_pipeline" => true
          "css_pipeline_include_externals" => true
          "css_pipeline_before_excludes" => true
          "css_minify" => true
          "css_minify_windows" => false
          "css_rewrite" => true
          "js_pipeline" => true
          "js_pipeline_include_externals" => true
          "js_pipeline_before_excludes" => true
          "js_minify" => true
          "enable_asset_timestamp" => false
          "collections" => array:1 [
            "jquery" => "system://assets/jquery/jquery-2.x.min.js"
          ]
        ]
        "errors" => array:2 [
          "display" => 1
          "log" => true
        ]
        "log" => array:2 [
          "handler" => "file"
          "syslog" => array:1 [
            "facility" => "local6"
          ]
        ]
        "debugger" => array:3 [
          "enabled" => false
          "shutdown" => array:1 [
            "close_connection" => true
          ]
          "twig" => true
        ]
        "images" => array:6 [
          "default_image_quality" => 85
          "cache_all" => false
          "cache_perms" => "0755"
          "debug" => false
          "auto_fix_orientation" => false
          "seofriendly" => false
        ]
        "media" => array:5 [
          "enable_media_timestamp" => false
          "unsupported_inline_types" => []
          "allowed_fallback_types" => []
          "auto_metadata_exif" => false
          "upload_limit" => 33554432
        ]
        "session" => array:9 [
          "enabled" => true
          "initialize" => true
          "timeout" => 1800
          "name" => "grav-site"
          "uniqueness" => "path"
          "secure" => false
          "httponly" => true
          "split" => true
          "path" => "/"
        ]
        "gpm" => array:5 [
          "releases" => "stable"
          "proxy_url" => null
          "method" => "auto"
          "verify_peer" => true
          "official_gpm_only" => true
        ]
        "accounts" => array:2 [
          "type" => "data"
          "storage" => "file"
        ]
        "strict_mode" => array:2 [
          "yaml_compat" => true
          "twig_compat" => true
        ]
      ]
      "theme" => array:2 [
        "enabled" => true
        "dropdown" => array:1 [
          "enabled" => false
        ]
      ]
      "site" => array:14 [
        "title" => "3Dvalley"
        "default_lang" => "en"
        "author" => array:2 [
          "name" => "Admin"
          "email" => "webmaster@3dvalley.com"
        ]
        "taxonomies" => array:2 [
          0 => "category"
          1 => "tag"
        ]
        "metadata" => array:1 [
          "description" => "Free 3D models and textures"
        ]
        "summary" => array:4 [
          "enabled" => true
          "format" => "short"
          "size" => 300
          "delimiter" => "==="
        ]
        "redirects" => array:12 [
          "/tutorials/3d-studio-max-hotkeys-and-mouse-essentials" => "/tutorials/threed-studio-max-hotkeys-and-mouse-essentials "
          "/tutorials/3d-studio-max-tutorial-modeling-a-plunger" => "/tutorials/modeling-a-plunger-in-3d-studio-max"
          "/tutorials/modeling-a-brake-rotor" => "/tutorials/modeling-brake-rotor-in-3d-studio-max"
          "/models" => "/3d-models"
          "/free-textures" => "/textures"
          "/textures.shtml" => "/textures"
          "/tutorials/rendering-objects-in-a-solidwire-mix" => "/tutorials/rendering-wip-images-in-3d-studio-max"
          "/tutorials/modeling-a-highly-detailed-basketball-in-3d-studio-max" => "/tutorials/modeling-a-highly-detailed-basketball-in-3ds-max/"
          "/models.shtml" => "/3d-models"
          "/c/tutorials" => "/tutorials"
          "/models/models_household.shtml" => "/3d-models/household"
          "/downloadables/3DStudioMAX-hotkeys.pdf" => "/tutorials/threed-studio-max-hotkeys-and-mouse-essentials"
        ]
        "routes" => null
        "blog" => array:1 [
          "route" => "/blog"
        ]
        "header" => array:2 [
          "title" => "I'm Jonathan Doe."
          "description" => "I'm a Manila based <span>graphic designer</span>, <span>illustrator</span> and <span>webdesigner</span> creating awesome and effective visual identities for companies of all sizes around the globe. Let's <a class="smoothscroll" href="#about">start scrolling</a> and learn more <a class="smoothscroll" href="#about">about me</a>."
        ]
        "copyright" => array:2 [
          0 => array:1 [
            "line" => "Copyright 2014 CeeVee"
          ]
          1 => array:1 [
            "line" => "Design by <a title="Styleshout" href="http://www.styleshout.com/">Styleshout</a>"
          ]
        ]
        "social" => array:7 [
          0 => array:2 [
            "url" => "#"
            "icon" => "facebook"
          ]
          1 => array:2 [
            "url" => "#"
            "icon" => "twitter"
          ]
          2 => array:2 [
            "url" => "#"
            "icon" => "google-plus"
          ]
          3 => array:2 [
            "url" => "#"
            "icon" => "linkedin"
          ]
          4 => array:2 [
            "url" => "#"
            "icon" => "instagram"
          ]
          5 => array:2 [
            "url" => "#"
            "icon" => "dribbble"
          ]
          6 => array:2 [
            "url" => "#"
            "icon" => "skype"
          ]
        ]
        "twitter" => array:7 [
          "id" => "657554810648948736"
          "domId" => "tw-widget1"
          "maxTweets" => 3
          "enableLinks" => "true"
          "showInteraction" => "false"
          "showImages" => "false"
          "showUser" => "false"
        ]
        "acxtest" => "TEST"
      ]
      "uri" => Uri {}
      "assets" => Assets {}
      "taxonomy" => Taxonomy {}
      "browser" => Browser {}
      "base_dir" => "/home/jhiemstraxartec/public_html/test"
      "home_url" => "/"
      "base_url" => ""
      "base_url_absolute" => "http://www.3dvalley.com"
      "base_url_relative" => ""
      "base_url_simple" => ""
      "theme_dir" => "/home/jhiemstraxartec/public_html/test/user/themes/minimaxing"
      "theme_url" => "/user/themes/minimaxing"
      "html_lang" => "en"
      "language_codes" => LanguageCodes {}
      "json" => "</script><script>"
      "myvar" => "</script><script>"
      "form" => null
      "form_max_filesize" => 32
      "form_json_response" => []
      "pages" => Page {}
      "page" => Page {}
      "header" => {}
      "media" => Media {}
      "content" => """
        <p>Like most tasks in 3D Studio Max and similar products, rigging robots is easy, if you know how. Depending on the complexity of the robot, some may find it even easier than rigging a human or animal character. This is because most parts of a robot do not deform during movement, with the exception of cabling and other flexible parts, so you don’t have to ‘skin’ it. One of the primary challenges in building a cool robot, which still looks cool when animated, is creating realistic mechanical joints.</p>\n
        \n
        <p>The first version of our example robotic leg below is not very realistic however, because it would collapse like a bone structure without muscles. In the second version, we will add some robotic ‘muscles’, and the third version will include a hose. Click on the download links below some of the pictures to download the corresponding scene.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/robotrigging_mainthumb_ani.gif" /></p>\n
        <h4>1. A Human Leg</h4>\n
        <p>When rigging a human leg, the mesh deforms when the knee bends, pushing vertexes away from each other on one side and towards each other on the opposite side. This is accomplished by using a Skin modifier that binds vertexes of the mesh to the bones. The colors of the vertexes indicate the weight values which dictate how much influence moving the joint will have on those vertexes. Red vertexes represent the most rigid parts.</p>\n
        <h4>2. Our Example Robot Leg</h4>\n
        <p>Robots are typically made of metal, plastic, or some other hard and rigid material that does not deform. The following picture shows the five objects that form the basis of our example leg.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p2a.jpg" /> <img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p2b.jpg" /></p>\n
        <h4>3. Rigging Our Example Robot Leg</h4>\n
        <p>As usual, I have to make a note that the following is just a way of doing this, which doesn’t necessarily means it is the way (we’ll actually show another way later on). Picture 3a below shows the (unsmoothed) wireframe of the objects that make up this leg. Click the link below it to download the scene, or download the scene including the bones by clicking the link below Picture 3h, or just watch the pictures if you do not feel like actually doing any of this right now.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3a.gif" />\n
        Picture 3a.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_start.zip">Download start scene here</a></p>\n
        <p>The red dots in the picture above represent the pivot of the object. In the scene you can download, I have already moved them to the correct position. The UpperLeg’s pivot is positioned at exactly the same position as the pivot of Cylinder01, and LowerLeg’s pivot is at the same position as the pivot of Cylinder02. When switching to the top view, they are all aligned. It is essential that the bones you add start or end exactly at those pivot points.</p>\n
        <p>A way of making sure the bones are positioned correctly is to snap to pivots. When you use this method it is also essential that all the pivots are aligned when viewing from the top. If in your robot they aren’t and it is too complex or difficult to align them, you can skip the following snap settings and just draw the bones, select them all and move them to the center of the leg (Top view). To use the snap setting, right-click the Snaps Toggle button on the main toolbar and select Pivot and clear others if necessary (see Picture 3b). Now click the Snaps Toggle button again (with the left mouse button) to enable it.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3b.gif" />\n
        Picture 3b.</p>\n
        <p>Click the Bones button in the Systems section on the Create tab of the Command Panel as displayed in Picture 3c below. Choose SplineIKSolver as the IK Solver and enable Assign to Children (you can use another IK Solver or none at all, if you prefer).</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3c.gif" />\n
        Picture 3c.</p>\n
        <p>Now draw the bones, by clicking on the spots 1, 2, and 3 shown in Picture 3d and then right-click anywhere in the viewport to stop. Spots 1, 2 and 3 are the pivot points of Cylinder01, Cylinder02, and Cylinder03.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3d.gif" />\n
        Picture 3d.</p>\n
        <p>When the Spline IK Solver dialog shown in Picture 3e below opens, just click OK.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3e.gif" />\n
        Picture 3e.</p>\n
        <p>Now before you link the bones to the leg, you should make sure that the pivots of the bones are positioned correctly on the pivot of the limbs, the Spline IK Solver we added moved them slightly. To move a bone’s pivot, click the Affect Pivot Only button on the Hierarchy tab of the Command Panel, and disable the Enabled button on the Motion tab of the Command Panel.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3f.gif" />\n
        Picture 3f.</p>\n
        <p>Then select the pivot of the bone and move it to the correct position. Make sure you zoom in and place it exactly in the center of the limbs’ pivots. You also might want to disable the snap to pivot setting first by clicking the Snaps Toggle button again. If for some reason you cannot get them in the right position, there is no need to continue, as the whole setup depends on the pivots’ position.</p>\n
        <p>When you are sure the pivots are positioned correctly, select Cylinder01 and link it to UpperLeg. Select Cylinder02 and link it to the LowerLeg, and select Cylinder03 to LowerLeg as well. To link one object to another click the Select and Link button on the main tool bar, select the object you want to link and drag to the object you want to link to. If you do it correctly, the object you link to, will flash white once.</p>\n
        <p>We will use the same select and link method to link the objects to the bones, instead of using a Skin modifier. Link UpperLeg to the upper bone, and link LowerLeg to the lower bone.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3g.gif" />\n
        Picture 3g.</p>\n
        <p>When you done all of the above, or download the scene including the bones by using the link below, select the IK Chain or any of the point helpers and move it. The knee joint should now operate as shown in Picture 3g, without any of the objects deforming during movement.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3h.gif" />\n
        Picture 3h.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_end.zip">Download scene here.</a></p>\n
        <h4>4. Another Approach</h4>\n
        <p>Before we continue with this leg and add some muscles, we will use another method of rigging this leg. As someone kindly pointed out to me, there is no absolute need to use bones . If you are new to rigging characters or robots in particular, you may want to go for the bones method discussed above, but a robot is often a skeleton by itself, eliminating the need for bones. 3D Studio Max allows any object to act like a bone, and allows you also to assign IK solvers to any hierarchical set of objects. Also in this type of ‘bone’ setup, it is absolutely imperative that the pivots of the objects are in the correct position. We will illustrate this with some pictures later.</p>\n
        <p>To make this work with the previous example (delete the previous bone structure or use the scene you downloaded earlier), and link the objects to each other as followed:</p>\n
        <p>Cylinder03 -&gt; LowerLeg\n
        LowerLeg -&gt; Cylinder02</p>\n
        <p>Cylinder02 -&gt; UpperLeg</p>\n
        <p>UpperLeg -&gt; Cylinder01</p>\n
        <p>Press the Schematic View (Open) button on the main toolbar to check if the hierarchy is now correct as displayed in Picture 4a.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4a.gif" />\n
        Picture 4a.</p>\n
        <p>Now all you need to do is add an IK Solver to this hierarchy to make it act like a robotic leg. You can use the IK Solver you prefer, but in this example, we are going to use the History Independent solver. Select Cylinder03, choose HI Solver from the IK Solvers section in the Animation menu, and select Cylinder01. To prevent you from linking the solver to UpperLeg instead of Cylinder01, use the Select by Name option, which basically means you should press the H key on your keyboard after you choose HI Solver from the menu, and then pick Cylinder01 from the list, instead of clicking on it in the viewport.</p>\n
        <p>If you performed the previous tasks correctly, the results should be like in Picture 4b with the IK Chain selected. If you move the IK Chain the leg should work. To make the task of animating this leg a bit more convenient, you should link the IK Chain to a Point Helper.</p>\n
        <p>A Point helper can be created by clicking the Point button in the Helpers section of the Create tab on the Command Panel, and clicking somewhere in the viewport, as depicted in Picture 4b below. In this case, I suggest you place it somewhere at the bottom of the leg. Use the same Select and Link method as discussed earlier to link the IK Chain to the Point helper, so you can animate the leg by moving the Point helper.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4b.gif" />\n
        Picture 4b.</p>\n
        <p>If your robot has a complex geometry and animating the individual objects slows down your computer too much, you can configure 3D Studio Max to display the objects as bones. When using our example leg from the previous steps, you should select Cylinder01, 02, 03, UpperLeg, and LowerLeg, and select Bone Tools from the Character menu. Enable the Bone On option on the Bone Tools dialog as shown below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4c.gif" />\n
        Picture 4c.</p>\n
        <p>Next, open the Display tab on the Command Panel, scroll down, and in the Link Display section enable the Display Links option and the Link Replaces Object option.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4d.gif" />\n
        Picture 4d.</p>\n
        <p>The results should be as depicted in Picture 4e below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4e.gif" />\n
        Picture 4e.</p>\n
        <p>Alternatively, you can enable only the Display Links option and right above the Link Display section enable the Display as Box option in the Display Properties section. The results should be as depicted in Picture 4f below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4f.gif" />\n
        Picture 4f.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_ik_end.zip">Download the scene here.</a></p>\n
        <h4>5. Muscles</h4>\n
        <p>As I mentioned earlier, the leg used in the example above is not very realistic; it needs some muscles to make it move automatically and at the same time give it some strength. You can make up your own mechanisms, but you can also use one of the three main methods used in modern real world robots:</p>\n
        <p>Electrical motors</p>\n
        <p>For the example leg from above, this would be the easy way out, as you would ‘only’ have to increase the size of the knee joint and modify it into to something like shown below in Photo I, so it becomes viable an electrical motor could fit inside. Additionally, rigging the robot is easy as you can use one of the methods we discussed earlier.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/motoman_sv3x.jpg" />\n
        Photo I. Industrial robot arm powered by electrical motors.</p>\n
        <p>Hydraulic/Pneumatic/Magnetic pistons</p>\n
        <p>Another commonly used method to power robots are pistons. A piston (see Photo II below) is basically consists of a metal bar that goes inside a tube. Pressurized air or oil is pumped into the piston to push out metal bar. This is usually the sound you here when a robot moves. If you want to make them realistic, you should attach a hose to it, which leads to a compressor somewhere in or on the robot. These hydraulic or pneumatic pistons are much more powerful than electrical motors. Smaller pistons may use magnetic force to either pull or push the metal bar. The latter would have electrical wires attached to it, instead of a hose.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/photo_ii.gif" />\n
        Photo II. Crane powered by hydraulic pistons.</p>\n
        <p>Picture 5a and 5b show our second example leg. It includes a piston that is made of two cylinders called Piston_PA and Piston_PB. Two additional cylinders (P_Axis_A and P_Axis_B) form the axis of the piston’s parts.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5a.gif" /> <img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5b.gif" />\n
        Picture 5a. &amp; Picture 5b.</p>\n
        <p>As you can see in Picture 5c below, we already rigged the leg with two bones and an IKSplineSolver. You can download the scene by clicking the link below the picture.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5c.gif" />\n
        Picture 5c.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_pistons_start.zip">Download the scene here.</a></p>\n
        <p>First, we will link the piston’s parts to the leg as followed:</p>\n
        <p>P_Axis_A -&gt; UpperLeg\n
        P_Axis_B -&gt; LowerLeg</p>\n
        <p>Piston_PA -&gt; P_Axis_A</p>\n
        <p>Piston_PB -&gt; P_Axis_B</p>\n
        <p>The hierarchy of the leg should now be exactly like in Picture 5d.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5d.gif" />\n
        Picture 5d.</p>\n
        <p>If we would bend the knee, by using the lower helper (Point3) for example, the two parts of the piston will not stay aligned correctly and will ‘break’ as shown in Picture 5e below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5e.gif" />\n
        Picture 5e.</p>\n
        <p>(If you moved the leg, press use Undo (Ctrl-Z) to move it back to its original position.)</p>\n
        <p>To make sure the metal bar stays inside the tube, we need to use a constraint, in this case the Look At constraint. As in the previous parts of this tutorial, the placement of the pivots of the piston’s parts is essential to make it work. The pivots for P_Axis_A and Piston_PA are exactly on the same position, and the pivots for P_Axis_B and Piston_PB are also exactly on the same position. We have already done this in the downloadable scene by selecting the parts that have the pivots on the same axis, enabling the Affect Pivot Only button (see Picture 3f) and using the Align tool (on both the Front, Top, and Left view).</p>\n
        <p>We will need to add two Look At constraints, one for each part of the piston. Select Piston_PA and select Look At from the Constraints section in the Animation menu, as depicted in Picture 5f below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5f.gif" />\n
        Picture 5f.</p>\n
        <p>Press the H key on your keyboard, select P_Axis_B, and click the Pick button. Piston_PA now changes its orientation. To make sure it point in the original direction, enable the Keep Initial Offset option on the Parameters section on the Motion tab of the Command Panel, as depicted in Picture 5g below. (The parameters section opened automatically when you added the Look At constraint.)</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5g.gif" />\n
        Picture 5g.</p>\n
        <p>Repeat this step for the other part of the piston, in other words: select Piston_PB, select Look At constraint from the Animation menu, pick the P_Axis_A as the target (using the H button to pick it). Also enable the Keep Initial Offset option again. So what we did is make one part of the piston ‘looks at’ the opposite part’s axis. The orientation is depicted with a blue line. If you select the helper Point03 and move it again, you will see that the metal bat slides neatly into the tube, as shown in Picture 5h below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5h.gif" />\n
        Picture 5h.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_pistons_end.zip">Download the scene here.</a></p>\n
        <p>To make it more realistic, we need to attach a pipe or hose to the hydraulic or pneumatic piston, and we need to make sure it moves and/or bends when the leg moves. There are many ways of doing this, but a relatively easy one is to use the extended primitive Hose. The advantage of using the Hose primitive is that you don’t need to rig it; no bones, and no IK. Instead, we are going to add two extra Cylinders, in addition to the Hose, and let the Hose start and end at those cylinders.</p>\n
        <p>In Picture 5i below you can see where we placed the two cylinders. The cylinder on the left is linked to UpperLeg, and the other is linked to Piston_PA. These cylinders represent the entry points of the hose, or the connector of a wire for example. You will probably want to use something more sophisticated than a cylinder, but make sure it is a separate object.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5i.gif" />\n
        Picture 5i.</p>\n
        <p>Next, create the hose by selecting Extended Primitives on the Create tab of the Command Panel, clicking the Hose button, and drawing a hose in any viewport, as shown in Picture 5j below. Don’t worry about its size, location, or shape yet.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5j.gif" />\n
        Picture 5j.</p>\n
        <p>On the Modify tab of the Command Panel, enable the Bound to Object Pivots. Click the Pick Top Object button and click on the left cylinder. Click the Pick Bottom Object button and click on the right cylinder (or use the H key on your keyboard).</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5k.gif" />\n
        Picture 5k.</p>\n
        <p>Depending on the orientation of the cylinders we use to connect the hose and the viewport you created them on, you may have to rotate the pivot of one or both cylinders. So if necessary, select the cylinder, enable the Affect Pivot Only button (picture 3f), and rotate the pivot. While you rotate the pivot, the hose will bend with it so you can easily see when it is at the right angle.</p>\n
        <p>When the hose is correctly aligned to the cylinders, click the hose again, scroll down below on the Modify tab, and disable the Flex Section Enable option as shown below in Picture 5l. Also decrease the Diameter: value in the Hose Shape section to a value that is less than the cylinders.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5l.gif" />\n
        Picture 5l.</p>\n
        <p>As you can see, the hose is too long and needs to hang more tightly against the leg. You can do this by decreasing the Tension values (see Picture 5k). In the final images below, we used 25 for both cylinders. If you move the leg again using on of the helpers, you will notice that the hose will stay in position and even bend when it has to. Click on one of the images to see the final animation.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5m.gif" /> <img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5n.gif" />\n
        Picture 5m.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_piston_hose.zip">Download the final scene here.</a></p>\n
        <p>I hope you enjoyed this tutorial and that it contributed something to your 3D Studio Max modeling skills.</p>
        """
      "grav" => Grav {}
      "theme_config" => array:2 [
        "enabled" => true
        "dropdown" => array:1 [
          "enabled" => false
        ]
      ]
    ]
    
  2. []
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
cache
/
twig
/
6c
/
6c1d65ea28cc330dbce01f6ef934f905e3f32b4a038c5fa70ecf5b43ea230884.php
use Twig\Source;
use Twig\Template;
 
/* partials/sidebar1.html.twig */
class __TwigTemplate_a78487088a0ec74ac1aef8f1f93868851d1727715fab3c67f9d695c8bcc1596c extends \Twig\Template
{
    public function __construct(Environment $env)
    {
        parent::__construct($env);
 
        $this->parent = false;
 
        $this->blocks = [
        ];
    }
 
    protected function doDisplay(array $context, array $blocks = [])
    {
        // line 1
        $this->loadTemplate("partials/sections/bios.html.twig", "partials/sidebar1.html.twig", 1)->display($context);
        // line 2
        $this->loadTemplate("partials/sections/sidebarbanner.html.twig", "partials/sidebar1.html.twig", 2)->display($context);
        // line 3
        $this->loadTemplate("partials/sections/randomimage.html.twig", "partials/sidebar1.html.twig", 3)->display($context);
    }
 
    public function getTemplateName()
    {
        return "partials/sidebar1.html.twig";
    }
 
    public function isTraitable()
    {
        return false;
    }
 
    public function getDebugInfo()
    {
        return array (  34 => 3,  32 => 2,  30 => 1,);
    }
Arguments
  1. array:30 [
      "config" => Config {}
      "system" => array:27 [
        "absolute_urls" => false
        "timezone" => ""
        "default_locale" => null
        "param_sep" => ":"
        "wrapped_site" => false
        "reverse_proxy_setup" => false
        "force_ssl" => false
        "force_lowercase_urls" => true
        "custom_base_url" => "http://www.3dvalley.com"
        "username_regex" => "^[a-z0-9_-]{3,16}$"
        "pwd_regex" => "(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}"
        "intl_enabled" => true
        "languages" => array:9 [
          "supported" => []
          "default_lang" => null
          "include_default_lang" => true
          "pages_fallback_only" => false
          "translations" => true
          "translations_fallback" => true
          "session_store_active" => false
          "http_accept_language" => false
          "override_locale" => false
        ]
        "home" => array:2 [
          "alias" => "/home"
          "hide_in_urls" => false
        ]
        "pages" => array:26 [
          "theme" => "minimaxing"
          "order" => array:2 [
            "by" => "default"
            "dir" => "asc"
          ]
          "list" => array:1 [
            "count" => 20
          ]
          "dateformat" => array:3 [
            "default" => null
            "short" => "jS M Y"
            "long" => "F jS \a\t g:ia"
          ]
          "publish_dates" => true
          "process" => array:2 [
            "markdown" => true
            "twig" => false
          ]
          "twig_first" => false
          "never_cache_twig" => false
          "events" => array:2 [
            "page" => true
            "twig" => true
          ]
          "markdown" => array:5 [
            "extra" => true
            "auto_line_breaks" => false
            "auto_url_links" => false
            "escape_markup" => false
            "special_chars" => array:2 [
              ">" => "gt"
              "<" => "lt"
            ]
          ]
          "types" => array:7 [
            0 => "txt"
            1 => "xml"
            2 => "html"
            3 => "htm"
            4 => "json"
            5 => "rss"
            6 => "atom"
          ]
          "append_url_extension" => ""
          "expires" => 604800
          "cache_control" => null
          "last_modified" => false
          "etag" => true
          "vary_accept_encoding" => false
          "redirect_default_route" => false
          "redirect_default_code" => "301"
          "redirect_trailing_slash" => true
          "ignore_files" => array:1 [
            0 => ".DS_Store"
          ]
          "ignore_folders" => array:2 [
            0 => ".git"
            1 => ".idea"
          ]
          "ignore_hidden" => true
          "hide_empty_folders" => false
          "url_taxonomy_filters" => true
          "frontmatter" => array:2 [
            "process_twig" => false
            "ignore_fields" => array:2 [
              0 => "form"
              1 => "forms"
            ]
          ]
        ]
        "cache" => array:13 [
          "enabled" => true
          "check" => array:1 [
            "method" => "file"
          ]
          "driver" => "apcu"
          "prefix" => "g"
          "purge_at" => "0 4 * * *"
          "clear_at" => "0 3 * * *"
          "clear_job_type" => "standard"
          "clear_images_by_default" => true
          "cli_compatibility" => false
          "lifetime" => 604800
          "gzip" => true
          "allow_webserver_gzip" => false
          "redis" => array:1 [
            "socket" => false
          ]
        ]
        "twig" => array:7 [
          "cache" => true
          "debug" => true
          "auto_reload" => true
          "autoescape" => false
          "undefined_functions" => true
          "undefined_filters" => true
          "umask_fix" => false
        ]
        "assets" => array:12 [
          "css_pipeline" => true
          "css_pipeline_include_externals" => true
          "css_pipeline_before_excludes" => true
          "css_minify" => true
          "css_minify_windows" => false
          "css_rewrite" => true
          "js_pipeline" => true
          "js_pipeline_include_externals" => true
          "js_pipeline_before_excludes" => true
          "js_minify" => true
          "enable_asset_timestamp" => false
          "collections" => array:1 [
            "jquery" => "system://assets/jquery/jquery-2.x.min.js"
          ]
        ]
        "errors" => array:2 [
          "display" => 1
          "log" => true
        ]
        "log" => array:2 [
          "handler" => "file"
          "syslog" => array:1 [
            "facility" => "local6"
          ]
        ]
        "debugger" => array:3 [
          "enabled" => false
          "shutdown" => array:1 [
            "close_connection" => true
          ]
          "twig" => true
        ]
        "images" => array:6 [
          "default_image_quality" => 85
          "cache_all" => false
          "cache_perms" => "0755"
          "debug" => false
          "auto_fix_orientation" => false
          "seofriendly" => false
        ]
        "media" => array:5 [
          "enable_media_timestamp" => false
          "unsupported_inline_types" => []
          "allowed_fallback_types" => []
          "auto_metadata_exif" => false
          "upload_limit" => 33554432
        ]
        "session" => array:9 [
          "enabled" => true
          "initialize" => true
          "timeout" => 1800
          "name" => "grav-site"
          "uniqueness" => "path"
          "secure" => false
          "httponly" => true
          "split" => true
          "path" => "/"
        ]
        "gpm" => array:5 [
          "releases" => "stable"
          "proxy_url" => null
          "method" => "auto"
          "verify_peer" => true
          "official_gpm_only" => true
        ]
        "accounts" => array:2 [
          "type" => "data"
          "storage" => "file"
        ]
        "strict_mode" => array:2 [
          "yaml_compat" => true
          "twig_compat" => true
        ]
      ]
      "theme" => array:2 [
        "enabled" => true
        "dropdown" => array:1 [
          "enabled" => false
        ]
      ]
      "site" => array:14 [
        "title" => "3Dvalley"
        "default_lang" => "en"
        "author" => array:2 [
          "name" => "Admin"
          "email" => "webmaster@3dvalley.com"
        ]
        "taxonomies" => array:2 [
          0 => "category"
          1 => "tag"
        ]
        "metadata" => array:1 [
          "description" => "Free 3D models and textures"
        ]
        "summary" => array:4 [
          "enabled" => true
          "format" => "short"
          "size" => 300
          "delimiter" => "==="
        ]
        "redirects" => array:12 [
          "/tutorials/3d-studio-max-hotkeys-and-mouse-essentials" => "/tutorials/threed-studio-max-hotkeys-and-mouse-essentials "
          "/tutorials/3d-studio-max-tutorial-modeling-a-plunger" => "/tutorials/modeling-a-plunger-in-3d-studio-max"
          "/tutorials/modeling-a-brake-rotor" => "/tutorials/modeling-brake-rotor-in-3d-studio-max"
          "/models" => "/3d-models"
          "/free-textures" => "/textures"
          "/textures.shtml" => "/textures"
          "/tutorials/rendering-objects-in-a-solidwire-mix" => "/tutorials/rendering-wip-images-in-3d-studio-max"
          "/tutorials/modeling-a-highly-detailed-basketball-in-3d-studio-max" => "/tutorials/modeling-a-highly-detailed-basketball-in-3ds-max/"
          "/models.shtml" => "/3d-models"
          "/c/tutorials" => "/tutorials"
          "/models/models_household.shtml" => "/3d-models/household"
          "/downloadables/3DStudioMAX-hotkeys.pdf" => "/tutorials/threed-studio-max-hotkeys-and-mouse-essentials"
        ]
        "routes" => null
        "blog" => array:1 [
          "route" => "/blog"
        ]
        "header" => array:2 [
          "title" => "I'm Jonathan Doe."
          "description" => "I'm a Manila based <span>graphic designer</span>, <span>illustrator</span> and <span>webdesigner</span> creating awesome and effective visual identities for companies of all sizes around the globe. Let's <a class="smoothscroll" href="#about">start scrolling</a> and learn more <a class="smoothscroll" href="#about">about me</a>."
        ]
        "copyright" => array:2 [
          0 => array:1 [
            "line" => "Copyright 2014 CeeVee"
          ]
          1 => array:1 [
            "line" => "Design by <a title="Styleshout" href="http://www.styleshout.com/">Styleshout</a>"
          ]
        ]
        "social" => array:7 [
          0 => array:2 [
            "url" => "#"
            "icon" => "facebook"
          ]
          1 => array:2 [
            "url" => "#"
            "icon" => "twitter"
          ]
          2 => array:2 [
            "url" => "#"
            "icon" => "google-plus"
          ]
          3 => array:2 [
            "url" => "#"
            "icon" => "linkedin"
          ]
          4 => array:2 [
            "url" => "#"
            "icon" => "instagram"
          ]
          5 => array:2 [
            "url" => "#"
            "icon" => "dribbble"
          ]
          6 => array:2 [
            "url" => "#"
            "icon" => "skype"
          ]
        ]
        "twitter" => array:7 [
          "id" => "657554810648948736"
          "domId" => "tw-widget1"
          "maxTweets" => 3
          "enableLinks" => "true"
          "showInteraction" => "false"
          "showImages" => "false"
          "showUser" => "false"
        ]
        "acxtest" => "TEST"
      ]
      "uri" => Uri {}
      "assets" => Assets {}
      "taxonomy" => Taxonomy {}
      "browser" => Browser {}
      "base_dir" => "/home/jhiemstraxartec/public_html/test"
      "home_url" => "/"
      "base_url" => ""
      "base_url_absolute" => "http://www.3dvalley.com"
      "base_url_relative" => ""
      "base_url_simple" => ""
      "theme_dir" => "/home/jhiemstraxartec/public_html/test/user/themes/minimaxing"
      "theme_url" => "/user/themes/minimaxing"
      "html_lang" => "en"
      "language_codes" => LanguageCodes {}
      "json" => "</script><script>"
      "myvar" => "</script><script>"
      "form" => null
      "form_max_filesize" => 32
      "form_json_response" => []
      "pages" => Page {}
      "page" => Page {}
      "header" => {}
      "media" => Media {}
      "content" => """
        <p>Like most tasks in 3D Studio Max and similar products, rigging robots is easy, if you know how. Depending on the complexity of the robot, some may find it even easier than rigging a human or animal character. This is because most parts of a robot do not deform during movement, with the exception of cabling and other flexible parts, so you don’t have to ‘skin’ it. One of the primary challenges in building a cool robot, which still looks cool when animated, is creating realistic mechanical joints.</p>\n
        \n
        <p>The first version of our example robotic leg below is not very realistic however, because it would collapse like a bone structure without muscles. In the second version, we will add some robotic ‘muscles’, and the third version will include a hose. Click on the download links below some of the pictures to download the corresponding scene.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/robotrigging_mainthumb_ani.gif" /></p>\n
        <h4>1. A Human Leg</h4>\n
        <p>When rigging a human leg, the mesh deforms when the knee bends, pushing vertexes away from each other on one side and towards each other on the opposite side. This is accomplished by using a Skin modifier that binds vertexes of the mesh to the bones. The colors of the vertexes indicate the weight values which dictate how much influence moving the joint will have on those vertexes. Red vertexes represent the most rigid parts.</p>\n
        <h4>2. Our Example Robot Leg</h4>\n
        <p>Robots are typically made of metal, plastic, or some other hard and rigid material that does not deform. The following picture shows the five objects that form the basis of our example leg.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p2a.jpg" /> <img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p2b.jpg" /></p>\n
        <h4>3. Rigging Our Example Robot Leg</h4>\n
        <p>As usual, I have to make a note that the following is just a way of doing this, which doesn’t necessarily means it is the way (we’ll actually show another way later on). Picture 3a below shows the (unsmoothed) wireframe of the objects that make up this leg. Click the link below it to download the scene, or download the scene including the bones by clicking the link below Picture 3h, or just watch the pictures if you do not feel like actually doing any of this right now.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3a.gif" />\n
        Picture 3a.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_start.zip">Download start scene here</a></p>\n
        <p>The red dots in the picture above represent the pivot of the object. In the scene you can download, I have already moved them to the correct position. The UpperLeg’s pivot is positioned at exactly the same position as the pivot of Cylinder01, and LowerLeg’s pivot is at the same position as the pivot of Cylinder02. When switching to the top view, they are all aligned. It is essential that the bones you add start or end exactly at those pivot points.</p>\n
        <p>A way of making sure the bones are positioned correctly is to snap to pivots. When you use this method it is also essential that all the pivots are aligned when viewing from the top. If in your robot they aren’t and it is too complex or difficult to align them, you can skip the following snap settings and just draw the bones, select them all and move them to the center of the leg (Top view). To use the snap setting, right-click the Snaps Toggle button on the main toolbar and select Pivot and clear others if necessary (see Picture 3b). Now click the Snaps Toggle button again (with the left mouse button) to enable it.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3b.gif" />\n
        Picture 3b.</p>\n
        <p>Click the Bones button in the Systems section on the Create tab of the Command Panel as displayed in Picture 3c below. Choose SplineIKSolver as the IK Solver and enable Assign to Children (you can use another IK Solver or none at all, if you prefer).</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3c.gif" />\n
        Picture 3c.</p>\n
        <p>Now draw the bones, by clicking on the spots 1, 2, and 3 shown in Picture 3d and then right-click anywhere in the viewport to stop. Spots 1, 2 and 3 are the pivot points of Cylinder01, Cylinder02, and Cylinder03.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3d.gif" />\n
        Picture 3d.</p>\n
        <p>When the Spline IK Solver dialog shown in Picture 3e below opens, just click OK.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3e.gif" />\n
        Picture 3e.</p>\n
        <p>Now before you link the bones to the leg, you should make sure that the pivots of the bones are positioned correctly on the pivot of the limbs, the Spline IK Solver we added moved them slightly. To move a bone’s pivot, click the Affect Pivot Only button on the Hierarchy tab of the Command Panel, and disable the Enabled button on the Motion tab of the Command Panel.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3f.gif" />\n
        Picture 3f.</p>\n
        <p>Then select the pivot of the bone and move it to the correct position. Make sure you zoom in and place it exactly in the center of the limbs’ pivots. You also might want to disable the snap to pivot setting first by clicking the Snaps Toggle button again. If for some reason you cannot get them in the right position, there is no need to continue, as the whole setup depends on the pivots’ position.</p>\n
        <p>When you are sure the pivots are positioned correctly, select Cylinder01 and link it to UpperLeg. Select Cylinder02 and link it to the LowerLeg, and select Cylinder03 to LowerLeg as well. To link one object to another click the Select and Link button on the main tool bar, select the object you want to link and drag to the object you want to link to. If you do it correctly, the object you link to, will flash white once.</p>\n
        <p>We will use the same select and link method to link the objects to the bones, instead of using a Skin modifier. Link UpperLeg to the upper bone, and link LowerLeg to the lower bone.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3g.gif" />\n
        Picture 3g.</p>\n
        <p>When you done all of the above, or download the scene including the bones by using the link below, select the IK Chain or any of the point helpers and move it. The knee joint should now operate as shown in Picture 3g, without any of the objects deforming during movement.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3h.gif" />\n
        Picture 3h.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_end.zip">Download scene here.</a></p>\n
        <h4>4. Another Approach</h4>\n
        <p>Before we continue with this leg and add some muscles, we will use another method of rigging this leg. As someone kindly pointed out to me, there is no absolute need to use bones . If you are new to rigging characters or robots in particular, you may want to go for the bones method discussed above, but a robot is often a skeleton by itself, eliminating the need for bones. 3D Studio Max allows any object to act like a bone, and allows you also to assign IK solvers to any hierarchical set of objects. Also in this type of ‘bone’ setup, it is absolutely imperative that the pivots of the objects are in the correct position. We will illustrate this with some pictures later.</p>\n
        <p>To make this work with the previous example (delete the previous bone structure or use the scene you downloaded earlier), and link the objects to each other as followed:</p>\n
        <p>Cylinder03 -&gt; LowerLeg\n
        LowerLeg -&gt; Cylinder02</p>\n
        <p>Cylinder02 -&gt; UpperLeg</p>\n
        <p>UpperLeg -&gt; Cylinder01</p>\n
        <p>Press the Schematic View (Open) button on the main toolbar to check if the hierarchy is now correct as displayed in Picture 4a.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4a.gif" />\n
        Picture 4a.</p>\n
        <p>Now all you need to do is add an IK Solver to this hierarchy to make it act like a robotic leg. You can use the IK Solver you prefer, but in this example, we are going to use the History Independent solver. Select Cylinder03, choose HI Solver from the IK Solvers section in the Animation menu, and select Cylinder01. To prevent you from linking the solver to UpperLeg instead of Cylinder01, use the Select by Name option, which basically means you should press the H key on your keyboard after you choose HI Solver from the menu, and then pick Cylinder01 from the list, instead of clicking on it in the viewport.</p>\n
        <p>If you performed the previous tasks correctly, the results should be like in Picture 4b with the IK Chain selected. If you move the IK Chain the leg should work. To make the task of animating this leg a bit more convenient, you should link the IK Chain to a Point Helper.</p>\n
        <p>A Point helper can be created by clicking the Point button in the Helpers section of the Create tab on the Command Panel, and clicking somewhere in the viewport, as depicted in Picture 4b below. In this case, I suggest you place it somewhere at the bottom of the leg. Use the same Select and Link method as discussed earlier to link the IK Chain to the Point helper, so you can animate the leg by moving the Point helper.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4b.gif" />\n
        Picture 4b.</p>\n
        <p>If your robot has a complex geometry and animating the individual objects slows down your computer too much, you can configure 3D Studio Max to display the objects as bones. When using our example leg from the previous steps, you should select Cylinder01, 02, 03, UpperLeg, and LowerLeg, and select Bone Tools from the Character menu. Enable the Bone On option on the Bone Tools dialog as shown below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4c.gif" />\n
        Picture 4c.</p>\n
        <p>Next, open the Display tab on the Command Panel, scroll down, and in the Link Display section enable the Display Links option and the Link Replaces Object option.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4d.gif" />\n
        Picture 4d.</p>\n
        <p>The results should be as depicted in Picture 4e below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4e.gif" />\n
        Picture 4e.</p>\n
        <p>Alternatively, you can enable only the Display Links option and right above the Link Display section enable the Display as Box option in the Display Properties section. The results should be as depicted in Picture 4f below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4f.gif" />\n
        Picture 4f.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_ik_end.zip">Download the scene here.</a></p>\n
        <h4>5. Muscles</h4>\n
        <p>As I mentioned earlier, the leg used in the example above is not very realistic; it needs some muscles to make it move automatically and at the same time give it some strength. You can make up your own mechanisms, but you can also use one of the three main methods used in modern real world robots:</p>\n
        <p>Electrical motors</p>\n
        <p>For the example leg from above, this would be the easy way out, as you would ‘only’ have to increase the size of the knee joint and modify it into to something like shown below in Photo I, so it becomes viable an electrical motor could fit inside. Additionally, rigging the robot is easy as you can use one of the methods we discussed earlier.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/motoman_sv3x.jpg" />\n
        Photo I. Industrial robot arm powered by electrical motors.</p>\n
        <p>Hydraulic/Pneumatic/Magnetic pistons</p>\n
        <p>Another commonly used method to power robots are pistons. A piston (see Photo II below) is basically consists of a metal bar that goes inside a tube. Pressurized air or oil is pumped into the piston to push out metal bar. This is usually the sound you here when a robot moves. If you want to make them realistic, you should attach a hose to it, which leads to a compressor somewhere in or on the robot. These hydraulic or pneumatic pistons are much more powerful than electrical motors. Smaller pistons may use magnetic force to either pull or push the metal bar. The latter would have electrical wires attached to it, instead of a hose.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/photo_ii.gif" />\n
        Photo II. Crane powered by hydraulic pistons.</p>\n
        <p>Picture 5a and 5b show our second example leg. It includes a piston that is made of two cylinders called Piston_PA and Piston_PB. Two additional cylinders (P_Axis_A and P_Axis_B) form the axis of the piston’s parts.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5a.gif" /> <img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5b.gif" />\n
        Picture 5a. &amp; Picture 5b.</p>\n
        <p>As you can see in Picture 5c below, we already rigged the leg with two bones and an IKSplineSolver. You can download the scene by clicking the link below the picture.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5c.gif" />\n
        Picture 5c.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_pistons_start.zip">Download the scene here.</a></p>\n
        <p>First, we will link the piston’s parts to the leg as followed:</p>\n
        <p>P_Axis_A -&gt; UpperLeg\n
        P_Axis_B -&gt; LowerLeg</p>\n
        <p>Piston_PA -&gt; P_Axis_A</p>\n
        <p>Piston_PB -&gt; P_Axis_B</p>\n
        <p>The hierarchy of the leg should now be exactly like in Picture 5d.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5d.gif" />\n
        Picture 5d.</p>\n
        <p>If we would bend the knee, by using the lower helper (Point3) for example, the two parts of the piston will not stay aligned correctly and will ‘break’ as shown in Picture 5e below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5e.gif" />\n
        Picture 5e.</p>\n
        <p>(If you moved the leg, press use Undo (Ctrl-Z) to move it back to its original position.)</p>\n
        <p>To make sure the metal bar stays inside the tube, we need to use a constraint, in this case the Look At constraint. As in the previous parts of this tutorial, the placement of the pivots of the piston’s parts is essential to make it work. The pivots for P_Axis_A and Piston_PA are exactly on the same position, and the pivots for P_Axis_B and Piston_PB are also exactly on the same position. We have already done this in the downloadable scene by selecting the parts that have the pivots on the same axis, enabling the Affect Pivot Only button (see Picture 3f) and using the Align tool (on both the Front, Top, and Left view).</p>\n
        <p>We will need to add two Look At constraints, one for each part of the piston. Select Piston_PA and select Look At from the Constraints section in the Animation menu, as depicted in Picture 5f below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5f.gif" />\n
        Picture 5f.</p>\n
        <p>Press the H key on your keyboard, select P_Axis_B, and click the Pick button. Piston_PA now changes its orientation. To make sure it point in the original direction, enable the Keep Initial Offset option on the Parameters section on the Motion tab of the Command Panel, as depicted in Picture 5g below. (The parameters section opened automatically when you added the Look At constraint.)</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5g.gif" />\n
        Picture 5g.</p>\n
        <p>Repeat this step for the other part of the piston, in other words: select Piston_PB, select Look At constraint from the Animation menu, pick the P_Axis_A as the target (using the H button to pick it). Also enable the Keep Initial Offset option again. So what we did is make one part of the piston ‘looks at’ the opposite part’s axis. The orientation is depicted with a blue line. If you select the helper Point03 and move it again, you will see that the metal bat slides neatly into the tube, as shown in Picture 5h below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5h.gif" />\n
        Picture 5h.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_pistons_end.zip">Download the scene here.</a></p>\n
        <p>To make it more realistic, we need to attach a pipe or hose to the hydraulic or pneumatic piston, and we need to make sure it moves and/or bends when the leg moves. There are many ways of doing this, but a relatively easy one is to use the extended primitive Hose. The advantage of using the Hose primitive is that you don’t need to rig it; no bones, and no IK. Instead, we are going to add two extra Cylinders, in addition to the Hose, and let the Hose start and end at those cylinders.</p>\n
        <p>In Picture 5i below you can see where we placed the two cylinders. The cylinder on the left is linked to UpperLeg, and the other is linked to Piston_PA. These cylinders represent the entry points of the hose, or the connector of a wire for example. You will probably want to use something more sophisticated than a cylinder, but make sure it is a separate object.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5i.gif" />\n
        Picture 5i.</p>\n
        <p>Next, create the hose by selecting Extended Primitives on the Create tab of the Command Panel, clicking the Hose button, and drawing a hose in any viewport, as shown in Picture 5j below. Don’t worry about its size, location, or shape yet.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5j.gif" />\n
        Picture 5j.</p>\n
        <p>On the Modify tab of the Command Panel, enable the Bound to Object Pivots. Click the Pick Top Object button and click on the left cylinder. Click the Pick Bottom Object button and click on the right cylinder (or use the H key on your keyboard).</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5k.gif" />\n
        Picture 5k.</p>\n
        <p>Depending on the orientation of the cylinders we use to connect the hose and the viewport you created them on, you may have to rotate the pivot of one or both cylinders. So if necessary, select the cylinder, enable the Affect Pivot Only button (picture 3f), and rotate the pivot. While you rotate the pivot, the hose will bend with it so you can easily see when it is at the right angle.</p>\n
        <p>When the hose is correctly aligned to the cylinders, click the hose again, scroll down below on the Modify tab, and disable the Flex Section Enable option as shown below in Picture 5l. Also decrease the Diameter: value in the Hose Shape section to a value that is less than the cylinders.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5l.gif" />\n
        Picture 5l.</p>\n
        <p>As you can see, the hose is too long and needs to hang more tightly against the leg. You can do this by decreasing the Tension values (see Picture 5k). In the final images below, we used 25 for both cylinders. If you move the leg again using on of the helpers, you will notice that the hose will stay in position and even bend when it has to. Click on one of the images to see the final animation.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5m.gif" /> <img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5n.gif" />\n
        Picture 5m.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_piston_hose.zip">Download the final scene here.</a></p>\n
        <p>I hope you enjoyed this tutorial and that it contributed something to your 3D Studio Max modeling skills.</p>
        """
      "grav" => Grav {}
      "theme_config" => array:2 [
        "enabled" => true
        "dropdown" => array:1 [
          "enabled" => false
        ]
      ]
    ]
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
vendor
/
twig
/
twig
/
src
/
Template.php
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        } catch (\Throwable $e) {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        }
 
        return ob_get_clean();
    }
 
    protected function displayWithErrorHandling(array $context, array $blocks = [])
    {
        try {
            $this->doDisplay($context, $blocks);
        } catch (Error $e) {
            if (!$e->getSourceContext()) {
                $e->setSourceContext($this->getSourceContext());
            }
 
            // this is mostly useful for \Twig\Error\LoaderError exceptions
            // see \Twig\Error\LoaderError
            if (-1 === $e->getTemplateLine()) {
                $e->guess();
            }
 
            throw $e;
        } catch (\Exception $e) {
            $e = new RuntimeError(sprintf('An exception has been thrown during the rendering of a template ("%s").', $e->getMessage()), -1, $this->getSourceContext(), $e);
            $e->guess();
 
            throw $e;
        }
    }
 
Arguments
  1. array:30 [
      "config" => Config {}
      "system" => array:27 [
        "absolute_urls" => false
        "timezone" => ""
        "default_locale" => null
        "param_sep" => ":"
        "wrapped_site" => false
        "reverse_proxy_setup" => false
        "force_ssl" => false
        "force_lowercase_urls" => true
        "custom_base_url" => "http://www.3dvalley.com"
        "username_regex" => "^[a-z0-9_-]{3,16}$"
        "pwd_regex" => "(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}"
        "intl_enabled" => true
        "languages" => array:9 [
          "supported" => []
          "default_lang" => null
          "include_default_lang" => true
          "pages_fallback_only" => false
          "translations" => true
          "translations_fallback" => true
          "session_store_active" => false
          "http_accept_language" => false
          "override_locale" => false
        ]
        "home" => array:2 [
          "alias" => "/home"
          "hide_in_urls" => false
        ]
        "pages" => array:26 [
          "theme" => "minimaxing"
          "order" => array:2 [
            "by" => "default"
            "dir" => "asc"
          ]
          "list" => array:1 [
            "count" => 20
          ]
          "dateformat" => array:3 [
            "default" => null
            "short" => "jS M Y"
            "long" => "F jS \a\t g:ia"
          ]
          "publish_dates" => true
          "process" => array:2 [
            "markdown" => true
            "twig" => false
          ]
          "twig_first" => false
          "never_cache_twig" => false
          "events" => array:2 [
            "page" => true
            "twig" => true
          ]
          "markdown" => array:5 [
            "extra" => true
            "auto_line_breaks" => false
            "auto_url_links" => false
            "escape_markup" => false
            "special_chars" => array:2 [
              ">" => "gt"
              "<" => "lt"
            ]
          ]
          "types" => array:7 [
            0 => "txt"
            1 => "xml"
            2 => "html"
            3 => "htm"
            4 => "json"
            5 => "rss"
            6 => "atom"
          ]
          "append_url_extension" => ""
          "expires" => 604800
          "cache_control" => null
          "last_modified" => false
          "etag" => true
          "vary_accept_encoding" => false
          "redirect_default_route" => false
          "redirect_default_code" => "301"
          "redirect_trailing_slash" => true
          "ignore_files" => array:1 [
            0 => ".DS_Store"
          ]
          "ignore_folders" => array:2 [
            0 => ".git"
            1 => ".idea"
          ]
          "ignore_hidden" => true
          "hide_empty_folders" => false
          "url_taxonomy_filters" => true
          "frontmatter" => array:2 [
            "process_twig" => false
            "ignore_fields" => array:2 [
              0 => "form"
              1 => "forms"
            ]
          ]
        ]
        "cache" => array:13 [
          "enabled" => true
          "check" => array:1 [
            "method" => "file"
          ]
          "driver" => "apcu"
          "prefix" => "g"
          "purge_at" => "0 4 * * *"
          "clear_at" => "0 3 * * *"
          "clear_job_type" => "standard"
          "clear_images_by_default" => true
          "cli_compatibility" => false
          "lifetime" => 604800
          "gzip" => true
          "allow_webserver_gzip" => false
          "redis" => array:1 [
            "socket" => false
          ]
        ]
        "twig" => array:7 [
          "cache" => true
          "debug" => true
          "auto_reload" => true
          "autoescape" => false
          "undefined_functions" => true
          "undefined_filters" => true
          "umask_fix" => false
        ]
        "assets" => array:12 [
          "css_pipeline" => true
          "css_pipeline_include_externals" => true
          "css_pipeline_before_excludes" => true
          "css_minify" => true
          "css_minify_windows" => false
          "css_rewrite" => true
          "js_pipeline" => true
          "js_pipeline_include_externals" => true
          "js_pipeline_before_excludes" => true
          "js_minify" => true
          "enable_asset_timestamp" => false
          "collections" => array:1 [
            "jquery" => "system://assets/jquery/jquery-2.x.min.js"
          ]
        ]
        "errors" => array:2 [
          "display" => 1
          "log" => true
        ]
        "log" => array:2 [
          "handler" => "file"
          "syslog" => array:1 [
            "facility" => "local6"
          ]
        ]
        "debugger" => array:3 [
          "enabled" => false
          "shutdown" => array:1 [
            "close_connection" => true
          ]
          "twig" => true
        ]
        "images" => array:6 [
          "default_image_quality" => 85
          "cache_all" => false
          "cache_perms" => "0755"
          "debug" => false
          "auto_fix_orientation" => false
          "seofriendly" => false
        ]
        "media" => array:5 [
          "enable_media_timestamp" => false
          "unsupported_inline_types" => []
          "allowed_fallback_types" => []
          "auto_metadata_exif" => false
          "upload_limit" => 33554432
        ]
        "session" => array:9 [
          "enabled" => true
          "initialize" => true
          "timeout" => 1800
          "name" => "grav-site"
          "uniqueness" => "path"
          "secure" => false
          "httponly" => true
          "split" => true
          "path" => "/"
        ]
        "gpm" => array:5 [
          "releases" => "stable"
          "proxy_url" => null
          "method" => "auto"
          "verify_peer" => true
          "official_gpm_only" => true
        ]
        "accounts" => array:2 [
          "type" => "data"
          "storage" => "file"
        ]
        "strict_mode" => array:2 [
          "yaml_compat" => true
          "twig_compat" => true
        ]
      ]
      "theme" => array:2 [
        "enabled" => true
        "dropdown" => array:1 [
          "enabled" => false
        ]
      ]
      "site" => array:14 [
        "title" => "3Dvalley"
        "default_lang" => "en"
        "author" => array:2 [
          "name" => "Admin"
          "email" => "webmaster@3dvalley.com"
        ]
        "taxonomies" => array:2 [
          0 => "category"
          1 => "tag"
        ]
        "metadata" => array:1 [
          "description" => "Free 3D models and textures"
        ]
        "summary" => array:4 [
          "enabled" => true
          "format" => "short"
          "size" => 300
          "delimiter" => "==="
        ]
        "redirects" => array:12 [
          "/tutorials/3d-studio-max-hotkeys-and-mouse-essentials" => "/tutorials/threed-studio-max-hotkeys-and-mouse-essentials "
          "/tutorials/3d-studio-max-tutorial-modeling-a-plunger" => "/tutorials/modeling-a-plunger-in-3d-studio-max"
          "/tutorials/modeling-a-brake-rotor" => "/tutorials/modeling-brake-rotor-in-3d-studio-max"
          "/models" => "/3d-models"
          "/free-textures" => "/textures"
          "/textures.shtml" => "/textures"
          "/tutorials/rendering-objects-in-a-solidwire-mix" => "/tutorials/rendering-wip-images-in-3d-studio-max"
          "/tutorials/modeling-a-highly-detailed-basketball-in-3d-studio-max" => "/tutorials/modeling-a-highly-detailed-basketball-in-3ds-max/"
          "/models.shtml" => "/3d-models"
          "/c/tutorials" => "/tutorials"
          "/models/models_household.shtml" => "/3d-models/household"
          "/downloadables/3DStudioMAX-hotkeys.pdf" => "/tutorials/threed-studio-max-hotkeys-and-mouse-essentials"
        ]
        "routes" => null
        "blog" => array:1 [
          "route" => "/blog"
        ]
        "header" => array:2 [
          "title" => "I'm Jonathan Doe."
          "description" => "I'm a Manila based <span>graphic designer</span>, <span>illustrator</span> and <span>webdesigner</span> creating awesome and effective visual identities for companies of all sizes around the globe. Let's <a class="smoothscroll" href="#about">start scrolling</a> and learn more <a class="smoothscroll" href="#about">about me</a>."
        ]
        "copyright" => array:2 [
          0 => array:1 [
            "line" => "Copyright 2014 CeeVee"
          ]
          1 => array:1 [
            "line" => "Design by <a title="Styleshout" href="http://www.styleshout.com/">Styleshout</a>"
          ]
        ]
        "social" => array:7 [
          0 => array:2 [
            "url" => "#"
            "icon" => "facebook"
          ]
          1 => array:2 [
            "url" => "#"
            "icon" => "twitter"
          ]
          2 => array:2 [
            "url" => "#"
            "icon" => "google-plus"
          ]
          3 => array:2 [
            "url" => "#"
            "icon" => "linkedin"
          ]
          4 => array:2 [
            "url" => "#"
            "icon" => "instagram"
          ]
          5 => array:2 [
            "url" => "#"
            "icon" => "dribbble"
          ]
          6 => array:2 [
            "url" => "#"
            "icon" => "skype"
          ]
        ]
        "twitter" => array:7 [
          "id" => "657554810648948736"
          "domId" => "tw-widget1"
          "maxTweets" => 3
          "enableLinks" => "true"
          "showInteraction" => "false"
          "showImages" => "false"
          "showUser" => "false"
        ]
        "acxtest" => "TEST"
      ]
      "uri" => Uri {}
      "assets" => Assets {}
      "taxonomy" => Taxonomy {}
      "browser" => Browser {}
      "base_dir" => "/home/jhiemstraxartec/public_html/test"
      "home_url" => "/"
      "base_url" => ""
      "base_url_absolute" => "http://www.3dvalley.com"
      "base_url_relative" => ""
      "base_url_simple" => ""
      "theme_dir" => "/home/jhiemstraxartec/public_html/test/user/themes/minimaxing"
      "theme_url" => "/user/themes/minimaxing"
      "html_lang" => "en"
      "language_codes" => LanguageCodes {}
      "json" => "</script><script>"
      "myvar" => "</script><script>"
      "form" => null
      "form_max_filesize" => 32
      "form_json_response" => []
      "pages" => Page {}
      "page" => Page {}
      "header" => {}
      "media" => Media {}
      "content" => """
        <p>Like most tasks in 3D Studio Max and similar products, rigging robots is easy, if you know how. Depending on the complexity of the robot, some may find it even easier than rigging a human or animal character. This is because most parts of a robot do not deform during movement, with the exception of cabling and other flexible parts, so you don’t have to ‘skin’ it. One of the primary challenges in building a cool robot, which still looks cool when animated, is creating realistic mechanical joints.</p>\n
        \n
        <p>The first version of our example robotic leg below is not very realistic however, because it would collapse like a bone structure without muscles. In the second version, we will add some robotic ‘muscles’, and the third version will include a hose. Click on the download links below some of the pictures to download the corresponding scene.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/robotrigging_mainthumb_ani.gif" /></p>\n
        <h4>1. A Human Leg</h4>\n
        <p>When rigging a human leg, the mesh deforms when the knee bends, pushing vertexes away from each other on one side and towards each other on the opposite side. This is accomplished by using a Skin modifier that binds vertexes of the mesh to the bones. The colors of the vertexes indicate the weight values which dictate how much influence moving the joint will have on those vertexes. Red vertexes represent the most rigid parts.</p>\n
        <h4>2. Our Example Robot Leg</h4>\n
        <p>Robots are typically made of metal, plastic, or some other hard and rigid material that does not deform. The following picture shows the five objects that form the basis of our example leg.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p2a.jpg" /> <img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p2b.jpg" /></p>\n
        <h4>3. Rigging Our Example Robot Leg</h4>\n
        <p>As usual, I have to make a note that the following is just a way of doing this, which doesn’t necessarily means it is the way (we’ll actually show another way later on). Picture 3a below shows the (unsmoothed) wireframe of the objects that make up this leg. Click the link below it to download the scene, or download the scene including the bones by clicking the link below Picture 3h, or just watch the pictures if you do not feel like actually doing any of this right now.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3a.gif" />\n
        Picture 3a.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_start.zip">Download start scene here</a></p>\n
        <p>The red dots in the picture above represent the pivot of the object. In the scene you can download, I have already moved them to the correct position. The UpperLeg’s pivot is positioned at exactly the same position as the pivot of Cylinder01, and LowerLeg’s pivot is at the same position as the pivot of Cylinder02. When switching to the top view, they are all aligned. It is essential that the bones you add start or end exactly at those pivot points.</p>\n
        <p>A way of making sure the bones are positioned correctly is to snap to pivots. When you use this method it is also essential that all the pivots are aligned when viewing from the top. If in your robot they aren’t and it is too complex or difficult to align them, you can skip the following snap settings and just draw the bones, select them all and move them to the center of the leg (Top view). To use the snap setting, right-click the Snaps Toggle button on the main toolbar and select Pivot and clear others if necessary (see Picture 3b). Now click the Snaps Toggle button again (with the left mouse button) to enable it.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3b.gif" />\n
        Picture 3b.</p>\n
        <p>Click the Bones button in the Systems section on the Create tab of the Command Panel as displayed in Picture 3c below. Choose SplineIKSolver as the IK Solver and enable Assign to Children (you can use another IK Solver or none at all, if you prefer).</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3c.gif" />\n
        Picture 3c.</p>\n
        <p>Now draw the bones, by clicking on the spots 1, 2, and 3 shown in Picture 3d and then right-click anywhere in the viewport to stop. Spots 1, 2 and 3 are the pivot points of Cylinder01, Cylinder02, and Cylinder03.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3d.gif" />\n
        Picture 3d.</p>\n
        <p>When the Spline IK Solver dialog shown in Picture 3e below opens, just click OK.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3e.gif" />\n
        Picture 3e.</p>\n
        <p>Now before you link the bones to the leg, you should make sure that the pivots of the bones are positioned correctly on the pivot of the limbs, the Spline IK Solver we added moved them slightly. To move a bone’s pivot, click the Affect Pivot Only button on the Hierarchy tab of the Command Panel, and disable the Enabled button on the Motion tab of the Command Panel.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3f.gif" />\n
        Picture 3f.</p>\n
        <p>Then select the pivot of the bone and move it to the correct position. Make sure you zoom in and place it exactly in the center of the limbs’ pivots. You also might want to disable the snap to pivot setting first by clicking the Snaps Toggle button again. If for some reason you cannot get them in the right position, there is no need to continue, as the whole setup depends on the pivots’ position.</p>\n
        <p>When you are sure the pivots are positioned correctly, select Cylinder01 and link it to UpperLeg. Select Cylinder02 and link it to the LowerLeg, and select Cylinder03 to LowerLeg as well. To link one object to another click the Select and Link button on the main tool bar, select the object you want to link and drag to the object you want to link to. If you do it correctly, the object you link to, will flash white once.</p>\n
        <p>We will use the same select and link method to link the objects to the bones, instead of using a Skin modifier. Link UpperLeg to the upper bone, and link LowerLeg to the lower bone.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3g.gif" />\n
        Picture 3g.</p>\n
        <p>When you done all of the above, or download the scene including the bones by using the link below, select the IK Chain or any of the point helpers and move it. The knee joint should now operate as shown in Picture 3g, without any of the objects deforming during movement.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3h.gif" />\n
        Picture 3h.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_end.zip">Download scene here.</a></p>\n
        <h4>4. Another Approach</h4>\n
        <p>Before we continue with this leg and add some muscles, we will use another method of rigging this leg. As someone kindly pointed out to me, there is no absolute need to use bones . If you are new to rigging characters or robots in particular, you may want to go for the bones method discussed above, but a robot is often a skeleton by itself, eliminating the need for bones. 3D Studio Max allows any object to act like a bone, and allows you also to assign IK solvers to any hierarchical set of objects. Also in this type of ‘bone’ setup, it is absolutely imperative that the pivots of the objects are in the correct position. We will illustrate this with some pictures later.</p>\n
        <p>To make this work with the previous example (delete the previous bone structure or use the scene you downloaded earlier), and link the objects to each other as followed:</p>\n
        <p>Cylinder03 -&gt; LowerLeg\n
        LowerLeg -&gt; Cylinder02</p>\n
        <p>Cylinder02 -&gt; UpperLeg</p>\n
        <p>UpperLeg -&gt; Cylinder01</p>\n
        <p>Press the Schematic View (Open) button on the main toolbar to check if the hierarchy is now correct as displayed in Picture 4a.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4a.gif" />\n
        Picture 4a.</p>\n
        <p>Now all you need to do is add an IK Solver to this hierarchy to make it act like a robotic leg. You can use the IK Solver you prefer, but in this example, we are going to use the History Independent solver. Select Cylinder03, choose HI Solver from the IK Solvers section in the Animation menu, and select Cylinder01. To prevent you from linking the solver to UpperLeg instead of Cylinder01, use the Select by Name option, which basically means you should press the H key on your keyboard after you choose HI Solver from the menu, and then pick Cylinder01 from the list, instead of clicking on it in the viewport.</p>\n
        <p>If you performed the previous tasks correctly, the results should be like in Picture 4b with the IK Chain selected. If you move the IK Chain the leg should work. To make the task of animating this leg a bit more convenient, you should link the IK Chain to a Point Helper.</p>\n
        <p>A Point helper can be created by clicking the Point button in the Helpers section of the Create tab on the Command Panel, and clicking somewhere in the viewport, as depicted in Picture 4b below. In this case, I suggest you place it somewhere at the bottom of the leg. Use the same Select and Link method as discussed earlier to link the IK Chain to the Point helper, so you can animate the leg by moving the Point helper.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4b.gif" />\n
        Picture 4b.</p>\n
        <p>If your robot has a complex geometry and animating the individual objects slows down your computer too much, you can configure 3D Studio Max to display the objects as bones. When using our example leg from the previous steps, you should select Cylinder01, 02, 03, UpperLeg, and LowerLeg, and select Bone Tools from the Character menu. Enable the Bone On option on the Bone Tools dialog as shown below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4c.gif" />\n
        Picture 4c.</p>\n
        <p>Next, open the Display tab on the Command Panel, scroll down, and in the Link Display section enable the Display Links option and the Link Replaces Object option.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4d.gif" />\n
        Picture 4d.</p>\n
        <p>The results should be as depicted in Picture 4e below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4e.gif" />\n
        Picture 4e.</p>\n
        <p>Alternatively, you can enable only the Display Links option and right above the Link Display section enable the Display as Box option in the Display Properties section. The results should be as depicted in Picture 4f below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4f.gif" />\n
        Picture 4f.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_ik_end.zip">Download the scene here.</a></p>\n
        <h4>5. Muscles</h4>\n
        <p>As I mentioned earlier, the leg used in the example above is not very realistic; it needs some muscles to make it move automatically and at the same time give it some strength. You can make up your own mechanisms, but you can also use one of the three main methods used in modern real world robots:</p>\n
        <p>Electrical motors</p>\n
        <p>For the example leg from above, this would be the easy way out, as you would ‘only’ have to increase the size of the knee joint and modify it into to something like shown below in Photo I, so it becomes viable an electrical motor could fit inside. Additionally, rigging the robot is easy as you can use one of the methods we discussed earlier.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/motoman_sv3x.jpg" />\n
        Photo I. Industrial robot arm powered by electrical motors.</p>\n
        <p>Hydraulic/Pneumatic/Magnetic pistons</p>\n
        <p>Another commonly used method to power robots are pistons. A piston (see Photo II below) is basically consists of a metal bar that goes inside a tube. Pressurized air or oil is pumped into the piston to push out metal bar. This is usually the sound you here when a robot moves. If you want to make them realistic, you should attach a hose to it, which leads to a compressor somewhere in or on the robot. These hydraulic or pneumatic pistons are much more powerful than electrical motors. Smaller pistons may use magnetic force to either pull or push the metal bar. The latter would have electrical wires attached to it, instead of a hose.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/photo_ii.gif" />\n
        Photo II. Crane powered by hydraulic pistons.</p>\n
        <p>Picture 5a and 5b show our second example leg. It includes a piston that is made of two cylinders called Piston_PA and Piston_PB. Two additional cylinders (P_Axis_A and P_Axis_B) form the axis of the piston’s parts.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5a.gif" /> <img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5b.gif" />\n
        Picture 5a. &amp; Picture 5b.</p>\n
        <p>As you can see in Picture 5c below, we already rigged the leg with two bones and an IKSplineSolver. You can download the scene by clicking the link below the picture.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5c.gif" />\n
        Picture 5c.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_pistons_start.zip">Download the scene here.</a></p>\n
        <p>First, we will link the piston’s parts to the leg as followed:</p>\n
        <p>P_Axis_A -&gt; UpperLeg\n
        P_Axis_B -&gt; LowerLeg</p>\n
        <p>Piston_PA -&gt; P_Axis_A</p>\n
        <p>Piston_PB -&gt; P_Axis_B</p>\n
        <p>The hierarchy of the leg should now be exactly like in Picture 5d.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5d.gif" />\n
        Picture 5d.</p>\n
        <p>If we would bend the knee, by using the lower helper (Point3) for example, the two parts of the piston will not stay aligned correctly and will ‘break’ as shown in Picture 5e below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5e.gif" />\n
        Picture 5e.</p>\n
        <p>(If you moved the leg, press use Undo (Ctrl-Z) to move it back to its original position.)</p>\n
        <p>To make sure the metal bar stays inside the tube, we need to use a constraint, in this case the Look At constraint. As in the previous parts of this tutorial, the placement of the pivots of the piston’s parts is essential to make it work. The pivots for P_Axis_A and Piston_PA are exactly on the same position, and the pivots for P_Axis_B and Piston_PB are also exactly on the same position. We have already done this in the downloadable scene by selecting the parts that have the pivots on the same axis, enabling the Affect Pivot Only button (see Picture 3f) and using the Align tool (on both the Front, Top, and Left view).</p>\n
        <p>We will need to add two Look At constraints, one for each part of the piston. Select Piston_PA and select Look At from the Constraints section in the Animation menu, as depicted in Picture 5f below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5f.gif" />\n
        Picture 5f.</p>\n
        <p>Press the H key on your keyboard, select P_Axis_B, and click the Pick button. Piston_PA now changes its orientation. To make sure it point in the original direction, enable the Keep Initial Offset option on the Parameters section on the Motion tab of the Command Panel, as depicted in Picture 5g below. (The parameters section opened automatically when you added the Look At constraint.)</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5g.gif" />\n
        Picture 5g.</p>\n
        <p>Repeat this step for the other part of the piston, in other words: select Piston_PB, select Look At constraint from the Animation menu, pick the P_Axis_A as the target (using the H button to pick it). Also enable the Keep Initial Offset option again. So what we did is make one part of the piston ‘looks at’ the opposite part’s axis. The orientation is depicted with a blue line. If you select the helper Point03 and move it again, you will see that the metal bat slides neatly into the tube, as shown in Picture 5h below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5h.gif" />\n
        Picture 5h.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_pistons_end.zip">Download the scene here.</a></p>\n
        <p>To make it more realistic, we need to attach a pipe or hose to the hydraulic or pneumatic piston, and we need to make sure it moves and/or bends when the leg moves. There are many ways of doing this, but a relatively easy one is to use the extended primitive Hose. The advantage of using the Hose primitive is that you don’t need to rig it; no bones, and no IK. Instead, we are going to add two extra Cylinders, in addition to the Hose, and let the Hose start and end at those cylinders.</p>\n
        <p>In Picture 5i below you can see where we placed the two cylinders. The cylinder on the left is linked to UpperLeg, and the other is linked to Piston_PA. These cylinders represent the entry points of the hose, or the connector of a wire for example. You will probably want to use something more sophisticated than a cylinder, but make sure it is a separate object.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5i.gif" />\n
        Picture 5i.</p>\n
        <p>Next, create the hose by selecting Extended Primitives on the Create tab of the Command Panel, clicking the Hose button, and drawing a hose in any viewport, as shown in Picture 5j below. Don’t worry about its size, location, or shape yet.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5j.gif" />\n
        Picture 5j.</p>\n
        <p>On the Modify tab of the Command Panel, enable the Bound to Object Pivots. Click the Pick Top Object button and click on the left cylinder. Click the Pick Bottom Object button and click on the right cylinder (or use the H key on your keyboard).</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5k.gif" />\n
        Picture 5k.</p>\n
        <p>Depending on the orientation of the cylinders we use to connect the hose and the viewport you created them on, you may have to rotate the pivot of one or both cylinders. So if necessary, select the cylinder, enable the Affect Pivot Only button (picture 3f), and rotate the pivot. While you rotate the pivot, the hose will bend with it so you can easily see when it is at the right angle.</p>\n
        <p>When the hose is correctly aligned to the cylinders, click the hose again, scroll down below on the Modify tab, and disable the Flex Section Enable option as shown below in Picture 5l. Also decrease the Diameter: value in the Hose Shape section to a value that is less than the cylinders.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5l.gif" />\n
        Picture 5l.</p>\n
        <p>As you can see, the hose is too long and needs to hang more tightly against the leg. You can do this by decreasing the Tension values (see Picture 5k). In the final images below, we used 25 for both cylinders. If you move the leg again using on of the helpers, you will notice that the hose will stay in position and even bend when it has to. Click on one of the images to see the final animation.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5m.gif" /> <img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5n.gif" />\n
        Picture 5m.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_piston_hose.zip">Download the final scene here.</a></p>\n
        <p>I hope you enjoyed this tutorial and that it contributed something to your 3D Studio Max modeling skills.</p>
        """
      "grav" => Grav {}
      "theme_config" => array:2 [
        "enabled" => true
        "dropdown" => array:1 [
          "enabled" => false
        ]
      ]
    ]
    
  2. []
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
vendor
/
twig
/
twig
/
src
/
Template.php
    {
        return $this;
    }
 
    /**
     * Returns all blocks.
     *
     * This method is for internal use only and should never be called
     * directly.
     *
     * @return array An array of blocks
     */
    public function getBlocks()
    {
        return $this->blocks;
    }
 
    public function display(array $context, array $blocks = [])
    {
        $this->displayWithErrorHandling($this->env->mergeGlobals($context), array_merge($this->blocks, $blocks));
    }
 
    public function render(array $context)
    {
        $level = ob_get_level();
        ob_start(function () { return ''; });
        try {
            $this->display($context);
        } catch (\Exception $e) {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        } catch (\Throwable $e) {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
Arguments
  1. array:30 [
      "config" => Config {}
      "system" => array:27 [
        "absolute_urls" => false
        "timezone" => ""
        "default_locale" => null
        "param_sep" => ":"
        "wrapped_site" => false
        "reverse_proxy_setup" => false
        "force_ssl" => false
        "force_lowercase_urls" => true
        "custom_base_url" => "http://www.3dvalley.com"
        "username_regex" => "^[a-z0-9_-]{3,16}$"
        "pwd_regex" => "(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}"
        "intl_enabled" => true
        "languages" => array:9 [
          "supported" => []
          "default_lang" => null
          "include_default_lang" => true
          "pages_fallback_only" => false
          "translations" => true
          "translations_fallback" => true
          "session_store_active" => false
          "http_accept_language" => false
          "override_locale" => false
        ]
        "home" => array:2 [
          "alias" => "/home"
          "hide_in_urls" => false
        ]
        "pages" => array:26 [
          "theme" => "minimaxing"
          "order" => array:2 [
            "by" => "default"
            "dir" => "asc"
          ]
          "list" => array:1 [
            "count" => 20
          ]
          "dateformat" => array:3 [
            "default" => null
            "short" => "jS M Y"
            "long" => "F jS \a\t g:ia"
          ]
          "publish_dates" => true
          "process" => array:2 [
            "markdown" => true
            "twig" => false
          ]
          "twig_first" => false
          "never_cache_twig" => false
          "events" => array:2 [
            "page" => true
            "twig" => true
          ]
          "markdown" => array:5 [
            "extra" => true
            "auto_line_breaks" => false
            "auto_url_links" => false
            "escape_markup" => false
            "special_chars" => array:2 [
              ">" => "gt"
              "<" => "lt"
            ]
          ]
          "types" => array:7 [
            0 => "txt"
            1 => "xml"
            2 => "html"
            3 => "htm"
            4 => "json"
            5 => "rss"
            6 => "atom"
          ]
          "append_url_extension" => ""
          "expires" => 604800
          "cache_control" => null
          "last_modified" => false
          "etag" => true
          "vary_accept_encoding" => false
          "redirect_default_route" => false
          "redirect_default_code" => "301"
          "redirect_trailing_slash" => true
          "ignore_files" => array:1 [
            0 => ".DS_Store"
          ]
          "ignore_folders" => array:2 [
            0 => ".git"
            1 => ".idea"
          ]
          "ignore_hidden" => true
          "hide_empty_folders" => false
          "url_taxonomy_filters" => true
          "frontmatter" => array:2 [
            "process_twig" => false
            "ignore_fields" => array:2 [
              0 => "form"
              1 => "forms"
            ]
          ]
        ]
        "cache" => array:13 [
          "enabled" => true
          "check" => array:1 [
            "method" => "file"
          ]
          "driver" => "apcu"
          "prefix" => "g"
          "purge_at" => "0 4 * * *"
          "clear_at" => "0 3 * * *"
          "clear_job_type" => "standard"
          "clear_images_by_default" => true
          "cli_compatibility" => false
          "lifetime" => 604800
          "gzip" => true
          "allow_webserver_gzip" => false
          "redis" => array:1 [
            "socket" => false
          ]
        ]
        "twig" => array:7 [
          "cache" => true
          "debug" => true
          "auto_reload" => true
          "autoescape" => false
          "undefined_functions" => true
          "undefined_filters" => true
          "umask_fix" => false
        ]
        "assets" => array:12 [
          "css_pipeline" => true
          "css_pipeline_include_externals" => true
          "css_pipeline_before_excludes" => true
          "css_minify" => true
          "css_minify_windows" => false
          "css_rewrite" => true
          "js_pipeline" => true
          "js_pipeline_include_externals" => true
          "js_pipeline_before_excludes" => true
          "js_minify" => true
          "enable_asset_timestamp" => false
          "collections" => array:1 [
            "jquery" => "system://assets/jquery/jquery-2.x.min.js"
          ]
        ]
        "errors" => array:2 [
          "display" => 1
          "log" => true
        ]
        "log" => array:2 [
          "handler" => "file"
          "syslog" => array:1 [
            "facility" => "local6"
          ]
        ]
        "debugger" => array:3 [
          "enabled" => false
          "shutdown" => array:1 [
            "close_connection" => true
          ]
          "twig" => true
        ]
        "images" => array:6 [
          "default_image_quality" => 85
          "cache_all" => false
          "cache_perms" => "0755"
          "debug" => false
          "auto_fix_orientation" => false
          "seofriendly" => false
        ]
        "media" => array:5 [
          "enable_media_timestamp" => false
          "unsupported_inline_types" => []
          "allowed_fallback_types" => []
          "auto_metadata_exif" => false
          "upload_limit" => 33554432
        ]
        "session" => array:9 [
          "enabled" => true
          "initialize" => true
          "timeout" => 1800
          "name" => "grav-site"
          "uniqueness" => "path"
          "secure" => false
          "httponly" => true
          "split" => true
          "path" => "/"
        ]
        "gpm" => array:5 [
          "releases" => "stable"
          "proxy_url" => null
          "method" => "auto"
          "verify_peer" => true
          "official_gpm_only" => true
        ]
        "accounts" => array:2 [
          "type" => "data"
          "storage" => "file"
        ]
        "strict_mode" => array:2 [
          "yaml_compat" => true
          "twig_compat" => true
        ]
      ]
      "theme" => array:2 [
        "enabled" => true
        "dropdown" => array:1 [
          "enabled" => false
        ]
      ]
      "site" => array:14 [
        "title" => "3Dvalley"
        "default_lang" => "en"
        "author" => array:2 [
          "name" => "Admin"
          "email" => "webmaster@3dvalley.com"
        ]
        "taxonomies" => array:2 [
          0 => "category"
          1 => "tag"
        ]
        "metadata" => array:1 [
          "description" => "Free 3D models and textures"
        ]
        "summary" => array:4 [
          "enabled" => true
          "format" => "short"
          "size" => 300
          "delimiter" => "==="
        ]
        "redirects" => array:12 [
          "/tutorials/3d-studio-max-hotkeys-and-mouse-essentials" => "/tutorials/threed-studio-max-hotkeys-and-mouse-essentials "
          "/tutorials/3d-studio-max-tutorial-modeling-a-plunger" => "/tutorials/modeling-a-plunger-in-3d-studio-max"
          "/tutorials/modeling-a-brake-rotor" => "/tutorials/modeling-brake-rotor-in-3d-studio-max"
          "/models" => "/3d-models"
          "/free-textures" => "/textures"
          "/textures.shtml" => "/textures"
          "/tutorials/rendering-objects-in-a-solidwire-mix" => "/tutorials/rendering-wip-images-in-3d-studio-max"
          "/tutorials/modeling-a-highly-detailed-basketball-in-3d-studio-max" => "/tutorials/modeling-a-highly-detailed-basketball-in-3ds-max/"
          "/models.shtml" => "/3d-models"
          "/c/tutorials" => "/tutorials"
          "/models/models_household.shtml" => "/3d-models/household"
          "/downloadables/3DStudioMAX-hotkeys.pdf" => "/tutorials/threed-studio-max-hotkeys-and-mouse-essentials"
        ]
        "routes" => null
        "blog" => array:1 [
          "route" => "/blog"
        ]
        "header" => array:2 [
          "title" => "I'm Jonathan Doe."
          "description" => "I'm a Manila based <span>graphic designer</span>, <span>illustrator</span> and <span>webdesigner</span> creating awesome and effective visual identities for companies of all sizes around the globe. Let's <a class="smoothscroll" href="#about">start scrolling</a> and learn more <a class="smoothscroll" href="#about">about me</a>."
        ]
        "copyright" => array:2 [
          0 => array:1 [
            "line" => "Copyright 2014 CeeVee"
          ]
          1 => array:1 [
            "line" => "Design by <a title="Styleshout" href="http://www.styleshout.com/">Styleshout</a>"
          ]
        ]
        "social" => array:7 [
          0 => array:2 [
            "url" => "#"
            "icon" => "facebook"
          ]
          1 => array:2 [
            "url" => "#"
            "icon" => "twitter"
          ]
          2 => array:2 [
            "url" => "#"
            "icon" => "google-plus"
          ]
          3 => array:2 [
            "url" => "#"
            "icon" => "linkedin"
          ]
          4 => array:2 [
            "url" => "#"
            "icon" => "instagram"
          ]
          5 => array:2 [
            "url" => "#"
            "icon" => "dribbble"
          ]
          6 => array:2 [
            "url" => "#"
            "icon" => "skype"
          ]
        ]
        "twitter" => array:7 [
          "id" => "657554810648948736"
          "domId" => "tw-widget1"
          "maxTweets" => 3
          "enableLinks" => "true"
          "showInteraction" => "false"
          "showImages" => "false"
          "showUser" => "false"
        ]
        "acxtest" => "TEST"
      ]
      "uri" => Uri {}
      "assets" => Assets {}
      "taxonomy" => Taxonomy {}
      "browser" => Browser {}
      "base_dir" => "/home/jhiemstraxartec/public_html/test"
      "home_url" => "/"
      "base_url" => ""
      "base_url_absolute" => "http://www.3dvalley.com"
      "base_url_relative" => ""
      "base_url_simple" => ""
      "theme_dir" => "/home/jhiemstraxartec/public_html/test/user/themes/minimaxing"
      "theme_url" => "/user/themes/minimaxing"
      "html_lang" => "en"
      "language_codes" => LanguageCodes {}
      "json" => "</script><script>"
      "myvar" => "</script><script>"
      "form" => null
      "form_max_filesize" => 32
      "form_json_response" => []
      "pages" => Page {}
      "page" => Page {}
      "header" => {}
      "media" => Media {}
      "content" => """
        <p>Like most tasks in 3D Studio Max and similar products, rigging robots is easy, if you know how. Depending on the complexity of the robot, some may find it even easier than rigging a human or animal character. This is because most parts of a robot do not deform during movement, with the exception of cabling and other flexible parts, so you don’t have to ‘skin’ it. One of the primary challenges in building a cool robot, which still looks cool when animated, is creating realistic mechanical joints.</p>\n
        \n
        <p>The first version of our example robotic leg below is not very realistic however, because it would collapse like a bone structure without muscles. In the second version, we will add some robotic ‘muscles’, and the third version will include a hose. Click on the download links below some of the pictures to download the corresponding scene.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/robotrigging_mainthumb_ani.gif" /></p>\n
        <h4>1. A Human Leg</h4>\n
        <p>When rigging a human leg, the mesh deforms when the knee bends, pushing vertexes away from each other on one side and towards each other on the opposite side. This is accomplished by using a Skin modifier that binds vertexes of the mesh to the bones. The colors of the vertexes indicate the weight values which dictate how much influence moving the joint will have on those vertexes. Red vertexes represent the most rigid parts.</p>\n
        <h4>2. Our Example Robot Leg</h4>\n
        <p>Robots are typically made of metal, plastic, or some other hard and rigid material that does not deform. The following picture shows the five objects that form the basis of our example leg.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p2a.jpg" /> <img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p2b.jpg" /></p>\n
        <h4>3. Rigging Our Example Robot Leg</h4>\n
        <p>As usual, I have to make a note that the following is just a way of doing this, which doesn’t necessarily means it is the way (we’ll actually show another way later on). Picture 3a below shows the (unsmoothed) wireframe of the objects that make up this leg. Click the link below it to download the scene, or download the scene including the bones by clicking the link below Picture 3h, or just watch the pictures if you do not feel like actually doing any of this right now.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3a.gif" />\n
        Picture 3a.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_start.zip">Download start scene here</a></p>\n
        <p>The red dots in the picture above represent the pivot of the object. In the scene you can download, I have already moved them to the correct position. The UpperLeg’s pivot is positioned at exactly the same position as the pivot of Cylinder01, and LowerLeg’s pivot is at the same position as the pivot of Cylinder02. When switching to the top view, they are all aligned. It is essential that the bones you add start or end exactly at those pivot points.</p>\n
        <p>A way of making sure the bones are positioned correctly is to snap to pivots. When you use this method it is also essential that all the pivots are aligned when viewing from the top. If in your robot they aren’t and it is too complex or difficult to align them, you can skip the following snap settings and just draw the bones, select them all and move them to the center of the leg (Top view). To use the snap setting, right-click the Snaps Toggle button on the main toolbar and select Pivot and clear others if necessary (see Picture 3b). Now click the Snaps Toggle button again (with the left mouse button) to enable it.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3b.gif" />\n
        Picture 3b.</p>\n
        <p>Click the Bones button in the Systems section on the Create tab of the Command Panel as displayed in Picture 3c below. Choose SplineIKSolver as the IK Solver and enable Assign to Children (you can use another IK Solver or none at all, if you prefer).</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3c.gif" />\n
        Picture 3c.</p>\n
        <p>Now draw the bones, by clicking on the spots 1, 2, and 3 shown in Picture 3d and then right-click anywhere in the viewport to stop. Spots 1, 2 and 3 are the pivot points of Cylinder01, Cylinder02, and Cylinder03.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3d.gif" />\n
        Picture 3d.</p>\n
        <p>When the Spline IK Solver dialog shown in Picture 3e below opens, just click OK.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3e.gif" />\n
        Picture 3e.</p>\n
        <p>Now before you link the bones to the leg, you should make sure that the pivots of the bones are positioned correctly on the pivot of the limbs, the Spline IK Solver we added moved them slightly. To move a bone’s pivot, click the Affect Pivot Only button on the Hierarchy tab of the Command Panel, and disable the Enabled button on the Motion tab of the Command Panel.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3f.gif" />\n
        Picture 3f.</p>\n
        <p>Then select the pivot of the bone and move it to the correct position. Make sure you zoom in and place it exactly in the center of the limbs’ pivots. You also might want to disable the snap to pivot setting first by clicking the Snaps Toggle button again. If for some reason you cannot get them in the right position, there is no need to continue, as the whole setup depends on the pivots’ position.</p>\n
        <p>When you are sure the pivots are positioned correctly, select Cylinder01 and link it to UpperLeg. Select Cylinder02 and link it to the LowerLeg, and select Cylinder03 to LowerLeg as well. To link one object to another click the Select and Link button on the main tool bar, select the object you want to link and drag to the object you want to link to. If you do it correctly, the object you link to, will flash white once.</p>\n
        <p>We will use the same select and link method to link the objects to the bones, instead of using a Skin modifier. Link UpperLeg to the upper bone, and link LowerLeg to the lower bone.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3g.gif" />\n
        Picture 3g.</p>\n
        <p>When you done all of the above, or download the scene including the bones by using the link below, select the IK Chain or any of the point helpers and move it. The knee joint should now operate as shown in Picture 3g, without any of the objects deforming during movement.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3h.gif" />\n
        Picture 3h.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_end.zip">Download scene here.</a></p>\n
        <h4>4. Another Approach</h4>\n
        <p>Before we continue with this leg and add some muscles, we will use another method of rigging this leg. As someone kindly pointed out to me, there is no absolute need to use bones . If you are new to rigging characters or robots in particular, you may want to go for the bones method discussed above, but a robot is often a skeleton by itself, eliminating the need for bones. 3D Studio Max allows any object to act like a bone, and allows you also to assign IK solvers to any hierarchical set of objects. Also in this type of ‘bone’ setup, it is absolutely imperative that the pivots of the objects are in the correct position. We will illustrate this with some pictures later.</p>\n
        <p>To make this work with the previous example (delete the previous bone structure or use the scene you downloaded earlier), and link the objects to each other as followed:</p>\n
        <p>Cylinder03 -&gt; LowerLeg\n
        LowerLeg -&gt; Cylinder02</p>\n
        <p>Cylinder02 -&gt; UpperLeg</p>\n
        <p>UpperLeg -&gt; Cylinder01</p>\n
        <p>Press the Schematic View (Open) button on the main toolbar to check if the hierarchy is now correct as displayed in Picture 4a.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4a.gif" />\n
        Picture 4a.</p>\n
        <p>Now all you need to do is add an IK Solver to this hierarchy to make it act like a robotic leg. You can use the IK Solver you prefer, but in this example, we are going to use the History Independent solver. Select Cylinder03, choose HI Solver from the IK Solvers section in the Animation menu, and select Cylinder01. To prevent you from linking the solver to UpperLeg instead of Cylinder01, use the Select by Name option, which basically means you should press the H key on your keyboard after you choose HI Solver from the menu, and then pick Cylinder01 from the list, instead of clicking on it in the viewport.</p>\n
        <p>If you performed the previous tasks correctly, the results should be like in Picture 4b with the IK Chain selected. If you move the IK Chain the leg should work. To make the task of animating this leg a bit more convenient, you should link the IK Chain to a Point Helper.</p>\n
        <p>A Point helper can be created by clicking the Point button in the Helpers section of the Create tab on the Command Panel, and clicking somewhere in the viewport, as depicted in Picture 4b below. In this case, I suggest you place it somewhere at the bottom of the leg. Use the same Select and Link method as discussed earlier to link the IK Chain to the Point helper, so you can animate the leg by moving the Point helper.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4b.gif" />\n
        Picture 4b.</p>\n
        <p>If your robot has a complex geometry and animating the individual objects slows down your computer too much, you can configure 3D Studio Max to display the objects as bones. When using our example leg from the previous steps, you should select Cylinder01, 02, 03, UpperLeg, and LowerLeg, and select Bone Tools from the Character menu. Enable the Bone On option on the Bone Tools dialog as shown below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4c.gif" />\n
        Picture 4c.</p>\n
        <p>Next, open the Display tab on the Command Panel, scroll down, and in the Link Display section enable the Display Links option and the Link Replaces Object option.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4d.gif" />\n
        Picture 4d.</p>\n
        <p>The results should be as depicted in Picture 4e below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4e.gif" />\n
        Picture 4e.</p>\n
        <p>Alternatively, you can enable only the Display Links option and right above the Link Display section enable the Display as Box option in the Display Properties section. The results should be as depicted in Picture 4f below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4f.gif" />\n
        Picture 4f.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_ik_end.zip">Download the scene here.</a></p>\n
        <h4>5. Muscles</h4>\n
        <p>As I mentioned earlier, the leg used in the example above is not very realistic; it needs some muscles to make it move automatically and at the same time give it some strength. You can make up your own mechanisms, but you can also use one of the three main methods used in modern real world robots:</p>\n
        <p>Electrical motors</p>\n
        <p>For the example leg from above, this would be the easy way out, as you would ‘only’ have to increase the size of the knee joint and modify it into to something like shown below in Photo I, so it becomes viable an electrical motor could fit inside. Additionally, rigging the robot is easy as you can use one of the methods we discussed earlier.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/motoman_sv3x.jpg" />\n
        Photo I. Industrial robot arm powered by electrical motors.</p>\n
        <p>Hydraulic/Pneumatic/Magnetic pistons</p>\n
        <p>Another commonly used method to power robots are pistons. A piston (see Photo II below) is basically consists of a metal bar that goes inside a tube. Pressurized air or oil is pumped into the piston to push out metal bar. This is usually the sound you here when a robot moves. If you want to make them realistic, you should attach a hose to it, which leads to a compressor somewhere in or on the robot. These hydraulic or pneumatic pistons are much more powerful than electrical motors. Smaller pistons may use magnetic force to either pull or push the metal bar. The latter would have electrical wires attached to it, instead of a hose.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/photo_ii.gif" />\n
        Photo II. Crane powered by hydraulic pistons.</p>\n
        <p>Picture 5a and 5b show our second example leg. It includes a piston that is made of two cylinders called Piston_PA and Piston_PB. Two additional cylinders (P_Axis_A and P_Axis_B) form the axis of the piston’s parts.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5a.gif" /> <img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5b.gif" />\n
        Picture 5a. &amp; Picture 5b.</p>\n
        <p>As you can see in Picture 5c below, we already rigged the leg with two bones and an IKSplineSolver. You can download the scene by clicking the link below the picture.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5c.gif" />\n
        Picture 5c.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_pistons_start.zip">Download the scene here.</a></p>\n
        <p>First, we will link the piston’s parts to the leg as followed:</p>\n
        <p>P_Axis_A -&gt; UpperLeg\n
        P_Axis_B -&gt; LowerLeg</p>\n
        <p>Piston_PA -&gt; P_Axis_A</p>\n
        <p>Piston_PB -&gt; P_Axis_B</p>\n
        <p>The hierarchy of the leg should now be exactly like in Picture 5d.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5d.gif" />\n
        Picture 5d.</p>\n
        <p>If we would bend the knee, by using the lower helper (Point3) for example, the two parts of the piston will not stay aligned correctly and will ‘break’ as shown in Picture 5e below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5e.gif" />\n
        Picture 5e.</p>\n
        <p>(If you moved the leg, press use Undo (Ctrl-Z) to move it back to its original position.)</p>\n
        <p>To make sure the metal bar stays inside the tube, we need to use a constraint, in this case the Look At constraint. As in the previous parts of this tutorial, the placement of the pivots of the piston’s parts is essential to make it work. The pivots for P_Axis_A and Piston_PA are exactly on the same position, and the pivots for P_Axis_B and Piston_PB are also exactly on the same position. We have already done this in the downloadable scene by selecting the parts that have the pivots on the same axis, enabling the Affect Pivot Only button (see Picture 3f) and using the Align tool (on both the Front, Top, and Left view).</p>\n
        <p>We will need to add two Look At constraints, one for each part of the piston. Select Piston_PA and select Look At from the Constraints section in the Animation menu, as depicted in Picture 5f below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5f.gif" />\n
        Picture 5f.</p>\n
        <p>Press the H key on your keyboard, select P_Axis_B, and click the Pick button. Piston_PA now changes its orientation. To make sure it point in the original direction, enable the Keep Initial Offset option on the Parameters section on the Motion tab of the Command Panel, as depicted in Picture 5g below. (The parameters section opened automatically when you added the Look At constraint.)</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5g.gif" />\n
        Picture 5g.</p>\n
        <p>Repeat this step for the other part of the piston, in other words: select Piston_PB, select Look At constraint from the Animation menu, pick the P_Axis_A as the target (using the H button to pick it). Also enable the Keep Initial Offset option again. So what we did is make one part of the piston ‘looks at’ the opposite part’s axis. The orientation is depicted with a blue line. If you select the helper Point03 and move it again, you will see that the metal bat slides neatly into the tube, as shown in Picture 5h below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5h.gif" />\n
        Picture 5h.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_pistons_end.zip">Download the scene here.</a></p>\n
        <p>To make it more realistic, we need to attach a pipe or hose to the hydraulic or pneumatic piston, and we need to make sure it moves and/or bends when the leg moves. There are many ways of doing this, but a relatively easy one is to use the extended primitive Hose. The advantage of using the Hose primitive is that you don’t need to rig it; no bones, and no IK. Instead, we are going to add two extra Cylinders, in addition to the Hose, and let the Hose start and end at those cylinders.</p>\n
        <p>In Picture 5i below you can see where we placed the two cylinders. The cylinder on the left is linked to UpperLeg, and the other is linked to Piston_PA. These cylinders represent the entry points of the hose, or the connector of a wire for example. You will probably want to use something more sophisticated than a cylinder, but make sure it is a separate object.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5i.gif" />\n
        Picture 5i.</p>\n
        <p>Next, create the hose by selecting Extended Primitives on the Create tab of the Command Panel, clicking the Hose button, and drawing a hose in any viewport, as shown in Picture 5j below. Don’t worry about its size, location, or shape yet.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5j.gif" />\n
        Picture 5j.</p>\n
        <p>On the Modify tab of the Command Panel, enable the Bound to Object Pivots. Click the Pick Top Object button and click on the left cylinder. Click the Pick Bottom Object button and click on the right cylinder (or use the H key on your keyboard).</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5k.gif" />\n
        Picture 5k.</p>\n
        <p>Depending on the orientation of the cylinders we use to connect the hose and the viewport you created them on, you may have to rotate the pivot of one or both cylinders. So if necessary, select the cylinder, enable the Affect Pivot Only button (picture 3f), and rotate the pivot. While you rotate the pivot, the hose will bend with it so you can easily see when it is at the right angle.</p>\n
        <p>When the hose is correctly aligned to the cylinders, click the hose again, scroll down below on the Modify tab, and disable the Flex Section Enable option as shown below in Picture 5l. Also decrease the Diameter: value in the Hose Shape section to a value that is less than the cylinders.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5l.gif" />\n
        Picture 5l.</p>\n
        <p>As you can see, the hose is too long and needs to hang more tightly against the leg. You can do this by decreasing the Tension values (see Picture 5k). In the final images below, we used 25 for both cylinders. If you move the leg again using on of the helpers, you will notice that the hose will stay in position and even bend when it has to. Click on one of the images to see the final animation.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5m.gif" /> <img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5n.gif" />\n
        Picture 5m.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_piston_hose.zip">Download the final scene here.</a></p>\n
        <p>I hope you enjoyed this tutorial and that it contributed something to your 3D Studio Max modeling skills.</p>
        """
      "grav" => Grav {}
      "theme_config" => array:2 [
        "enabled" => true
        "dropdown" => array:1 [
          "enabled" => false
        ]
      ]
    ]
    
  2. []
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
cache
/
twig
/
f4
/
f448589b8fa5e8e96d271b869702bdf2c5f6c03d9e1ebdec2a1766abd9e01266.php
\t\t\t<div id=\"item\" class=\"block pure-u-2-3 h-entry\">
\t\t\t    ";
        // line 18
        $this->loadTemplate("partials/tutorial.html.twig", "tutorialfull.html.twig", 18)->display(twig_array_merge($context, ["blog" => $this->getAttribute(($context["page"] ?? null), "parent", []), "truncate" => false]));
        // line 19
        echo "\t\t\t</div>
        </div>
        
        
            <a href=\"";
        // line 23
        echo $this->getAttribute($this->getAttribute(($context["page"] ?? null), "parent", []), "url", []);
        echo "\"><strong><< Back to Tutorials</strong></a><br />
\t\t</section>
\t</div>
 
\t<div class=\"4u 12u(mobile)\">
\t\t";
        // line 28
        $this->loadTemplate("partials/sidebar1.html.twig", "tutorialfull.html.twig", 28)->display($context);
        // line 29
        echo "\t</div>
 
</div>
 
";
    }
 
    public function getTemplateName()
    {
        return "tutorialfull.html.twig";
    }
 
    public function isTraitable()
    {
        return false;
    }
 
    public function getDebugInfo()
    {
Arguments
  1. array:30 [
      "config" => Config {}
      "system" => array:27 [
        "absolute_urls" => false
        "timezone" => ""
        "default_locale" => null
        "param_sep" => ":"
        "wrapped_site" => false
        "reverse_proxy_setup" => false
        "force_ssl" => false
        "force_lowercase_urls" => true
        "custom_base_url" => "http://www.3dvalley.com"
        "username_regex" => "^[a-z0-9_-]{3,16}$"
        "pwd_regex" => "(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}"
        "intl_enabled" => true
        "languages" => array:9 [
          "supported" => []
          "default_lang" => null
          "include_default_lang" => true
          "pages_fallback_only" => false
          "translations" => true
          "translations_fallback" => true
          "session_store_active" => false
          "http_accept_language" => false
          "override_locale" => false
        ]
        "home" => array:2 [
          "alias" => "/home"
          "hide_in_urls" => false
        ]
        "pages" => array:26 [
          "theme" => "minimaxing"
          "order" => array:2 [
            "by" => "default"
            "dir" => "asc"
          ]
          "list" => array:1 [
            "count" => 20
          ]
          "dateformat" => array:3 [
            "default" => null
            "short" => "jS M Y"
            "long" => "F jS \a\t g:ia"
          ]
          "publish_dates" => true
          "process" => array:2 [
            "markdown" => true
            "twig" => false
          ]
          "twig_first" => false
          "never_cache_twig" => false
          "events" => array:2 [
            "page" => true
            "twig" => true
          ]
          "markdown" => array:5 [
            "extra" => true
            "auto_line_breaks" => false
            "auto_url_links" => false
            "escape_markup" => false
            "special_chars" => array:2 [
              ">" => "gt"
              "<" => "lt"
            ]
          ]
          "types" => array:7 [
            0 => "txt"
            1 => "xml"
            2 => "html"
            3 => "htm"
            4 => "json"
            5 => "rss"
            6 => "atom"
          ]
          "append_url_extension" => ""
          "expires" => 604800
          "cache_control" => null
          "last_modified" => false
          "etag" => true
          "vary_accept_encoding" => false
          "redirect_default_route" => false
          "redirect_default_code" => "301"
          "redirect_trailing_slash" => true
          "ignore_files" => array:1 [
            0 => ".DS_Store"
          ]
          "ignore_folders" => array:2 [
            0 => ".git"
            1 => ".idea"
          ]
          "ignore_hidden" => true
          "hide_empty_folders" => false
          "url_taxonomy_filters" => true
          "frontmatter" => array:2 [
            "process_twig" => false
            "ignore_fields" => array:2 [
              0 => "form"
              1 => "forms"
            ]
          ]
        ]
        "cache" => array:13 [
          "enabled" => true
          "check" => array:1 [
            "method" => "file"
          ]
          "driver" => "apcu"
          "prefix" => "g"
          "purge_at" => "0 4 * * *"
          "clear_at" => "0 3 * * *"
          "clear_job_type" => "standard"
          "clear_images_by_default" => true
          "cli_compatibility" => false
          "lifetime" => 604800
          "gzip" => true
          "allow_webserver_gzip" => false
          "redis" => array:1 [
            "socket" => false
          ]
        ]
        "twig" => array:7 [
          "cache" => true
          "debug" => true
          "auto_reload" => true
          "autoescape" => false
          "undefined_functions" => true
          "undefined_filters" => true
          "umask_fix" => false
        ]
        "assets" => array:12 [
          "css_pipeline" => true
          "css_pipeline_include_externals" => true
          "css_pipeline_before_excludes" => true
          "css_minify" => true
          "css_minify_windows" => false
          "css_rewrite" => true
          "js_pipeline" => true
          "js_pipeline_include_externals" => true
          "js_pipeline_before_excludes" => true
          "js_minify" => true
          "enable_asset_timestamp" => false
          "collections" => array:1 [
            "jquery" => "system://assets/jquery/jquery-2.x.min.js"
          ]
        ]
        "errors" => array:2 [
          "display" => 1
          "log" => true
        ]
        "log" => array:2 [
          "handler" => "file"
          "syslog" => array:1 [
            "facility" => "local6"
          ]
        ]
        "debugger" => array:3 [
          "enabled" => false
          "shutdown" => array:1 [
            "close_connection" => true
          ]
          "twig" => true
        ]
        "images" => array:6 [
          "default_image_quality" => 85
          "cache_all" => false
          "cache_perms" => "0755"
          "debug" => false
          "auto_fix_orientation" => false
          "seofriendly" => false
        ]
        "media" => array:5 [
          "enable_media_timestamp" => false
          "unsupported_inline_types" => []
          "allowed_fallback_types" => []
          "auto_metadata_exif" => false
          "upload_limit" => 33554432
        ]
        "session" => array:9 [
          "enabled" => true
          "initialize" => true
          "timeout" => 1800
          "name" => "grav-site"
          "uniqueness" => "path"
          "secure" => false
          "httponly" => true
          "split" => true
          "path" => "/"
        ]
        "gpm" => array:5 [
          "releases" => "stable"
          "proxy_url" => null
          "method" => "auto"
          "verify_peer" => true
          "official_gpm_only" => true
        ]
        "accounts" => array:2 [
          "type" => "data"
          "storage" => "file"
        ]
        "strict_mode" => array:2 [
          "yaml_compat" => true
          "twig_compat" => true
        ]
      ]
      "theme" => array:2 [
        "enabled" => true
        "dropdown" => array:1 [
          "enabled" => false
        ]
      ]
      "site" => array:14 [
        "title" => "3Dvalley"
        "default_lang" => "en"
        "author" => array:2 [
          "name" => "Admin"
          "email" => "webmaster@3dvalley.com"
        ]
        "taxonomies" => array:2 [
          0 => "category"
          1 => "tag"
        ]
        "metadata" => array:1 [
          "description" => "Free 3D models and textures"
        ]
        "summary" => array:4 [
          "enabled" => true
          "format" => "short"
          "size" => 300
          "delimiter" => "==="
        ]
        "redirects" => array:12 [
          "/tutorials/3d-studio-max-hotkeys-and-mouse-essentials" => "/tutorials/threed-studio-max-hotkeys-and-mouse-essentials "
          "/tutorials/3d-studio-max-tutorial-modeling-a-plunger" => "/tutorials/modeling-a-plunger-in-3d-studio-max"
          "/tutorials/modeling-a-brake-rotor" => "/tutorials/modeling-brake-rotor-in-3d-studio-max"
          "/models" => "/3d-models"
          "/free-textures" => "/textures"
          "/textures.shtml" => "/textures"
          "/tutorials/rendering-objects-in-a-solidwire-mix" => "/tutorials/rendering-wip-images-in-3d-studio-max"
          "/tutorials/modeling-a-highly-detailed-basketball-in-3d-studio-max" => "/tutorials/modeling-a-highly-detailed-basketball-in-3ds-max/"
          "/models.shtml" => "/3d-models"
          "/c/tutorials" => "/tutorials"
          "/models/models_household.shtml" => "/3d-models/household"
          "/downloadables/3DStudioMAX-hotkeys.pdf" => "/tutorials/threed-studio-max-hotkeys-and-mouse-essentials"
        ]
        "routes" => null
        "blog" => array:1 [
          "route" => "/blog"
        ]
        "header" => array:2 [
          "title" => "I'm Jonathan Doe."
          "description" => "I'm a Manila based <span>graphic designer</span>, <span>illustrator</span> and <span>webdesigner</span> creating awesome and effective visual identities for companies of all sizes around the globe. Let's <a class="smoothscroll" href="#about">start scrolling</a> and learn more <a class="smoothscroll" href="#about">about me</a>."
        ]
        "copyright" => array:2 [
          0 => array:1 [
            "line" => "Copyright 2014 CeeVee"
          ]
          1 => array:1 [
            "line" => "Design by <a title="Styleshout" href="http://www.styleshout.com/">Styleshout</a>"
          ]
        ]
        "social" => array:7 [
          0 => array:2 [
            "url" => "#"
            "icon" => "facebook"
          ]
          1 => array:2 [
            "url" => "#"
            "icon" => "twitter"
          ]
          2 => array:2 [
            "url" => "#"
            "icon" => "google-plus"
          ]
          3 => array:2 [
            "url" => "#"
            "icon" => "linkedin"
          ]
          4 => array:2 [
            "url" => "#"
            "icon" => "instagram"
          ]
          5 => array:2 [
            "url" => "#"
            "icon" => "dribbble"
          ]
          6 => array:2 [
            "url" => "#"
            "icon" => "skype"
          ]
        ]
        "twitter" => array:7 [
          "id" => "657554810648948736"
          "domId" => "tw-widget1"
          "maxTweets" => 3
          "enableLinks" => "true"
          "showInteraction" => "false"
          "showImages" => "false"
          "showUser" => "false"
        ]
        "acxtest" => "TEST"
      ]
      "uri" => Uri {}
      "assets" => Assets {}
      "taxonomy" => Taxonomy {}
      "browser" => Browser {}
      "base_dir" => "/home/jhiemstraxartec/public_html/test"
      "home_url" => "/"
      "base_url" => ""
      "base_url_absolute" => "http://www.3dvalley.com"
      "base_url_relative" => ""
      "base_url_simple" => ""
      "theme_dir" => "/home/jhiemstraxartec/public_html/test/user/themes/minimaxing"
      "theme_url" => "/user/themes/minimaxing"
      "html_lang" => "en"
      "language_codes" => LanguageCodes {}
      "json" => "</script><script>"
      "myvar" => "</script><script>"
      "form" => null
      "form_max_filesize" => 32
      "form_json_response" => []
      "pages" => Page {}
      "page" => Page {}
      "header" => {}
      "media" => Media {}
      "content" => """
        <p>Like most tasks in 3D Studio Max and similar products, rigging robots is easy, if you know how. Depending on the complexity of the robot, some may find it even easier than rigging a human or animal character. This is because most parts of a robot do not deform during movement, with the exception of cabling and other flexible parts, so you don’t have to ‘skin’ it. One of the primary challenges in building a cool robot, which still looks cool when animated, is creating realistic mechanical joints.</p>\n
        \n
        <p>The first version of our example robotic leg below is not very realistic however, because it would collapse like a bone structure without muscles. In the second version, we will add some robotic ‘muscles’, and the third version will include a hose. Click on the download links below some of the pictures to download the corresponding scene.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/robotrigging_mainthumb_ani.gif" /></p>\n
        <h4>1. A Human Leg</h4>\n
        <p>When rigging a human leg, the mesh deforms when the knee bends, pushing vertexes away from each other on one side and towards each other on the opposite side. This is accomplished by using a Skin modifier that binds vertexes of the mesh to the bones. The colors of the vertexes indicate the weight values which dictate how much influence moving the joint will have on those vertexes. Red vertexes represent the most rigid parts.</p>\n
        <h4>2. Our Example Robot Leg</h4>\n
        <p>Robots are typically made of metal, plastic, or some other hard and rigid material that does not deform. The following picture shows the five objects that form the basis of our example leg.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p2a.jpg" /> <img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p2b.jpg" /></p>\n
        <h4>3. Rigging Our Example Robot Leg</h4>\n
        <p>As usual, I have to make a note that the following is just a way of doing this, which doesn’t necessarily means it is the way (we’ll actually show another way later on). Picture 3a below shows the (unsmoothed) wireframe of the objects that make up this leg. Click the link below it to download the scene, or download the scene including the bones by clicking the link below Picture 3h, or just watch the pictures if you do not feel like actually doing any of this right now.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3a.gif" />\n
        Picture 3a.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_start.zip">Download start scene here</a></p>\n
        <p>The red dots in the picture above represent the pivot of the object. In the scene you can download, I have already moved them to the correct position. The UpperLeg’s pivot is positioned at exactly the same position as the pivot of Cylinder01, and LowerLeg’s pivot is at the same position as the pivot of Cylinder02. When switching to the top view, they are all aligned. It is essential that the bones you add start or end exactly at those pivot points.</p>\n
        <p>A way of making sure the bones are positioned correctly is to snap to pivots. When you use this method it is also essential that all the pivots are aligned when viewing from the top. If in your robot they aren’t and it is too complex or difficult to align them, you can skip the following snap settings and just draw the bones, select them all and move them to the center of the leg (Top view). To use the snap setting, right-click the Snaps Toggle button on the main toolbar and select Pivot and clear others if necessary (see Picture 3b). Now click the Snaps Toggle button again (with the left mouse button) to enable it.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3b.gif" />\n
        Picture 3b.</p>\n
        <p>Click the Bones button in the Systems section on the Create tab of the Command Panel as displayed in Picture 3c below. Choose SplineIKSolver as the IK Solver and enable Assign to Children (you can use another IK Solver or none at all, if you prefer).</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3c.gif" />\n
        Picture 3c.</p>\n
        <p>Now draw the bones, by clicking on the spots 1, 2, and 3 shown in Picture 3d and then right-click anywhere in the viewport to stop. Spots 1, 2 and 3 are the pivot points of Cylinder01, Cylinder02, and Cylinder03.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3d.gif" />\n
        Picture 3d.</p>\n
        <p>When the Spline IK Solver dialog shown in Picture 3e below opens, just click OK.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3e.gif" />\n
        Picture 3e.</p>\n
        <p>Now before you link the bones to the leg, you should make sure that the pivots of the bones are positioned correctly on the pivot of the limbs, the Spline IK Solver we added moved them slightly. To move a bone’s pivot, click the Affect Pivot Only button on the Hierarchy tab of the Command Panel, and disable the Enabled button on the Motion tab of the Command Panel.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3f.gif" />\n
        Picture 3f.</p>\n
        <p>Then select the pivot of the bone and move it to the correct position. Make sure you zoom in and place it exactly in the center of the limbs’ pivots. You also might want to disable the snap to pivot setting first by clicking the Snaps Toggle button again. If for some reason you cannot get them in the right position, there is no need to continue, as the whole setup depends on the pivots’ position.</p>\n
        <p>When you are sure the pivots are positioned correctly, select Cylinder01 and link it to UpperLeg. Select Cylinder02 and link it to the LowerLeg, and select Cylinder03 to LowerLeg as well. To link one object to another click the Select and Link button on the main tool bar, select the object you want to link and drag to the object you want to link to. If you do it correctly, the object you link to, will flash white once.</p>\n
        <p>We will use the same select and link method to link the objects to the bones, instead of using a Skin modifier. Link UpperLeg to the upper bone, and link LowerLeg to the lower bone.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3g.gif" />\n
        Picture 3g.</p>\n
        <p>When you done all of the above, or download the scene including the bones by using the link below, select the IK Chain or any of the point helpers and move it. The knee joint should now operate as shown in Picture 3g, without any of the objects deforming during movement.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3h.gif" />\n
        Picture 3h.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_end.zip">Download scene here.</a></p>\n
        <h4>4. Another Approach</h4>\n
        <p>Before we continue with this leg and add some muscles, we will use another method of rigging this leg. As someone kindly pointed out to me, there is no absolute need to use bones . If you are new to rigging characters or robots in particular, you may want to go for the bones method discussed above, but a robot is often a skeleton by itself, eliminating the need for bones. 3D Studio Max allows any object to act like a bone, and allows you also to assign IK solvers to any hierarchical set of objects. Also in this type of ‘bone’ setup, it is absolutely imperative that the pivots of the objects are in the correct position. We will illustrate this with some pictures later.</p>\n
        <p>To make this work with the previous example (delete the previous bone structure or use the scene you downloaded earlier), and link the objects to each other as followed:</p>\n
        <p>Cylinder03 -&gt; LowerLeg\n
        LowerLeg -&gt; Cylinder02</p>\n
        <p>Cylinder02 -&gt; UpperLeg</p>\n
        <p>UpperLeg -&gt; Cylinder01</p>\n
        <p>Press the Schematic View (Open) button on the main toolbar to check if the hierarchy is now correct as displayed in Picture 4a.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4a.gif" />\n
        Picture 4a.</p>\n
        <p>Now all you need to do is add an IK Solver to this hierarchy to make it act like a robotic leg. You can use the IK Solver you prefer, but in this example, we are going to use the History Independent solver. Select Cylinder03, choose HI Solver from the IK Solvers section in the Animation menu, and select Cylinder01. To prevent you from linking the solver to UpperLeg instead of Cylinder01, use the Select by Name option, which basically means you should press the H key on your keyboard after you choose HI Solver from the menu, and then pick Cylinder01 from the list, instead of clicking on it in the viewport.</p>\n
        <p>If you performed the previous tasks correctly, the results should be like in Picture 4b with the IK Chain selected. If you move the IK Chain the leg should work. To make the task of animating this leg a bit more convenient, you should link the IK Chain to a Point Helper.</p>\n
        <p>A Point helper can be created by clicking the Point button in the Helpers section of the Create tab on the Command Panel, and clicking somewhere in the viewport, as depicted in Picture 4b below. In this case, I suggest you place it somewhere at the bottom of the leg. Use the same Select and Link method as discussed earlier to link the IK Chain to the Point helper, so you can animate the leg by moving the Point helper.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4b.gif" />\n
        Picture 4b.</p>\n
        <p>If your robot has a complex geometry and animating the individual objects slows down your computer too much, you can configure 3D Studio Max to display the objects as bones. When using our example leg from the previous steps, you should select Cylinder01, 02, 03, UpperLeg, and LowerLeg, and select Bone Tools from the Character menu. Enable the Bone On option on the Bone Tools dialog as shown below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4c.gif" />\n
        Picture 4c.</p>\n
        <p>Next, open the Display tab on the Command Panel, scroll down, and in the Link Display section enable the Display Links option and the Link Replaces Object option.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4d.gif" />\n
        Picture 4d.</p>\n
        <p>The results should be as depicted in Picture 4e below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4e.gif" />\n
        Picture 4e.</p>\n
        <p>Alternatively, you can enable only the Display Links option and right above the Link Display section enable the Display as Box option in the Display Properties section. The results should be as depicted in Picture 4f below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4f.gif" />\n
        Picture 4f.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_ik_end.zip">Download the scene here.</a></p>\n
        <h4>5. Muscles</h4>\n
        <p>As I mentioned earlier, the leg used in the example above is not very realistic; it needs some muscles to make it move automatically and at the same time give it some strength. You can make up your own mechanisms, but you can also use one of the three main methods used in modern real world robots:</p>\n
        <p>Electrical motors</p>\n
        <p>For the example leg from above, this would be the easy way out, as you would ‘only’ have to increase the size of the knee joint and modify it into to something like shown below in Photo I, so it becomes viable an electrical motor could fit inside. Additionally, rigging the robot is easy as you can use one of the methods we discussed earlier.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/motoman_sv3x.jpg" />\n
        Photo I. Industrial robot arm powered by electrical motors.</p>\n
        <p>Hydraulic/Pneumatic/Magnetic pistons</p>\n
        <p>Another commonly used method to power robots are pistons. A piston (see Photo II below) is basically consists of a metal bar that goes inside a tube. Pressurized air or oil is pumped into the piston to push out metal bar. This is usually the sound you here when a robot moves. If you want to make them realistic, you should attach a hose to it, which leads to a compressor somewhere in or on the robot. These hydraulic or pneumatic pistons are much more powerful than electrical motors. Smaller pistons may use magnetic force to either pull or push the metal bar. The latter would have electrical wires attached to it, instead of a hose.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/photo_ii.gif" />\n
        Photo II. Crane powered by hydraulic pistons.</p>\n
        <p>Picture 5a and 5b show our second example leg. It includes a piston that is made of two cylinders called Piston_PA and Piston_PB. Two additional cylinders (P_Axis_A and P_Axis_B) form the axis of the piston’s parts.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5a.gif" /> <img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5b.gif" />\n
        Picture 5a. &amp; Picture 5b.</p>\n
        <p>As you can see in Picture 5c below, we already rigged the leg with two bones and an IKSplineSolver. You can download the scene by clicking the link below the picture.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5c.gif" />\n
        Picture 5c.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_pistons_start.zip">Download the scene here.</a></p>\n
        <p>First, we will link the piston’s parts to the leg as followed:</p>\n
        <p>P_Axis_A -&gt; UpperLeg\n
        P_Axis_B -&gt; LowerLeg</p>\n
        <p>Piston_PA -&gt; P_Axis_A</p>\n
        <p>Piston_PB -&gt; P_Axis_B</p>\n
        <p>The hierarchy of the leg should now be exactly like in Picture 5d.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5d.gif" />\n
        Picture 5d.</p>\n
        <p>If we would bend the knee, by using the lower helper (Point3) for example, the two parts of the piston will not stay aligned correctly and will ‘break’ as shown in Picture 5e below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5e.gif" />\n
        Picture 5e.</p>\n
        <p>(If you moved the leg, press use Undo (Ctrl-Z) to move it back to its original position.)</p>\n
        <p>To make sure the metal bar stays inside the tube, we need to use a constraint, in this case the Look At constraint. As in the previous parts of this tutorial, the placement of the pivots of the piston’s parts is essential to make it work. The pivots for P_Axis_A and Piston_PA are exactly on the same position, and the pivots for P_Axis_B and Piston_PB are also exactly on the same position. We have already done this in the downloadable scene by selecting the parts that have the pivots on the same axis, enabling the Affect Pivot Only button (see Picture 3f) and using the Align tool (on both the Front, Top, and Left view).</p>\n
        <p>We will need to add two Look At constraints, one for each part of the piston. Select Piston_PA and select Look At from the Constraints section in the Animation menu, as depicted in Picture 5f below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5f.gif" />\n
        Picture 5f.</p>\n
        <p>Press the H key on your keyboard, select P_Axis_B, and click the Pick button. Piston_PA now changes its orientation. To make sure it point in the original direction, enable the Keep Initial Offset option on the Parameters section on the Motion tab of the Command Panel, as depicted in Picture 5g below. (The parameters section opened automatically when you added the Look At constraint.)</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5g.gif" />\n
        Picture 5g.</p>\n
        <p>Repeat this step for the other part of the piston, in other words: select Piston_PB, select Look At constraint from the Animation menu, pick the P_Axis_A as the target (using the H button to pick it). Also enable the Keep Initial Offset option again. So what we did is make one part of the piston ‘looks at’ the opposite part’s axis. The orientation is depicted with a blue line. If you select the helper Point03 and move it again, you will see that the metal bat slides neatly into the tube, as shown in Picture 5h below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5h.gif" />\n
        Picture 5h.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_pistons_end.zip">Download the scene here.</a></p>\n
        <p>To make it more realistic, we need to attach a pipe or hose to the hydraulic or pneumatic piston, and we need to make sure it moves and/or bends when the leg moves. There are many ways of doing this, but a relatively easy one is to use the extended primitive Hose. The advantage of using the Hose primitive is that you don’t need to rig it; no bones, and no IK. Instead, we are going to add two extra Cylinders, in addition to the Hose, and let the Hose start and end at those cylinders.</p>\n
        <p>In Picture 5i below you can see where we placed the two cylinders. The cylinder on the left is linked to UpperLeg, and the other is linked to Piston_PA. These cylinders represent the entry points of the hose, or the connector of a wire for example. You will probably want to use something more sophisticated than a cylinder, but make sure it is a separate object.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5i.gif" />\n
        Picture 5i.</p>\n
        <p>Next, create the hose by selecting Extended Primitives on the Create tab of the Command Panel, clicking the Hose button, and drawing a hose in any viewport, as shown in Picture 5j below. Don’t worry about its size, location, or shape yet.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5j.gif" />\n
        Picture 5j.</p>\n
        <p>On the Modify tab of the Command Panel, enable the Bound to Object Pivots. Click the Pick Top Object button and click on the left cylinder. Click the Pick Bottom Object button and click on the right cylinder (or use the H key on your keyboard).</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5k.gif" />\n
        Picture 5k.</p>\n
        <p>Depending on the orientation of the cylinders we use to connect the hose and the viewport you created them on, you may have to rotate the pivot of one or both cylinders. So if necessary, select the cylinder, enable the Affect Pivot Only button (picture 3f), and rotate the pivot. While you rotate the pivot, the hose will bend with it so you can easily see when it is at the right angle.</p>\n
        <p>When the hose is correctly aligned to the cylinders, click the hose again, scroll down below on the Modify tab, and disable the Flex Section Enable option as shown below in Picture 5l. Also decrease the Diameter: value in the Hose Shape section to a value that is less than the cylinders.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5l.gif" />\n
        Picture 5l.</p>\n
        <p>As you can see, the hose is too long and needs to hang more tightly against the leg. You can do this by decreasing the Tension values (see Picture 5k). In the final images below, we used 25 for both cylinders. If you move the leg again using on of the helpers, you will notice that the hose will stay in position and even bend when it has to. Click on one of the images to see the final animation.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5m.gif" /> <img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5n.gif" />\n
        Picture 5m.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_piston_hose.zip">Download the final scene here.</a></p>\n
        <p>I hope you enjoyed this tutorial and that it contributed something to your 3D Studio Max modeling skills.</p>
        """
      "grav" => Grav {}
      "theme_config" => array:2 [
        "enabled" => true
        "dropdown" => array:1 [
          "enabled" => false
        ]
      ]
    ]
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
vendor
/
twig
/
twig
/
src
/
Template.php
 
        if ($useBlocks && isset($blocks[$name])) {
            $template = $blocks[$name][0];
            $block = $blocks[$name][1];
        } elseif (isset($this->blocks[$name])) {
            $template = $this->blocks[$name][0];
            $block = $this->blocks[$name][1];
        } else {
            $template = null;
            $block = null;
        }
 
        // avoid RCEs when sandbox is enabled
        if (null !== $template && !$template instanceof self) {
            throw new \LogicException('A block must be a method on a \Twig\Template instance.');
        }
 
        if (null !== $template) {
            try {
                $template->$block($context, $blocks);
            } catch (Error $e) {
                if (!$e->getSourceContext()) {
                    $e->setSourceContext($template->getSourceContext());
                }
 
                // this is mostly useful for \Twig\Error\LoaderError exceptions
                // see \Twig\Error\LoaderError
                if (-1 === $e->getTemplateLine()) {
                    $e->guess();
                }
 
                throw $e;
            } catch (\Exception $e) {
                $e = new RuntimeError(sprintf('An exception has been thrown during the rendering of a template ("%s").', $e->getMessage()), -1, $template->getSourceContext(), $e);
                $e->guess();
 
                throw $e;
            }
        } elseif (false !== $parent = $this->getParent($context)) {
            $parent->displayBlock($name, $context, array_merge($this->blocks, $blocks), false);
Arguments
  1. array:30 [
      "config" => Config {}
      "system" => array:27 [
        "absolute_urls" => false
        "timezone" => ""
        "default_locale" => null
        "param_sep" => ":"
        "wrapped_site" => false
        "reverse_proxy_setup" => false
        "force_ssl" => false
        "force_lowercase_urls" => true
        "custom_base_url" => "http://www.3dvalley.com"
        "username_regex" => "^[a-z0-9_-]{3,16}$"
        "pwd_regex" => "(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}"
        "intl_enabled" => true
        "languages" => array:9 [
          "supported" => []
          "default_lang" => null
          "include_default_lang" => true
          "pages_fallback_only" => false
          "translations" => true
          "translations_fallback" => true
          "session_store_active" => false
          "http_accept_language" => false
          "override_locale" => false
        ]
        "home" => array:2 [
          "alias" => "/home"
          "hide_in_urls" => false
        ]
        "pages" => array:26 [
          "theme" => "minimaxing"
          "order" => array:2 [
            "by" => "default"
            "dir" => "asc"
          ]
          "list" => array:1 [
            "count" => 20
          ]
          "dateformat" => array:3 [
            "default" => null
            "short" => "jS M Y"
            "long" => "F jS \a\t g:ia"
          ]
          "publish_dates" => true
          "process" => array:2 [
            "markdown" => true
            "twig" => false
          ]
          "twig_first" => false
          "never_cache_twig" => false
          "events" => array:2 [
            "page" => true
            "twig" => true
          ]
          "markdown" => array:5 [
            "extra" => true
            "auto_line_breaks" => false
            "auto_url_links" => false
            "escape_markup" => false
            "special_chars" => array:2 [
              ">" => "gt"
              "<" => "lt"
            ]
          ]
          "types" => array:7 [
            0 => "txt"
            1 => "xml"
            2 => "html"
            3 => "htm"
            4 => "json"
            5 => "rss"
            6 => "atom"
          ]
          "append_url_extension" => ""
          "expires" => 604800
          "cache_control" => null
          "last_modified" => false
          "etag" => true
          "vary_accept_encoding" => false
          "redirect_default_route" => false
          "redirect_default_code" => "301"
          "redirect_trailing_slash" => true
          "ignore_files" => array:1 [
            0 => ".DS_Store"
          ]
          "ignore_folders" => array:2 [
            0 => ".git"
            1 => ".idea"
          ]
          "ignore_hidden" => true
          "hide_empty_folders" => false
          "url_taxonomy_filters" => true
          "frontmatter" => array:2 [
            "process_twig" => false
            "ignore_fields" => array:2 [
              0 => "form"
              1 => "forms"
            ]
          ]
        ]
        "cache" => array:13 [
          "enabled" => true
          "check" => array:1 [
            "method" => "file"
          ]
          "driver" => "apcu"
          "prefix" => "g"
          "purge_at" => "0 4 * * *"
          "clear_at" => "0 3 * * *"
          "clear_job_type" => "standard"
          "clear_images_by_default" => true
          "cli_compatibility" => false
          "lifetime" => 604800
          "gzip" => true
          "allow_webserver_gzip" => false
          "redis" => array:1 [
            "socket" => false
          ]
        ]
        "twig" => array:7 [
          "cache" => true
          "debug" => true
          "auto_reload" => true
          "autoescape" => false
          "undefined_functions" => true
          "undefined_filters" => true
          "umask_fix" => false
        ]
        "assets" => array:12 [
          "css_pipeline" => true
          "css_pipeline_include_externals" => true
          "css_pipeline_before_excludes" => true
          "css_minify" => true
          "css_minify_windows" => false
          "css_rewrite" => true
          "js_pipeline" => true
          "js_pipeline_include_externals" => true
          "js_pipeline_before_excludes" => true
          "js_minify" => true
          "enable_asset_timestamp" => false
          "collections" => array:1 [
            "jquery" => "system://assets/jquery/jquery-2.x.min.js"
          ]
        ]
        "errors" => array:2 [
          "display" => 1
          "log" => true
        ]
        "log" => array:2 [
          "handler" => "file"
          "syslog" => array:1 [
            "facility" => "local6"
          ]
        ]
        "debugger" => array:3 [
          "enabled" => false
          "shutdown" => array:1 [
            "close_connection" => true
          ]
          "twig" => true
        ]
        "images" => array:6 [
          "default_image_quality" => 85
          "cache_all" => false
          "cache_perms" => "0755"
          "debug" => false
          "auto_fix_orientation" => false
          "seofriendly" => false
        ]
        "media" => array:5 [
          "enable_media_timestamp" => false
          "unsupported_inline_types" => []
          "allowed_fallback_types" => []
          "auto_metadata_exif" => false
          "upload_limit" => 33554432
        ]
        "session" => array:9 [
          "enabled" => true
          "initialize" => true
          "timeout" => 1800
          "name" => "grav-site"
          "uniqueness" => "path"
          "secure" => false
          "httponly" => true
          "split" => true
          "path" => "/"
        ]
        "gpm" => array:5 [
          "releases" => "stable"
          "proxy_url" => null
          "method" => "auto"
          "verify_peer" => true
          "official_gpm_only" => true
        ]
        "accounts" => array:2 [
          "type" => "data"
          "storage" => "file"
        ]
        "strict_mode" => array:2 [
          "yaml_compat" => true
          "twig_compat" => true
        ]
      ]
      "theme" => array:2 [
        "enabled" => true
        "dropdown" => array:1 [
          "enabled" => false
        ]
      ]
      "site" => array:14 [
        "title" => "3Dvalley"
        "default_lang" => "en"
        "author" => array:2 [
          "name" => "Admin"
          "email" => "webmaster@3dvalley.com"
        ]
        "taxonomies" => array:2 [
          0 => "category"
          1 => "tag"
        ]
        "metadata" => array:1 [
          "description" => "Free 3D models and textures"
        ]
        "summary" => array:4 [
          "enabled" => true
          "format" => "short"
          "size" => 300
          "delimiter" => "==="
        ]
        "redirects" => array:12 [
          "/tutorials/3d-studio-max-hotkeys-and-mouse-essentials" => "/tutorials/threed-studio-max-hotkeys-and-mouse-essentials "
          "/tutorials/3d-studio-max-tutorial-modeling-a-plunger" => "/tutorials/modeling-a-plunger-in-3d-studio-max"
          "/tutorials/modeling-a-brake-rotor" => "/tutorials/modeling-brake-rotor-in-3d-studio-max"
          "/models" => "/3d-models"
          "/free-textures" => "/textures"
          "/textures.shtml" => "/textures"
          "/tutorials/rendering-objects-in-a-solidwire-mix" => "/tutorials/rendering-wip-images-in-3d-studio-max"
          "/tutorials/modeling-a-highly-detailed-basketball-in-3d-studio-max" => "/tutorials/modeling-a-highly-detailed-basketball-in-3ds-max/"
          "/models.shtml" => "/3d-models"
          "/c/tutorials" => "/tutorials"
          "/models/models_household.shtml" => "/3d-models/household"
          "/downloadables/3DStudioMAX-hotkeys.pdf" => "/tutorials/threed-studio-max-hotkeys-and-mouse-essentials"
        ]
        "routes" => null
        "blog" => array:1 [
          "route" => "/blog"
        ]
        "header" => array:2 [
          "title" => "I'm Jonathan Doe."
          "description" => "I'm a Manila based <span>graphic designer</span>, <span>illustrator</span> and <span>webdesigner</span> creating awesome and effective visual identities for companies of all sizes around the globe. Let's <a class="smoothscroll" href="#about">start scrolling</a> and learn more <a class="smoothscroll" href="#about">about me</a>."
        ]
        "copyright" => array:2 [
          0 => array:1 [
            "line" => "Copyright 2014 CeeVee"
          ]
          1 => array:1 [
            "line" => "Design by <a title="Styleshout" href="http://www.styleshout.com/">Styleshout</a>"
          ]
        ]
        "social" => array:7 [
          0 => array:2 [
            "url" => "#"
            "icon" => "facebook"
          ]
          1 => array:2 [
            "url" => "#"
            "icon" => "twitter"
          ]
          2 => array:2 [
            "url" => "#"
            "icon" => "google-plus"
          ]
          3 => array:2 [
            "url" => "#"
            "icon" => "linkedin"
          ]
          4 => array:2 [
            "url" => "#"
            "icon" => "instagram"
          ]
          5 => array:2 [
            "url" => "#"
            "icon" => "dribbble"
          ]
          6 => array:2 [
            "url" => "#"
            "icon" => "skype"
          ]
        ]
        "twitter" => array:7 [
          "id" => "657554810648948736"
          "domId" => "tw-widget1"
          "maxTweets" => 3
          "enableLinks" => "true"
          "showInteraction" => "false"
          "showImages" => "false"
          "showUser" => "false"
        ]
        "acxtest" => "TEST"
      ]
      "uri" => Uri {}
      "assets" => Assets {}
      "taxonomy" => Taxonomy {}
      "browser" => Browser {}
      "base_dir" => "/home/jhiemstraxartec/public_html/test"
      "home_url" => "/"
      "base_url" => ""
      "base_url_absolute" => "http://www.3dvalley.com"
      "base_url_relative" => ""
      "base_url_simple" => ""
      "theme_dir" => "/home/jhiemstraxartec/public_html/test/user/themes/minimaxing"
      "theme_url" => "/user/themes/minimaxing"
      "html_lang" => "en"
      "language_codes" => LanguageCodes {}
      "json" => "</script><script>"
      "myvar" => "</script><script>"
      "form" => null
      "form_max_filesize" => 32
      "form_json_response" => []
      "pages" => Page {}
      "page" => Page {}
      "header" => {}
      "media" => Media {}
      "content" => """
        <p>Like most tasks in 3D Studio Max and similar products, rigging robots is easy, if you know how. Depending on the complexity of the robot, some may find it even easier than rigging a human or animal character. This is because most parts of a robot do not deform during movement, with the exception of cabling and other flexible parts, so you don’t have to ‘skin’ it. One of the primary challenges in building a cool robot, which still looks cool when animated, is creating realistic mechanical joints.</p>\n
        \n
        <p>The first version of our example robotic leg below is not very realistic however, because it would collapse like a bone structure without muscles. In the second version, we will add some robotic ‘muscles’, and the third version will include a hose. Click on the download links below some of the pictures to download the corresponding scene.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/robotrigging_mainthumb_ani.gif" /></p>\n
        <h4>1. A Human Leg</h4>\n
        <p>When rigging a human leg, the mesh deforms when the knee bends, pushing vertexes away from each other on one side and towards each other on the opposite side. This is accomplished by using a Skin modifier that binds vertexes of the mesh to the bones. The colors of the vertexes indicate the weight values which dictate how much influence moving the joint will have on those vertexes. Red vertexes represent the most rigid parts.</p>\n
        <h4>2. Our Example Robot Leg</h4>\n
        <p>Robots are typically made of metal, plastic, or some other hard and rigid material that does not deform. The following picture shows the five objects that form the basis of our example leg.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p2a.jpg" /> <img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p2b.jpg" /></p>\n
        <h4>3. Rigging Our Example Robot Leg</h4>\n
        <p>As usual, I have to make a note that the following is just a way of doing this, which doesn’t necessarily means it is the way (we’ll actually show another way later on). Picture 3a below shows the (unsmoothed) wireframe of the objects that make up this leg. Click the link below it to download the scene, or download the scene including the bones by clicking the link below Picture 3h, or just watch the pictures if you do not feel like actually doing any of this right now.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3a.gif" />\n
        Picture 3a.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_start.zip">Download start scene here</a></p>\n
        <p>The red dots in the picture above represent the pivot of the object. In the scene you can download, I have already moved them to the correct position. The UpperLeg’s pivot is positioned at exactly the same position as the pivot of Cylinder01, and LowerLeg’s pivot is at the same position as the pivot of Cylinder02. When switching to the top view, they are all aligned. It is essential that the bones you add start or end exactly at those pivot points.</p>\n
        <p>A way of making sure the bones are positioned correctly is to snap to pivots. When you use this method it is also essential that all the pivots are aligned when viewing from the top. If in your robot they aren’t and it is too complex or difficult to align them, you can skip the following snap settings and just draw the bones, select them all and move them to the center of the leg (Top view). To use the snap setting, right-click the Snaps Toggle button on the main toolbar and select Pivot and clear others if necessary (see Picture 3b). Now click the Snaps Toggle button again (with the left mouse button) to enable it.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3b.gif" />\n
        Picture 3b.</p>\n
        <p>Click the Bones button in the Systems section on the Create tab of the Command Panel as displayed in Picture 3c below. Choose SplineIKSolver as the IK Solver and enable Assign to Children (you can use another IK Solver or none at all, if you prefer).</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3c.gif" />\n
        Picture 3c.</p>\n
        <p>Now draw the bones, by clicking on the spots 1, 2, and 3 shown in Picture 3d and then right-click anywhere in the viewport to stop. Spots 1, 2 and 3 are the pivot points of Cylinder01, Cylinder02, and Cylinder03.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3d.gif" />\n
        Picture 3d.</p>\n
        <p>When the Spline IK Solver dialog shown in Picture 3e below opens, just click OK.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3e.gif" />\n
        Picture 3e.</p>\n
        <p>Now before you link the bones to the leg, you should make sure that the pivots of the bones are positioned correctly on the pivot of the limbs, the Spline IK Solver we added moved them slightly. To move a bone’s pivot, click the Affect Pivot Only button on the Hierarchy tab of the Command Panel, and disable the Enabled button on the Motion tab of the Command Panel.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3f.gif" />\n
        Picture 3f.</p>\n
        <p>Then select the pivot of the bone and move it to the correct position. Make sure you zoom in and place it exactly in the center of the limbs’ pivots. You also might want to disable the snap to pivot setting first by clicking the Snaps Toggle button again. If for some reason you cannot get them in the right position, there is no need to continue, as the whole setup depends on the pivots’ position.</p>\n
        <p>When you are sure the pivots are positioned correctly, select Cylinder01 and link it to UpperLeg. Select Cylinder02 and link it to the LowerLeg, and select Cylinder03 to LowerLeg as well. To link one object to another click the Select and Link button on the main tool bar, select the object you want to link and drag to the object you want to link to. If you do it correctly, the object you link to, will flash white once.</p>\n
        <p>We will use the same select and link method to link the objects to the bones, instead of using a Skin modifier. Link UpperLeg to the upper bone, and link LowerLeg to the lower bone.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3g.gif" />\n
        Picture 3g.</p>\n
        <p>When you done all of the above, or download the scene including the bones by using the link below, select the IK Chain or any of the point helpers and move it. The knee joint should now operate as shown in Picture 3g, without any of the objects deforming during movement.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3h.gif" />\n
        Picture 3h.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_end.zip">Download scene here.</a></p>\n
        <h4>4. Another Approach</h4>\n
        <p>Before we continue with this leg and add some muscles, we will use another method of rigging this leg. As someone kindly pointed out to me, there is no absolute need to use bones . If you are new to rigging characters or robots in particular, you may want to go for the bones method discussed above, but a robot is often a skeleton by itself, eliminating the need for bones. 3D Studio Max allows any object to act like a bone, and allows you also to assign IK solvers to any hierarchical set of objects. Also in this type of ‘bone’ setup, it is absolutely imperative that the pivots of the objects are in the correct position. We will illustrate this with some pictures later.</p>\n
        <p>To make this work with the previous example (delete the previous bone structure or use the scene you downloaded earlier), and link the objects to each other as followed:</p>\n
        <p>Cylinder03 -&gt; LowerLeg\n
        LowerLeg -&gt; Cylinder02</p>\n
        <p>Cylinder02 -&gt; UpperLeg</p>\n
        <p>UpperLeg -&gt; Cylinder01</p>\n
        <p>Press the Schematic View (Open) button on the main toolbar to check if the hierarchy is now correct as displayed in Picture 4a.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4a.gif" />\n
        Picture 4a.</p>\n
        <p>Now all you need to do is add an IK Solver to this hierarchy to make it act like a robotic leg. You can use the IK Solver you prefer, but in this example, we are going to use the History Independent solver. Select Cylinder03, choose HI Solver from the IK Solvers section in the Animation menu, and select Cylinder01. To prevent you from linking the solver to UpperLeg instead of Cylinder01, use the Select by Name option, which basically means you should press the H key on your keyboard after you choose HI Solver from the menu, and then pick Cylinder01 from the list, instead of clicking on it in the viewport.</p>\n
        <p>If you performed the previous tasks correctly, the results should be like in Picture 4b with the IK Chain selected. If you move the IK Chain the leg should work. To make the task of animating this leg a bit more convenient, you should link the IK Chain to a Point Helper.</p>\n
        <p>A Point helper can be created by clicking the Point button in the Helpers section of the Create tab on the Command Panel, and clicking somewhere in the viewport, as depicted in Picture 4b below. In this case, I suggest you place it somewhere at the bottom of the leg. Use the same Select and Link method as discussed earlier to link the IK Chain to the Point helper, so you can animate the leg by moving the Point helper.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4b.gif" />\n
        Picture 4b.</p>\n
        <p>If your robot has a complex geometry and animating the individual objects slows down your computer too much, you can configure 3D Studio Max to display the objects as bones. When using our example leg from the previous steps, you should select Cylinder01, 02, 03, UpperLeg, and LowerLeg, and select Bone Tools from the Character menu. Enable the Bone On option on the Bone Tools dialog as shown below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4c.gif" />\n
        Picture 4c.</p>\n
        <p>Next, open the Display tab on the Command Panel, scroll down, and in the Link Display section enable the Display Links option and the Link Replaces Object option.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4d.gif" />\n
        Picture 4d.</p>\n
        <p>The results should be as depicted in Picture 4e below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4e.gif" />\n
        Picture 4e.</p>\n
        <p>Alternatively, you can enable only the Display Links option and right above the Link Display section enable the Display as Box option in the Display Properties section. The results should be as depicted in Picture 4f below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4f.gif" />\n
        Picture 4f.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_ik_end.zip">Download the scene here.</a></p>\n
        <h4>5. Muscles</h4>\n
        <p>As I mentioned earlier, the leg used in the example above is not very realistic; it needs some muscles to make it move automatically and at the same time give it some strength. You can make up your own mechanisms, but you can also use one of the three main methods used in modern real world robots:</p>\n
        <p>Electrical motors</p>\n
        <p>For the example leg from above, this would be the easy way out, as you would ‘only’ have to increase the size of the knee joint and modify it into to something like shown below in Photo I, so it becomes viable an electrical motor could fit inside. Additionally, rigging the robot is easy as you can use one of the methods we discussed earlier.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/motoman_sv3x.jpg" />\n
        Photo I. Industrial robot arm powered by electrical motors.</p>\n
        <p>Hydraulic/Pneumatic/Magnetic pistons</p>\n
        <p>Another commonly used method to power robots are pistons. A piston (see Photo II below) is basically consists of a metal bar that goes inside a tube. Pressurized air or oil is pumped into the piston to push out metal bar. This is usually the sound you here when a robot moves. If you want to make them realistic, you should attach a hose to it, which leads to a compressor somewhere in or on the robot. These hydraulic or pneumatic pistons are much more powerful than electrical motors. Smaller pistons may use magnetic force to either pull or push the metal bar. The latter would have electrical wires attached to it, instead of a hose.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/photo_ii.gif" />\n
        Photo II. Crane powered by hydraulic pistons.</p>\n
        <p>Picture 5a and 5b show our second example leg. It includes a piston that is made of two cylinders called Piston_PA and Piston_PB. Two additional cylinders (P_Axis_A and P_Axis_B) form the axis of the piston’s parts.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5a.gif" /> <img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5b.gif" />\n
        Picture 5a. &amp; Picture 5b.</p>\n
        <p>As you can see in Picture 5c below, we already rigged the leg with two bones and an IKSplineSolver. You can download the scene by clicking the link below the picture.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5c.gif" />\n
        Picture 5c.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_pistons_start.zip">Download the scene here.</a></p>\n
        <p>First, we will link the piston’s parts to the leg as followed:</p>\n
        <p>P_Axis_A -&gt; UpperLeg\n
        P_Axis_B -&gt; LowerLeg</p>\n
        <p>Piston_PA -&gt; P_Axis_A</p>\n
        <p>Piston_PB -&gt; P_Axis_B</p>\n
        <p>The hierarchy of the leg should now be exactly like in Picture 5d.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5d.gif" />\n
        Picture 5d.</p>\n
        <p>If we would bend the knee, by using the lower helper (Point3) for example, the two parts of the piston will not stay aligned correctly and will ‘break’ as shown in Picture 5e below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5e.gif" />\n
        Picture 5e.</p>\n
        <p>(If you moved the leg, press use Undo (Ctrl-Z) to move it back to its original position.)</p>\n
        <p>To make sure the metal bar stays inside the tube, we need to use a constraint, in this case the Look At constraint. As in the previous parts of this tutorial, the placement of the pivots of the piston’s parts is essential to make it work. The pivots for P_Axis_A and Piston_PA are exactly on the same position, and the pivots for P_Axis_B and Piston_PB are also exactly on the same position. We have already done this in the downloadable scene by selecting the parts that have the pivots on the same axis, enabling the Affect Pivot Only button (see Picture 3f) and using the Align tool (on both the Front, Top, and Left view).</p>\n
        <p>We will need to add two Look At constraints, one for each part of the piston. Select Piston_PA and select Look At from the Constraints section in the Animation menu, as depicted in Picture 5f below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5f.gif" />\n
        Picture 5f.</p>\n
        <p>Press the H key on your keyboard, select P_Axis_B, and click the Pick button. Piston_PA now changes its orientation. To make sure it point in the original direction, enable the Keep Initial Offset option on the Parameters section on the Motion tab of the Command Panel, as depicted in Picture 5g below. (The parameters section opened automatically when you added the Look At constraint.)</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5g.gif" />\n
        Picture 5g.</p>\n
        <p>Repeat this step for the other part of the piston, in other words: select Piston_PB, select Look At constraint from the Animation menu, pick the P_Axis_A as the target (using the H button to pick it). Also enable the Keep Initial Offset option again. So what we did is make one part of the piston ‘looks at’ the opposite part’s axis. The orientation is depicted with a blue line. If you select the helper Point03 and move it again, you will see that the metal bat slides neatly into the tube, as shown in Picture 5h below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5h.gif" />\n
        Picture 5h.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_pistons_end.zip">Download the scene here.</a></p>\n
        <p>To make it more realistic, we need to attach a pipe or hose to the hydraulic or pneumatic piston, and we need to make sure it moves and/or bends when the leg moves. There are many ways of doing this, but a relatively easy one is to use the extended primitive Hose. The advantage of using the Hose primitive is that you don’t need to rig it; no bones, and no IK. Instead, we are going to add two extra Cylinders, in addition to the Hose, and let the Hose start and end at those cylinders.</p>\n
        <p>In Picture 5i below you can see where we placed the two cylinders. The cylinder on the left is linked to UpperLeg, and the other is linked to Piston_PA. These cylinders represent the entry points of the hose, or the connector of a wire for example. You will probably want to use something more sophisticated than a cylinder, but make sure it is a separate object.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5i.gif" />\n
        Picture 5i.</p>\n
        <p>Next, create the hose by selecting Extended Primitives on the Create tab of the Command Panel, clicking the Hose button, and drawing a hose in any viewport, as shown in Picture 5j below. Don’t worry about its size, location, or shape yet.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5j.gif" />\n
        Picture 5j.</p>\n
        <p>On the Modify tab of the Command Panel, enable the Bound to Object Pivots. Click the Pick Top Object button and click on the left cylinder. Click the Pick Bottom Object button and click on the right cylinder (or use the H key on your keyboard).</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5k.gif" />\n
        Picture 5k.</p>\n
        <p>Depending on the orientation of the cylinders we use to connect the hose and the viewport you created them on, you may have to rotate the pivot of one or both cylinders. So if necessary, select the cylinder, enable the Affect Pivot Only button (picture 3f), and rotate the pivot. While you rotate the pivot, the hose will bend with it so you can easily see when it is at the right angle.</p>\n
        <p>When the hose is correctly aligned to the cylinders, click the hose again, scroll down below on the Modify tab, and disable the Flex Section Enable option as shown below in Picture 5l. Also decrease the Diameter: value in the Hose Shape section to a value that is less than the cylinders.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5l.gif" />\n
        Picture 5l.</p>\n
        <p>As you can see, the hose is too long and needs to hang more tightly against the leg. You can do this by decreasing the Tension values (see Picture 5k). In the final images below, we used 25 for both cylinders. If you move the leg again using on of the helpers, you will notice that the hose will stay in position and even bend when it has to. Click on one of the images to see the final animation.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5m.gif" /> <img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5n.gif" />\n
        Picture 5m.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_piston_hose.zip">Download the final scene here.</a></p>\n
        <p>I hope you enjoyed this tutorial and that it contributed something to your 3D Studio Max modeling skills.</p>
        """
      "grav" => Grav {}
      "theme_config" => array:2 [
        "enabled" => true
        "dropdown" => array:1 [
          "enabled" => false
        ]
      ]
    ]
    
  2. array:11 [
      "head" => array:2 [
        0 => __TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee {#1}
        1 => "block_head"
      ]
      "galalbummeta" => array:2 [
        0 => __TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee {#1}
        1 => "block_galalbummeta"
      ]
      "stylesheets" => array:2 [
        0 => __TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee {#1}
        1 => "block_stylesheets"
      ]
      "javascripts" => array:2 [
        0 => __TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee {#1}
        1 => "block_javascripts"
      ]
      "header" => array:2 [
        0 => __TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee {#1}
        1 => "block_header"
      ]
      "header_navigation" => array:2 [
        0 => __TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee {#1}
        1 => "block_header_navigation"
      ]
      "banner" => array:2 [
        0 => __TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee {#1}
        1 => "block_banner"
      ]
      "body" => array:2 [
        0 => __TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee {#1}
        1 => "block_body"
      ]
      "content" => array:2 [
        0 => __TwigTemplate_1fd2da7f05a02335033099a06781b7d00f84f79ced9a93dc72d9cf5790c09ebd {}
        1 => "block_content"
      ]
      "footer" => array:2 [
        0 => __TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee {#1}
        1 => "block_footer"
      ]
      "bottom" => array:2 [
        0 => __TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee {#1}
        1 => "block_bottom"
      ]
    ]
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
cache
/
twig
/
05
/
05d859bec41ac5da994bb517e48f7a9558c5995f959256a93748d96374b382ab.php
        $this->loadTemplate("partials/navigation.html.twig", "partials/base.html.twig", 79)->display($context);
        // line 80
        echo "                        </nav>
                        ";
    }
 
    // line 106
    public function block_banner($context, array $blocks = [])
    {
    }
 
    // line 109
    public function block_body($context, array $blocks = [])
    {
        // line 110
        echo "    <div id=\"main\">
        <div class=\"container\">
            ";
        // line 112
        $this->displayBlock('content', $context, $blocks);
        // line 113
        echo "        </div>
    </div>
";
    }
 
    // line 112
    public function block_content($context, array $blocks = [])
    {
    }
 
    // line 117
    public function block_footer($context, array $blocks = [])
    {
        // line 118
        echo "    <div id=\"footer-wrapper\">
        <div class=\"container\">
            ";
        // line 120
        $this->loadTemplate("partials/footer.html.twig", "partials/base.html.twig", 120)->display($context);
Arguments
  1. "content"
    
  2. array:30 [
      "config" => Config {}
      "system" => array:27 [
        "absolute_urls" => false
        "timezone" => ""
        "default_locale" => null
        "param_sep" => ":"
        "wrapped_site" => false
        "reverse_proxy_setup" => false
        "force_ssl" => false
        "force_lowercase_urls" => true
        "custom_base_url" => "http://www.3dvalley.com"
        "username_regex" => "^[a-z0-9_-]{3,16}$"
        "pwd_regex" => "(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}"
        "intl_enabled" => true
        "languages" => array:9 [
          "supported" => []
          "default_lang" => null
          "include_default_lang" => true
          "pages_fallback_only" => false
          "translations" => true
          "translations_fallback" => true
          "session_store_active" => false
          "http_accept_language" => false
          "override_locale" => false
        ]
        "home" => array:2 [
          "alias" => "/home"
          "hide_in_urls" => false
        ]
        "pages" => array:26 [
          "theme" => "minimaxing"
          "order" => array:2 [
            "by" => "default"
            "dir" => "asc"
          ]
          "list" => array:1 [
            "count" => 20
          ]
          "dateformat" => array:3 [
            "default" => null
            "short" => "jS M Y"
            "long" => "F jS \a\t g:ia"
          ]
          "publish_dates" => true
          "process" => array:2 [
            "markdown" => true
            "twig" => false
          ]
          "twig_first" => false
          "never_cache_twig" => false
          "events" => array:2 [
            "page" => true
            "twig" => true
          ]
          "markdown" => array:5 [
            "extra" => true
            "auto_line_breaks" => false
            "auto_url_links" => false
            "escape_markup" => false
            "special_chars" => array:2 [
              ">" => "gt"
              "<" => "lt"
            ]
          ]
          "types" => array:7 [
            0 => "txt"
            1 => "xml"
            2 => "html"
            3 => "htm"
            4 => "json"
            5 => "rss"
            6 => "atom"
          ]
          "append_url_extension" => ""
          "expires" => 604800
          "cache_control" => null
          "last_modified" => false
          "etag" => true
          "vary_accept_encoding" => false
          "redirect_default_route" => false
          "redirect_default_code" => "301"
          "redirect_trailing_slash" => true
          "ignore_files" => array:1 [
            0 => ".DS_Store"
          ]
          "ignore_folders" => array:2 [
            0 => ".git"
            1 => ".idea"
          ]
          "ignore_hidden" => true
          "hide_empty_folders" => false
          "url_taxonomy_filters" => true
          "frontmatter" => array:2 [
            "process_twig" => false
            "ignore_fields" => array:2 [
              0 => "form"
              1 => "forms"
            ]
          ]
        ]
        "cache" => array:13 [
          "enabled" => true
          "check" => array:1 [
            "method" => "file"
          ]
          "driver" => "apcu"
          "prefix" => "g"
          "purge_at" => "0 4 * * *"
          "clear_at" => "0 3 * * *"
          "clear_job_type" => "standard"
          "clear_images_by_default" => true
          "cli_compatibility" => false
          "lifetime" => 604800
          "gzip" => true
          "allow_webserver_gzip" => false
          "redis" => array:1 [
            "socket" => false
          ]
        ]
        "twig" => array:7 [
          "cache" => true
          "debug" => true
          "auto_reload" => true
          "autoescape" => false
          "undefined_functions" => true
          "undefined_filters" => true
          "umask_fix" => false
        ]
        "assets" => array:12 [
          "css_pipeline" => true
          "css_pipeline_include_externals" => true
          "css_pipeline_before_excludes" => true
          "css_minify" => true
          "css_minify_windows" => false
          "css_rewrite" => true
          "js_pipeline" => true
          "js_pipeline_include_externals" => true
          "js_pipeline_before_excludes" => true
          "js_minify" => true
          "enable_asset_timestamp" => false
          "collections" => array:1 [
            "jquery" => "system://assets/jquery/jquery-2.x.min.js"
          ]
        ]
        "errors" => array:2 [
          "display" => 1
          "log" => true
        ]
        "log" => array:2 [
          "handler" => "file"
          "syslog" => array:1 [
            "facility" => "local6"
          ]
        ]
        "debugger" => array:3 [
          "enabled" => false
          "shutdown" => array:1 [
            "close_connection" => true
          ]
          "twig" => true
        ]
        "images" => array:6 [
          "default_image_quality" => 85
          "cache_all" => false
          "cache_perms" => "0755"
          "debug" => false
          "auto_fix_orientation" => false
          "seofriendly" => false
        ]
        "media" => array:5 [
          "enable_media_timestamp" => false
          "unsupported_inline_types" => []
          "allowed_fallback_types" => []
          "auto_metadata_exif" => false
          "upload_limit" => 33554432
        ]
        "session" => array:9 [
          "enabled" => true
          "initialize" => true
          "timeout" => 1800
          "name" => "grav-site"
          "uniqueness" => "path"
          "secure" => false
          "httponly" => true
          "split" => true
          "path" => "/"
        ]
        "gpm" => array:5 [
          "releases" => "stable"
          "proxy_url" => null
          "method" => "auto"
          "verify_peer" => true
          "official_gpm_only" => true
        ]
        "accounts" => array:2 [
          "type" => "data"
          "storage" => "file"
        ]
        "strict_mode" => array:2 [
          "yaml_compat" => true
          "twig_compat" => true
        ]
      ]
      "theme" => array:2 [
        "enabled" => true
        "dropdown" => array:1 [
          "enabled" => false
        ]
      ]
      "site" => array:14 [
        "title" => "3Dvalley"
        "default_lang" => "en"
        "author" => array:2 [
          "name" => "Admin"
          "email" => "webmaster@3dvalley.com"
        ]
        "taxonomies" => array:2 [
          0 => "category"
          1 => "tag"
        ]
        "metadata" => array:1 [
          "description" => "Free 3D models and textures"
        ]
        "summary" => array:4 [
          "enabled" => true
          "format" => "short"
          "size" => 300
          "delimiter" => "==="
        ]
        "redirects" => array:12 [
          "/tutorials/3d-studio-max-hotkeys-and-mouse-essentials" => "/tutorials/threed-studio-max-hotkeys-and-mouse-essentials "
          "/tutorials/3d-studio-max-tutorial-modeling-a-plunger" => "/tutorials/modeling-a-plunger-in-3d-studio-max"
          "/tutorials/modeling-a-brake-rotor" => "/tutorials/modeling-brake-rotor-in-3d-studio-max"
          "/models" => "/3d-models"
          "/free-textures" => "/textures"
          "/textures.shtml" => "/textures"
          "/tutorials/rendering-objects-in-a-solidwire-mix" => "/tutorials/rendering-wip-images-in-3d-studio-max"
          "/tutorials/modeling-a-highly-detailed-basketball-in-3d-studio-max" => "/tutorials/modeling-a-highly-detailed-basketball-in-3ds-max/"
          "/models.shtml" => "/3d-models"
          "/c/tutorials" => "/tutorials"
          "/models/models_household.shtml" => "/3d-models/household"
          "/downloadables/3DStudioMAX-hotkeys.pdf" => "/tutorials/threed-studio-max-hotkeys-and-mouse-essentials"
        ]
        "routes" => null
        "blog" => array:1 [
          "route" => "/blog"
        ]
        "header" => array:2 [
          "title" => "I'm Jonathan Doe."
          "description" => "I'm a Manila based <span>graphic designer</span>, <span>illustrator</span> and <span>webdesigner</span> creating awesome and effective visual identities for companies of all sizes around the globe. Let's <a class="smoothscroll" href="#about">start scrolling</a> and learn more <a class="smoothscroll" href="#about">about me</a>."
        ]
        "copyright" => array:2 [
          0 => array:1 [
            "line" => "Copyright 2014 CeeVee"
          ]
          1 => array:1 [
            "line" => "Design by <a title="Styleshout" href="http://www.styleshout.com/">Styleshout</a>"
          ]
        ]
        "social" => array:7 [
          0 => array:2 [
            "url" => "#"
            "icon" => "facebook"
          ]
          1 => array:2 [
            "url" => "#"
            "icon" => "twitter"
          ]
          2 => array:2 [
            "url" => "#"
            "icon" => "google-plus"
          ]
          3 => array:2 [
            "url" => "#"
            "icon" => "linkedin"
          ]
          4 => array:2 [
            "url" => "#"
            "icon" => "instagram"
          ]
          5 => array:2 [
            "url" => "#"
            "icon" => "dribbble"
          ]
          6 => array:2 [
            "url" => "#"
            "icon" => "skype"
          ]
        ]
        "twitter" => array:7 [
          "id" => "657554810648948736"
          "domId" => "tw-widget1"
          "maxTweets" => 3
          "enableLinks" => "true"
          "showInteraction" => "false"
          "showImages" => "false"
          "showUser" => "false"
        ]
        "acxtest" => "TEST"
      ]
      "uri" => Uri {}
      "assets" => Assets {}
      "taxonomy" => Taxonomy {}
      "browser" => Browser {}
      "base_dir" => "/home/jhiemstraxartec/public_html/test"
      "home_url" => "/"
      "base_url" => ""
      "base_url_absolute" => "http://www.3dvalley.com"
      "base_url_relative" => ""
      "base_url_simple" => ""
      "theme_dir" => "/home/jhiemstraxartec/public_html/test/user/themes/minimaxing"
      "theme_url" => "/user/themes/minimaxing"
      "html_lang" => "en"
      "language_codes" => LanguageCodes {}
      "json" => "</script><script>"
      "myvar" => "</script><script>"
      "form" => null
      "form_max_filesize" => 32
      "form_json_response" => []
      "pages" => Page {}
      "page" => Page {}
      "header" => {}
      "media" => Media {}
      "content" => """
        <p>Like most tasks in 3D Studio Max and similar products, rigging robots is easy, if you know how. Depending on the complexity of the robot, some may find it even easier than rigging a human or animal character. This is because most parts of a robot do not deform during movement, with the exception of cabling and other flexible parts, so you don’t have to ‘skin’ it. One of the primary challenges in building a cool robot, which still looks cool when animated, is creating realistic mechanical joints.</p>\n
        \n
        <p>The first version of our example robotic leg below is not very realistic however, because it would collapse like a bone structure without muscles. In the second version, we will add some robotic ‘muscles’, and the third version will include a hose. Click on the download links below some of the pictures to download the corresponding scene.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/robotrigging_mainthumb_ani.gif" /></p>\n
        <h4>1. A Human Leg</h4>\n
        <p>When rigging a human leg, the mesh deforms when the knee bends, pushing vertexes away from each other on one side and towards each other on the opposite side. This is accomplished by using a Skin modifier that binds vertexes of the mesh to the bones. The colors of the vertexes indicate the weight values which dictate how much influence moving the joint will have on those vertexes. Red vertexes represent the most rigid parts.</p>\n
        <h4>2. Our Example Robot Leg</h4>\n
        <p>Robots are typically made of metal, plastic, or some other hard and rigid material that does not deform. The following picture shows the five objects that form the basis of our example leg.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p2a.jpg" /> <img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p2b.jpg" /></p>\n
        <h4>3. Rigging Our Example Robot Leg</h4>\n
        <p>As usual, I have to make a note that the following is just a way of doing this, which doesn’t necessarily means it is the way (we’ll actually show another way later on). Picture 3a below shows the (unsmoothed) wireframe of the objects that make up this leg. Click the link below it to download the scene, or download the scene including the bones by clicking the link below Picture 3h, or just watch the pictures if you do not feel like actually doing any of this right now.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3a.gif" />\n
        Picture 3a.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_start.zip">Download start scene here</a></p>\n
        <p>The red dots in the picture above represent the pivot of the object. In the scene you can download, I have already moved them to the correct position. The UpperLeg’s pivot is positioned at exactly the same position as the pivot of Cylinder01, and LowerLeg’s pivot is at the same position as the pivot of Cylinder02. When switching to the top view, they are all aligned. It is essential that the bones you add start or end exactly at those pivot points.</p>\n
        <p>A way of making sure the bones are positioned correctly is to snap to pivots. When you use this method it is also essential that all the pivots are aligned when viewing from the top. If in your robot they aren’t and it is too complex or difficult to align them, you can skip the following snap settings and just draw the bones, select them all and move them to the center of the leg (Top view). To use the snap setting, right-click the Snaps Toggle button on the main toolbar and select Pivot and clear others if necessary (see Picture 3b). Now click the Snaps Toggle button again (with the left mouse button) to enable it.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3b.gif" />\n
        Picture 3b.</p>\n
        <p>Click the Bones button in the Systems section on the Create tab of the Command Panel as displayed in Picture 3c below. Choose SplineIKSolver as the IK Solver and enable Assign to Children (you can use another IK Solver or none at all, if you prefer).</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3c.gif" />\n
        Picture 3c.</p>\n
        <p>Now draw the bones, by clicking on the spots 1, 2, and 3 shown in Picture 3d and then right-click anywhere in the viewport to stop. Spots 1, 2 and 3 are the pivot points of Cylinder01, Cylinder02, and Cylinder03.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3d.gif" />\n
        Picture 3d.</p>\n
        <p>When the Spline IK Solver dialog shown in Picture 3e below opens, just click OK.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3e.gif" />\n
        Picture 3e.</p>\n
        <p>Now before you link the bones to the leg, you should make sure that the pivots of the bones are positioned correctly on the pivot of the limbs, the Spline IK Solver we added moved them slightly. To move a bone’s pivot, click the Affect Pivot Only button on the Hierarchy tab of the Command Panel, and disable the Enabled button on the Motion tab of the Command Panel.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3f.gif" />\n
        Picture 3f.</p>\n
        <p>Then select the pivot of the bone and move it to the correct position. Make sure you zoom in and place it exactly in the center of the limbs’ pivots. You also might want to disable the snap to pivot setting first by clicking the Snaps Toggle button again. If for some reason you cannot get them in the right position, there is no need to continue, as the whole setup depends on the pivots’ position.</p>\n
        <p>When you are sure the pivots are positioned correctly, select Cylinder01 and link it to UpperLeg. Select Cylinder02 and link it to the LowerLeg, and select Cylinder03 to LowerLeg as well. To link one object to another click the Select and Link button on the main tool bar, select the object you want to link and drag to the object you want to link to. If you do it correctly, the object you link to, will flash white once.</p>\n
        <p>We will use the same select and link method to link the objects to the bones, instead of using a Skin modifier. Link UpperLeg to the upper bone, and link LowerLeg to the lower bone.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3g.gif" />\n
        Picture 3g.</p>\n
        <p>When you done all of the above, or download the scene including the bones by using the link below, select the IK Chain or any of the point helpers and move it. The knee joint should now operate as shown in Picture 3g, without any of the objects deforming during movement.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3h.gif" />\n
        Picture 3h.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_end.zip">Download scene here.</a></p>\n
        <h4>4. Another Approach</h4>\n
        <p>Before we continue with this leg and add some muscles, we will use another method of rigging this leg. As someone kindly pointed out to me, there is no absolute need to use bones . If you are new to rigging characters or robots in particular, you may want to go for the bones method discussed above, but a robot is often a skeleton by itself, eliminating the need for bones. 3D Studio Max allows any object to act like a bone, and allows you also to assign IK solvers to any hierarchical set of objects. Also in this type of ‘bone’ setup, it is absolutely imperative that the pivots of the objects are in the correct position. We will illustrate this with some pictures later.</p>\n
        <p>To make this work with the previous example (delete the previous bone structure or use the scene you downloaded earlier), and link the objects to each other as followed:</p>\n
        <p>Cylinder03 -&gt; LowerLeg\n
        LowerLeg -&gt; Cylinder02</p>\n
        <p>Cylinder02 -&gt; UpperLeg</p>\n
        <p>UpperLeg -&gt; Cylinder01</p>\n
        <p>Press the Schematic View (Open) button on the main toolbar to check if the hierarchy is now correct as displayed in Picture 4a.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4a.gif" />\n
        Picture 4a.</p>\n
        <p>Now all you need to do is add an IK Solver to this hierarchy to make it act like a robotic leg. You can use the IK Solver you prefer, but in this example, we are going to use the History Independent solver. Select Cylinder03, choose HI Solver from the IK Solvers section in the Animation menu, and select Cylinder01. To prevent you from linking the solver to UpperLeg instead of Cylinder01, use the Select by Name option, which basically means you should press the H key on your keyboard after you choose HI Solver from the menu, and then pick Cylinder01 from the list, instead of clicking on it in the viewport.</p>\n
        <p>If you performed the previous tasks correctly, the results should be like in Picture 4b with the IK Chain selected. If you move the IK Chain the leg should work. To make the task of animating this leg a bit more convenient, you should link the IK Chain to a Point Helper.</p>\n
        <p>A Point helper can be created by clicking the Point button in the Helpers section of the Create tab on the Command Panel, and clicking somewhere in the viewport, as depicted in Picture 4b below. In this case, I suggest you place it somewhere at the bottom of the leg. Use the same Select and Link method as discussed earlier to link the IK Chain to the Point helper, so you can animate the leg by moving the Point helper.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4b.gif" />\n
        Picture 4b.</p>\n
        <p>If your robot has a complex geometry and animating the individual objects slows down your computer too much, you can configure 3D Studio Max to display the objects as bones. When using our example leg from the previous steps, you should select Cylinder01, 02, 03, UpperLeg, and LowerLeg, and select Bone Tools from the Character menu. Enable the Bone On option on the Bone Tools dialog as shown below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4c.gif" />\n
        Picture 4c.</p>\n
        <p>Next, open the Display tab on the Command Panel, scroll down, and in the Link Display section enable the Display Links option and the Link Replaces Object option.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4d.gif" />\n
        Picture 4d.</p>\n
        <p>The results should be as depicted in Picture 4e below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4e.gif" />\n
        Picture 4e.</p>\n
        <p>Alternatively, you can enable only the Display Links option and right above the Link Display section enable the Display as Box option in the Display Properties section. The results should be as depicted in Picture 4f below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4f.gif" />\n
        Picture 4f.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_ik_end.zip">Download the scene here.</a></p>\n
        <h4>5. Muscles</h4>\n
        <p>As I mentioned earlier, the leg used in the example above is not very realistic; it needs some muscles to make it move automatically and at the same time give it some strength. You can make up your own mechanisms, but you can also use one of the three main methods used in modern real world robots:</p>\n
        <p>Electrical motors</p>\n
        <p>For the example leg from above, this would be the easy way out, as you would ‘only’ have to increase the size of the knee joint and modify it into to something like shown below in Photo I, so it becomes viable an electrical motor could fit inside. Additionally, rigging the robot is easy as you can use one of the methods we discussed earlier.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/motoman_sv3x.jpg" />\n
        Photo I. Industrial robot arm powered by electrical motors.</p>\n
        <p>Hydraulic/Pneumatic/Magnetic pistons</p>\n
        <p>Another commonly used method to power robots are pistons. A piston (see Photo II below) is basically consists of a metal bar that goes inside a tube. Pressurized air or oil is pumped into the piston to push out metal bar. This is usually the sound you here when a robot moves. If you want to make them realistic, you should attach a hose to it, which leads to a compressor somewhere in or on the robot. These hydraulic or pneumatic pistons are much more powerful than electrical motors. Smaller pistons may use magnetic force to either pull or push the metal bar. The latter would have electrical wires attached to it, instead of a hose.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/photo_ii.gif" />\n
        Photo II. Crane powered by hydraulic pistons.</p>\n
        <p>Picture 5a and 5b show our second example leg. It includes a piston that is made of two cylinders called Piston_PA and Piston_PB. Two additional cylinders (P_Axis_A and P_Axis_B) form the axis of the piston’s parts.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5a.gif" /> <img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5b.gif" />\n
        Picture 5a. &amp; Picture 5b.</p>\n
        <p>As you can see in Picture 5c below, we already rigged the leg with two bones and an IKSplineSolver. You can download the scene by clicking the link below the picture.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5c.gif" />\n
        Picture 5c.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_pistons_start.zip">Download the scene here.</a></p>\n
        <p>First, we will link the piston’s parts to the leg as followed:</p>\n
        <p>P_Axis_A -&gt; UpperLeg\n
        P_Axis_B -&gt; LowerLeg</p>\n
        <p>Piston_PA -&gt; P_Axis_A</p>\n
        <p>Piston_PB -&gt; P_Axis_B</p>\n
        <p>The hierarchy of the leg should now be exactly like in Picture 5d.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5d.gif" />\n
        Picture 5d.</p>\n
        <p>If we would bend the knee, by using the lower helper (Point3) for example, the two parts of the piston will not stay aligned correctly and will ‘break’ as shown in Picture 5e below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5e.gif" />\n
        Picture 5e.</p>\n
        <p>(If you moved the leg, press use Undo (Ctrl-Z) to move it back to its original position.)</p>\n
        <p>To make sure the metal bar stays inside the tube, we need to use a constraint, in this case the Look At constraint. As in the previous parts of this tutorial, the placement of the pivots of the piston’s parts is essential to make it work. The pivots for P_Axis_A and Piston_PA are exactly on the same position, and the pivots for P_Axis_B and Piston_PB are also exactly on the same position. We have already done this in the downloadable scene by selecting the parts that have the pivots on the same axis, enabling the Affect Pivot Only button (see Picture 3f) and using the Align tool (on both the Front, Top, and Left view).</p>\n
        <p>We will need to add two Look At constraints, one for each part of the piston. Select Piston_PA and select Look At from the Constraints section in the Animation menu, as depicted in Picture 5f below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5f.gif" />\n
        Picture 5f.</p>\n
        <p>Press the H key on your keyboard, select P_Axis_B, and click the Pick button. Piston_PA now changes its orientation. To make sure it point in the original direction, enable the Keep Initial Offset option on the Parameters section on the Motion tab of the Command Panel, as depicted in Picture 5g below. (The parameters section opened automatically when you added the Look At constraint.)</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5g.gif" />\n
        Picture 5g.</p>\n
        <p>Repeat this step for the other part of the piston, in other words: select Piston_PB, select Look At constraint from the Animation menu, pick the P_Axis_A as the target (using the H button to pick it). Also enable the Keep Initial Offset option again. So what we did is make one part of the piston ‘looks at’ the opposite part’s axis. The orientation is depicted with a blue line. If you select the helper Point03 and move it again, you will see that the metal bat slides neatly into the tube, as shown in Picture 5h below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5h.gif" />\n
        Picture 5h.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_pistons_end.zip">Download the scene here.</a></p>\n
        <p>To make it more realistic, we need to attach a pipe or hose to the hydraulic or pneumatic piston, and we need to make sure it moves and/or bends when the leg moves. There are many ways of doing this, but a relatively easy one is to use the extended primitive Hose. The advantage of using the Hose primitive is that you don’t need to rig it; no bones, and no IK. Instead, we are going to add two extra Cylinders, in addition to the Hose, and let the Hose start and end at those cylinders.</p>\n
        <p>In Picture 5i below you can see where we placed the two cylinders. The cylinder on the left is linked to UpperLeg, and the other is linked to Piston_PA. These cylinders represent the entry points of the hose, or the connector of a wire for example. You will probably want to use something more sophisticated than a cylinder, but make sure it is a separate object.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5i.gif" />\n
        Picture 5i.</p>\n
        <p>Next, create the hose by selecting Extended Primitives on the Create tab of the Command Panel, clicking the Hose button, and drawing a hose in any viewport, as shown in Picture 5j below. Don’t worry about its size, location, or shape yet.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5j.gif" />\n
        Picture 5j.</p>\n
        <p>On the Modify tab of the Command Panel, enable the Bound to Object Pivots. Click the Pick Top Object button and click on the left cylinder. Click the Pick Bottom Object button and click on the right cylinder (or use the H key on your keyboard).</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5k.gif" />\n
        Picture 5k.</p>\n
        <p>Depending on the orientation of the cylinders we use to connect the hose and the viewport you created them on, you may have to rotate the pivot of one or both cylinders. So if necessary, select the cylinder, enable the Affect Pivot Only button (picture 3f), and rotate the pivot. While you rotate the pivot, the hose will bend with it so you can easily see when it is at the right angle.</p>\n
        <p>When the hose is correctly aligned to the cylinders, click the hose again, scroll down below on the Modify tab, and disable the Flex Section Enable option as shown below in Picture 5l. Also decrease the Diameter: value in the Hose Shape section to a value that is less than the cylinders.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5l.gif" />\n
        Picture 5l.</p>\n
        <p>As you can see, the hose is too long and needs to hang more tightly against the leg. You can do this by decreasing the Tension values (see Picture 5k). In the final images below, we used 25 for both cylinders. If you move the leg again using on of the helpers, you will notice that the hose will stay in position and even bend when it has to. Click on one of the images to see the final animation.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5m.gif" /> <img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5n.gif" />\n
        Picture 5m.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_piston_hose.zip">Download the final scene here.</a></p>\n
        <p>I hope you enjoyed this tutorial and that it contributed something to your 3D Studio Max modeling skills.</p>
        """
      "grav" => Grav {}
      "theme_config" => array:2 [
        "enabled" => true
        "dropdown" => array:1 [
          "enabled" => false
        ]
      ]
    ]
    
  3. array:11 [
      "head" => array:2 [
        0 => __TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee {#1}
        1 => "block_head"
      ]
      "galalbummeta" => array:2 [
        0 => __TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee {#1}
        1 => "block_galalbummeta"
      ]
      "stylesheets" => array:2 [
        0 => __TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee {#1}
        1 => "block_stylesheets"
      ]
      "javascripts" => array:2 [
        0 => __TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee {#1}
        1 => "block_javascripts"
      ]
      "header" => array:2 [
        0 => __TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee {#1}
        1 => "block_header"
      ]
      "header_navigation" => array:2 [
        0 => __TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee {#1}
        1 => "block_header_navigation"
      ]
      "banner" => array:2 [
        0 => __TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee {#1}
        1 => "block_banner"
      ]
      "body" => array:2 [
        0 => __TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee {#1}
        1 => "block_body"
      ]
      "content" => array:2 [
        0 => __TwigTemplate_1fd2da7f05a02335033099a06781b7d00f84f79ced9a93dc72d9cf5790c09ebd {}
        1 => "block_content"
      ]
      "footer" => array:2 [
        0 => __TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee {#1}
        1 => "block_footer"
      ]
      "bottom" => array:2 [
        0 => __TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee {#1}
        1 => "block_bottom"
      ]
    ]
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
vendor
/
twig
/
twig
/
src
/
Template.php
 
        if ($useBlocks && isset($blocks[$name])) {
            $template = $blocks[$name][0];
            $block = $blocks[$name][1];
        } elseif (isset($this->blocks[$name])) {
            $template = $this->blocks[$name][0];
            $block = $this->blocks[$name][1];
        } else {
            $template = null;
            $block = null;
        }
 
        // avoid RCEs when sandbox is enabled
        if (null !== $template && !$template instanceof self) {
            throw new \LogicException('A block must be a method on a \Twig\Template instance.');
        }
 
        if (null !== $template) {
            try {
                $template->$block($context, $blocks);
            } catch (Error $e) {
                if (!$e->getSourceContext()) {
                    $e->setSourceContext($template->getSourceContext());
                }
 
                // this is mostly useful for \Twig\Error\LoaderError exceptions
                // see \Twig\Error\LoaderError
                if (-1 === $e->getTemplateLine()) {
                    $e->guess();
                }
 
                throw $e;
            } catch (\Exception $e) {
                $e = new RuntimeError(sprintf('An exception has been thrown during the rendering of a template ("%s").', $e->getMessage()), -1, $template->getSourceContext(), $e);
                $e->guess();
 
                throw $e;
            }
        } elseif (false !== $parent = $this->getParent($context)) {
            $parent->displayBlock($name, $context, array_merge($this->blocks, $blocks), false);
Arguments
  1. array:30 [
      "config" => Config {}
      "system" => array:27 [
        "absolute_urls" => false
        "timezone" => ""
        "default_locale" => null
        "param_sep" => ":"
        "wrapped_site" => false
        "reverse_proxy_setup" => false
        "force_ssl" => false
        "force_lowercase_urls" => true
        "custom_base_url" => "http://www.3dvalley.com"
        "username_regex" => "^[a-z0-9_-]{3,16}$"
        "pwd_regex" => "(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}"
        "intl_enabled" => true
        "languages" => array:9 [
          "supported" => []
          "default_lang" => null
          "include_default_lang" => true
          "pages_fallback_only" => false
          "translations" => true
          "translations_fallback" => true
          "session_store_active" => false
          "http_accept_language" => false
          "override_locale" => false
        ]
        "home" => array:2 [
          "alias" => "/home"
          "hide_in_urls" => false
        ]
        "pages" => array:26 [
          "theme" => "minimaxing"
          "order" => array:2 [
            "by" => "default"
            "dir" => "asc"
          ]
          "list" => array:1 [
            "count" => 20
          ]
          "dateformat" => array:3 [
            "default" => null
            "short" => "jS M Y"
            "long" => "F jS \a\t g:ia"
          ]
          "publish_dates" => true
          "process" => array:2 [
            "markdown" => true
            "twig" => false
          ]
          "twig_first" => false
          "never_cache_twig" => false
          "events" => array:2 [
            "page" => true
            "twig" => true
          ]
          "markdown" => array:5 [
            "extra" => true
            "auto_line_breaks" => false
            "auto_url_links" => false
            "escape_markup" => false
            "special_chars" => array:2 [
              ">" => "gt"
              "<" => "lt"
            ]
          ]
          "types" => array:7 [
            0 => "txt"
            1 => "xml"
            2 => "html"
            3 => "htm"
            4 => "json"
            5 => "rss"
            6 => "atom"
          ]
          "append_url_extension" => ""
          "expires" => 604800
          "cache_control" => null
          "last_modified" => false
          "etag" => true
          "vary_accept_encoding" => false
          "redirect_default_route" => false
          "redirect_default_code" => "301"
          "redirect_trailing_slash" => true
          "ignore_files" => array:1 [
            0 => ".DS_Store"
          ]
          "ignore_folders" => array:2 [
            0 => ".git"
            1 => ".idea"
          ]
          "ignore_hidden" => true
          "hide_empty_folders" => false
          "url_taxonomy_filters" => true
          "frontmatter" => array:2 [
            "process_twig" => false
            "ignore_fields" => array:2 [
              0 => "form"
              1 => "forms"
            ]
          ]
        ]
        "cache" => array:13 [
          "enabled" => true
          "check" => array:1 [
            "method" => "file"
          ]
          "driver" => "apcu"
          "prefix" => "g"
          "purge_at" => "0 4 * * *"
          "clear_at" => "0 3 * * *"
          "clear_job_type" => "standard"
          "clear_images_by_default" => true
          "cli_compatibility" => false
          "lifetime" => 604800
          "gzip" => true
          "allow_webserver_gzip" => false
          "redis" => array:1 [
            "socket" => false
          ]
        ]
        "twig" => array:7 [
          "cache" => true
          "debug" => true
          "auto_reload" => true
          "autoescape" => false
          "undefined_functions" => true
          "undefined_filters" => true
          "umask_fix" => false
        ]
        "assets" => array:12 [
          "css_pipeline" => true
          "css_pipeline_include_externals" => true
          "css_pipeline_before_excludes" => true
          "css_minify" => true
          "css_minify_windows" => false
          "css_rewrite" => true
          "js_pipeline" => true
          "js_pipeline_include_externals" => true
          "js_pipeline_before_excludes" => true
          "js_minify" => true
          "enable_asset_timestamp" => false
          "collections" => array:1 [
            "jquery" => "system://assets/jquery/jquery-2.x.min.js"
          ]
        ]
        "errors" => array:2 [
          "display" => 1
          "log" => true
        ]
        "log" => array:2 [
          "handler" => "file"
          "syslog" => array:1 [
            "facility" => "local6"
          ]
        ]
        "debugger" => array:3 [
          "enabled" => false
          "shutdown" => array:1 [
            "close_connection" => true
          ]
          "twig" => true
        ]
        "images" => array:6 [
          "default_image_quality" => 85
          "cache_all" => false
          "cache_perms" => "0755"
          "debug" => false
          "auto_fix_orientation" => false
          "seofriendly" => false
        ]
        "media" => array:5 [
          "enable_media_timestamp" => false
          "unsupported_inline_types" => []
          "allowed_fallback_types" => []
          "auto_metadata_exif" => false
          "upload_limit" => 33554432
        ]
        "session" => array:9 [
          "enabled" => true
          "initialize" => true
          "timeout" => 1800
          "name" => "grav-site"
          "uniqueness" => "path"
          "secure" => false
          "httponly" => true
          "split" => true
          "path" => "/"
        ]
        "gpm" => array:5 [
          "releases" => "stable"
          "proxy_url" => null
          "method" => "auto"
          "verify_peer" => true
          "official_gpm_only" => true
        ]
        "accounts" => array:2 [
          "type" => "data"
          "storage" => "file"
        ]
        "strict_mode" => array:2 [
          "yaml_compat" => true
          "twig_compat" => true
        ]
      ]
      "theme" => array:2 [
        "enabled" => true
        "dropdown" => array:1 [
          "enabled" => false
        ]
      ]
      "site" => array:14 [
        "title" => "3Dvalley"
        "default_lang" => "en"
        "author" => array:2 [
          "name" => "Admin"
          "email" => "webmaster@3dvalley.com"
        ]
        "taxonomies" => array:2 [
          0 => "category"
          1 => "tag"
        ]
        "metadata" => array:1 [
          "description" => "Free 3D models and textures"
        ]
        "summary" => array:4 [
          "enabled" => true
          "format" => "short"
          "size" => 300
          "delimiter" => "==="
        ]
        "redirects" => array:12 [
          "/tutorials/3d-studio-max-hotkeys-and-mouse-essentials" => "/tutorials/threed-studio-max-hotkeys-and-mouse-essentials "
          "/tutorials/3d-studio-max-tutorial-modeling-a-plunger" => "/tutorials/modeling-a-plunger-in-3d-studio-max"
          "/tutorials/modeling-a-brake-rotor" => "/tutorials/modeling-brake-rotor-in-3d-studio-max"
          "/models" => "/3d-models"
          "/free-textures" => "/textures"
          "/textures.shtml" => "/textures"
          "/tutorials/rendering-objects-in-a-solidwire-mix" => "/tutorials/rendering-wip-images-in-3d-studio-max"
          "/tutorials/modeling-a-highly-detailed-basketball-in-3d-studio-max" => "/tutorials/modeling-a-highly-detailed-basketball-in-3ds-max/"
          "/models.shtml" => "/3d-models"
          "/c/tutorials" => "/tutorials"
          "/models/models_household.shtml" => "/3d-models/household"
          "/downloadables/3DStudioMAX-hotkeys.pdf" => "/tutorials/threed-studio-max-hotkeys-and-mouse-essentials"
        ]
        "routes" => null
        "blog" => array:1 [
          "route" => "/blog"
        ]
        "header" => array:2 [
          "title" => "I'm Jonathan Doe."
          "description" => "I'm a Manila based <span>graphic designer</span>, <span>illustrator</span> and <span>webdesigner</span> creating awesome and effective visual identities for companies of all sizes around the globe. Let's <a class="smoothscroll" href="#about">start scrolling</a> and learn more <a class="smoothscroll" href="#about">about me</a>."
        ]
        "copyright" => array:2 [
          0 => array:1 [
            "line" => "Copyright 2014 CeeVee"
          ]
          1 => array:1 [
            "line" => "Design by <a title="Styleshout" href="http://www.styleshout.com/">Styleshout</a>"
          ]
        ]
        "social" => array:7 [
          0 => array:2 [
            "url" => "#"
            "icon" => "facebook"
          ]
          1 => array:2 [
            "url" => "#"
            "icon" => "twitter"
          ]
          2 => array:2 [
            "url" => "#"
            "icon" => "google-plus"
          ]
          3 => array:2 [
            "url" => "#"
            "icon" => "linkedin"
          ]
          4 => array:2 [
            "url" => "#"
            "icon" => "instagram"
          ]
          5 => array:2 [
            "url" => "#"
            "icon" => "dribbble"
          ]
          6 => array:2 [
            "url" => "#"
            "icon" => "skype"
          ]
        ]
        "twitter" => array:7 [
          "id" => "657554810648948736"
          "domId" => "tw-widget1"
          "maxTweets" => 3
          "enableLinks" => "true"
          "showInteraction" => "false"
          "showImages" => "false"
          "showUser" => "false"
        ]
        "acxtest" => "TEST"
      ]
      "uri" => Uri {}
      "assets" => Assets {}
      "taxonomy" => Taxonomy {}
      "browser" => Browser {}
      "base_dir" => "/home/jhiemstraxartec/public_html/test"
      "home_url" => "/"
      "base_url" => ""
      "base_url_absolute" => "http://www.3dvalley.com"
      "base_url_relative" => ""
      "base_url_simple" => ""
      "theme_dir" => "/home/jhiemstraxartec/public_html/test/user/themes/minimaxing"
      "theme_url" => "/user/themes/minimaxing"
      "html_lang" => "en"
      "language_codes" => LanguageCodes {}
      "json" => "</script><script>"
      "myvar" => "</script><script>"
      "form" => null
      "form_max_filesize" => 32
      "form_json_response" => []
      "pages" => Page {}
      "page" => Page {}
      "header" => {}
      "media" => Media {}
      "content" => """
        <p>Like most tasks in 3D Studio Max and similar products, rigging robots is easy, if you know how. Depending on the complexity of the robot, some may find it even easier than rigging a human or animal character. This is because most parts of a robot do not deform during movement, with the exception of cabling and other flexible parts, so you don’t have to ‘skin’ it. One of the primary challenges in building a cool robot, which still looks cool when animated, is creating realistic mechanical joints.</p>\n
        \n
        <p>The first version of our example robotic leg below is not very realistic however, because it would collapse like a bone structure without muscles. In the second version, we will add some robotic ‘muscles’, and the third version will include a hose. Click on the download links below some of the pictures to download the corresponding scene.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/robotrigging_mainthumb_ani.gif" /></p>\n
        <h4>1. A Human Leg</h4>\n
        <p>When rigging a human leg, the mesh deforms when the knee bends, pushing vertexes away from each other on one side and towards each other on the opposite side. This is accomplished by using a Skin modifier that binds vertexes of the mesh to the bones. The colors of the vertexes indicate the weight values which dictate how much influence moving the joint will have on those vertexes. Red vertexes represent the most rigid parts.</p>\n
        <h4>2. Our Example Robot Leg</h4>\n
        <p>Robots are typically made of metal, plastic, or some other hard and rigid material that does not deform. The following picture shows the five objects that form the basis of our example leg.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p2a.jpg" /> <img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p2b.jpg" /></p>\n
        <h4>3. Rigging Our Example Robot Leg</h4>\n
        <p>As usual, I have to make a note that the following is just a way of doing this, which doesn’t necessarily means it is the way (we’ll actually show another way later on). Picture 3a below shows the (unsmoothed) wireframe of the objects that make up this leg. Click the link below it to download the scene, or download the scene including the bones by clicking the link below Picture 3h, or just watch the pictures if you do not feel like actually doing any of this right now.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3a.gif" />\n
        Picture 3a.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_start.zip">Download start scene here</a></p>\n
        <p>The red dots in the picture above represent the pivot of the object. In the scene you can download, I have already moved them to the correct position. The UpperLeg’s pivot is positioned at exactly the same position as the pivot of Cylinder01, and LowerLeg’s pivot is at the same position as the pivot of Cylinder02. When switching to the top view, they are all aligned. It is essential that the bones you add start or end exactly at those pivot points.</p>\n
        <p>A way of making sure the bones are positioned correctly is to snap to pivots. When you use this method it is also essential that all the pivots are aligned when viewing from the top. If in your robot they aren’t and it is too complex or difficult to align them, you can skip the following snap settings and just draw the bones, select them all and move them to the center of the leg (Top view). To use the snap setting, right-click the Snaps Toggle button on the main toolbar and select Pivot and clear others if necessary (see Picture 3b). Now click the Snaps Toggle button again (with the left mouse button) to enable it.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3b.gif" />\n
        Picture 3b.</p>\n
        <p>Click the Bones button in the Systems section on the Create tab of the Command Panel as displayed in Picture 3c below. Choose SplineIKSolver as the IK Solver and enable Assign to Children (you can use another IK Solver or none at all, if you prefer).</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3c.gif" />\n
        Picture 3c.</p>\n
        <p>Now draw the bones, by clicking on the spots 1, 2, and 3 shown in Picture 3d and then right-click anywhere in the viewport to stop. Spots 1, 2 and 3 are the pivot points of Cylinder01, Cylinder02, and Cylinder03.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3d.gif" />\n
        Picture 3d.</p>\n
        <p>When the Spline IK Solver dialog shown in Picture 3e below opens, just click OK.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3e.gif" />\n
        Picture 3e.</p>\n
        <p>Now before you link the bones to the leg, you should make sure that the pivots of the bones are positioned correctly on the pivot of the limbs, the Spline IK Solver we added moved them slightly. To move a bone’s pivot, click the Affect Pivot Only button on the Hierarchy tab of the Command Panel, and disable the Enabled button on the Motion tab of the Command Panel.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3f.gif" />\n
        Picture 3f.</p>\n
        <p>Then select the pivot of the bone and move it to the correct position. Make sure you zoom in and place it exactly in the center of the limbs’ pivots. You also might want to disable the snap to pivot setting first by clicking the Snaps Toggle button again. If for some reason you cannot get them in the right position, there is no need to continue, as the whole setup depends on the pivots’ position.</p>\n
        <p>When you are sure the pivots are positioned correctly, select Cylinder01 and link it to UpperLeg. Select Cylinder02 and link it to the LowerLeg, and select Cylinder03 to LowerLeg as well. To link one object to another click the Select and Link button on the main tool bar, select the object you want to link and drag to the object you want to link to. If you do it correctly, the object you link to, will flash white once.</p>\n
        <p>We will use the same select and link method to link the objects to the bones, instead of using a Skin modifier. Link UpperLeg to the upper bone, and link LowerLeg to the lower bone.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3g.gif" />\n
        Picture 3g.</p>\n
        <p>When you done all of the above, or download the scene including the bones by using the link below, select the IK Chain or any of the point helpers and move it. The knee joint should now operate as shown in Picture 3g, without any of the objects deforming during movement.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3h.gif" />\n
        Picture 3h.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_end.zip">Download scene here.</a></p>\n
        <h4>4. Another Approach</h4>\n
        <p>Before we continue with this leg and add some muscles, we will use another method of rigging this leg. As someone kindly pointed out to me, there is no absolute need to use bones . If you are new to rigging characters or robots in particular, you may want to go for the bones method discussed above, but a robot is often a skeleton by itself, eliminating the need for bones. 3D Studio Max allows any object to act like a bone, and allows you also to assign IK solvers to any hierarchical set of objects. Also in this type of ‘bone’ setup, it is absolutely imperative that the pivots of the objects are in the correct position. We will illustrate this with some pictures later.</p>\n
        <p>To make this work with the previous example (delete the previous bone structure or use the scene you downloaded earlier), and link the objects to each other as followed:</p>\n
        <p>Cylinder03 -&gt; LowerLeg\n
        LowerLeg -&gt; Cylinder02</p>\n
        <p>Cylinder02 -&gt; UpperLeg</p>\n
        <p>UpperLeg -&gt; Cylinder01</p>\n
        <p>Press the Schematic View (Open) button on the main toolbar to check if the hierarchy is now correct as displayed in Picture 4a.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4a.gif" />\n
        Picture 4a.</p>\n
        <p>Now all you need to do is add an IK Solver to this hierarchy to make it act like a robotic leg. You can use the IK Solver you prefer, but in this example, we are going to use the History Independent solver. Select Cylinder03, choose HI Solver from the IK Solvers section in the Animation menu, and select Cylinder01. To prevent you from linking the solver to UpperLeg instead of Cylinder01, use the Select by Name option, which basically means you should press the H key on your keyboard after you choose HI Solver from the menu, and then pick Cylinder01 from the list, instead of clicking on it in the viewport.</p>\n
        <p>If you performed the previous tasks correctly, the results should be like in Picture 4b with the IK Chain selected. If you move the IK Chain the leg should work. To make the task of animating this leg a bit more convenient, you should link the IK Chain to a Point Helper.</p>\n
        <p>A Point helper can be created by clicking the Point button in the Helpers section of the Create tab on the Command Panel, and clicking somewhere in the viewport, as depicted in Picture 4b below. In this case, I suggest you place it somewhere at the bottom of the leg. Use the same Select and Link method as discussed earlier to link the IK Chain to the Point helper, so you can animate the leg by moving the Point helper.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4b.gif" />\n
        Picture 4b.</p>\n
        <p>If your robot has a complex geometry and animating the individual objects slows down your computer too much, you can configure 3D Studio Max to display the objects as bones. When using our example leg from the previous steps, you should select Cylinder01, 02, 03, UpperLeg, and LowerLeg, and select Bone Tools from the Character menu. Enable the Bone On option on the Bone Tools dialog as shown below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4c.gif" />\n
        Picture 4c.</p>\n
        <p>Next, open the Display tab on the Command Panel, scroll down, and in the Link Display section enable the Display Links option and the Link Replaces Object option.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4d.gif" />\n
        Picture 4d.</p>\n
        <p>The results should be as depicted in Picture 4e below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4e.gif" />\n
        Picture 4e.</p>\n
        <p>Alternatively, you can enable only the Display Links option and right above the Link Display section enable the Display as Box option in the Display Properties section. The results should be as depicted in Picture 4f below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4f.gif" />\n
        Picture 4f.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_ik_end.zip">Download the scene here.</a></p>\n
        <h4>5. Muscles</h4>\n
        <p>As I mentioned earlier, the leg used in the example above is not very realistic; it needs some muscles to make it move automatically and at the same time give it some strength. You can make up your own mechanisms, but you can also use one of the three main methods used in modern real world robots:</p>\n
        <p>Electrical motors</p>\n
        <p>For the example leg from above, this would be the easy way out, as you would ‘only’ have to increase the size of the knee joint and modify it into to something like shown below in Photo I, so it becomes viable an electrical motor could fit inside. Additionally, rigging the robot is easy as you can use one of the methods we discussed earlier.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/motoman_sv3x.jpg" />\n
        Photo I. Industrial robot arm powered by electrical motors.</p>\n
        <p>Hydraulic/Pneumatic/Magnetic pistons</p>\n
        <p>Another commonly used method to power robots are pistons. A piston (see Photo II below) is basically consists of a metal bar that goes inside a tube. Pressurized air or oil is pumped into the piston to push out metal bar. This is usually the sound you here when a robot moves. If you want to make them realistic, you should attach a hose to it, which leads to a compressor somewhere in or on the robot. These hydraulic or pneumatic pistons are much more powerful than electrical motors. Smaller pistons may use magnetic force to either pull or push the metal bar. The latter would have electrical wires attached to it, instead of a hose.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/photo_ii.gif" />\n
        Photo II. Crane powered by hydraulic pistons.</p>\n
        <p>Picture 5a and 5b show our second example leg. It includes a piston that is made of two cylinders called Piston_PA and Piston_PB. Two additional cylinders (P_Axis_A and P_Axis_B) form the axis of the piston’s parts.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5a.gif" /> <img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5b.gif" />\n
        Picture 5a. &amp; Picture 5b.</p>\n
        <p>As you can see in Picture 5c below, we already rigged the leg with two bones and an IKSplineSolver. You can download the scene by clicking the link below the picture.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5c.gif" />\n
        Picture 5c.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_pistons_start.zip">Download the scene here.</a></p>\n
        <p>First, we will link the piston’s parts to the leg as followed:</p>\n
        <p>P_Axis_A -&gt; UpperLeg\n
        P_Axis_B -&gt; LowerLeg</p>\n
        <p>Piston_PA -&gt; P_Axis_A</p>\n
        <p>Piston_PB -&gt; P_Axis_B</p>\n
        <p>The hierarchy of the leg should now be exactly like in Picture 5d.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5d.gif" />\n
        Picture 5d.</p>\n
        <p>If we would bend the knee, by using the lower helper (Point3) for example, the two parts of the piston will not stay aligned correctly and will ‘break’ as shown in Picture 5e below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5e.gif" />\n
        Picture 5e.</p>\n
        <p>(If you moved the leg, press use Undo (Ctrl-Z) to move it back to its original position.)</p>\n
        <p>To make sure the metal bar stays inside the tube, we need to use a constraint, in this case the Look At constraint. As in the previous parts of this tutorial, the placement of the pivots of the piston’s parts is essential to make it work. The pivots for P_Axis_A and Piston_PA are exactly on the same position, and the pivots for P_Axis_B and Piston_PB are also exactly on the same position. We have already done this in the downloadable scene by selecting the parts that have the pivots on the same axis, enabling the Affect Pivot Only button (see Picture 3f) and using the Align tool (on both the Front, Top, and Left view).</p>\n
        <p>We will need to add two Look At constraints, one for each part of the piston. Select Piston_PA and select Look At from the Constraints section in the Animation menu, as depicted in Picture 5f below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5f.gif" />\n
        Picture 5f.</p>\n
        <p>Press the H key on your keyboard, select P_Axis_B, and click the Pick button. Piston_PA now changes its orientation. To make sure it point in the original direction, enable the Keep Initial Offset option on the Parameters section on the Motion tab of the Command Panel, as depicted in Picture 5g below. (The parameters section opened automatically when you added the Look At constraint.)</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5g.gif" />\n
        Picture 5g.</p>\n
        <p>Repeat this step for the other part of the piston, in other words: select Piston_PB, select Look At constraint from the Animation menu, pick the P_Axis_A as the target (using the H button to pick it). Also enable the Keep Initial Offset option again. So what we did is make one part of the piston ‘looks at’ the opposite part’s axis. The orientation is depicted with a blue line. If you select the helper Point03 and move it again, you will see that the metal bat slides neatly into the tube, as shown in Picture 5h below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5h.gif" />\n
        Picture 5h.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_pistons_end.zip">Download the scene here.</a></p>\n
        <p>To make it more realistic, we need to attach a pipe or hose to the hydraulic or pneumatic piston, and we need to make sure it moves and/or bends when the leg moves. There are many ways of doing this, but a relatively easy one is to use the extended primitive Hose. The advantage of using the Hose primitive is that you don’t need to rig it; no bones, and no IK. Instead, we are going to add two extra Cylinders, in addition to the Hose, and let the Hose start and end at those cylinders.</p>\n
        <p>In Picture 5i below you can see where we placed the two cylinders. The cylinder on the left is linked to UpperLeg, and the other is linked to Piston_PA. These cylinders represent the entry points of the hose, or the connector of a wire for example. You will probably want to use something more sophisticated than a cylinder, but make sure it is a separate object.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5i.gif" />\n
        Picture 5i.</p>\n
        <p>Next, create the hose by selecting Extended Primitives on the Create tab of the Command Panel, clicking the Hose button, and drawing a hose in any viewport, as shown in Picture 5j below. Don’t worry about its size, location, or shape yet.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5j.gif" />\n
        Picture 5j.</p>\n
        <p>On the Modify tab of the Command Panel, enable the Bound to Object Pivots. Click the Pick Top Object button and click on the left cylinder. Click the Pick Bottom Object button and click on the right cylinder (or use the H key on your keyboard).</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5k.gif" />\n
        Picture 5k.</p>\n
        <p>Depending on the orientation of the cylinders we use to connect the hose and the viewport you created them on, you may have to rotate the pivot of one or both cylinders. So if necessary, select the cylinder, enable the Affect Pivot Only button (picture 3f), and rotate the pivot. While you rotate the pivot, the hose will bend with it so you can easily see when it is at the right angle.</p>\n
        <p>When the hose is correctly aligned to the cylinders, click the hose again, scroll down below on the Modify tab, and disable the Flex Section Enable option as shown below in Picture 5l. Also decrease the Diameter: value in the Hose Shape section to a value that is less than the cylinders.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5l.gif" />\n
        Picture 5l.</p>\n
        <p>As you can see, the hose is too long and needs to hang more tightly against the leg. You can do this by decreasing the Tension values (see Picture 5k). In the final images below, we used 25 for both cylinders. If you move the leg again using on of the helpers, you will notice that the hose will stay in position and even bend when it has to. Click on one of the images to see the final animation.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5m.gif" /> <img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5n.gif" />\n
        Picture 5m.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_piston_hose.zip">Download the final scene here.</a></p>\n
        <p>I hope you enjoyed this tutorial and that it contributed something to your 3D Studio Max modeling skills.</p>
        """
      "grav" => Grav {}
      "theme_config" => array:2 [
        "enabled" => true
        "dropdown" => array:1 [
          "enabled" => false
        ]
      ]
    ]
    
  2. array:11 [
      "head" => array:2 [
        0 => __TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee {#1}
        1 => "block_head"
      ]
      "galalbummeta" => array:2 [
        0 => __TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee {#1}
        1 => "block_galalbummeta"
      ]
      "stylesheets" => array:2 [
        0 => __TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee {#1}
        1 => "block_stylesheets"
      ]
      "javascripts" => array:2 [
        0 => __TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee {#1}
        1 => "block_javascripts"
      ]
      "header" => array:2 [
        0 => __TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee {#1}
        1 => "block_header"
      ]
      "header_navigation" => array:2 [
        0 => __TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee {#1}
        1 => "block_header_navigation"
      ]
      "banner" => array:2 [
        0 => __TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee {#1}
        1 => "block_banner"
      ]
      "body" => array:2 [
        0 => __TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee {#1}
        1 => "block_body"
      ]
      "content" => array:2 [
        0 => __TwigTemplate_1fd2da7f05a02335033099a06781b7d00f84f79ced9a93dc72d9cf5790c09ebd {}
        1 => "block_content"
      ]
      "footer" => array:2 [
        0 => __TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee {#1}
        1 => "block_footer"
      ]
      "bottom" => array:2 [
        0 => __TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee {#1}
        1 => "block_bottom"
      ]
    ]
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
cache
/
twig
/
05
/
05d859bec41ac5da994bb517e48f7a9558c5995f959256a93748d96374b382ab.php
<!-- 3dvtop -->
<ins class=\"adsbygoogle\"
     style=\"display:inline-block;width:970px;height:90px\"
     data-ad-client=\"ca-pub-2314626359896816\"
     data-ad-slot=\"2869655782\"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
\t\t</div>
\t</div>
</div>
 
";
        // line 106
        $this->displayBlock('banner', $context, $blocks);
        // line 108
        echo "
";
        // line 109
        $this->displayBlock('body', $context, $blocks);
        // line 116
        echo "
";
        // line 117
        $this->displayBlock('footer', $context, $blocks);
        // line 124
        echo "
</div>
 
";
        // line 127
        $this->displayBlock('bottom', $context, $blocks);
        // line 130
        echo "</body>
</html>
";
    }
 
    // line 6
    public function block_head($context, array $blocks = [])
Arguments
  1. "body"
    
  2. array:30 [
      "config" => Config {}
      "system" => array:27 [
        "absolute_urls" => false
        "timezone" => ""
        "default_locale" => null
        "param_sep" => ":"
        "wrapped_site" => false
        "reverse_proxy_setup" => false
        "force_ssl" => false
        "force_lowercase_urls" => true
        "custom_base_url" => "http://www.3dvalley.com"
        "username_regex" => "^[a-z0-9_-]{3,16}$"
        "pwd_regex" => "(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}"
        "intl_enabled" => true
        "languages" => array:9 [
          "supported" => []
          "default_lang" => null
          "include_default_lang" => true
          "pages_fallback_only" => false
          "translations" => true
          "translations_fallback" => true
          "session_store_active" => false
          "http_accept_language" => false
          "override_locale" => false
        ]
        "home" => array:2 [
          "alias" => "/home"
          "hide_in_urls" => false
        ]
        "pages" => array:26 [
          "theme" => "minimaxing"
          "order" => array:2 [
            "by" => "default"
            "dir" => "asc"
          ]
          "list" => array:1 [
            "count" => 20
          ]
          "dateformat" => array:3 [
            "default" => null
            "short" => "jS M Y"
            "long" => "F jS \a\t g:ia"
          ]
          "publish_dates" => true
          "process" => array:2 [
            "markdown" => true
            "twig" => false
          ]
          "twig_first" => false
          "never_cache_twig" => false
          "events" => array:2 [
            "page" => true
            "twig" => true
          ]
          "markdown" => array:5 [
            "extra" => true
            "auto_line_breaks" => false
            "auto_url_links" => false
            "escape_markup" => false
            "special_chars" => array:2 [
              ">" => "gt"
              "<" => "lt"
            ]
          ]
          "types" => array:7 [
            0 => "txt"
            1 => "xml"
            2 => "html"
            3 => "htm"
            4 => "json"
            5 => "rss"
            6 => "atom"
          ]
          "append_url_extension" => ""
          "expires" => 604800
          "cache_control" => null
          "last_modified" => false
          "etag" => true
          "vary_accept_encoding" => false
          "redirect_default_route" => false
          "redirect_default_code" => "301"
          "redirect_trailing_slash" => true
          "ignore_files" => array:1 [
            0 => ".DS_Store"
          ]
          "ignore_folders" => array:2 [
            0 => ".git"
            1 => ".idea"
          ]
          "ignore_hidden" => true
          "hide_empty_folders" => false
          "url_taxonomy_filters" => true
          "frontmatter" => array:2 [
            "process_twig" => false
            "ignore_fields" => array:2 [
              0 => "form"
              1 => "forms"
            ]
          ]
        ]
        "cache" => array:13 [
          "enabled" => true
          "check" => array:1 [
            "method" => "file"
          ]
          "driver" => "apcu"
          "prefix" => "g"
          "purge_at" => "0 4 * * *"
          "clear_at" => "0 3 * * *"
          "clear_job_type" => "standard"
          "clear_images_by_default" => true
          "cli_compatibility" => false
          "lifetime" => 604800
          "gzip" => true
          "allow_webserver_gzip" => false
          "redis" => array:1 [
            "socket" => false
          ]
        ]
        "twig" => array:7 [
          "cache" => true
          "debug" => true
          "auto_reload" => true
          "autoescape" => false
          "undefined_functions" => true
          "undefined_filters" => true
          "umask_fix" => false
        ]
        "assets" => array:12 [
          "css_pipeline" => true
          "css_pipeline_include_externals" => true
          "css_pipeline_before_excludes" => true
          "css_minify" => true
          "css_minify_windows" => false
          "css_rewrite" => true
          "js_pipeline" => true
          "js_pipeline_include_externals" => true
          "js_pipeline_before_excludes" => true
          "js_minify" => true
          "enable_asset_timestamp" => false
          "collections" => array:1 [
            "jquery" => "system://assets/jquery/jquery-2.x.min.js"
          ]
        ]
        "errors" => array:2 [
          "display" => 1
          "log" => true
        ]
        "log" => array:2 [
          "handler" => "file"
          "syslog" => array:1 [
            "facility" => "local6"
          ]
        ]
        "debugger" => array:3 [
          "enabled" => false
          "shutdown" => array:1 [
            "close_connection" => true
          ]
          "twig" => true
        ]
        "images" => array:6 [
          "default_image_quality" => 85
          "cache_all" => false
          "cache_perms" => "0755"
          "debug" => false
          "auto_fix_orientation" => false
          "seofriendly" => false
        ]
        "media" => array:5 [
          "enable_media_timestamp" => false
          "unsupported_inline_types" => []
          "allowed_fallback_types" => []
          "auto_metadata_exif" => false
          "upload_limit" => 33554432
        ]
        "session" => array:9 [
          "enabled" => true
          "initialize" => true
          "timeout" => 1800
          "name" => "grav-site"
          "uniqueness" => "path"
          "secure" => false
          "httponly" => true
          "split" => true
          "path" => "/"
        ]
        "gpm" => array:5 [
          "releases" => "stable"
          "proxy_url" => null
          "method" => "auto"
          "verify_peer" => true
          "official_gpm_only" => true
        ]
        "accounts" => array:2 [
          "type" => "data"
          "storage" => "file"
        ]
        "strict_mode" => array:2 [
          "yaml_compat" => true
          "twig_compat" => true
        ]
      ]
      "theme" => array:2 [
        "enabled" => true
        "dropdown" => array:1 [
          "enabled" => false
        ]
      ]
      "site" => array:14 [
        "title" => "3Dvalley"
        "default_lang" => "en"
        "author" => array:2 [
          "name" => "Admin"
          "email" => "webmaster@3dvalley.com"
        ]
        "taxonomies" => array:2 [
          0 => "category"
          1 => "tag"
        ]
        "metadata" => array:1 [
          "description" => "Free 3D models and textures"
        ]
        "summary" => array:4 [
          "enabled" => true
          "format" => "short"
          "size" => 300
          "delimiter" => "==="
        ]
        "redirects" => array:12 [
          "/tutorials/3d-studio-max-hotkeys-and-mouse-essentials" => "/tutorials/threed-studio-max-hotkeys-and-mouse-essentials "
          "/tutorials/3d-studio-max-tutorial-modeling-a-plunger" => "/tutorials/modeling-a-plunger-in-3d-studio-max"
          "/tutorials/modeling-a-brake-rotor" => "/tutorials/modeling-brake-rotor-in-3d-studio-max"
          "/models" => "/3d-models"
          "/free-textures" => "/textures"
          "/textures.shtml" => "/textures"
          "/tutorials/rendering-objects-in-a-solidwire-mix" => "/tutorials/rendering-wip-images-in-3d-studio-max"
          "/tutorials/modeling-a-highly-detailed-basketball-in-3d-studio-max" => "/tutorials/modeling-a-highly-detailed-basketball-in-3ds-max/"
          "/models.shtml" => "/3d-models"
          "/c/tutorials" => "/tutorials"
          "/models/models_household.shtml" => "/3d-models/household"
          "/downloadables/3DStudioMAX-hotkeys.pdf" => "/tutorials/threed-studio-max-hotkeys-and-mouse-essentials"
        ]
        "routes" => null
        "blog" => array:1 [
          "route" => "/blog"
        ]
        "header" => array:2 [
          "title" => "I'm Jonathan Doe."
          "description" => "I'm a Manila based <span>graphic designer</span>, <span>illustrator</span> and <span>webdesigner</span> creating awesome and effective visual identities for companies of all sizes around the globe. Let's <a class="smoothscroll" href="#about">start scrolling</a> and learn more <a class="smoothscroll" href="#about">about me</a>."
        ]
        "copyright" => array:2 [
          0 => array:1 [
            "line" => "Copyright 2014 CeeVee"
          ]
          1 => array:1 [
            "line" => "Design by <a title="Styleshout" href="http://www.styleshout.com/">Styleshout</a>"
          ]
        ]
        "social" => array:7 [
          0 => array:2 [
            "url" => "#"
            "icon" => "facebook"
          ]
          1 => array:2 [
            "url" => "#"
            "icon" => "twitter"
          ]
          2 => array:2 [
            "url" => "#"
            "icon" => "google-plus"
          ]
          3 => array:2 [
            "url" => "#"
            "icon" => "linkedin"
          ]
          4 => array:2 [
            "url" => "#"
            "icon" => "instagram"
          ]
          5 => array:2 [
            "url" => "#"
            "icon" => "dribbble"
          ]
          6 => array:2 [
            "url" => "#"
            "icon" => "skype"
          ]
        ]
        "twitter" => array:7 [
          "id" => "657554810648948736"
          "domId" => "tw-widget1"
          "maxTweets" => 3
          "enableLinks" => "true"
          "showInteraction" => "false"
          "showImages" => "false"
          "showUser" => "false"
        ]
        "acxtest" => "TEST"
      ]
      "uri" => Uri {}
      "assets" => Assets {}
      "taxonomy" => Taxonomy {}
      "browser" => Browser {}
      "base_dir" => "/home/jhiemstraxartec/public_html/test"
      "home_url" => "/"
      "base_url" => ""
      "base_url_absolute" => "http://www.3dvalley.com"
      "base_url_relative" => ""
      "base_url_simple" => ""
      "theme_dir" => "/home/jhiemstraxartec/public_html/test/user/themes/minimaxing"
      "theme_url" => "/user/themes/minimaxing"
      "html_lang" => "en"
      "language_codes" => LanguageCodes {}
      "json" => "</script><script>"
      "myvar" => "</script><script>"
      "form" => null
      "form_max_filesize" => 32
      "form_json_response" => []
      "pages" => Page {}
      "page" => Page {}
      "header" => {}
      "media" => Media {}
      "content" => """
        <p>Like most tasks in 3D Studio Max and similar products, rigging robots is easy, if you know how. Depending on the complexity of the robot, some may find it even easier than rigging a human or animal character. This is because most parts of a robot do not deform during movement, with the exception of cabling and other flexible parts, so you don’t have to ‘skin’ it. One of the primary challenges in building a cool robot, which still looks cool when animated, is creating realistic mechanical joints.</p>\n
        \n
        <p>The first version of our example robotic leg below is not very realistic however, because it would collapse like a bone structure without muscles. In the second version, we will add some robotic ‘muscles’, and the third version will include a hose. Click on the download links below some of the pictures to download the corresponding scene.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/robotrigging_mainthumb_ani.gif" /></p>\n
        <h4>1. A Human Leg</h4>\n
        <p>When rigging a human leg, the mesh deforms when the knee bends, pushing vertexes away from each other on one side and towards each other on the opposite side. This is accomplished by using a Skin modifier that binds vertexes of the mesh to the bones. The colors of the vertexes indicate the weight values which dictate how much influence moving the joint will have on those vertexes. Red vertexes represent the most rigid parts.</p>\n
        <h4>2. Our Example Robot Leg</h4>\n
        <p>Robots are typically made of metal, plastic, or some other hard and rigid material that does not deform. The following picture shows the five objects that form the basis of our example leg.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p2a.jpg" /> <img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p2b.jpg" /></p>\n
        <h4>3. Rigging Our Example Robot Leg</h4>\n
        <p>As usual, I have to make a note that the following is just a way of doing this, which doesn’t necessarily means it is the way (we’ll actually show another way later on). Picture 3a below shows the (unsmoothed) wireframe of the objects that make up this leg. Click the link below it to download the scene, or download the scene including the bones by clicking the link below Picture 3h, or just watch the pictures if you do not feel like actually doing any of this right now.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3a.gif" />\n
        Picture 3a.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_start.zip">Download start scene here</a></p>\n
        <p>The red dots in the picture above represent the pivot of the object. In the scene you can download, I have already moved them to the correct position. The UpperLeg’s pivot is positioned at exactly the same position as the pivot of Cylinder01, and LowerLeg’s pivot is at the same position as the pivot of Cylinder02. When switching to the top view, they are all aligned. It is essential that the bones you add start or end exactly at those pivot points.</p>\n
        <p>A way of making sure the bones are positioned correctly is to snap to pivots. When you use this method it is also essential that all the pivots are aligned when viewing from the top. If in your robot they aren’t and it is too complex or difficult to align them, you can skip the following snap settings and just draw the bones, select them all and move them to the center of the leg (Top view). To use the snap setting, right-click the Snaps Toggle button on the main toolbar and select Pivot and clear others if necessary (see Picture 3b). Now click the Snaps Toggle button again (with the left mouse button) to enable it.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3b.gif" />\n
        Picture 3b.</p>\n
        <p>Click the Bones button in the Systems section on the Create tab of the Command Panel as displayed in Picture 3c below. Choose SplineIKSolver as the IK Solver and enable Assign to Children (you can use another IK Solver or none at all, if you prefer).</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3c.gif" />\n
        Picture 3c.</p>\n
        <p>Now draw the bones, by clicking on the spots 1, 2, and 3 shown in Picture 3d and then right-click anywhere in the viewport to stop. Spots 1, 2 and 3 are the pivot points of Cylinder01, Cylinder02, and Cylinder03.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3d.gif" />\n
        Picture 3d.</p>\n
        <p>When the Spline IK Solver dialog shown in Picture 3e below opens, just click OK.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3e.gif" />\n
        Picture 3e.</p>\n
        <p>Now before you link the bones to the leg, you should make sure that the pivots of the bones are positioned correctly on the pivot of the limbs, the Spline IK Solver we added moved them slightly. To move a bone’s pivot, click the Affect Pivot Only button on the Hierarchy tab of the Command Panel, and disable the Enabled button on the Motion tab of the Command Panel.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3f.gif" />\n
        Picture 3f.</p>\n
        <p>Then select the pivot of the bone and move it to the correct position. Make sure you zoom in and place it exactly in the center of the limbs’ pivots. You also might want to disable the snap to pivot setting first by clicking the Snaps Toggle button again. If for some reason you cannot get them in the right position, there is no need to continue, as the whole setup depends on the pivots’ position.</p>\n
        <p>When you are sure the pivots are positioned correctly, select Cylinder01 and link it to UpperLeg. Select Cylinder02 and link it to the LowerLeg, and select Cylinder03 to LowerLeg as well. To link one object to another click the Select and Link button on the main tool bar, select the object you want to link and drag to the object you want to link to. If you do it correctly, the object you link to, will flash white once.</p>\n
        <p>We will use the same select and link method to link the objects to the bones, instead of using a Skin modifier. Link UpperLeg to the upper bone, and link LowerLeg to the lower bone.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3g.gif" />\n
        Picture 3g.</p>\n
        <p>When you done all of the above, or download the scene including the bones by using the link below, select the IK Chain or any of the point helpers and move it. The knee joint should now operate as shown in Picture 3g, without any of the objects deforming during movement.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3h.gif" />\n
        Picture 3h.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_end.zip">Download scene here.</a></p>\n
        <h4>4. Another Approach</h4>\n
        <p>Before we continue with this leg and add some muscles, we will use another method of rigging this leg. As someone kindly pointed out to me, there is no absolute need to use bones . If you are new to rigging characters or robots in particular, you may want to go for the bones method discussed above, but a robot is often a skeleton by itself, eliminating the need for bones. 3D Studio Max allows any object to act like a bone, and allows you also to assign IK solvers to any hierarchical set of objects. Also in this type of ‘bone’ setup, it is absolutely imperative that the pivots of the objects are in the correct position. We will illustrate this with some pictures later.</p>\n
        <p>To make this work with the previous example (delete the previous bone structure or use the scene you downloaded earlier), and link the objects to each other as followed:</p>\n
        <p>Cylinder03 -&gt; LowerLeg\n
        LowerLeg -&gt; Cylinder02</p>\n
        <p>Cylinder02 -&gt; UpperLeg</p>\n
        <p>UpperLeg -&gt; Cylinder01</p>\n
        <p>Press the Schematic View (Open) button on the main toolbar to check if the hierarchy is now correct as displayed in Picture 4a.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4a.gif" />\n
        Picture 4a.</p>\n
        <p>Now all you need to do is add an IK Solver to this hierarchy to make it act like a robotic leg. You can use the IK Solver you prefer, but in this example, we are going to use the History Independent solver. Select Cylinder03, choose HI Solver from the IK Solvers section in the Animation menu, and select Cylinder01. To prevent you from linking the solver to UpperLeg instead of Cylinder01, use the Select by Name option, which basically means you should press the H key on your keyboard after you choose HI Solver from the menu, and then pick Cylinder01 from the list, instead of clicking on it in the viewport.</p>\n
        <p>If you performed the previous tasks correctly, the results should be like in Picture 4b with the IK Chain selected. If you move the IK Chain the leg should work. To make the task of animating this leg a bit more convenient, you should link the IK Chain to a Point Helper.</p>\n
        <p>A Point helper can be created by clicking the Point button in the Helpers section of the Create tab on the Command Panel, and clicking somewhere in the viewport, as depicted in Picture 4b below. In this case, I suggest you place it somewhere at the bottom of the leg. Use the same Select and Link method as discussed earlier to link the IK Chain to the Point helper, so you can animate the leg by moving the Point helper.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4b.gif" />\n
        Picture 4b.</p>\n
        <p>If your robot has a complex geometry and animating the individual objects slows down your computer too much, you can configure 3D Studio Max to display the objects as bones. When using our example leg from the previous steps, you should select Cylinder01, 02, 03, UpperLeg, and LowerLeg, and select Bone Tools from the Character menu. Enable the Bone On option on the Bone Tools dialog as shown below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4c.gif" />\n
        Picture 4c.</p>\n
        <p>Next, open the Display tab on the Command Panel, scroll down, and in the Link Display section enable the Display Links option and the Link Replaces Object option.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4d.gif" />\n
        Picture 4d.</p>\n
        <p>The results should be as depicted in Picture 4e below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4e.gif" />\n
        Picture 4e.</p>\n
        <p>Alternatively, you can enable only the Display Links option and right above the Link Display section enable the Display as Box option in the Display Properties section. The results should be as depicted in Picture 4f below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4f.gif" />\n
        Picture 4f.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_ik_end.zip">Download the scene here.</a></p>\n
        <h4>5. Muscles</h4>\n
        <p>As I mentioned earlier, the leg used in the example above is not very realistic; it needs some muscles to make it move automatically and at the same time give it some strength. You can make up your own mechanisms, but you can also use one of the three main methods used in modern real world robots:</p>\n
        <p>Electrical motors</p>\n
        <p>For the example leg from above, this would be the easy way out, as you would ‘only’ have to increase the size of the knee joint and modify it into to something like shown below in Photo I, so it becomes viable an electrical motor could fit inside. Additionally, rigging the robot is easy as you can use one of the methods we discussed earlier.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/motoman_sv3x.jpg" />\n
        Photo I. Industrial robot arm powered by electrical motors.</p>\n
        <p>Hydraulic/Pneumatic/Magnetic pistons</p>\n
        <p>Another commonly used method to power robots are pistons. A piston (see Photo II below) is basically consists of a metal bar that goes inside a tube. Pressurized air or oil is pumped into the piston to push out metal bar. This is usually the sound you here when a robot moves. If you want to make them realistic, you should attach a hose to it, which leads to a compressor somewhere in or on the robot. These hydraulic or pneumatic pistons are much more powerful than electrical motors. Smaller pistons may use magnetic force to either pull or push the metal bar. The latter would have electrical wires attached to it, instead of a hose.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/photo_ii.gif" />\n
        Photo II. Crane powered by hydraulic pistons.</p>\n
        <p>Picture 5a and 5b show our second example leg. It includes a piston that is made of two cylinders called Piston_PA and Piston_PB. Two additional cylinders (P_Axis_A and P_Axis_B) form the axis of the piston’s parts.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5a.gif" /> <img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5b.gif" />\n
        Picture 5a. &amp; Picture 5b.</p>\n
        <p>As you can see in Picture 5c below, we already rigged the leg with two bones and an IKSplineSolver. You can download the scene by clicking the link below the picture.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5c.gif" />\n
        Picture 5c.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_pistons_start.zip">Download the scene here.</a></p>\n
        <p>First, we will link the piston’s parts to the leg as followed:</p>\n
        <p>P_Axis_A -&gt; UpperLeg\n
        P_Axis_B -&gt; LowerLeg</p>\n
        <p>Piston_PA -&gt; P_Axis_A</p>\n
        <p>Piston_PB -&gt; P_Axis_B</p>\n
        <p>The hierarchy of the leg should now be exactly like in Picture 5d.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5d.gif" />\n
        Picture 5d.</p>\n
        <p>If we would bend the knee, by using the lower helper (Point3) for example, the two parts of the piston will not stay aligned correctly and will ‘break’ as shown in Picture 5e below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5e.gif" />\n
        Picture 5e.</p>\n
        <p>(If you moved the leg, press use Undo (Ctrl-Z) to move it back to its original position.)</p>\n
        <p>To make sure the metal bar stays inside the tube, we need to use a constraint, in this case the Look At constraint. As in the previous parts of this tutorial, the placement of the pivots of the piston’s parts is essential to make it work. The pivots for P_Axis_A and Piston_PA are exactly on the same position, and the pivots for P_Axis_B and Piston_PB are also exactly on the same position. We have already done this in the downloadable scene by selecting the parts that have the pivots on the same axis, enabling the Affect Pivot Only button (see Picture 3f) and using the Align tool (on both the Front, Top, and Left view).</p>\n
        <p>We will need to add two Look At constraints, one for each part of the piston. Select Piston_PA and select Look At from the Constraints section in the Animation menu, as depicted in Picture 5f below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5f.gif" />\n
        Picture 5f.</p>\n
        <p>Press the H key on your keyboard, select P_Axis_B, and click the Pick button. Piston_PA now changes its orientation. To make sure it point in the original direction, enable the Keep Initial Offset option on the Parameters section on the Motion tab of the Command Panel, as depicted in Picture 5g below. (The parameters section opened automatically when you added the Look At constraint.)</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5g.gif" />\n
        Picture 5g.</p>\n
        <p>Repeat this step for the other part of the piston, in other words: select Piston_PB, select Look At constraint from the Animation menu, pick the P_Axis_A as the target (using the H button to pick it). Also enable the Keep Initial Offset option again. So what we did is make one part of the piston ‘looks at’ the opposite part’s axis. The orientation is depicted with a blue line. If you select the helper Point03 and move it again, you will see that the metal bat slides neatly into the tube, as shown in Picture 5h below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5h.gif" />\n
        Picture 5h.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_pistons_end.zip">Download the scene here.</a></p>\n
        <p>To make it more realistic, we need to attach a pipe or hose to the hydraulic or pneumatic piston, and we need to make sure it moves and/or bends when the leg moves. There are many ways of doing this, but a relatively easy one is to use the extended primitive Hose. The advantage of using the Hose primitive is that you don’t need to rig it; no bones, and no IK. Instead, we are going to add two extra Cylinders, in addition to the Hose, and let the Hose start and end at those cylinders.</p>\n
        <p>In Picture 5i below you can see where we placed the two cylinders. The cylinder on the left is linked to UpperLeg, and the other is linked to Piston_PA. These cylinders represent the entry points of the hose, or the connector of a wire for example. You will probably want to use something more sophisticated than a cylinder, but make sure it is a separate object.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5i.gif" />\n
        Picture 5i.</p>\n
        <p>Next, create the hose by selecting Extended Primitives on the Create tab of the Command Panel, clicking the Hose button, and drawing a hose in any viewport, as shown in Picture 5j below. Don’t worry about its size, location, or shape yet.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5j.gif" />\n
        Picture 5j.</p>\n
        <p>On the Modify tab of the Command Panel, enable the Bound to Object Pivots. Click the Pick Top Object button and click on the left cylinder. Click the Pick Bottom Object button and click on the right cylinder (or use the H key on your keyboard).</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5k.gif" />\n
        Picture 5k.</p>\n
        <p>Depending on the orientation of the cylinders we use to connect the hose and the viewport you created them on, you may have to rotate the pivot of one or both cylinders. So if necessary, select the cylinder, enable the Affect Pivot Only button (picture 3f), and rotate the pivot. While you rotate the pivot, the hose will bend with it so you can easily see when it is at the right angle.</p>\n
        <p>When the hose is correctly aligned to the cylinders, click the hose again, scroll down below on the Modify tab, and disable the Flex Section Enable option as shown below in Picture 5l. Also decrease the Diameter: value in the Hose Shape section to a value that is less than the cylinders.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5l.gif" />\n
        Picture 5l.</p>\n
        <p>As you can see, the hose is too long and needs to hang more tightly against the leg. You can do this by decreasing the Tension values (see Picture 5k). In the final images below, we used 25 for both cylinders. If you move the leg again using on of the helpers, you will notice that the hose will stay in position and even bend when it has to. Click on one of the images to see the final animation.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5m.gif" /> <img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5n.gif" />\n
        Picture 5m.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_piston_hose.zip">Download the final scene here.</a></p>\n
        <p>I hope you enjoyed this tutorial and that it contributed something to your 3D Studio Max modeling skills.</p>
        """
      "grav" => Grav {}
      "theme_config" => array:2 [
        "enabled" => true
        "dropdown" => array:1 [
          "enabled" => false
        ]
      ]
    ]
    
  3. array:11 [
      "head" => array:2 [
        0 => __TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee {#1}
        1 => "block_head"
      ]
      "galalbummeta" => array:2 [
        0 => __TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee {#1}
        1 => "block_galalbummeta"
      ]
      "stylesheets" => array:2 [
        0 => __TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee {#1}
        1 => "block_stylesheets"
      ]
      "javascripts" => array:2 [
        0 => __TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee {#1}
        1 => "block_javascripts"
      ]
      "header" => array:2 [
        0 => __TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee {#1}
        1 => "block_header"
      ]
      "header_navigation" => array:2 [
        0 => __TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee {#1}
        1 => "block_header_navigation"
      ]
      "banner" => array:2 [
        0 => __TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee {#1}
        1 => "block_banner"
      ]
      "body" => array:2 [
        0 => __TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee {#1}
        1 => "block_body"
      ]
      "content" => array:2 [
        0 => __TwigTemplate_1fd2da7f05a02335033099a06781b7d00f84f79ced9a93dc72d9cf5790c09ebd {}
        1 => "block_content"
      ]
      "footer" => array:2 [
        0 => __TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee {#1}
        1 => "block_footer"
      ]
      "bottom" => array:2 [
        0 => __TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee {#1}
        1 => "block_bottom"
      ]
    ]
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
vendor
/
twig
/
twig
/
src
/
Template.php
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        } catch (\Throwable $e) {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        }
 
        return ob_get_clean();
    }
 
    protected function displayWithErrorHandling(array $context, array $blocks = [])
    {
        try {
            $this->doDisplay($context, $blocks);
        } catch (Error $e) {
            if (!$e->getSourceContext()) {
                $e->setSourceContext($this->getSourceContext());
            }
 
            // this is mostly useful for \Twig\Error\LoaderError exceptions
            // see \Twig\Error\LoaderError
            if (-1 === $e->getTemplateLine()) {
                $e->guess();
            }
 
            throw $e;
        } catch (\Exception $e) {
            $e = new RuntimeError(sprintf('An exception has been thrown during the rendering of a template ("%s").', $e->getMessage()), -1, $this->getSourceContext(), $e);
            $e->guess();
 
            throw $e;
        }
    }
 
Arguments
  1. array:30 [
      "config" => Config {}
      "system" => array:27 [
        "absolute_urls" => false
        "timezone" => ""
        "default_locale" => null
        "param_sep" => ":"
        "wrapped_site" => false
        "reverse_proxy_setup" => false
        "force_ssl" => false
        "force_lowercase_urls" => true
        "custom_base_url" => "http://www.3dvalley.com"
        "username_regex" => "^[a-z0-9_-]{3,16}$"
        "pwd_regex" => "(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}"
        "intl_enabled" => true
        "languages" => array:9 [
          "supported" => []
          "default_lang" => null
          "include_default_lang" => true
          "pages_fallback_only" => false
          "translations" => true
          "translations_fallback" => true
          "session_store_active" => false
          "http_accept_language" => false
          "override_locale" => false
        ]
        "home" => array:2 [
          "alias" => "/home"
          "hide_in_urls" => false
        ]
        "pages" => array:26 [
          "theme" => "minimaxing"
          "order" => array:2 [
            "by" => "default"
            "dir" => "asc"
          ]
          "list" => array:1 [
            "count" => 20
          ]
          "dateformat" => array:3 [
            "default" => null
            "short" => "jS M Y"
            "long" => "F jS \a\t g:ia"
          ]
          "publish_dates" => true
          "process" => array:2 [
            "markdown" => true
            "twig" => false
          ]
          "twig_first" => false
          "never_cache_twig" => false
          "events" => array:2 [
            "page" => true
            "twig" => true
          ]
          "markdown" => array:5 [
            "extra" => true
            "auto_line_breaks" => false
            "auto_url_links" => false
            "escape_markup" => false
            "special_chars" => array:2 [
              ">" => "gt"
              "<" => "lt"
            ]
          ]
          "types" => array:7 [
            0 => "txt"
            1 => "xml"
            2 => "html"
            3 => "htm"
            4 => "json"
            5 => "rss"
            6 => "atom"
          ]
          "append_url_extension" => ""
          "expires" => 604800
          "cache_control" => null
          "last_modified" => false
          "etag" => true
          "vary_accept_encoding" => false
          "redirect_default_route" => false
          "redirect_default_code" => "301"
          "redirect_trailing_slash" => true
          "ignore_files" => array:1 [
            0 => ".DS_Store"
          ]
          "ignore_folders" => array:2 [
            0 => ".git"
            1 => ".idea"
          ]
          "ignore_hidden" => true
          "hide_empty_folders" => false
          "url_taxonomy_filters" => true
          "frontmatter" => array:2 [
            "process_twig" => false
            "ignore_fields" => array:2 [
              0 => "form"
              1 => "forms"
            ]
          ]
        ]
        "cache" => array:13 [
          "enabled" => true
          "check" => array:1 [
            "method" => "file"
          ]
          "driver" => "apcu"
          "prefix" => "g"
          "purge_at" => "0 4 * * *"
          "clear_at" => "0 3 * * *"
          "clear_job_type" => "standard"
          "clear_images_by_default" => true
          "cli_compatibility" => false
          "lifetime" => 604800
          "gzip" => true
          "allow_webserver_gzip" => false
          "redis" => array:1 [
            "socket" => false
          ]
        ]
        "twig" => array:7 [
          "cache" => true
          "debug" => true
          "auto_reload" => true
          "autoescape" => false
          "undefined_functions" => true
          "undefined_filters" => true
          "umask_fix" => false
        ]
        "assets" => array:12 [
          "css_pipeline" => true
          "css_pipeline_include_externals" => true
          "css_pipeline_before_excludes" => true
          "css_minify" => true
          "css_minify_windows" => false
          "css_rewrite" => true
          "js_pipeline" => true
          "js_pipeline_include_externals" => true
          "js_pipeline_before_excludes" => true
          "js_minify" => true
          "enable_asset_timestamp" => false
          "collections" => array:1 [
            "jquery" => "system://assets/jquery/jquery-2.x.min.js"
          ]
        ]
        "errors" => array:2 [
          "display" => 1
          "log" => true
        ]
        "log" => array:2 [
          "handler" => "file"
          "syslog" => array:1 [
            "facility" => "local6"
          ]
        ]
        "debugger" => array:3 [
          "enabled" => false
          "shutdown" => array:1 [
            "close_connection" => true
          ]
          "twig" => true
        ]
        "images" => array:6 [
          "default_image_quality" => 85
          "cache_all" => false
          "cache_perms" => "0755"
          "debug" => false
          "auto_fix_orientation" => false
          "seofriendly" => false
        ]
        "media" => array:5 [
          "enable_media_timestamp" => false
          "unsupported_inline_types" => []
          "allowed_fallback_types" => []
          "auto_metadata_exif" => false
          "upload_limit" => 33554432
        ]
        "session" => array:9 [
          "enabled" => true
          "initialize" => true
          "timeout" => 1800
          "name" => "grav-site"
          "uniqueness" => "path"
          "secure" => false
          "httponly" => true
          "split" => true
          "path" => "/"
        ]
        "gpm" => array:5 [
          "releases" => "stable"
          "proxy_url" => null
          "method" => "auto"
          "verify_peer" => true
          "official_gpm_only" => true
        ]
        "accounts" => array:2 [
          "type" => "data"
          "storage" => "file"
        ]
        "strict_mode" => array:2 [
          "yaml_compat" => true
          "twig_compat" => true
        ]
      ]
      "theme" => array:2 [
        "enabled" => true
        "dropdown" => array:1 [
          "enabled" => false
        ]
      ]
      "site" => array:14 [
        "title" => "3Dvalley"
        "default_lang" => "en"
        "author" => array:2 [
          "name" => "Admin"
          "email" => "webmaster@3dvalley.com"
        ]
        "taxonomies" => array:2 [
          0 => "category"
          1 => "tag"
        ]
        "metadata" => array:1 [
          "description" => "Free 3D models and textures"
        ]
        "summary" => array:4 [
          "enabled" => true
          "format" => "short"
          "size" => 300
          "delimiter" => "==="
        ]
        "redirects" => array:12 [
          "/tutorials/3d-studio-max-hotkeys-and-mouse-essentials" => "/tutorials/threed-studio-max-hotkeys-and-mouse-essentials "
          "/tutorials/3d-studio-max-tutorial-modeling-a-plunger" => "/tutorials/modeling-a-plunger-in-3d-studio-max"
          "/tutorials/modeling-a-brake-rotor" => "/tutorials/modeling-brake-rotor-in-3d-studio-max"
          "/models" => "/3d-models"
          "/free-textures" => "/textures"
          "/textures.shtml" => "/textures"
          "/tutorials/rendering-objects-in-a-solidwire-mix" => "/tutorials/rendering-wip-images-in-3d-studio-max"
          "/tutorials/modeling-a-highly-detailed-basketball-in-3d-studio-max" => "/tutorials/modeling-a-highly-detailed-basketball-in-3ds-max/"
          "/models.shtml" => "/3d-models"
          "/c/tutorials" => "/tutorials"
          "/models/models_household.shtml" => "/3d-models/household"
          "/downloadables/3DStudioMAX-hotkeys.pdf" => "/tutorials/threed-studio-max-hotkeys-and-mouse-essentials"
        ]
        "routes" => null
        "blog" => array:1 [
          "route" => "/blog"
        ]
        "header" => array:2 [
          "title" => "I'm Jonathan Doe."
          "description" => "I'm a Manila based <span>graphic designer</span>, <span>illustrator</span> and <span>webdesigner</span> creating awesome and effective visual identities for companies of all sizes around the globe. Let's <a class="smoothscroll" href="#about">start scrolling</a> and learn more <a class="smoothscroll" href="#about">about me</a>."
        ]
        "copyright" => array:2 [
          0 => array:1 [
            "line" => "Copyright 2014 CeeVee"
          ]
          1 => array:1 [
            "line" => "Design by <a title="Styleshout" href="http://www.styleshout.com/">Styleshout</a>"
          ]
        ]
        "social" => array:7 [
          0 => array:2 [
            "url" => "#"
            "icon" => "facebook"
          ]
          1 => array:2 [
            "url" => "#"
            "icon" => "twitter"
          ]
          2 => array:2 [
            "url" => "#"
            "icon" => "google-plus"
          ]
          3 => array:2 [
            "url" => "#"
            "icon" => "linkedin"
          ]
          4 => array:2 [
            "url" => "#"
            "icon" => "instagram"
          ]
          5 => array:2 [
            "url" => "#"
            "icon" => "dribbble"
          ]
          6 => array:2 [
            "url" => "#"
            "icon" => "skype"
          ]
        ]
        "twitter" => array:7 [
          "id" => "657554810648948736"
          "domId" => "tw-widget1"
          "maxTweets" => 3
          "enableLinks" => "true"
          "showInteraction" => "false"
          "showImages" => "false"
          "showUser" => "false"
        ]
        "acxtest" => "TEST"
      ]
      "uri" => Uri {}
      "assets" => Assets {}
      "taxonomy" => Taxonomy {}
      "browser" => Browser {}
      "base_dir" => "/home/jhiemstraxartec/public_html/test"
      "home_url" => "/"
      "base_url" => ""
      "base_url_absolute" => "http://www.3dvalley.com"
      "base_url_relative" => ""
      "base_url_simple" => ""
      "theme_dir" => "/home/jhiemstraxartec/public_html/test/user/themes/minimaxing"
      "theme_url" => "/user/themes/minimaxing"
      "html_lang" => "en"
      "language_codes" => LanguageCodes {}
      "json" => "</script><script>"
      "myvar" => "</script><script>"
      "form" => null
      "form_max_filesize" => 32
      "form_json_response" => []
      "pages" => Page {}
      "page" => Page {}
      "header" => {}
      "media" => Media {}
      "content" => """
        <p>Like most tasks in 3D Studio Max and similar products, rigging robots is easy, if you know how. Depending on the complexity of the robot, some may find it even easier than rigging a human or animal character. This is because most parts of a robot do not deform during movement, with the exception of cabling and other flexible parts, so you don’t have to ‘skin’ it. One of the primary challenges in building a cool robot, which still looks cool when animated, is creating realistic mechanical joints.</p>\n
        \n
        <p>The first version of our example robotic leg below is not very realistic however, because it would collapse like a bone structure without muscles. In the second version, we will add some robotic ‘muscles’, and the third version will include a hose. Click on the download links below some of the pictures to download the corresponding scene.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/robotrigging_mainthumb_ani.gif" /></p>\n
        <h4>1. A Human Leg</h4>\n
        <p>When rigging a human leg, the mesh deforms when the knee bends, pushing vertexes away from each other on one side and towards each other on the opposite side. This is accomplished by using a Skin modifier that binds vertexes of the mesh to the bones. The colors of the vertexes indicate the weight values which dictate how much influence moving the joint will have on those vertexes. Red vertexes represent the most rigid parts.</p>\n
        <h4>2. Our Example Robot Leg</h4>\n
        <p>Robots are typically made of metal, plastic, or some other hard and rigid material that does not deform. The following picture shows the five objects that form the basis of our example leg.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p2a.jpg" /> <img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p2b.jpg" /></p>\n
        <h4>3. Rigging Our Example Robot Leg</h4>\n
        <p>As usual, I have to make a note that the following is just a way of doing this, which doesn’t necessarily means it is the way (we’ll actually show another way later on). Picture 3a below shows the (unsmoothed) wireframe of the objects that make up this leg. Click the link below it to download the scene, or download the scene including the bones by clicking the link below Picture 3h, or just watch the pictures if you do not feel like actually doing any of this right now.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3a.gif" />\n
        Picture 3a.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_start.zip">Download start scene here</a></p>\n
        <p>The red dots in the picture above represent the pivot of the object. In the scene you can download, I have already moved them to the correct position. The UpperLeg’s pivot is positioned at exactly the same position as the pivot of Cylinder01, and LowerLeg’s pivot is at the same position as the pivot of Cylinder02. When switching to the top view, they are all aligned. It is essential that the bones you add start or end exactly at those pivot points.</p>\n
        <p>A way of making sure the bones are positioned correctly is to snap to pivots. When you use this method it is also essential that all the pivots are aligned when viewing from the top. If in your robot they aren’t and it is too complex or difficult to align them, you can skip the following snap settings and just draw the bones, select them all and move them to the center of the leg (Top view). To use the snap setting, right-click the Snaps Toggle button on the main toolbar and select Pivot and clear others if necessary (see Picture 3b). Now click the Snaps Toggle button again (with the left mouse button) to enable it.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3b.gif" />\n
        Picture 3b.</p>\n
        <p>Click the Bones button in the Systems section on the Create tab of the Command Panel as displayed in Picture 3c below. Choose SplineIKSolver as the IK Solver and enable Assign to Children (you can use another IK Solver or none at all, if you prefer).</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3c.gif" />\n
        Picture 3c.</p>\n
        <p>Now draw the bones, by clicking on the spots 1, 2, and 3 shown in Picture 3d and then right-click anywhere in the viewport to stop. Spots 1, 2 and 3 are the pivot points of Cylinder01, Cylinder02, and Cylinder03.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3d.gif" />\n
        Picture 3d.</p>\n
        <p>When the Spline IK Solver dialog shown in Picture 3e below opens, just click OK.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3e.gif" />\n
        Picture 3e.</p>\n
        <p>Now before you link the bones to the leg, you should make sure that the pivots of the bones are positioned correctly on the pivot of the limbs, the Spline IK Solver we added moved them slightly. To move a bone’s pivot, click the Affect Pivot Only button on the Hierarchy tab of the Command Panel, and disable the Enabled button on the Motion tab of the Command Panel.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3f.gif" />\n
        Picture 3f.</p>\n
        <p>Then select the pivot of the bone and move it to the correct position. Make sure you zoom in and place it exactly in the center of the limbs’ pivots. You also might want to disable the snap to pivot setting first by clicking the Snaps Toggle button again. If for some reason you cannot get them in the right position, there is no need to continue, as the whole setup depends on the pivots’ position.</p>\n
        <p>When you are sure the pivots are positioned correctly, select Cylinder01 and link it to UpperLeg. Select Cylinder02 and link it to the LowerLeg, and select Cylinder03 to LowerLeg as well. To link one object to another click the Select and Link button on the main tool bar, select the object you want to link and drag to the object you want to link to. If you do it correctly, the object you link to, will flash white once.</p>\n
        <p>We will use the same select and link method to link the objects to the bones, instead of using a Skin modifier. Link UpperLeg to the upper bone, and link LowerLeg to the lower bone.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3g.gif" />\n
        Picture 3g.</p>\n
        <p>When you done all of the above, or download the scene including the bones by using the link below, select the IK Chain or any of the point helpers and move it. The knee joint should now operate as shown in Picture 3g, without any of the objects deforming during movement.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3h.gif" />\n
        Picture 3h.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_end.zip">Download scene here.</a></p>\n
        <h4>4. Another Approach</h4>\n
        <p>Before we continue with this leg and add some muscles, we will use another method of rigging this leg. As someone kindly pointed out to me, there is no absolute need to use bones . If you are new to rigging characters or robots in particular, you may want to go for the bones method discussed above, but a robot is often a skeleton by itself, eliminating the need for bones. 3D Studio Max allows any object to act like a bone, and allows you also to assign IK solvers to any hierarchical set of objects. Also in this type of ‘bone’ setup, it is absolutely imperative that the pivots of the objects are in the correct position. We will illustrate this with some pictures later.</p>\n
        <p>To make this work with the previous example (delete the previous bone structure or use the scene you downloaded earlier), and link the objects to each other as followed:</p>\n
        <p>Cylinder03 -&gt; LowerLeg\n
        LowerLeg -&gt; Cylinder02</p>\n
        <p>Cylinder02 -&gt; UpperLeg</p>\n
        <p>UpperLeg -&gt; Cylinder01</p>\n
        <p>Press the Schematic View (Open) button on the main toolbar to check if the hierarchy is now correct as displayed in Picture 4a.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4a.gif" />\n
        Picture 4a.</p>\n
        <p>Now all you need to do is add an IK Solver to this hierarchy to make it act like a robotic leg. You can use the IK Solver you prefer, but in this example, we are going to use the History Independent solver. Select Cylinder03, choose HI Solver from the IK Solvers section in the Animation menu, and select Cylinder01. To prevent you from linking the solver to UpperLeg instead of Cylinder01, use the Select by Name option, which basically means you should press the H key on your keyboard after you choose HI Solver from the menu, and then pick Cylinder01 from the list, instead of clicking on it in the viewport.</p>\n
        <p>If you performed the previous tasks correctly, the results should be like in Picture 4b with the IK Chain selected. If you move the IK Chain the leg should work. To make the task of animating this leg a bit more convenient, you should link the IK Chain to a Point Helper.</p>\n
        <p>A Point helper can be created by clicking the Point button in the Helpers section of the Create tab on the Command Panel, and clicking somewhere in the viewport, as depicted in Picture 4b below. In this case, I suggest you place it somewhere at the bottom of the leg. Use the same Select and Link method as discussed earlier to link the IK Chain to the Point helper, so you can animate the leg by moving the Point helper.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4b.gif" />\n
        Picture 4b.</p>\n
        <p>If your robot has a complex geometry and animating the individual objects slows down your computer too much, you can configure 3D Studio Max to display the objects as bones. When using our example leg from the previous steps, you should select Cylinder01, 02, 03, UpperLeg, and LowerLeg, and select Bone Tools from the Character menu. Enable the Bone On option on the Bone Tools dialog as shown below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4c.gif" />\n
        Picture 4c.</p>\n
        <p>Next, open the Display tab on the Command Panel, scroll down, and in the Link Display section enable the Display Links option and the Link Replaces Object option.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4d.gif" />\n
        Picture 4d.</p>\n
        <p>The results should be as depicted in Picture 4e below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4e.gif" />\n
        Picture 4e.</p>\n
        <p>Alternatively, you can enable only the Display Links option and right above the Link Display section enable the Display as Box option in the Display Properties section. The results should be as depicted in Picture 4f below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4f.gif" />\n
        Picture 4f.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_ik_end.zip">Download the scene here.</a></p>\n
        <h4>5. Muscles</h4>\n
        <p>As I mentioned earlier, the leg used in the example above is not very realistic; it needs some muscles to make it move automatically and at the same time give it some strength. You can make up your own mechanisms, but you can also use one of the three main methods used in modern real world robots:</p>\n
        <p>Electrical motors</p>\n
        <p>For the example leg from above, this would be the easy way out, as you would ‘only’ have to increase the size of the knee joint and modify it into to something like shown below in Photo I, so it becomes viable an electrical motor could fit inside. Additionally, rigging the robot is easy as you can use one of the methods we discussed earlier.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/motoman_sv3x.jpg" />\n
        Photo I. Industrial robot arm powered by electrical motors.</p>\n
        <p>Hydraulic/Pneumatic/Magnetic pistons</p>\n
        <p>Another commonly used method to power robots are pistons. A piston (see Photo II below) is basically consists of a metal bar that goes inside a tube. Pressurized air or oil is pumped into the piston to push out metal bar. This is usually the sound you here when a robot moves. If you want to make them realistic, you should attach a hose to it, which leads to a compressor somewhere in or on the robot. These hydraulic or pneumatic pistons are much more powerful than electrical motors. Smaller pistons may use magnetic force to either pull or push the metal bar. The latter would have electrical wires attached to it, instead of a hose.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/photo_ii.gif" />\n
        Photo II. Crane powered by hydraulic pistons.</p>\n
        <p>Picture 5a and 5b show our second example leg. It includes a piston that is made of two cylinders called Piston_PA and Piston_PB. Two additional cylinders (P_Axis_A and P_Axis_B) form the axis of the piston’s parts.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5a.gif" /> <img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5b.gif" />\n
        Picture 5a. &amp; Picture 5b.</p>\n
        <p>As you can see in Picture 5c below, we already rigged the leg with two bones and an IKSplineSolver. You can download the scene by clicking the link below the picture.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5c.gif" />\n
        Picture 5c.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_pistons_start.zip">Download the scene here.</a></p>\n
        <p>First, we will link the piston’s parts to the leg as followed:</p>\n
        <p>P_Axis_A -&gt; UpperLeg\n
        P_Axis_B -&gt; LowerLeg</p>\n
        <p>Piston_PA -&gt; P_Axis_A</p>\n
        <p>Piston_PB -&gt; P_Axis_B</p>\n
        <p>The hierarchy of the leg should now be exactly like in Picture 5d.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5d.gif" />\n
        Picture 5d.</p>\n
        <p>If we would bend the knee, by using the lower helper (Point3) for example, the two parts of the piston will not stay aligned correctly and will ‘break’ as shown in Picture 5e below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5e.gif" />\n
        Picture 5e.</p>\n
        <p>(If you moved the leg, press use Undo (Ctrl-Z) to move it back to its original position.)</p>\n
        <p>To make sure the metal bar stays inside the tube, we need to use a constraint, in this case the Look At constraint. As in the previous parts of this tutorial, the placement of the pivots of the piston’s parts is essential to make it work. The pivots for P_Axis_A and Piston_PA are exactly on the same position, and the pivots for P_Axis_B and Piston_PB are also exactly on the same position. We have already done this in the downloadable scene by selecting the parts that have the pivots on the same axis, enabling the Affect Pivot Only button (see Picture 3f) and using the Align tool (on both the Front, Top, and Left view).</p>\n
        <p>We will need to add two Look At constraints, one for each part of the piston. Select Piston_PA and select Look At from the Constraints section in the Animation menu, as depicted in Picture 5f below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5f.gif" />\n
        Picture 5f.</p>\n
        <p>Press the H key on your keyboard, select P_Axis_B, and click the Pick button. Piston_PA now changes its orientation. To make sure it point in the original direction, enable the Keep Initial Offset option on the Parameters section on the Motion tab of the Command Panel, as depicted in Picture 5g below. (The parameters section opened automatically when you added the Look At constraint.)</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5g.gif" />\n
        Picture 5g.</p>\n
        <p>Repeat this step for the other part of the piston, in other words: select Piston_PB, select Look At constraint from the Animation menu, pick the P_Axis_A as the target (using the H button to pick it). Also enable the Keep Initial Offset option again. So what we did is make one part of the piston ‘looks at’ the opposite part’s axis. The orientation is depicted with a blue line. If you select the helper Point03 and move it again, you will see that the metal bat slides neatly into the tube, as shown in Picture 5h below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5h.gif" />\n
        Picture 5h.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_pistons_end.zip">Download the scene here.</a></p>\n
        <p>To make it more realistic, we need to attach a pipe or hose to the hydraulic or pneumatic piston, and we need to make sure it moves and/or bends when the leg moves. There are many ways of doing this, but a relatively easy one is to use the extended primitive Hose. The advantage of using the Hose primitive is that you don’t need to rig it; no bones, and no IK. Instead, we are going to add two extra Cylinders, in addition to the Hose, and let the Hose start and end at those cylinders.</p>\n
        <p>In Picture 5i below you can see where we placed the two cylinders. The cylinder on the left is linked to UpperLeg, and the other is linked to Piston_PA. These cylinders represent the entry points of the hose, or the connector of a wire for example. You will probably want to use something more sophisticated than a cylinder, but make sure it is a separate object.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5i.gif" />\n
        Picture 5i.</p>\n
        <p>Next, create the hose by selecting Extended Primitives on the Create tab of the Command Panel, clicking the Hose button, and drawing a hose in any viewport, as shown in Picture 5j below. Don’t worry about its size, location, or shape yet.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5j.gif" />\n
        Picture 5j.</p>\n
        <p>On the Modify tab of the Command Panel, enable the Bound to Object Pivots. Click the Pick Top Object button and click on the left cylinder. Click the Pick Bottom Object button and click on the right cylinder (or use the H key on your keyboard).</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5k.gif" />\n
        Picture 5k.</p>\n
        <p>Depending on the orientation of the cylinders we use to connect the hose and the viewport you created them on, you may have to rotate the pivot of one or both cylinders. So if necessary, select the cylinder, enable the Affect Pivot Only button (picture 3f), and rotate the pivot. While you rotate the pivot, the hose will bend with it so you can easily see when it is at the right angle.</p>\n
        <p>When the hose is correctly aligned to the cylinders, click the hose again, scroll down below on the Modify tab, and disable the Flex Section Enable option as shown below in Picture 5l. Also decrease the Diameter: value in the Hose Shape section to a value that is less than the cylinders.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5l.gif" />\n
        Picture 5l.</p>\n
        <p>As you can see, the hose is too long and needs to hang more tightly against the leg. You can do this by decreasing the Tension values (see Picture 5k). In the final images below, we used 25 for both cylinders. If you move the leg again using on of the helpers, you will notice that the hose will stay in position and even bend when it has to. Click on one of the images to see the final animation.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5m.gif" /> <img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5n.gif" />\n
        Picture 5m.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_piston_hose.zip">Download the final scene here.</a></p>\n
        <p>I hope you enjoyed this tutorial and that it contributed something to your 3D Studio Max modeling skills.</p>
        """
      "grav" => Grav {}
      "theme_config" => array:2 [
        "enabled" => true
        "dropdown" => array:1 [
          "enabled" => false
        ]
      ]
    ]
    
  2. array:11 [
      "head" => array:2 [
        0 => __TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee {#1}
        1 => "block_head"
      ]
      "galalbummeta" => array:2 [
        0 => __TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee {#1}
        1 => "block_galalbummeta"
      ]
      "stylesheets" => array:2 [
        0 => __TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee {#1}
        1 => "block_stylesheets"
      ]
      "javascripts" => array:2 [
        0 => __TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee {#1}
        1 => "block_javascripts"
      ]
      "header" => array:2 [
        0 => __TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee {#1}
        1 => "block_header"
      ]
      "header_navigation" => array:2 [
        0 => __TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee {#1}
        1 => "block_header_navigation"
      ]
      "banner" => array:2 [
        0 => __TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee {#1}
        1 => "block_banner"
      ]
      "body" => array:2 [
        0 => __TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee {#1}
        1 => "block_body"
      ]
      "content" => array:2 [
        0 => __TwigTemplate_1fd2da7f05a02335033099a06781b7d00f84f79ced9a93dc72d9cf5790c09ebd {}
        1 => "block_content"
      ]
      "footer" => array:2 [
        0 => __TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee {#1}
        1 => "block_footer"
      ]
      "bottom" => array:2 [
        0 => __TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee {#1}
        1 => "block_bottom"
      ]
    ]
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
vendor
/
twig
/
twig
/
src
/
Template.php
    {
        return $this;
    }
 
    /**
     * Returns all blocks.
     *
     * This method is for internal use only and should never be called
     * directly.
     *
     * @return array An array of blocks
     */
    public function getBlocks()
    {
        return $this->blocks;
    }
 
    public function display(array $context, array $blocks = [])
    {
        $this->displayWithErrorHandling($this->env->mergeGlobals($context), array_merge($this->blocks, $blocks));
    }
 
    public function render(array $context)
    {
        $level = ob_get_level();
        ob_start(function () { return ''; });
        try {
            $this->display($context);
        } catch (\Exception $e) {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        } catch (\Throwable $e) {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
Arguments
  1. array:29 [
      "config" => Config {}
      "system" => array:27 [
        "absolute_urls" => false
        "timezone" => ""
        "default_locale" => null
        "param_sep" => ":"
        "wrapped_site" => false
        "reverse_proxy_setup" => false
        "force_ssl" => false
        "force_lowercase_urls" => true
        "custom_base_url" => "http://www.3dvalley.com"
        "username_regex" => "^[a-z0-9_-]{3,16}$"
        "pwd_regex" => "(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}"
        "intl_enabled" => true
        "languages" => array:9 [
          "supported" => []
          "default_lang" => null
          "include_default_lang" => true
          "pages_fallback_only" => false
          "translations" => true
          "translations_fallback" => true
          "session_store_active" => false
          "http_accept_language" => false
          "override_locale" => false
        ]
        "home" => array:2 [
          "alias" => "/home"
          "hide_in_urls" => false
        ]
        "pages" => array:26 [
          "theme" => "minimaxing"
          "order" => array:2 [
            "by" => "default"
            "dir" => "asc"
          ]
          "list" => array:1 [
            "count" => 20
          ]
          "dateformat" => array:3 [
            "default" => null
            "short" => "jS M Y"
            "long" => "F jS \a\t g:ia"
          ]
          "publish_dates" => true
          "process" => array:2 [
            "markdown" => true
            "twig" => false
          ]
          "twig_first" => false
          "never_cache_twig" => false
          "events" => array:2 [
            "page" => true
            "twig" => true
          ]
          "markdown" => array:5 [
            "extra" => true
            "auto_line_breaks" => false
            "auto_url_links" => false
            "escape_markup" => false
            "special_chars" => array:2 [
              ">" => "gt"
              "<" => "lt"
            ]
          ]
          "types" => array:7 [
            0 => "txt"
            1 => "xml"
            2 => "html"
            3 => "htm"
            4 => "json"
            5 => "rss"
            6 => "atom"
          ]
          "append_url_extension" => ""
          "expires" => 604800
          "cache_control" => null
          "last_modified" => false
          "etag" => true
          "vary_accept_encoding" => false
          "redirect_default_route" => false
          "redirect_default_code" => "301"
          "redirect_trailing_slash" => true
          "ignore_files" => array:1 [
            0 => ".DS_Store"
          ]
          "ignore_folders" => array:2 [
            0 => ".git"
            1 => ".idea"
          ]
          "ignore_hidden" => true
          "hide_empty_folders" => false
          "url_taxonomy_filters" => true
          "frontmatter" => array:2 [
            "process_twig" => false
            "ignore_fields" => array:2 [
              0 => "form"
              1 => "forms"
            ]
          ]
        ]
        "cache" => array:13 [
          "enabled" => true
          "check" => array:1 [
            "method" => "file"
          ]
          "driver" => "apcu"
          "prefix" => "g"
          "purge_at" => "0 4 * * *"
          "clear_at" => "0 3 * * *"
          "clear_job_type" => "standard"
          "clear_images_by_default" => true
          "cli_compatibility" => false
          "lifetime" => 604800
          "gzip" => true
          "allow_webserver_gzip" => false
          "redis" => array:1 [
            "socket" => false
          ]
        ]
        "twig" => array:7 [
          "cache" => true
          "debug" => true
          "auto_reload" => true
          "autoescape" => false
          "undefined_functions" => true
          "undefined_filters" => true
          "umask_fix" => false
        ]
        "assets" => array:12 [
          "css_pipeline" => true
          "css_pipeline_include_externals" => true
          "css_pipeline_before_excludes" => true
          "css_minify" => true
          "css_minify_windows" => false
          "css_rewrite" => true
          "js_pipeline" => true
          "js_pipeline_include_externals" => true
          "js_pipeline_before_excludes" => true
          "js_minify" => true
          "enable_asset_timestamp" => false
          "collections" => array:1 [
            "jquery" => "system://assets/jquery/jquery-2.x.min.js"
          ]
        ]
        "errors" => array:2 [
          "display" => 1
          "log" => true
        ]
        "log" => array:2 [
          "handler" => "file"
          "syslog" => array:1 [
            "facility" => "local6"
          ]
        ]
        "debugger" => array:3 [
          "enabled" => false
          "shutdown" => array:1 [
            "close_connection" => true
          ]
          "twig" => true
        ]
        "images" => array:6 [
          "default_image_quality" => 85
          "cache_all" => false
          "cache_perms" => "0755"
          "debug" => false
          "auto_fix_orientation" => false
          "seofriendly" => false
        ]
        "media" => array:5 [
          "enable_media_timestamp" => false
          "unsupported_inline_types" => []
          "allowed_fallback_types" => []
          "auto_metadata_exif" => false
          "upload_limit" => 33554432
        ]
        "session" => array:9 [
          "enabled" => true
          "initialize" => true
          "timeout" => 1800
          "name" => "grav-site"
          "uniqueness" => "path"
          "secure" => false
          "httponly" => true
          "split" => true
          "path" => "/"
        ]
        "gpm" => array:5 [
          "releases" => "stable"
          "proxy_url" => null
          "method" => "auto"
          "verify_peer" => true
          "official_gpm_only" => true
        ]
        "accounts" => array:2 [
          "type" => "data"
          "storage" => "file"
        ]
        "strict_mode" => array:2 [
          "yaml_compat" => true
          "twig_compat" => true
        ]
      ]
      "theme" => array:2 [
        "enabled" => true
        "dropdown" => array:1 [
          "enabled" => false
        ]
      ]
      "site" => array:14 [
        "title" => "3Dvalley"
        "default_lang" => "en"
        "author" => array:2 [
          "name" => "Admin"
          "email" => "webmaster@3dvalley.com"
        ]
        "taxonomies" => array:2 [
          0 => "category"
          1 => "tag"
        ]
        "metadata" => array:1 [
          "description" => "Free 3D models and textures"
        ]
        "summary" => array:4 [
          "enabled" => true
          "format" => "short"
          "size" => 300
          "delimiter" => "==="
        ]
        "redirects" => array:12 [
          "/tutorials/3d-studio-max-hotkeys-and-mouse-essentials" => "/tutorials/threed-studio-max-hotkeys-and-mouse-essentials "
          "/tutorials/3d-studio-max-tutorial-modeling-a-plunger" => "/tutorials/modeling-a-plunger-in-3d-studio-max"
          "/tutorials/modeling-a-brake-rotor" => "/tutorials/modeling-brake-rotor-in-3d-studio-max"
          "/models" => "/3d-models"
          "/free-textures" => "/textures"
          "/textures.shtml" => "/textures"
          "/tutorials/rendering-objects-in-a-solidwire-mix" => "/tutorials/rendering-wip-images-in-3d-studio-max"
          "/tutorials/modeling-a-highly-detailed-basketball-in-3d-studio-max" => "/tutorials/modeling-a-highly-detailed-basketball-in-3ds-max/"
          "/models.shtml" => "/3d-models"
          "/c/tutorials" => "/tutorials"
          "/models/models_household.shtml" => "/3d-models/household"
          "/downloadables/3DStudioMAX-hotkeys.pdf" => "/tutorials/threed-studio-max-hotkeys-and-mouse-essentials"
        ]
        "routes" => null
        "blog" => array:1 [
          "route" => "/blog"
        ]
        "header" => array:2 [
          "title" => "I'm Jonathan Doe."
          "description" => "I'm a Manila based <span>graphic designer</span>, <span>illustrator</span> and <span>webdesigner</span> creating awesome and effective visual identities for companies of all sizes around the globe. Let's <a class="smoothscroll" href="#about">start scrolling</a> and learn more <a class="smoothscroll" href="#about">about me</a>."
        ]
        "copyright" => array:2 [
          0 => array:1 [
            "line" => "Copyright 2014 CeeVee"
          ]
          1 => array:1 [
            "line" => "Design by <a title="Styleshout" href="http://www.styleshout.com/">Styleshout</a>"
          ]
        ]
        "social" => array:7 [
          0 => array:2 [
            "url" => "#"
            "icon" => "facebook"
          ]
          1 => array:2 [
            "url" => "#"
            "icon" => "twitter"
          ]
          2 => array:2 [
            "url" => "#"
            "icon" => "google-plus"
          ]
          3 => array:2 [
            "url" => "#"
            "icon" => "linkedin"
          ]
          4 => array:2 [
            "url" => "#"
            "icon" => "instagram"
          ]
          5 => array:2 [
            "url" => "#"
            "icon" => "dribbble"
          ]
          6 => array:2 [
            "url" => "#"
            "icon" => "skype"
          ]
        ]
        "twitter" => array:7 [
          "id" => "657554810648948736"
          "domId" => "tw-widget1"
          "maxTweets" => 3
          "enableLinks" => "true"
          "showInteraction" => "false"
          "showImages" => "false"
          "showUser" => "false"
        ]
        "acxtest" => "TEST"
      ]
      "uri" => Uri {}
      "assets" => Assets {}
      "taxonomy" => Taxonomy {}
      "browser" => Browser {}
      "base_dir" => "/home/jhiemstraxartec/public_html/test"
      "home_url" => "/"
      "base_url" => ""
      "base_url_absolute" => "http://www.3dvalley.com"
      "base_url_relative" => ""
      "base_url_simple" => ""
      "theme_dir" => "/home/jhiemstraxartec/public_html/test/user/themes/minimaxing"
      "theme_url" => "/user/themes/minimaxing"
      "html_lang" => "en"
      "language_codes" => LanguageCodes {}
      "json" => "</script><script>"
      "myvar" => "</script><script>"
      "form" => null
      "form_max_filesize" => 32
      "form_json_response" => []
      "pages" => Page {}
      "page" => Page {}
      "header" => {}
      "media" => Media {}
      "content" => """
        <p>Like most tasks in 3D Studio Max and similar products, rigging robots is easy, if you know how. Depending on the complexity of the robot, some may find it even easier than rigging a human or animal character. This is because most parts of a robot do not deform during movement, with the exception of cabling and other flexible parts, so you don’t have to ‘skin’ it. One of the primary challenges in building a cool robot, which still looks cool when animated, is creating realistic mechanical joints.</p>\n
        \n
        <p>The first version of our example robotic leg below is not very realistic however, because it would collapse like a bone structure without muscles. In the second version, we will add some robotic ‘muscles’, and the third version will include a hose. Click on the download links below some of the pictures to download the corresponding scene.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/robotrigging_mainthumb_ani.gif" /></p>\n
        <h4>1. A Human Leg</h4>\n
        <p>When rigging a human leg, the mesh deforms when the knee bends, pushing vertexes away from each other on one side and towards each other on the opposite side. This is accomplished by using a Skin modifier that binds vertexes of the mesh to the bones. The colors of the vertexes indicate the weight values which dictate how much influence moving the joint will have on those vertexes. Red vertexes represent the most rigid parts.</p>\n
        <h4>2. Our Example Robot Leg</h4>\n
        <p>Robots are typically made of metal, plastic, or some other hard and rigid material that does not deform. The following picture shows the five objects that form the basis of our example leg.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p2a.jpg" /> <img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p2b.jpg" /></p>\n
        <h4>3. Rigging Our Example Robot Leg</h4>\n
        <p>As usual, I have to make a note that the following is just a way of doing this, which doesn’t necessarily means it is the way (we’ll actually show another way later on). Picture 3a below shows the (unsmoothed) wireframe of the objects that make up this leg. Click the link below it to download the scene, or download the scene including the bones by clicking the link below Picture 3h, or just watch the pictures if you do not feel like actually doing any of this right now.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3a.gif" />\n
        Picture 3a.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_start.zip">Download start scene here</a></p>\n
        <p>The red dots in the picture above represent the pivot of the object. In the scene you can download, I have already moved them to the correct position. The UpperLeg’s pivot is positioned at exactly the same position as the pivot of Cylinder01, and LowerLeg’s pivot is at the same position as the pivot of Cylinder02. When switching to the top view, they are all aligned. It is essential that the bones you add start or end exactly at those pivot points.</p>\n
        <p>A way of making sure the bones are positioned correctly is to snap to pivots. When you use this method it is also essential that all the pivots are aligned when viewing from the top. If in your robot they aren’t and it is too complex or difficult to align them, you can skip the following snap settings and just draw the bones, select them all and move them to the center of the leg (Top view). To use the snap setting, right-click the Snaps Toggle button on the main toolbar and select Pivot and clear others if necessary (see Picture 3b). Now click the Snaps Toggle button again (with the left mouse button) to enable it.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3b.gif" />\n
        Picture 3b.</p>\n
        <p>Click the Bones button in the Systems section on the Create tab of the Command Panel as displayed in Picture 3c below. Choose SplineIKSolver as the IK Solver and enable Assign to Children (you can use another IK Solver or none at all, if you prefer).</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3c.gif" />\n
        Picture 3c.</p>\n
        <p>Now draw the bones, by clicking on the spots 1, 2, and 3 shown in Picture 3d and then right-click anywhere in the viewport to stop. Spots 1, 2 and 3 are the pivot points of Cylinder01, Cylinder02, and Cylinder03.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3d.gif" />\n
        Picture 3d.</p>\n
        <p>When the Spline IK Solver dialog shown in Picture 3e below opens, just click OK.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3e.gif" />\n
        Picture 3e.</p>\n
        <p>Now before you link the bones to the leg, you should make sure that the pivots of the bones are positioned correctly on the pivot of the limbs, the Spline IK Solver we added moved them slightly. To move a bone’s pivot, click the Affect Pivot Only button on the Hierarchy tab of the Command Panel, and disable the Enabled button on the Motion tab of the Command Panel.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3f.gif" />\n
        Picture 3f.</p>\n
        <p>Then select the pivot of the bone and move it to the correct position. Make sure you zoom in and place it exactly in the center of the limbs’ pivots. You also might want to disable the snap to pivot setting first by clicking the Snaps Toggle button again. If for some reason you cannot get them in the right position, there is no need to continue, as the whole setup depends on the pivots’ position.</p>\n
        <p>When you are sure the pivots are positioned correctly, select Cylinder01 and link it to UpperLeg. Select Cylinder02 and link it to the LowerLeg, and select Cylinder03 to LowerLeg as well. To link one object to another click the Select and Link button on the main tool bar, select the object you want to link and drag to the object you want to link to. If you do it correctly, the object you link to, will flash white once.</p>\n
        <p>We will use the same select and link method to link the objects to the bones, instead of using a Skin modifier. Link UpperLeg to the upper bone, and link LowerLeg to the lower bone.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3g.gif" />\n
        Picture 3g.</p>\n
        <p>When you done all of the above, or download the scene including the bones by using the link below, select the IK Chain or any of the point helpers and move it. The knee joint should now operate as shown in Picture 3g, without any of the objects deforming during movement.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3h.gif" />\n
        Picture 3h.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_end.zip">Download scene here.</a></p>\n
        <h4>4. Another Approach</h4>\n
        <p>Before we continue with this leg and add some muscles, we will use another method of rigging this leg. As someone kindly pointed out to me, there is no absolute need to use bones . If you are new to rigging characters or robots in particular, you may want to go for the bones method discussed above, but a robot is often a skeleton by itself, eliminating the need for bones. 3D Studio Max allows any object to act like a bone, and allows you also to assign IK solvers to any hierarchical set of objects. Also in this type of ‘bone’ setup, it is absolutely imperative that the pivots of the objects are in the correct position. We will illustrate this with some pictures later.</p>\n
        <p>To make this work with the previous example (delete the previous bone structure or use the scene you downloaded earlier), and link the objects to each other as followed:</p>\n
        <p>Cylinder03 -&gt; LowerLeg\n
        LowerLeg -&gt; Cylinder02</p>\n
        <p>Cylinder02 -&gt; UpperLeg</p>\n
        <p>UpperLeg -&gt; Cylinder01</p>\n
        <p>Press the Schematic View (Open) button on the main toolbar to check if the hierarchy is now correct as displayed in Picture 4a.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4a.gif" />\n
        Picture 4a.</p>\n
        <p>Now all you need to do is add an IK Solver to this hierarchy to make it act like a robotic leg. You can use the IK Solver you prefer, but in this example, we are going to use the History Independent solver. Select Cylinder03, choose HI Solver from the IK Solvers section in the Animation menu, and select Cylinder01. To prevent you from linking the solver to UpperLeg instead of Cylinder01, use the Select by Name option, which basically means you should press the H key on your keyboard after you choose HI Solver from the menu, and then pick Cylinder01 from the list, instead of clicking on it in the viewport.</p>\n
        <p>If you performed the previous tasks correctly, the results should be like in Picture 4b with the IK Chain selected. If you move the IK Chain the leg should work. To make the task of animating this leg a bit more convenient, you should link the IK Chain to a Point Helper.</p>\n
        <p>A Point helper can be created by clicking the Point button in the Helpers section of the Create tab on the Command Panel, and clicking somewhere in the viewport, as depicted in Picture 4b below. In this case, I suggest you place it somewhere at the bottom of the leg. Use the same Select and Link method as discussed earlier to link the IK Chain to the Point helper, so you can animate the leg by moving the Point helper.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4b.gif" />\n
        Picture 4b.</p>\n
        <p>If your robot has a complex geometry and animating the individual objects slows down your computer too much, you can configure 3D Studio Max to display the objects as bones. When using our example leg from the previous steps, you should select Cylinder01, 02, 03, UpperLeg, and LowerLeg, and select Bone Tools from the Character menu. Enable the Bone On option on the Bone Tools dialog as shown below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4c.gif" />\n
        Picture 4c.</p>\n
        <p>Next, open the Display tab on the Command Panel, scroll down, and in the Link Display section enable the Display Links option and the Link Replaces Object option.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4d.gif" />\n
        Picture 4d.</p>\n
        <p>The results should be as depicted in Picture 4e below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4e.gif" />\n
        Picture 4e.</p>\n
        <p>Alternatively, you can enable only the Display Links option and right above the Link Display section enable the Display as Box option in the Display Properties section. The results should be as depicted in Picture 4f below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4f.gif" />\n
        Picture 4f.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_ik_end.zip">Download the scene here.</a></p>\n
        <h4>5. Muscles</h4>\n
        <p>As I mentioned earlier, the leg used in the example above is not very realistic; it needs some muscles to make it move automatically and at the same time give it some strength. You can make up your own mechanisms, but you can also use one of the three main methods used in modern real world robots:</p>\n
        <p>Electrical motors</p>\n
        <p>For the example leg from above, this would be the easy way out, as you would ‘only’ have to increase the size of the knee joint and modify it into to something like shown below in Photo I, so it becomes viable an electrical motor could fit inside. Additionally, rigging the robot is easy as you can use one of the methods we discussed earlier.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/motoman_sv3x.jpg" />\n
        Photo I. Industrial robot arm powered by electrical motors.</p>\n
        <p>Hydraulic/Pneumatic/Magnetic pistons</p>\n
        <p>Another commonly used method to power robots are pistons. A piston (see Photo II below) is basically consists of a metal bar that goes inside a tube. Pressurized air or oil is pumped into the piston to push out metal bar. This is usually the sound you here when a robot moves. If you want to make them realistic, you should attach a hose to it, which leads to a compressor somewhere in or on the robot. These hydraulic or pneumatic pistons are much more powerful than electrical motors. Smaller pistons may use magnetic force to either pull or push the metal bar. The latter would have electrical wires attached to it, instead of a hose.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/photo_ii.gif" />\n
        Photo II. Crane powered by hydraulic pistons.</p>\n
        <p>Picture 5a and 5b show our second example leg. It includes a piston that is made of two cylinders called Piston_PA and Piston_PB. Two additional cylinders (P_Axis_A and P_Axis_B) form the axis of the piston’s parts.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5a.gif" /> <img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5b.gif" />\n
        Picture 5a. &amp; Picture 5b.</p>\n
        <p>As you can see in Picture 5c below, we already rigged the leg with two bones and an IKSplineSolver. You can download the scene by clicking the link below the picture.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5c.gif" />\n
        Picture 5c.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_pistons_start.zip">Download the scene here.</a></p>\n
        <p>First, we will link the piston’s parts to the leg as followed:</p>\n
        <p>P_Axis_A -&gt; UpperLeg\n
        P_Axis_B -&gt; LowerLeg</p>\n
        <p>Piston_PA -&gt; P_Axis_A</p>\n
        <p>Piston_PB -&gt; P_Axis_B</p>\n
        <p>The hierarchy of the leg should now be exactly like in Picture 5d.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5d.gif" />\n
        Picture 5d.</p>\n
        <p>If we would bend the knee, by using the lower helper (Point3) for example, the two parts of the piston will not stay aligned correctly and will ‘break’ as shown in Picture 5e below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5e.gif" />\n
        Picture 5e.</p>\n
        <p>(If you moved the leg, press use Undo (Ctrl-Z) to move it back to its original position.)</p>\n
        <p>To make sure the metal bar stays inside the tube, we need to use a constraint, in this case the Look At constraint. As in the previous parts of this tutorial, the placement of the pivots of the piston’s parts is essential to make it work. The pivots for P_Axis_A and Piston_PA are exactly on the same position, and the pivots for P_Axis_B and Piston_PB are also exactly on the same position. We have already done this in the downloadable scene by selecting the parts that have the pivots on the same axis, enabling the Affect Pivot Only button (see Picture 3f) and using the Align tool (on both the Front, Top, and Left view).</p>\n
        <p>We will need to add two Look At constraints, one for each part of the piston. Select Piston_PA and select Look At from the Constraints section in the Animation menu, as depicted in Picture 5f below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5f.gif" />\n
        Picture 5f.</p>\n
        <p>Press the H key on your keyboard, select P_Axis_B, and click the Pick button. Piston_PA now changes its orientation. To make sure it point in the original direction, enable the Keep Initial Offset option on the Parameters section on the Motion tab of the Command Panel, as depicted in Picture 5g below. (The parameters section opened automatically when you added the Look At constraint.)</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5g.gif" />\n
        Picture 5g.</p>\n
        <p>Repeat this step for the other part of the piston, in other words: select Piston_PB, select Look At constraint from the Animation menu, pick the P_Axis_A as the target (using the H button to pick it). Also enable the Keep Initial Offset option again. So what we did is make one part of the piston ‘looks at’ the opposite part’s axis. The orientation is depicted with a blue line. If you select the helper Point03 and move it again, you will see that the metal bat slides neatly into the tube, as shown in Picture 5h below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5h.gif" />\n
        Picture 5h.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_pistons_end.zip">Download the scene here.</a></p>\n
        <p>To make it more realistic, we need to attach a pipe or hose to the hydraulic or pneumatic piston, and we need to make sure it moves and/or bends when the leg moves. There are many ways of doing this, but a relatively easy one is to use the extended primitive Hose. The advantage of using the Hose primitive is that you don’t need to rig it; no bones, and no IK. Instead, we are going to add two extra Cylinders, in addition to the Hose, and let the Hose start and end at those cylinders.</p>\n
        <p>In Picture 5i below you can see where we placed the two cylinders. The cylinder on the left is linked to UpperLeg, and the other is linked to Piston_PA. These cylinders represent the entry points of the hose, or the connector of a wire for example. You will probably want to use something more sophisticated than a cylinder, but make sure it is a separate object.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5i.gif" />\n
        Picture 5i.</p>\n
        <p>Next, create the hose by selecting Extended Primitives on the Create tab of the Command Panel, clicking the Hose button, and drawing a hose in any viewport, as shown in Picture 5j below. Don’t worry about its size, location, or shape yet.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5j.gif" />\n
        Picture 5j.</p>\n
        <p>On the Modify tab of the Command Panel, enable the Bound to Object Pivots. Click the Pick Top Object button and click on the left cylinder. Click the Pick Bottom Object button and click on the right cylinder (or use the H key on your keyboard).</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5k.gif" />\n
        Picture 5k.</p>\n
        <p>Depending on the orientation of the cylinders we use to connect the hose and the viewport you created them on, you may have to rotate the pivot of one or both cylinders. So if necessary, select the cylinder, enable the Affect Pivot Only button (picture 3f), and rotate the pivot. While you rotate the pivot, the hose will bend with it so you can easily see when it is at the right angle.</p>\n
        <p>When the hose is correctly aligned to the cylinders, click the hose again, scroll down below on the Modify tab, and disable the Flex Section Enable option as shown below in Picture 5l. Also decrease the Diameter: value in the Hose Shape section to a value that is less than the cylinders.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5l.gif" />\n
        Picture 5l.</p>\n
        <p>As you can see, the hose is too long and needs to hang more tightly against the leg. You can do this by decreasing the Tension values (see Picture 5k). In the final images below, we used 25 for both cylinders. If you move the leg again using on of the helpers, you will notice that the hose will stay in position and even bend when it has to. Click on one of the images to see the final animation.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5m.gif" /> <img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5n.gif" />\n
        Picture 5m.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_piston_hose.zip">Download the final scene here.</a></p>\n
        <p>I hope you enjoyed this tutorial and that it contributed something to your 3D Studio Max modeling skills.</p>
        """
      "grav" => Grav {}
    ]
    
  2. array:11 [
      "head" => array:2 [
        0 => __TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee {#1}
        1 => "block_head"
      ]
      "galalbummeta" => array:2 [
        0 => __TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee {#1}
        1 => "block_galalbummeta"
      ]
      "stylesheets" => array:2 [
        0 => __TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee {#1}
        1 => "block_stylesheets"
      ]
      "javascripts" => array:2 [
        0 => __TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee {#1}
        1 => "block_javascripts"
      ]
      "header" => array:2 [
        0 => __TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee {#1}
        1 => "block_header"
      ]
      "header_navigation" => array:2 [
        0 => __TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee {#1}
        1 => "block_header_navigation"
      ]
      "banner" => array:2 [
        0 => __TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee {#1}
        1 => "block_banner"
      ]
      "body" => array:2 [
        0 => __TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee {#1}
        1 => "block_body"
      ]
      "content" => array:2 [
        0 => __TwigTemplate_1fd2da7f05a02335033099a06781b7d00f84f79ced9a93dc72d9cf5790c09ebd {}
        1 => "block_content"
      ]
      "footer" => array:2 [
        0 => __TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee {#1}
        1 => "block_footer"
      ]
      "bottom" => array:2 [
        0 => __TwigTemplate_aed3f39d8681d6e3378d0353681a4dc14e38b6e07894141497597544251eadee {#1}
        1 => "block_bottom"
      ]
    ]
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
cache
/
twig
/
f4
/
f448589b8fa5e8e96d271b869702bdf2c5f6c03d9e1ebdec2a1766abd9e01266.php
{
    public function __construct(Environment $env)
    {
        parent::__construct($env);
 
        $this->blocks = [
            'content' => [$this, 'block_content'],
        ];
    }
 
    protected function doGetParent(array $context)
    {
        // line 1
        return "partials/base.html.twig";
    }
 
    protected function doDisplay(array $context, array $blocks = [])
    {
        $this->parent = $this->loadTemplate("partials/base.html.twig", "tutorialfull.html.twig", 1);
        $this->parent->display($context, array_merge($this->blocks, $blocks));
    }
 
    // line 3
    public function block_content($context, array $blocks = [])
    {
        // line 4
        echo "
<div class=\"row main-row\">
 
\t<div class=\"8u 12u(mobile)\">
\t\t<section class=\"left-content\">
\t\t    
            <a href=\"";
        // line 10
        echo $this->getAttribute($this->getAttribute(($context["page"] ?? null), "parent", []), "url", []);
        echo "\"><strong><< Back to Tutorials</strong></a><br /><br />
    
\t\t\t";
        // line 12
        if ($this->getAttribute($this->getAttribute($this->getAttribute(($context["config"] ?? null), "plugins", []), "breadcrumbs", []), "enabled", [])) {
Arguments
  1. array:29 [
      "config" => Config {}
      "system" => array:27 [
        "absolute_urls" => false
        "timezone" => ""
        "default_locale" => null
        "param_sep" => ":"
        "wrapped_site" => false
        "reverse_proxy_setup" => false
        "force_ssl" => false
        "force_lowercase_urls" => true
        "custom_base_url" => "http://www.3dvalley.com"
        "username_regex" => "^[a-z0-9_-]{3,16}$"
        "pwd_regex" => "(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}"
        "intl_enabled" => true
        "languages" => array:9 [
          "supported" => []
          "default_lang" => null
          "include_default_lang" => true
          "pages_fallback_only" => false
          "translations" => true
          "translations_fallback" => true
          "session_store_active" => false
          "http_accept_language" => false
          "override_locale" => false
        ]
        "home" => array:2 [
          "alias" => "/home"
          "hide_in_urls" => false
        ]
        "pages" => array:26 [
          "theme" => "minimaxing"
          "order" => array:2 [
            "by" => "default"
            "dir" => "asc"
          ]
          "list" => array:1 [
            "count" => 20
          ]
          "dateformat" => array:3 [
            "default" => null
            "short" => "jS M Y"
            "long" => "F jS \a\t g:ia"
          ]
          "publish_dates" => true
          "process" => array:2 [
            "markdown" => true
            "twig" => false
          ]
          "twig_first" => false
          "never_cache_twig" => false
          "events" => array:2 [
            "page" => true
            "twig" => true
          ]
          "markdown" => array:5 [
            "extra" => true
            "auto_line_breaks" => false
            "auto_url_links" => false
            "escape_markup" => false
            "special_chars" => array:2 [
              ">" => "gt"
              "<" => "lt"
            ]
          ]
          "types" => array:7 [
            0 => "txt"
            1 => "xml"
            2 => "html"
            3 => "htm"
            4 => "json"
            5 => "rss"
            6 => "atom"
          ]
          "append_url_extension" => ""
          "expires" => 604800
          "cache_control" => null
          "last_modified" => false
          "etag" => true
          "vary_accept_encoding" => false
          "redirect_default_route" => false
          "redirect_default_code" => "301"
          "redirect_trailing_slash" => true
          "ignore_files" => array:1 [
            0 => ".DS_Store"
          ]
          "ignore_folders" => array:2 [
            0 => ".git"
            1 => ".idea"
          ]
          "ignore_hidden" => true
          "hide_empty_folders" => false
          "url_taxonomy_filters" => true
          "frontmatter" => array:2 [
            "process_twig" => false
            "ignore_fields" => array:2 [
              0 => "form"
              1 => "forms"
            ]
          ]
        ]
        "cache" => array:13 [
          "enabled" => true
          "check" => array:1 [
            "method" => "file"
          ]
          "driver" => "apcu"
          "prefix" => "g"
          "purge_at" => "0 4 * * *"
          "clear_at" => "0 3 * * *"
          "clear_job_type" => "standard"
          "clear_images_by_default" => true
          "cli_compatibility" => false
          "lifetime" => 604800
          "gzip" => true
          "allow_webserver_gzip" => false
          "redis" => array:1 [
            "socket" => false
          ]
        ]
        "twig" => array:7 [
          "cache" => true
          "debug" => true
          "auto_reload" => true
          "autoescape" => false
          "undefined_functions" => true
          "undefined_filters" => true
          "umask_fix" => false
        ]
        "assets" => array:12 [
          "css_pipeline" => true
          "css_pipeline_include_externals" => true
          "css_pipeline_before_excludes" => true
          "css_minify" => true
          "css_minify_windows" => false
          "css_rewrite" => true
          "js_pipeline" => true
          "js_pipeline_include_externals" => true
          "js_pipeline_before_excludes" => true
          "js_minify" => true
          "enable_asset_timestamp" => false
          "collections" => array:1 [
            "jquery" => "system://assets/jquery/jquery-2.x.min.js"
          ]
        ]
        "errors" => array:2 [
          "display" => 1
          "log" => true
        ]
        "log" => array:2 [
          "handler" => "file"
          "syslog" => array:1 [
            "facility" => "local6"
          ]
        ]
        "debugger" => array:3 [
          "enabled" => false
          "shutdown" => array:1 [
            "close_connection" => true
          ]
          "twig" => true
        ]
        "images" => array:6 [
          "default_image_quality" => 85
          "cache_all" => false
          "cache_perms" => "0755"
          "debug" => false
          "auto_fix_orientation" => false
          "seofriendly" => false
        ]
        "media" => array:5 [
          "enable_media_timestamp" => false
          "unsupported_inline_types" => []
          "allowed_fallback_types" => []
          "auto_metadata_exif" => false
          "upload_limit" => 33554432
        ]
        "session" => array:9 [
          "enabled" => true
          "initialize" => true
          "timeout" => 1800
          "name" => "grav-site"
          "uniqueness" => "path"
          "secure" => false
          "httponly" => true
          "split" => true
          "path" => "/"
        ]
        "gpm" => array:5 [
          "releases" => "stable"
          "proxy_url" => null
          "method" => "auto"
          "verify_peer" => true
          "official_gpm_only" => true
        ]
        "accounts" => array:2 [
          "type" => "data"
          "storage" => "file"
        ]
        "strict_mode" => array:2 [
          "yaml_compat" => true
          "twig_compat" => true
        ]
      ]
      "theme" => array:2 [
        "enabled" => true
        "dropdown" => array:1 [
          "enabled" => false
        ]
      ]
      "site" => array:14 [
        "title" => "3Dvalley"
        "default_lang" => "en"
        "author" => array:2 [
          "name" => "Admin"
          "email" => "webmaster@3dvalley.com"
        ]
        "taxonomies" => array:2 [
          0 => "category"
          1 => "tag"
        ]
        "metadata" => array:1 [
          "description" => "Free 3D models and textures"
        ]
        "summary" => array:4 [
          "enabled" => true
          "format" => "short"
          "size" => 300
          "delimiter" => "==="
        ]
        "redirects" => array:12 [
          "/tutorials/3d-studio-max-hotkeys-and-mouse-essentials" => "/tutorials/threed-studio-max-hotkeys-and-mouse-essentials "
          "/tutorials/3d-studio-max-tutorial-modeling-a-plunger" => "/tutorials/modeling-a-plunger-in-3d-studio-max"
          "/tutorials/modeling-a-brake-rotor" => "/tutorials/modeling-brake-rotor-in-3d-studio-max"
          "/models" => "/3d-models"
          "/free-textures" => "/textures"
          "/textures.shtml" => "/textures"
          "/tutorials/rendering-objects-in-a-solidwire-mix" => "/tutorials/rendering-wip-images-in-3d-studio-max"
          "/tutorials/modeling-a-highly-detailed-basketball-in-3d-studio-max" => "/tutorials/modeling-a-highly-detailed-basketball-in-3ds-max/"
          "/models.shtml" => "/3d-models"
          "/c/tutorials" => "/tutorials"
          "/models/models_household.shtml" => "/3d-models/household"
          "/downloadables/3DStudioMAX-hotkeys.pdf" => "/tutorials/threed-studio-max-hotkeys-and-mouse-essentials"
        ]
        "routes" => null
        "blog" => array:1 [
          "route" => "/blog"
        ]
        "header" => array:2 [
          "title" => "I'm Jonathan Doe."
          "description" => "I'm a Manila based <span>graphic designer</span>, <span>illustrator</span> and <span>webdesigner</span> creating awesome and effective visual identities for companies of all sizes around the globe. Let's <a class="smoothscroll" href="#about">start scrolling</a> and learn more <a class="smoothscroll" href="#about">about me</a>."
        ]
        "copyright" => array:2 [
          0 => array:1 [
            "line" => "Copyright 2014 CeeVee"
          ]
          1 => array:1 [
            "line" => "Design by <a title="Styleshout" href="http://www.styleshout.com/">Styleshout</a>"
          ]
        ]
        "social" => array:7 [
          0 => array:2 [
            "url" => "#"
            "icon" => "facebook"
          ]
          1 => array:2 [
            "url" => "#"
            "icon" => "twitter"
          ]
          2 => array:2 [
            "url" => "#"
            "icon" => "google-plus"
          ]
          3 => array:2 [
            "url" => "#"
            "icon" => "linkedin"
          ]
          4 => array:2 [
            "url" => "#"
            "icon" => "instagram"
          ]
          5 => array:2 [
            "url" => "#"
            "icon" => "dribbble"
          ]
          6 => array:2 [
            "url" => "#"
            "icon" => "skype"
          ]
        ]
        "twitter" => array:7 [
          "id" => "657554810648948736"
          "domId" => "tw-widget1"
          "maxTweets" => 3
          "enableLinks" => "true"
          "showInteraction" => "false"
          "showImages" => "false"
          "showUser" => "false"
        ]
        "acxtest" => "TEST"
      ]
      "uri" => Uri {}
      "assets" => Assets {}
      "taxonomy" => Taxonomy {}
      "browser" => Browser {}
      "base_dir" => "/home/jhiemstraxartec/public_html/test"
      "home_url" => "/"
      "base_url" => ""
      "base_url_absolute" => "http://www.3dvalley.com"
      "base_url_relative" => ""
      "base_url_simple" => ""
      "theme_dir" => "/home/jhiemstraxartec/public_html/test/user/themes/minimaxing"
      "theme_url" => "/user/themes/minimaxing"
      "html_lang" => "en"
      "language_codes" => LanguageCodes {}
      "json" => "</script><script>"
      "myvar" => "</script><script>"
      "form" => null
      "form_max_filesize" => 32
      "form_json_response" => []
      "pages" => Page {}
      "page" => Page {}
      "header" => {}
      "media" => Media {}
      "content" => """
        <p>Like most tasks in 3D Studio Max and similar products, rigging robots is easy, if you know how. Depending on the complexity of the robot, some may find it even easier than rigging a human or animal character. This is because most parts of a robot do not deform during movement, with the exception of cabling and other flexible parts, so you don’t have to ‘skin’ it. One of the primary challenges in building a cool robot, which still looks cool when animated, is creating realistic mechanical joints.</p>\n
        \n
        <p>The first version of our example robotic leg below is not very realistic however, because it would collapse like a bone structure without muscles. In the second version, we will add some robotic ‘muscles’, and the third version will include a hose. Click on the download links below some of the pictures to download the corresponding scene.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/robotrigging_mainthumb_ani.gif" /></p>\n
        <h4>1. A Human Leg</h4>\n
        <p>When rigging a human leg, the mesh deforms when the knee bends, pushing vertexes away from each other on one side and towards each other on the opposite side. This is accomplished by using a Skin modifier that binds vertexes of the mesh to the bones. The colors of the vertexes indicate the weight values which dictate how much influence moving the joint will have on those vertexes. Red vertexes represent the most rigid parts.</p>\n
        <h4>2. Our Example Robot Leg</h4>\n
        <p>Robots are typically made of metal, plastic, or some other hard and rigid material that does not deform. The following picture shows the five objects that form the basis of our example leg.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p2a.jpg" /> <img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p2b.jpg" /></p>\n
        <h4>3. Rigging Our Example Robot Leg</h4>\n
        <p>As usual, I have to make a note that the following is just a way of doing this, which doesn’t necessarily means it is the way (we’ll actually show another way later on). Picture 3a below shows the (unsmoothed) wireframe of the objects that make up this leg. Click the link below it to download the scene, or download the scene including the bones by clicking the link below Picture 3h, or just watch the pictures if you do not feel like actually doing any of this right now.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3a.gif" />\n
        Picture 3a.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_start.zip">Download start scene here</a></p>\n
        <p>The red dots in the picture above represent the pivot of the object. In the scene you can download, I have already moved them to the correct position. The UpperLeg’s pivot is positioned at exactly the same position as the pivot of Cylinder01, and LowerLeg’s pivot is at the same position as the pivot of Cylinder02. When switching to the top view, they are all aligned. It is essential that the bones you add start or end exactly at those pivot points.</p>\n
        <p>A way of making sure the bones are positioned correctly is to snap to pivots. When you use this method it is also essential that all the pivots are aligned when viewing from the top. If in your robot they aren’t and it is too complex or difficult to align them, you can skip the following snap settings and just draw the bones, select them all and move them to the center of the leg (Top view). To use the snap setting, right-click the Snaps Toggle button on the main toolbar and select Pivot and clear others if necessary (see Picture 3b). Now click the Snaps Toggle button again (with the left mouse button) to enable it.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3b.gif" />\n
        Picture 3b.</p>\n
        <p>Click the Bones button in the Systems section on the Create tab of the Command Panel as displayed in Picture 3c below. Choose SplineIKSolver as the IK Solver and enable Assign to Children (you can use another IK Solver or none at all, if you prefer).</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3c.gif" />\n
        Picture 3c.</p>\n
        <p>Now draw the bones, by clicking on the spots 1, 2, and 3 shown in Picture 3d and then right-click anywhere in the viewport to stop. Spots 1, 2 and 3 are the pivot points of Cylinder01, Cylinder02, and Cylinder03.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3d.gif" />\n
        Picture 3d.</p>\n
        <p>When the Spline IK Solver dialog shown in Picture 3e below opens, just click OK.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3e.gif" />\n
        Picture 3e.</p>\n
        <p>Now before you link the bones to the leg, you should make sure that the pivots of the bones are positioned correctly on the pivot of the limbs, the Spline IK Solver we added moved them slightly. To move a bone’s pivot, click the Affect Pivot Only button on the Hierarchy tab of the Command Panel, and disable the Enabled button on the Motion tab of the Command Panel.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3f.gif" />\n
        Picture 3f.</p>\n
        <p>Then select the pivot of the bone and move it to the correct position. Make sure you zoom in and place it exactly in the center of the limbs’ pivots. You also might want to disable the snap to pivot setting first by clicking the Snaps Toggle button again. If for some reason you cannot get them in the right position, there is no need to continue, as the whole setup depends on the pivots’ position.</p>\n
        <p>When you are sure the pivots are positioned correctly, select Cylinder01 and link it to UpperLeg. Select Cylinder02 and link it to the LowerLeg, and select Cylinder03 to LowerLeg as well. To link one object to another click the Select and Link button on the main tool bar, select the object you want to link and drag to the object you want to link to. If you do it correctly, the object you link to, will flash white once.</p>\n
        <p>We will use the same select and link method to link the objects to the bones, instead of using a Skin modifier. Link UpperLeg to the upper bone, and link LowerLeg to the lower bone.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3g.gif" />\n
        Picture 3g.</p>\n
        <p>When you done all of the above, or download the scene including the bones by using the link below, select the IK Chain or any of the point helpers and move it. The knee joint should now operate as shown in Picture 3g, without any of the objects deforming during movement.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3h.gif" />\n
        Picture 3h.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_end.zip">Download scene here.</a></p>\n
        <h4>4. Another Approach</h4>\n
        <p>Before we continue with this leg and add some muscles, we will use another method of rigging this leg. As someone kindly pointed out to me, there is no absolute need to use bones . If you are new to rigging characters or robots in particular, you may want to go for the bones method discussed above, but a robot is often a skeleton by itself, eliminating the need for bones. 3D Studio Max allows any object to act like a bone, and allows you also to assign IK solvers to any hierarchical set of objects. Also in this type of ‘bone’ setup, it is absolutely imperative that the pivots of the objects are in the correct position. We will illustrate this with some pictures later.</p>\n
        <p>To make this work with the previous example (delete the previous bone structure or use the scene you downloaded earlier), and link the objects to each other as followed:</p>\n
        <p>Cylinder03 -&gt; LowerLeg\n
        LowerLeg -&gt; Cylinder02</p>\n
        <p>Cylinder02 -&gt; UpperLeg</p>\n
        <p>UpperLeg -&gt; Cylinder01</p>\n
        <p>Press the Schematic View (Open) button on the main toolbar to check if the hierarchy is now correct as displayed in Picture 4a.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4a.gif" />\n
        Picture 4a.</p>\n
        <p>Now all you need to do is add an IK Solver to this hierarchy to make it act like a robotic leg. You can use the IK Solver you prefer, but in this example, we are going to use the History Independent solver. Select Cylinder03, choose HI Solver from the IK Solvers section in the Animation menu, and select Cylinder01. To prevent you from linking the solver to UpperLeg instead of Cylinder01, use the Select by Name option, which basically means you should press the H key on your keyboard after you choose HI Solver from the menu, and then pick Cylinder01 from the list, instead of clicking on it in the viewport.</p>\n
        <p>If you performed the previous tasks correctly, the results should be like in Picture 4b with the IK Chain selected. If you move the IK Chain the leg should work. To make the task of animating this leg a bit more convenient, you should link the IK Chain to a Point Helper.</p>\n
        <p>A Point helper can be created by clicking the Point button in the Helpers section of the Create tab on the Command Panel, and clicking somewhere in the viewport, as depicted in Picture 4b below. In this case, I suggest you place it somewhere at the bottom of the leg. Use the same Select and Link method as discussed earlier to link the IK Chain to the Point helper, so you can animate the leg by moving the Point helper.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4b.gif" />\n
        Picture 4b.</p>\n
        <p>If your robot has a complex geometry and animating the individual objects slows down your computer too much, you can configure 3D Studio Max to display the objects as bones. When using our example leg from the previous steps, you should select Cylinder01, 02, 03, UpperLeg, and LowerLeg, and select Bone Tools from the Character menu. Enable the Bone On option on the Bone Tools dialog as shown below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4c.gif" />\n
        Picture 4c.</p>\n
        <p>Next, open the Display tab on the Command Panel, scroll down, and in the Link Display section enable the Display Links option and the Link Replaces Object option.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4d.gif" />\n
        Picture 4d.</p>\n
        <p>The results should be as depicted in Picture 4e below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4e.gif" />\n
        Picture 4e.</p>\n
        <p>Alternatively, you can enable only the Display Links option and right above the Link Display section enable the Display as Box option in the Display Properties section. The results should be as depicted in Picture 4f below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4f.gif" />\n
        Picture 4f.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_ik_end.zip">Download the scene here.</a></p>\n
        <h4>5. Muscles</h4>\n
        <p>As I mentioned earlier, the leg used in the example above is not very realistic; it needs some muscles to make it move automatically and at the same time give it some strength. You can make up your own mechanisms, but you can also use one of the three main methods used in modern real world robots:</p>\n
        <p>Electrical motors</p>\n
        <p>For the example leg from above, this would be the easy way out, as you would ‘only’ have to increase the size of the knee joint and modify it into to something like shown below in Photo I, so it becomes viable an electrical motor could fit inside. Additionally, rigging the robot is easy as you can use one of the methods we discussed earlier.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/motoman_sv3x.jpg" />\n
        Photo I. Industrial robot arm powered by electrical motors.</p>\n
        <p>Hydraulic/Pneumatic/Magnetic pistons</p>\n
        <p>Another commonly used method to power robots are pistons. A piston (see Photo II below) is basically consists of a metal bar that goes inside a tube. Pressurized air or oil is pumped into the piston to push out metal bar. This is usually the sound you here when a robot moves. If you want to make them realistic, you should attach a hose to it, which leads to a compressor somewhere in or on the robot. These hydraulic or pneumatic pistons are much more powerful than electrical motors. Smaller pistons may use magnetic force to either pull or push the metal bar. The latter would have electrical wires attached to it, instead of a hose.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/photo_ii.gif" />\n
        Photo II. Crane powered by hydraulic pistons.</p>\n
        <p>Picture 5a and 5b show our second example leg. It includes a piston that is made of two cylinders called Piston_PA and Piston_PB. Two additional cylinders (P_Axis_A and P_Axis_B) form the axis of the piston’s parts.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5a.gif" /> <img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5b.gif" />\n
        Picture 5a. &amp; Picture 5b.</p>\n
        <p>As you can see in Picture 5c below, we already rigged the leg with two bones and an IKSplineSolver. You can download the scene by clicking the link below the picture.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5c.gif" />\n
        Picture 5c.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_pistons_start.zip">Download the scene here.</a></p>\n
        <p>First, we will link the piston’s parts to the leg as followed:</p>\n
        <p>P_Axis_A -&gt; UpperLeg\n
        P_Axis_B -&gt; LowerLeg</p>\n
        <p>Piston_PA -&gt; P_Axis_A</p>\n
        <p>Piston_PB -&gt; P_Axis_B</p>\n
        <p>The hierarchy of the leg should now be exactly like in Picture 5d.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5d.gif" />\n
        Picture 5d.</p>\n
        <p>If we would bend the knee, by using the lower helper (Point3) for example, the two parts of the piston will not stay aligned correctly and will ‘break’ as shown in Picture 5e below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5e.gif" />\n
        Picture 5e.</p>\n
        <p>(If you moved the leg, press use Undo (Ctrl-Z) to move it back to its original position.)</p>\n
        <p>To make sure the metal bar stays inside the tube, we need to use a constraint, in this case the Look At constraint. As in the previous parts of this tutorial, the placement of the pivots of the piston’s parts is essential to make it work. The pivots for P_Axis_A and Piston_PA are exactly on the same position, and the pivots for P_Axis_B and Piston_PB are also exactly on the same position. We have already done this in the downloadable scene by selecting the parts that have the pivots on the same axis, enabling the Affect Pivot Only button (see Picture 3f) and using the Align tool (on both the Front, Top, and Left view).</p>\n
        <p>We will need to add two Look At constraints, one for each part of the piston. Select Piston_PA and select Look At from the Constraints section in the Animation menu, as depicted in Picture 5f below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5f.gif" />\n
        Picture 5f.</p>\n
        <p>Press the H key on your keyboard, select P_Axis_B, and click the Pick button. Piston_PA now changes its orientation. To make sure it point in the original direction, enable the Keep Initial Offset option on the Parameters section on the Motion tab of the Command Panel, as depicted in Picture 5g below. (The parameters section opened automatically when you added the Look At constraint.)</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5g.gif" />\n
        Picture 5g.</p>\n
        <p>Repeat this step for the other part of the piston, in other words: select Piston_PB, select Look At constraint from the Animation menu, pick the P_Axis_A as the target (using the H button to pick it). Also enable the Keep Initial Offset option again. So what we did is make one part of the piston ‘looks at’ the opposite part’s axis. The orientation is depicted with a blue line. If you select the helper Point03 and move it again, you will see that the metal bat slides neatly into the tube, as shown in Picture 5h below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5h.gif" />\n
        Picture 5h.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_pistons_end.zip">Download the scene here.</a></p>\n
        <p>To make it more realistic, we need to attach a pipe or hose to the hydraulic or pneumatic piston, and we need to make sure it moves and/or bends when the leg moves. There are many ways of doing this, but a relatively easy one is to use the extended primitive Hose. The advantage of using the Hose primitive is that you don’t need to rig it; no bones, and no IK. Instead, we are going to add two extra Cylinders, in addition to the Hose, and let the Hose start and end at those cylinders.</p>\n
        <p>In Picture 5i below you can see where we placed the two cylinders. The cylinder on the left is linked to UpperLeg, and the other is linked to Piston_PA. These cylinders represent the entry points of the hose, or the connector of a wire for example. You will probably want to use something more sophisticated than a cylinder, but make sure it is a separate object.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5i.gif" />\n
        Picture 5i.</p>\n
        <p>Next, create the hose by selecting Extended Primitives on the Create tab of the Command Panel, clicking the Hose button, and drawing a hose in any viewport, as shown in Picture 5j below. Don’t worry about its size, location, or shape yet.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5j.gif" />\n
        Picture 5j.</p>\n
        <p>On the Modify tab of the Command Panel, enable the Bound to Object Pivots. Click the Pick Top Object button and click on the left cylinder. Click the Pick Bottom Object button and click on the right cylinder (or use the H key on your keyboard).</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5k.gif" />\n
        Picture 5k.</p>\n
        <p>Depending on the orientation of the cylinders we use to connect the hose and the viewport you created them on, you may have to rotate the pivot of one or both cylinders. So if necessary, select the cylinder, enable the Affect Pivot Only button (picture 3f), and rotate the pivot. While you rotate the pivot, the hose will bend with it so you can easily see when it is at the right angle.</p>\n
        <p>When the hose is correctly aligned to the cylinders, click the hose again, scroll down below on the Modify tab, and disable the Flex Section Enable option as shown below in Picture 5l. Also decrease the Diameter: value in the Hose Shape section to a value that is less than the cylinders.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5l.gif" />\n
        Picture 5l.</p>\n
        <p>As you can see, the hose is too long and needs to hang more tightly against the leg. You can do this by decreasing the Tension values (see Picture 5k). In the final images below, we used 25 for both cylinders. If you move the leg again using on of the helpers, you will notice that the hose will stay in position and even bend when it has to. Click on one of the images to see the final animation.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5m.gif" /> <img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5n.gif" />\n
        Picture 5m.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_piston_hose.zip">Download the final scene here.</a></p>\n
        <p>I hope you enjoyed this tutorial and that it contributed something to your 3D Studio Max modeling skills.</p>
        """
      "grav" => Grav {}
    ]
    
  2. array:1 [
      "content" => array:2 [
        0 => __TwigTemplate_1fd2da7f05a02335033099a06781b7d00f84f79ced9a93dc72d9cf5790c09ebd {}
        1 => "block_content"
      ]
    ]
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
vendor
/
twig
/
twig
/
src
/
Template.php
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        } catch (\Throwable $e) {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        }
 
        return ob_get_clean();
    }
 
    protected function displayWithErrorHandling(array $context, array $blocks = [])
    {
        try {
            $this->doDisplay($context, $blocks);
        } catch (Error $e) {
            if (!$e->getSourceContext()) {
                $e->setSourceContext($this->getSourceContext());
            }
 
            // this is mostly useful for \Twig\Error\LoaderError exceptions
            // see \Twig\Error\LoaderError
            if (-1 === $e->getTemplateLine()) {
                $e->guess();
            }
 
            throw $e;
        } catch (\Exception $e) {
            $e = new RuntimeError(sprintf('An exception has been thrown during the rendering of a template ("%s").', $e->getMessage()), -1, $this->getSourceContext(), $e);
            $e->guess();
 
            throw $e;
        }
    }
 
Arguments
  1. array:29 [
      "config" => Config {}
      "system" => array:27 [
        "absolute_urls" => false
        "timezone" => ""
        "default_locale" => null
        "param_sep" => ":"
        "wrapped_site" => false
        "reverse_proxy_setup" => false
        "force_ssl" => false
        "force_lowercase_urls" => true
        "custom_base_url" => "http://www.3dvalley.com"
        "username_regex" => "^[a-z0-9_-]{3,16}$"
        "pwd_regex" => "(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}"
        "intl_enabled" => true
        "languages" => array:9 [
          "supported" => []
          "default_lang" => null
          "include_default_lang" => true
          "pages_fallback_only" => false
          "translations" => true
          "translations_fallback" => true
          "session_store_active" => false
          "http_accept_language" => false
          "override_locale" => false
        ]
        "home" => array:2 [
          "alias" => "/home"
          "hide_in_urls" => false
        ]
        "pages" => array:26 [
          "theme" => "minimaxing"
          "order" => array:2 [
            "by" => "default"
            "dir" => "asc"
          ]
          "list" => array:1 [
            "count" => 20
          ]
          "dateformat" => array:3 [
            "default" => null
            "short" => "jS M Y"
            "long" => "F jS \a\t g:ia"
          ]
          "publish_dates" => true
          "process" => array:2 [
            "markdown" => true
            "twig" => false
          ]
          "twig_first" => false
          "never_cache_twig" => false
          "events" => array:2 [
            "page" => true
            "twig" => true
          ]
          "markdown" => array:5 [
            "extra" => true
            "auto_line_breaks" => false
            "auto_url_links" => false
            "escape_markup" => false
            "special_chars" => array:2 [
              ">" => "gt"
              "<" => "lt"
            ]
          ]
          "types" => array:7 [
            0 => "txt"
            1 => "xml"
            2 => "html"
            3 => "htm"
            4 => "json"
            5 => "rss"
            6 => "atom"
          ]
          "append_url_extension" => ""
          "expires" => 604800
          "cache_control" => null
          "last_modified" => false
          "etag" => true
          "vary_accept_encoding" => false
          "redirect_default_route" => false
          "redirect_default_code" => "301"
          "redirect_trailing_slash" => true
          "ignore_files" => array:1 [
            0 => ".DS_Store"
          ]
          "ignore_folders" => array:2 [
            0 => ".git"
            1 => ".idea"
          ]
          "ignore_hidden" => true
          "hide_empty_folders" => false
          "url_taxonomy_filters" => true
          "frontmatter" => array:2 [
            "process_twig" => false
            "ignore_fields" => array:2 [
              0 => "form"
              1 => "forms"
            ]
          ]
        ]
        "cache" => array:13 [
          "enabled" => true
          "check" => array:1 [
            "method" => "file"
          ]
          "driver" => "apcu"
          "prefix" => "g"
          "purge_at" => "0 4 * * *"
          "clear_at" => "0 3 * * *"
          "clear_job_type" => "standard"
          "clear_images_by_default" => true
          "cli_compatibility" => false
          "lifetime" => 604800
          "gzip" => true
          "allow_webserver_gzip" => false
          "redis" => array:1 [
            "socket" => false
          ]
        ]
        "twig" => array:7 [
          "cache" => true
          "debug" => true
          "auto_reload" => true
          "autoescape" => false
          "undefined_functions" => true
          "undefined_filters" => true
          "umask_fix" => false
        ]
        "assets" => array:12 [
          "css_pipeline" => true
          "css_pipeline_include_externals" => true
          "css_pipeline_before_excludes" => true
          "css_minify" => true
          "css_minify_windows" => false
          "css_rewrite" => true
          "js_pipeline" => true
          "js_pipeline_include_externals" => true
          "js_pipeline_before_excludes" => true
          "js_minify" => true
          "enable_asset_timestamp" => false
          "collections" => array:1 [
            "jquery" => "system://assets/jquery/jquery-2.x.min.js"
          ]
        ]
        "errors" => array:2 [
          "display" => 1
          "log" => true
        ]
        "log" => array:2 [
          "handler" => "file"
          "syslog" => array:1 [
            "facility" => "local6"
          ]
        ]
        "debugger" => array:3 [
          "enabled" => false
          "shutdown" => array:1 [
            "close_connection" => true
          ]
          "twig" => true
        ]
        "images" => array:6 [
          "default_image_quality" => 85
          "cache_all" => false
          "cache_perms" => "0755"
          "debug" => false
          "auto_fix_orientation" => false
          "seofriendly" => false
        ]
        "media" => array:5 [
          "enable_media_timestamp" => false
          "unsupported_inline_types" => []
          "allowed_fallback_types" => []
          "auto_metadata_exif" => false
          "upload_limit" => 33554432
        ]
        "session" => array:9 [
          "enabled" => true
          "initialize" => true
          "timeout" => 1800
          "name" => "grav-site"
          "uniqueness" => "path"
          "secure" => false
          "httponly" => true
          "split" => true
          "path" => "/"
        ]
        "gpm" => array:5 [
          "releases" => "stable"
          "proxy_url" => null
          "method" => "auto"
          "verify_peer" => true
          "official_gpm_only" => true
        ]
        "accounts" => array:2 [
          "type" => "data"
          "storage" => "file"
        ]
        "strict_mode" => array:2 [
          "yaml_compat" => true
          "twig_compat" => true
        ]
      ]
      "theme" => array:2 [
        "enabled" => true
        "dropdown" => array:1 [
          "enabled" => false
        ]
      ]
      "site" => array:14 [
        "title" => "3Dvalley"
        "default_lang" => "en"
        "author" => array:2 [
          "name" => "Admin"
          "email" => "webmaster@3dvalley.com"
        ]
        "taxonomies" => array:2 [
          0 => "category"
          1 => "tag"
        ]
        "metadata" => array:1 [
          "description" => "Free 3D models and textures"
        ]
        "summary" => array:4 [
          "enabled" => true
          "format" => "short"
          "size" => 300
          "delimiter" => "==="
        ]
        "redirects" => array:12 [
          "/tutorials/3d-studio-max-hotkeys-and-mouse-essentials" => "/tutorials/threed-studio-max-hotkeys-and-mouse-essentials "
          "/tutorials/3d-studio-max-tutorial-modeling-a-plunger" => "/tutorials/modeling-a-plunger-in-3d-studio-max"
          "/tutorials/modeling-a-brake-rotor" => "/tutorials/modeling-brake-rotor-in-3d-studio-max"
          "/models" => "/3d-models"
          "/free-textures" => "/textures"
          "/textures.shtml" => "/textures"
          "/tutorials/rendering-objects-in-a-solidwire-mix" => "/tutorials/rendering-wip-images-in-3d-studio-max"
          "/tutorials/modeling-a-highly-detailed-basketball-in-3d-studio-max" => "/tutorials/modeling-a-highly-detailed-basketball-in-3ds-max/"
          "/models.shtml" => "/3d-models"
          "/c/tutorials" => "/tutorials"
          "/models/models_household.shtml" => "/3d-models/household"
          "/downloadables/3DStudioMAX-hotkeys.pdf" => "/tutorials/threed-studio-max-hotkeys-and-mouse-essentials"
        ]
        "routes" => null
        "blog" => array:1 [
          "route" => "/blog"
        ]
        "header" => array:2 [
          "title" => "I'm Jonathan Doe."
          "description" => "I'm a Manila based <span>graphic designer</span>, <span>illustrator</span> and <span>webdesigner</span> creating awesome and effective visual identities for companies of all sizes around the globe. Let's <a class="smoothscroll" href="#about">start scrolling</a> and learn more <a class="smoothscroll" href="#about">about me</a>."
        ]
        "copyright" => array:2 [
          0 => array:1 [
            "line" => "Copyright 2014 CeeVee"
          ]
          1 => array:1 [
            "line" => "Design by <a title="Styleshout" href="http://www.styleshout.com/">Styleshout</a>"
          ]
        ]
        "social" => array:7 [
          0 => array:2 [
            "url" => "#"
            "icon" => "facebook"
          ]
          1 => array:2 [
            "url" => "#"
            "icon" => "twitter"
          ]
          2 => array:2 [
            "url" => "#"
            "icon" => "google-plus"
          ]
          3 => array:2 [
            "url" => "#"
            "icon" => "linkedin"
          ]
          4 => array:2 [
            "url" => "#"
            "icon" => "instagram"
          ]
          5 => array:2 [
            "url" => "#"
            "icon" => "dribbble"
          ]
          6 => array:2 [
            "url" => "#"
            "icon" => "skype"
          ]
        ]
        "twitter" => array:7 [
          "id" => "657554810648948736"
          "domId" => "tw-widget1"
          "maxTweets" => 3
          "enableLinks" => "true"
          "showInteraction" => "false"
          "showImages" => "false"
          "showUser" => "false"
        ]
        "acxtest" => "TEST"
      ]
      "uri" => Uri {}
      "assets" => Assets {}
      "taxonomy" => Taxonomy {}
      "browser" => Browser {}
      "base_dir" => "/home/jhiemstraxartec/public_html/test"
      "home_url" => "/"
      "base_url" => ""
      "base_url_absolute" => "http://www.3dvalley.com"
      "base_url_relative" => ""
      "base_url_simple" => ""
      "theme_dir" => "/home/jhiemstraxartec/public_html/test/user/themes/minimaxing"
      "theme_url" => "/user/themes/minimaxing"
      "html_lang" => "en"
      "language_codes" => LanguageCodes {}
      "json" => "</script><script>"
      "myvar" => "</script><script>"
      "form" => null
      "form_max_filesize" => 32
      "form_json_response" => []
      "pages" => Page {}
      "page" => Page {}
      "header" => {}
      "media" => Media {}
      "content" => """
        <p>Like most tasks in 3D Studio Max and similar products, rigging robots is easy, if you know how. Depending on the complexity of the robot, some may find it even easier than rigging a human or animal character. This is because most parts of a robot do not deform during movement, with the exception of cabling and other flexible parts, so you don’t have to ‘skin’ it. One of the primary challenges in building a cool robot, which still looks cool when animated, is creating realistic mechanical joints.</p>\n
        \n
        <p>The first version of our example robotic leg below is not very realistic however, because it would collapse like a bone structure without muscles. In the second version, we will add some robotic ‘muscles’, and the third version will include a hose. Click on the download links below some of the pictures to download the corresponding scene.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/robotrigging_mainthumb_ani.gif" /></p>\n
        <h4>1. A Human Leg</h4>\n
        <p>When rigging a human leg, the mesh deforms when the knee bends, pushing vertexes away from each other on one side and towards each other on the opposite side. This is accomplished by using a Skin modifier that binds vertexes of the mesh to the bones. The colors of the vertexes indicate the weight values which dictate how much influence moving the joint will have on those vertexes. Red vertexes represent the most rigid parts.</p>\n
        <h4>2. Our Example Robot Leg</h4>\n
        <p>Robots are typically made of metal, plastic, or some other hard and rigid material that does not deform. The following picture shows the five objects that form the basis of our example leg.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p2a.jpg" /> <img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p2b.jpg" /></p>\n
        <h4>3. Rigging Our Example Robot Leg</h4>\n
        <p>As usual, I have to make a note that the following is just a way of doing this, which doesn’t necessarily means it is the way (we’ll actually show another way later on). Picture 3a below shows the (unsmoothed) wireframe of the objects that make up this leg. Click the link below it to download the scene, or download the scene including the bones by clicking the link below Picture 3h, or just watch the pictures if you do not feel like actually doing any of this right now.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3a.gif" />\n
        Picture 3a.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_start.zip">Download start scene here</a></p>\n
        <p>The red dots in the picture above represent the pivot of the object. In the scene you can download, I have already moved them to the correct position. The UpperLeg’s pivot is positioned at exactly the same position as the pivot of Cylinder01, and LowerLeg’s pivot is at the same position as the pivot of Cylinder02. When switching to the top view, they are all aligned. It is essential that the bones you add start or end exactly at those pivot points.</p>\n
        <p>A way of making sure the bones are positioned correctly is to snap to pivots. When you use this method it is also essential that all the pivots are aligned when viewing from the top. If in your robot they aren’t and it is too complex or difficult to align them, you can skip the following snap settings and just draw the bones, select them all and move them to the center of the leg (Top view). To use the snap setting, right-click the Snaps Toggle button on the main toolbar and select Pivot and clear others if necessary (see Picture 3b). Now click the Snaps Toggle button again (with the left mouse button) to enable it.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3b.gif" />\n
        Picture 3b.</p>\n
        <p>Click the Bones button in the Systems section on the Create tab of the Command Panel as displayed in Picture 3c below. Choose SplineIKSolver as the IK Solver and enable Assign to Children (you can use another IK Solver or none at all, if you prefer).</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3c.gif" />\n
        Picture 3c.</p>\n
        <p>Now draw the bones, by clicking on the spots 1, 2, and 3 shown in Picture 3d and then right-click anywhere in the viewport to stop. Spots 1, 2 and 3 are the pivot points of Cylinder01, Cylinder02, and Cylinder03.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3d.gif" />\n
        Picture 3d.</p>\n
        <p>When the Spline IK Solver dialog shown in Picture 3e below opens, just click OK.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3e.gif" />\n
        Picture 3e.</p>\n
        <p>Now before you link the bones to the leg, you should make sure that the pivots of the bones are positioned correctly on the pivot of the limbs, the Spline IK Solver we added moved them slightly. To move a bone’s pivot, click the Affect Pivot Only button on the Hierarchy tab of the Command Panel, and disable the Enabled button on the Motion tab of the Command Panel.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3f.gif" />\n
        Picture 3f.</p>\n
        <p>Then select the pivot of the bone and move it to the correct position. Make sure you zoom in and place it exactly in the center of the limbs’ pivots. You also might want to disable the snap to pivot setting first by clicking the Snaps Toggle button again. If for some reason you cannot get them in the right position, there is no need to continue, as the whole setup depends on the pivots’ position.</p>\n
        <p>When you are sure the pivots are positioned correctly, select Cylinder01 and link it to UpperLeg. Select Cylinder02 and link it to the LowerLeg, and select Cylinder03 to LowerLeg as well. To link one object to another click the Select and Link button on the main tool bar, select the object you want to link and drag to the object you want to link to. If you do it correctly, the object you link to, will flash white once.</p>\n
        <p>We will use the same select and link method to link the objects to the bones, instead of using a Skin modifier. Link UpperLeg to the upper bone, and link LowerLeg to the lower bone.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3g.gif" />\n
        Picture 3g.</p>\n
        <p>When you done all of the above, or download the scene including the bones by using the link below, select the IK Chain or any of the point helpers and move it. The knee joint should now operate as shown in Picture 3g, without any of the objects deforming during movement.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3h.gif" />\n
        Picture 3h.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_end.zip">Download scene here.</a></p>\n
        <h4>4. Another Approach</h4>\n
        <p>Before we continue with this leg and add some muscles, we will use another method of rigging this leg. As someone kindly pointed out to me, there is no absolute need to use bones . If you are new to rigging characters or robots in particular, you may want to go for the bones method discussed above, but a robot is often a skeleton by itself, eliminating the need for bones. 3D Studio Max allows any object to act like a bone, and allows you also to assign IK solvers to any hierarchical set of objects. Also in this type of ‘bone’ setup, it is absolutely imperative that the pivots of the objects are in the correct position. We will illustrate this with some pictures later.</p>\n
        <p>To make this work with the previous example (delete the previous bone structure or use the scene you downloaded earlier), and link the objects to each other as followed:</p>\n
        <p>Cylinder03 -&gt; LowerLeg\n
        LowerLeg -&gt; Cylinder02</p>\n
        <p>Cylinder02 -&gt; UpperLeg</p>\n
        <p>UpperLeg -&gt; Cylinder01</p>\n
        <p>Press the Schematic View (Open) button on the main toolbar to check if the hierarchy is now correct as displayed in Picture 4a.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4a.gif" />\n
        Picture 4a.</p>\n
        <p>Now all you need to do is add an IK Solver to this hierarchy to make it act like a robotic leg. You can use the IK Solver you prefer, but in this example, we are going to use the History Independent solver. Select Cylinder03, choose HI Solver from the IK Solvers section in the Animation menu, and select Cylinder01. To prevent you from linking the solver to UpperLeg instead of Cylinder01, use the Select by Name option, which basically means you should press the H key on your keyboard after you choose HI Solver from the menu, and then pick Cylinder01 from the list, instead of clicking on it in the viewport.</p>\n
        <p>If you performed the previous tasks correctly, the results should be like in Picture 4b with the IK Chain selected. If you move the IK Chain the leg should work. To make the task of animating this leg a bit more convenient, you should link the IK Chain to a Point Helper.</p>\n
        <p>A Point helper can be created by clicking the Point button in the Helpers section of the Create tab on the Command Panel, and clicking somewhere in the viewport, as depicted in Picture 4b below. In this case, I suggest you place it somewhere at the bottom of the leg. Use the same Select and Link method as discussed earlier to link the IK Chain to the Point helper, so you can animate the leg by moving the Point helper.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4b.gif" />\n
        Picture 4b.</p>\n
        <p>If your robot has a complex geometry and animating the individual objects slows down your computer too much, you can configure 3D Studio Max to display the objects as bones. When using our example leg from the previous steps, you should select Cylinder01, 02, 03, UpperLeg, and LowerLeg, and select Bone Tools from the Character menu. Enable the Bone On option on the Bone Tools dialog as shown below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4c.gif" />\n
        Picture 4c.</p>\n
        <p>Next, open the Display tab on the Command Panel, scroll down, and in the Link Display section enable the Display Links option and the Link Replaces Object option.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4d.gif" />\n
        Picture 4d.</p>\n
        <p>The results should be as depicted in Picture 4e below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4e.gif" />\n
        Picture 4e.</p>\n
        <p>Alternatively, you can enable only the Display Links option and right above the Link Display section enable the Display as Box option in the Display Properties section. The results should be as depicted in Picture 4f below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4f.gif" />\n
        Picture 4f.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_ik_end.zip">Download the scene here.</a></p>\n
        <h4>5. Muscles</h4>\n
        <p>As I mentioned earlier, the leg used in the example above is not very realistic; it needs some muscles to make it move automatically and at the same time give it some strength. You can make up your own mechanisms, but you can also use one of the three main methods used in modern real world robots:</p>\n
        <p>Electrical motors</p>\n
        <p>For the example leg from above, this would be the easy way out, as you would ‘only’ have to increase the size of the knee joint and modify it into to something like shown below in Photo I, so it becomes viable an electrical motor could fit inside. Additionally, rigging the robot is easy as you can use one of the methods we discussed earlier.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/motoman_sv3x.jpg" />\n
        Photo I. Industrial robot arm powered by electrical motors.</p>\n
        <p>Hydraulic/Pneumatic/Magnetic pistons</p>\n
        <p>Another commonly used method to power robots are pistons. A piston (see Photo II below) is basically consists of a metal bar that goes inside a tube. Pressurized air or oil is pumped into the piston to push out metal bar. This is usually the sound you here when a robot moves. If you want to make them realistic, you should attach a hose to it, which leads to a compressor somewhere in or on the robot. These hydraulic or pneumatic pistons are much more powerful than electrical motors. Smaller pistons may use magnetic force to either pull or push the metal bar. The latter would have electrical wires attached to it, instead of a hose.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/photo_ii.gif" />\n
        Photo II. Crane powered by hydraulic pistons.</p>\n
        <p>Picture 5a and 5b show our second example leg. It includes a piston that is made of two cylinders called Piston_PA and Piston_PB. Two additional cylinders (P_Axis_A and P_Axis_B) form the axis of the piston’s parts.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5a.gif" /> <img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5b.gif" />\n
        Picture 5a. &amp; Picture 5b.</p>\n
        <p>As you can see in Picture 5c below, we already rigged the leg with two bones and an IKSplineSolver. You can download the scene by clicking the link below the picture.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5c.gif" />\n
        Picture 5c.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_pistons_start.zip">Download the scene here.</a></p>\n
        <p>First, we will link the piston’s parts to the leg as followed:</p>\n
        <p>P_Axis_A -&gt; UpperLeg\n
        P_Axis_B -&gt; LowerLeg</p>\n
        <p>Piston_PA -&gt; P_Axis_A</p>\n
        <p>Piston_PB -&gt; P_Axis_B</p>\n
        <p>The hierarchy of the leg should now be exactly like in Picture 5d.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5d.gif" />\n
        Picture 5d.</p>\n
        <p>If we would bend the knee, by using the lower helper (Point3) for example, the two parts of the piston will not stay aligned correctly and will ‘break’ as shown in Picture 5e below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5e.gif" />\n
        Picture 5e.</p>\n
        <p>(If you moved the leg, press use Undo (Ctrl-Z) to move it back to its original position.)</p>\n
        <p>To make sure the metal bar stays inside the tube, we need to use a constraint, in this case the Look At constraint. As in the previous parts of this tutorial, the placement of the pivots of the piston’s parts is essential to make it work. The pivots for P_Axis_A and Piston_PA are exactly on the same position, and the pivots for P_Axis_B and Piston_PB are also exactly on the same position. We have already done this in the downloadable scene by selecting the parts that have the pivots on the same axis, enabling the Affect Pivot Only button (see Picture 3f) and using the Align tool (on both the Front, Top, and Left view).</p>\n
        <p>We will need to add two Look At constraints, one for each part of the piston. Select Piston_PA and select Look At from the Constraints section in the Animation menu, as depicted in Picture 5f below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5f.gif" />\n
        Picture 5f.</p>\n
        <p>Press the H key on your keyboard, select P_Axis_B, and click the Pick button. Piston_PA now changes its orientation. To make sure it point in the original direction, enable the Keep Initial Offset option on the Parameters section on the Motion tab of the Command Panel, as depicted in Picture 5g below. (The parameters section opened automatically when you added the Look At constraint.)</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5g.gif" />\n
        Picture 5g.</p>\n
        <p>Repeat this step for the other part of the piston, in other words: select Piston_PB, select Look At constraint from the Animation menu, pick the P_Axis_A as the target (using the H button to pick it). Also enable the Keep Initial Offset option again. So what we did is make one part of the piston ‘looks at’ the opposite part’s axis. The orientation is depicted with a blue line. If you select the helper Point03 and move it again, you will see that the metal bat slides neatly into the tube, as shown in Picture 5h below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5h.gif" />\n
        Picture 5h.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_pistons_end.zip">Download the scene here.</a></p>\n
        <p>To make it more realistic, we need to attach a pipe or hose to the hydraulic or pneumatic piston, and we need to make sure it moves and/or bends when the leg moves. There are many ways of doing this, but a relatively easy one is to use the extended primitive Hose. The advantage of using the Hose primitive is that you don’t need to rig it; no bones, and no IK. Instead, we are going to add two extra Cylinders, in addition to the Hose, and let the Hose start and end at those cylinders.</p>\n
        <p>In Picture 5i below you can see where we placed the two cylinders. The cylinder on the left is linked to UpperLeg, and the other is linked to Piston_PA. These cylinders represent the entry points of the hose, or the connector of a wire for example. You will probably want to use something more sophisticated than a cylinder, but make sure it is a separate object.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5i.gif" />\n
        Picture 5i.</p>\n
        <p>Next, create the hose by selecting Extended Primitives on the Create tab of the Command Panel, clicking the Hose button, and drawing a hose in any viewport, as shown in Picture 5j below. Don’t worry about its size, location, or shape yet.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5j.gif" />\n
        Picture 5j.</p>\n
        <p>On the Modify tab of the Command Panel, enable the Bound to Object Pivots. Click the Pick Top Object button and click on the left cylinder. Click the Pick Bottom Object button and click on the right cylinder (or use the H key on your keyboard).</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5k.gif" />\n
        Picture 5k.</p>\n
        <p>Depending on the orientation of the cylinders we use to connect the hose and the viewport you created them on, you may have to rotate the pivot of one or both cylinders. So if necessary, select the cylinder, enable the Affect Pivot Only button (picture 3f), and rotate the pivot. While you rotate the pivot, the hose will bend with it so you can easily see when it is at the right angle.</p>\n
        <p>When the hose is correctly aligned to the cylinders, click the hose again, scroll down below on the Modify tab, and disable the Flex Section Enable option as shown below in Picture 5l. Also decrease the Diameter: value in the Hose Shape section to a value that is less than the cylinders.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5l.gif" />\n
        Picture 5l.</p>\n
        <p>As you can see, the hose is too long and needs to hang more tightly against the leg. You can do this by decreasing the Tension values (see Picture 5k). In the final images below, we used 25 for both cylinders. If you move the leg again using on of the helpers, you will notice that the hose will stay in position and even bend when it has to. Click on one of the images to see the final animation.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5m.gif" /> <img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5n.gif" />\n
        Picture 5m.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_piston_hose.zip">Download the final scene here.</a></p>\n
        <p>I hope you enjoyed this tutorial and that it contributed something to your 3D Studio Max modeling skills.</p>
        """
      "grav" => Grav {}
    ]
    
  2. array:1 [
      "content" => array:2 [
        0 => __TwigTemplate_1fd2da7f05a02335033099a06781b7d00f84f79ced9a93dc72d9cf5790c09ebd {}
        1 => "block_content"
      ]
    ]
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
vendor
/
twig
/
twig
/
src
/
Template.php
    {
        return $this;
    }
 
    /**
     * Returns all blocks.
     *
     * This method is for internal use only and should never be called
     * directly.
     *
     * @return array An array of blocks
     */
    public function getBlocks()
    {
        return $this->blocks;
    }
 
    public function display(array $context, array $blocks = [])
    {
        $this->displayWithErrorHandling($this->env->mergeGlobals($context), array_merge($this->blocks, $blocks));
    }
 
    public function render(array $context)
    {
        $level = ob_get_level();
        ob_start(function () { return ''; });
        try {
            $this->display($context);
        } catch (\Exception $e) {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        } catch (\Throwable $e) {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
Arguments
  1. array:29 [
      "config" => Config {}
      "system" => array:27 [
        "absolute_urls" => false
        "timezone" => ""
        "default_locale" => null
        "param_sep" => ":"
        "wrapped_site" => false
        "reverse_proxy_setup" => false
        "force_ssl" => false
        "force_lowercase_urls" => true
        "custom_base_url" => "http://www.3dvalley.com"
        "username_regex" => "^[a-z0-9_-]{3,16}$"
        "pwd_regex" => "(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}"
        "intl_enabled" => true
        "languages" => array:9 [
          "supported" => []
          "default_lang" => null
          "include_default_lang" => true
          "pages_fallback_only" => false
          "translations" => true
          "translations_fallback" => true
          "session_store_active" => false
          "http_accept_language" => false
          "override_locale" => false
        ]
        "home" => array:2 [
          "alias" => "/home"
          "hide_in_urls" => false
        ]
        "pages" => array:26 [
          "theme" => "minimaxing"
          "order" => array:2 [
            "by" => "default"
            "dir" => "asc"
          ]
          "list" => array:1 [
            "count" => 20
          ]
          "dateformat" => array:3 [
            "default" => null
            "short" => "jS M Y"
            "long" => "F jS \a\t g:ia"
          ]
          "publish_dates" => true
          "process" => array:2 [
            "markdown" => true
            "twig" => false
          ]
          "twig_first" => false
          "never_cache_twig" => false
          "events" => array:2 [
            "page" => true
            "twig" => true
          ]
          "markdown" => array:5 [
            "extra" => true
            "auto_line_breaks" => false
            "auto_url_links" => false
            "escape_markup" => false
            "special_chars" => array:2 [
              ">" => "gt"
              "<" => "lt"
            ]
          ]
          "types" => array:7 [
            0 => "txt"
            1 => "xml"
            2 => "html"
            3 => "htm"
            4 => "json"
            5 => "rss"
            6 => "atom"
          ]
          "append_url_extension" => ""
          "expires" => 604800
          "cache_control" => null
          "last_modified" => false
          "etag" => true
          "vary_accept_encoding" => false
          "redirect_default_route" => false
          "redirect_default_code" => "301"
          "redirect_trailing_slash" => true
          "ignore_files" => array:1 [
            0 => ".DS_Store"
          ]
          "ignore_folders" => array:2 [
            0 => ".git"
            1 => ".idea"
          ]
          "ignore_hidden" => true
          "hide_empty_folders" => false
          "url_taxonomy_filters" => true
          "frontmatter" => array:2 [
            "process_twig" => false
            "ignore_fields" => array:2 [
              0 => "form"
              1 => "forms"
            ]
          ]
        ]
        "cache" => array:13 [
          "enabled" => true
          "check" => array:1 [
            "method" => "file"
          ]
          "driver" => "apcu"
          "prefix" => "g"
          "purge_at" => "0 4 * * *"
          "clear_at" => "0 3 * * *"
          "clear_job_type" => "standard"
          "clear_images_by_default" => true
          "cli_compatibility" => false
          "lifetime" => 604800
          "gzip" => true
          "allow_webserver_gzip" => false
          "redis" => array:1 [
            "socket" => false
          ]
        ]
        "twig" => array:7 [
          "cache" => true
          "debug" => true
          "auto_reload" => true
          "autoescape" => false
          "undefined_functions" => true
          "undefined_filters" => true
          "umask_fix" => false
        ]
        "assets" => array:12 [
          "css_pipeline" => true
          "css_pipeline_include_externals" => true
          "css_pipeline_before_excludes" => true
          "css_minify" => true
          "css_minify_windows" => false
          "css_rewrite" => true
          "js_pipeline" => true
          "js_pipeline_include_externals" => true
          "js_pipeline_before_excludes" => true
          "js_minify" => true
          "enable_asset_timestamp" => false
          "collections" => array:1 [
            "jquery" => "system://assets/jquery/jquery-2.x.min.js"
          ]
        ]
        "errors" => array:2 [
          "display" => 1
          "log" => true
        ]
        "log" => array:2 [
          "handler" => "file"
          "syslog" => array:1 [
            "facility" => "local6"
          ]
        ]
        "debugger" => array:3 [
          "enabled" => false
          "shutdown" => array:1 [
            "close_connection" => true
          ]
          "twig" => true
        ]
        "images" => array:6 [
          "default_image_quality" => 85
          "cache_all" => false
          "cache_perms" => "0755"
          "debug" => false
          "auto_fix_orientation" => false
          "seofriendly" => false
        ]
        "media" => array:5 [
          "enable_media_timestamp" => false
          "unsupported_inline_types" => []
          "allowed_fallback_types" => []
          "auto_metadata_exif" => false
          "upload_limit" => 33554432
        ]
        "session" => array:9 [
          "enabled" => true
          "initialize" => true
          "timeout" => 1800
          "name" => "grav-site"
          "uniqueness" => "path"
          "secure" => false
          "httponly" => true
          "split" => true
          "path" => "/"
        ]
        "gpm" => array:5 [
          "releases" => "stable"
          "proxy_url" => null
          "method" => "auto"
          "verify_peer" => true
          "official_gpm_only" => true
        ]
        "accounts" => array:2 [
          "type" => "data"
          "storage" => "file"
        ]
        "strict_mode" => array:2 [
          "yaml_compat" => true
          "twig_compat" => true
        ]
      ]
      "theme" => array:2 [
        "enabled" => true
        "dropdown" => array:1 [
          "enabled" => false
        ]
      ]
      "site" => array:14 [
        "title" => "3Dvalley"
        "default_lang" => "en"
        "author" => array:2 [
          "name" => "Admin"
          "email" => "webmaster@3dvalley.com"
        ]
        "taxonomies" => array:2 [
          0 => "category"
          1 => "tag"
        ]
        "metadata" => array:1 [
          "description" => "Free 3D models and textures"
        ]
        "summary" => array:4 [
          "enabled" => true
          "format" => "short"
          "size" => 300
          "delimiter" => "==="
        ]
        "redirects" => array:12 [
          "/tutorials/3d-studio-max-hotkeys-and-mouse-essentials" => "/tutorials/threed-studio-max-hotkeys-and-mouse-essentials "
          "/tutorials/3d-studio-max-tutorial-modeling-a-plunger" => "/tutorials/modeling-a-plunger-in-3d-studio-max"
          "/tutorials/modeling-a-brake-rotor" => "/tutorials/modeling-brake-rotor-in-3d-studio-max"
          "/models" => "/3d-models"
          "/free-textures" => "/textures"
          "/textures.shtml" => "/textures"
          "/tutorials/rendering-objects-in-a-solidwire-mix" => "/tutorials/rendering-wip-images-in-3d-studio-max"
          "/tutorials/modeling-a-highly-detailed-basketball-in-3d-studio-max" => "/tutorials/modeling-a-highly-detailed-basketball-in-3ds-max/"
          "/models.shtml" => "/3d-models"
          "/c/tutorials" => "/tutorials"
          "/models/models_household.shtml" => "/3d-models/household"
          "/downloadables/3DStudioMAX-hotkeys.pdf" => "/tutorials/threed-studio-max-hotkeys-and-mouse-essentials"
        ]
        "routes" => null
        "blog" => array:1 [
          "route" => "/blog"
        ]
        "header" => array:2 [
          "title" => "I'm Jonathan Doe."
          "description" => "I'm a Manila based <span>graphic designer</span>, <span>illustrator</span> and <span>webdesigner</span> creating awesome and effective visual identities for companies of all sizes around the globe. Let's <a class="smoothscroll" href="#about">start scrolling</a> and learn more <a class="smoothscroll" href="#about">about me</a>."
        ]
        "copyright" => array:2 [
          0 => array:1 [
            "line" => "Copyright 2014 CeeVee"
          ]
          1 => array:1 [
            "line" => "Design by <a title="Styleshout" href="http://www.styleshout.com/">Styleshout</a>"
          ]
        ]
        "social" => array:7 [
          0 => array:2 [
            "url" => "#"
            "icon" => "facebook"
          ]
          1 => array:2 [
            "url" => "#"
            "icon" => "twitter"
          ]
          2 => array:2 [
            "url" => "#"
            "icon" => "google-plus"
          ]
          3 => array:2 [
            "url" => "#"
            "icon" => "linkedin"
          ]
          4 => array:2 [
            "url" => "#"
            "icon" => "instagram"
          ]
          5 => array:2 [
            "url" => "#"
            "icon" => "dribbble"
          ]
          6 => array:2 [
            "url" => "#"
            "icon" => "skype"
          ]
        ]
        "twitter" => array:7 [
          "id" => "657554810648948736"
          "domId" => "tw-widget1"
          "maxTweets" => 3
          "enableLinks" => "true"
          "showInteraction" => "false"
          "showImages" => "false"
          "showUser" => "false"
        ]
        "acxtest" => "TEST"
      ]
      "uri" => Uri {}
      "assets" => Assets {}
      "taxonomy" => Taxonomy {}
      "browser" => Browser {}
      "base_dir" => "/home/jhiemstraxartec/public_html/test"
      "home_url" => "/"
      "base_url" => ""
      "base_url_absolute" => "http://www.3dvalley.com"
      "base_url_relative" => ""
      "base_url_simple" => ""
      "theme_dir" => "/home/jhiemstraxartec/public_html/test/user/themes/minimaxing"
      "theme_url" => "/user/themes/minimaxing"
      "html_lang" => "en"
      "language_codes" => LanguageCodes {}
      "json" => "</script><script>"
      "myvar" => "</script><script>"
      "form" => null
      "form_max_filesize" => 32
      "form_json_response" => []
      "pages" => Page {}
      "page" => Page {}
      "header" => {}
      "media" => Media {}
      "content" => """
        <p>Like most tasks in 3D Studio Max and similar products, rigging robots is easy, if you know how. Depending on the complexity of the robot, some may find it even easier than rigging a human or animal character. This is because most parts of a robot do not deform during movement, with the exception of cabling and other flexible parts, so you don’t have to ‘skin’ it. One of the primary challenges in building a cool robot, which still looks cool when animated, is creating realistic mechanical joints.</p>\n
        \n
        <p>The first version of our example robotic leg below is not very realistic however, because it would collapse like a bone structure without muscles. In the second version, we will add some robotic ‘muscles’, and the third version will include a hose. Click on the download links below some of the pictures to download the corresponding scene.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/robotrigging_mainthumb_ani.gif" /></p>\n
        <h4>1. A Human Leg</h4>\n
        <p>When rigging a human leg, the mesh deforms when the knee bends, pushing vertexes away from each other on one side and towards each other on the opposite side. This is accomplished by using a Skin modifier that binds vertexes of the mesh to the bones. The colors of the vertexes indicate the weight values which dictate how much influence moving the joint will have on those vertexes. Red vertexes represent the most rigid parts.</p>\n
        <h4>2. Our Example Robot Leg</h4>\n
        <p>Robots are typically made of metal, plastic, or some other hard and rigid material that does not deform. The following picture shows the five objects that form the basis of our example leg.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p2a.jpg" /> <img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p2b.jpg" /></p>\n
        <h4>3. Rigging Our Example Robot Leg</h4>\n
        <p>As usual, I have to make a note that the following is just a way of doing this, which doesn’t necessarily means it is the way (we’ll actually show another way later on). Picture 3a below shows the (unsmoothed) wireframe of the objects that make up this leg. Click the link below it to download the scene, or download the scene including the bones by clicking the link below Picture 3h, or just watch the pictures if you do not feel like actually doing any of this right now.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3a.gif" />\n
        Picture 3a.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_start.zip">Download start scene here</a></p>\n
        <p>The red dots in the picture above represent the pivot of the object. In the scene you can download, I have already moved them to the correct position. The UpperLeg’s pivot is positioned at exactly the same position as the pivot of Cylinder01, and LowerLeg’s pivot is at the same position as the pivot of Cylinder02. When switching to the top view, they are all aligned. It is essential that the bones you add start or end exactly at those pivot points.</p>\n
        <p>A way of making sure the bones are positioned correctly is to snap to pivots. When you use this method it is also essential that all the pivots are aligned when viewing from the top. If in your robot they aren’t and it is too complex or difficult to align them, you can skip the following snap settings and just draw the bones, select them all and move them to the center of the leg (Top view). To use the snap setting, right-click the Snaps Toggle button on the main toolbar and select Pivot and clear others if necessary (see Picture 3b). Now click the Snaps Toggle button again (with the left mouse button) to enable it.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3b.gif" />\n
        Picture 3b.</p>\n
        <p>Click the Bones button in the Systems section on the Create tab of the Command Panel as displayed in Picture 3c below. Choose SplineIKSolver as the IK Solver and enable Assign to Children (you can use another IK Solver or none at all, if you prefer).</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3c.gif" />\n
        Picture 3c.</p>\n
        <p>Now draw the bones, by clicking on the spots 1, 2, and 3 shown in Picture 3d and then right-click anywhere in the viewport to stop. Spots 1, 2 and 3 are the pivot points of Cylinder01, Cylinder02, and Cylinder03.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3d.gif" />\n
        Picture 3d.</p>\n
        <p>When the Spline IK Solver dialog shown in Picture 3e below opens, just click OK.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3e.gif" />\n
        Picture 3e.</p>\n
        <p>Now before you link the bones to the leg, you should make sure that the pivots of the bones are positioned correctly on the pivot of the limbs, the Spline IK Solver we added moved them slightly. To move a bone’s pivot, click the Affect Pivot Only button on the Hierarchy tab of the Command Panel, and disable the Enabled button on the Motion tab of the Command Panel.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3f.gif" />\n
        Picture 3f.</p>\n
        <p>Then select the pivot of the bone and move it to the correct position. Make sure you zoom in and place it exactly in the center of the limbs’ pivots. You also might want to disable the snap to pivot setting first by clicking the Snaps Toggle button again. If for some reason you cannot get them in the right position, there is no need to continue, as the whole setup depends on the pivots’ position.</p>\n
        <p>When you are sure the pivots are positioned correctly, select Cylinder01 and link it to UpperLeg. Select Cylinder02 and link it to the LowerLeg, and select Cylinder03 to LowerLeg as well. To link one object to another click the Select and Link button on the main tool bar, select the object you want to link and drag to the object you want to link to. If you do it correctly, the object you link to, will flash white once.</p>\n
        <p>We will use the same select and link method to link the objects to the bones, instead of using a Skin modifier. Link UpperLeg to the upper bone, and link LowerLeg to the lower bone.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3g.gif" />\n
        Picture 3g.</p>\n
        <p>When you done all of the above, or download the scene including the bones by using the link below, select the IK Chain or any of the point helpers and move it. The knee joint should now operate as shown in Picture 3g, without any of the objects deforming during movement.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3h.gif" />\n
        Picture 3h.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_end.zip">Download scene here.</a></p>\n
        <h4>4. Another Approach</h4>\n
        <p>Before we continue with this leg and add some muscles, we will use another method of rigging this leg. As someone kindly pointed out to me, there is no absolute need to use bones . If you are new to rigging characters or robots in particular, you may want to go for the bones method discussed above, but a robot is often a skeleton by itself, eliminating the need for bones. 3D Studio Max allows any object to act like a bone, and allows you also to assign IK solvers to any hierarchical set of objects. Also in this type of ‘bone’ setup, it is absolutely imperative that the pivots of the objects are in the correct position. We will illustrate this with some pictures later.</p>\n
        <p>To make this work with the previous example (delete the previous bone structure or use the scene you downloaded earlier), and link the objects to each other as followed:</p>\n
        <p>Cylinder03 -&gt; LowerLeg\n
        LowerLeg -&gt; Cylinder02</p>\n
        <p>Cylinder02 -&gt; UpperLeg</p>\n
        <p>UpperLeg -&gt; Cylinder01</p>\n
        <p>Press the Schematic View (Open) button on the main toolbar to check if the hierarchy is now correct as displayed in Picture 4a.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4a.gif" />\n
        Picture 4a.</p>\n
        <p>Now all you need to do is add an IK Solver to this hierarchy to make it act like a robotic leg. You can use the IK Solver you prefer, but in this example, we are going to use the History Independent solver. Select Cylinder03, choose HI Solver from the IK Solvers section in the Animation menu, and select Cylinder01. To prevent you from linking the solver to UpperLeg instead of Cylinder01, use the Select by Name option, which basically means you should press the H key on your keyboard after you choose HI Solver from the menu, and then pick Cylinder01 from the list, instead of clicking on it in the viewport.</p>\n
        <p>If you performed the previous tasks correctly, the results should be like in Picture 4b with the IK Chain selected. If you move the IK Chain the leg should work. To make the task of animating this leg a bit more convenient, you should link the IK Chain to a Point Helper.</p>\n
        <p>A Point helper can be created by clicking the Point button in the Helpers section of the Create tab on the Command Panel, and clicking somewhere in the viewport, as depicted in Picture 4b below. In this case, I suggest you place it somewhere at the bottom of the leg. Use the same Select and Link method as discussed earlier to link the IK Chain to the Point helper, so you can animate the leg by moving the Point helper.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4b.gif" />\n
        Picture 4b.</p>\n
        <p>If your robot has a complex geometry and animating the individual objects slows down your computer too much, you can configure 3D Studio Max to display the objects as bones. When using our example leg from the previous steps, you should select Cylinder01, 02, 03, UpperLeg, and LowerLeg, and select Bone Tools from the Character menu. Enable the Bone On option on the Bone Tools dialog as shown below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4c.gif" />\n
        Picture 4c.</p>\n
        <p>Next, open the Display tab on the Command Panel, scroll down, and in the Link Display section enable the Display Links option and the Link Replaces Object option.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4d.gif" />\n
        Picture 4d.</p>\n
        <p>The results should be as depicted in Picture 4e below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4e.gif" />\n
        Picture 4e.</p>\n
        <p>Alternatively, you can enable only the Display Links option and right above the Link Display section enable the Display as Box option in the Display Properties section. The results should be as depicted in Picture 4f below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4f.gif" />\n
        Picture 4f.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_ik_end.zip">Download the scene here.</a></p>\n
        <h4>5. Muscles</h4>\n
        <p>As I mentioned earlier, the leg used in the example above is not very realistic; it needs some muscles to make it move automatically and at the same time give it some strength. You can make up your own mechanisms, but you can also use one of the three main methods used in modern real world robots:</p>\n
        <p>Electrical motors</p>\n
        <p>For the example leg from above, this would be the easy way out, as you would ‘only’ have to increase the size of the knee joint and modify it into to something like shown below in Photo I, so it becomes viable an electrical motor could fit inside. Additionally, rigging the robot is easy as you can use one of the methods we discussed earlier.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/motoman_sv3x.jpg" />\n
        Photo I. Industrial robot arm powered by electrical motors.</p>\n
        <p>Hydraulic/Pneumatic/Magnetic pistons</p>\n
        <p>Another commonly used method to power robots are pistons. A piston (see Photo II below) is basically consists of a metal bar that goes inside a tube. Pressurized air or oil is pumped into the piston to push out metal bar. This is usually the sound you here when a robot moves. If you want to make them realistic, you should attach a hose to it, which leads to a compressor somewhere in or on the robot. These hydraulic or pneumatic pistons are much more powerful than electrical motors. Smaller pistons may use magnetic force to either pull or push the metal bar. The latter would have electrical wires attached to it, instead of a hose.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/photo_ii.gif" />\n
        Photo II. Crane powered by hydraulic pistons.</p>\n
        <p>Picture 5a and 5b show our second example leg. It includes a piston that is made of two cylinders called Piston_PA and Piston_PB. Two additional cylinders (P_Axis_A and P_Axis_B) form the axis of the piston’s parts.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5a.gif" /> <img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5b.gif" />\n
        Picture 5a. &amp; Picture 5b.</p>\n
        <p>As you can see in Picture 5c below, we already rigged the leg with two bones and an IKSplineSolver. You can download the scene by clicking the link below the picture.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5c.gif" />\n
        Picture 5c.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_pistons_start.zip">Download the scene here.</a></p>\n
        <p>First, we will link the piston’s parts to the leg as followed:</p>\n
        <p>P_Axis_A -&gt; UpperLeg\n
        P_Axis_B -&gt; LowerLeg</p>\n
        <p>Piston_PA -&gt; P_Axis_A</p>\n
        <p>Piston_PB -&gt; P_Axis_B</p>\n
        <p>The hierarchy of the leg should now be exactly like in Picture 5d.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5d.gif" />\n
        Picture 5d.</p>\n
        <p>If we would bend the knee, by using the lower helper (Point3) for example, the two parts of the piston will not stay aligned correctly and will ‘break’ as shown in Picture 5e below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5e.gif" />\n
        Picture 5e.</p>\n
        <p>(If you moved the leg, press use Undo (Ctrl-Z) to move it back to its original position.)</p>\n
        <p>To make sure the metal bar stays inside the tube, we need to use a constraint, in this case the Look At constraint. As in the previous parts of this tutorial, the placement of the pivots of the piston’s parts is essential to make it work. The pivots for P_Axis_A and Piston_PA are exactly on the same position, and the pivots for P_Axis_B and Piston_PB are also exactly on the same position. We have already done this in the downloadable scene by selecting the parts that have the pivots on the same axis, enabling the Affect Pivot Only button (see Picture 3f) and using the Align tool (on both the Front, Top, and Left view).</p>\n
        <p>We will need to add two Look At constraints, one for each part of the piston. Select Piston_PA and select Look At from the Constraints section in the Animation menu, as depicted in Picture 5f below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5f.gif" />\n
        Picture 5f.</p>\n
        <p>Press the H key on your keyboard, select P_Axis_B, and click the Pick button. Piston_PA now changes its orientation. To make sure it point in the original direction, enable the Keep Initial Offset option on the Parameters section on the Motion tab of the Command Panel, as depicted in Picture 5g below. (The parameters section opened automatically when you added the Look At constraint.)</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5g.gif" />\n
        Picture 5g.</p>\n
        <p>Repeat this step for the other part of the piston, in other words: select Piston_PB, select Look At constraint from the Animation menu, pick the P_Axis_A as the target (using the H button to pick it). Also enable the Keep Initial Offset option again. So what we did is make one part of the piston ‘looks at’ the opposite part’s axis. The orientation is depicted with a blue line. If you select the helper Point03 and move it again, you will see that the metal bat slides neatly into the tube, as shown in Picture 5h below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5h.gif" />\n
        Picture 5h.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_pistons_end.zip">Download the scene here.</a></p>\n
        <p>To make it more realistic, we need to attach a pipe or hose to the hydraulic or pneumatic piston, and we need to make sure it moves and/or bends when the leg moves. There are many ways of doing this, but a relatively easy one is to use the extended primitive Hose. The advantage of using the Hose primitive is that you don’t need to rig it; no bones, and no IK. Instead, we are going to add two extra Cylinders, in addition to the Hose, and let the Hose start and end at those cylinders.</p>\n
        <p>In Picture 5i below you can see where we placed the two cylinders. The cylinder on the left is linked to UpperLeg, and the other is linked to Piston_PA. These cylinders represent the entry points of the hose, or the connector of a wire for example. You will probably want to use something more sophisticated than a cylinder, but make sure it is a separate object.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5i.gif" />\n
        Picture 5i.</p>\n
        <p>Next, create the hose by selecting Extended Primitives on the Create tab of the Command Panel, clicking the Hose button, and drawing a hose in any viewport, as shown in Picture 5j below. Don’t worry about its size, location, or shape yet.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5j.gif" />\n
        Picture 5j.</p>\n
        <p>On the Modify tab of the Command Panel, enable the Bound to Object Pivots. Click the Pick Top Object button and click on the left cylinder. Click the Pick Bottom Object button and click on the right cylinder (or use the H key on your keyboard).</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5k.gif" />\n
        Picture 5k.</p>\n
        <p>Depending on the orientation of the cylinders we use to connect the hose and the viewport you created them on, you may have to rotate the pivot of one or both cylinders. So if necessary, select the cylinder, enable the Affect Pivot Only button (picture 3f), and rotate the pivot. While you rotate the pivot, the hose will bend with it so you can easily see when it is at the right angle.</p>\n
        <p>When the hose is correctly aligned to the cylinders, click the hose again, scroll down below on the Modify tab, and disable the Flex Section Enable option as shown below in Picture 5l. Also decrease the Diameter: value in the Hose Shape section to a value that is less than the cylinders.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5l.gif" />\n
        Picture 5l.</p>\n
        <p>As you can see, the hose is too long and needs to hang more tightly against the leg. You can do this by decreasing the Tension values (see Picture 5k). In the final images below, we used 25 for both cylinders. If you move the leg again using on of the helpers, you will notice that the hose will stay in position and even bend when it has to. Click on one of the images to see the final animation.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5m.gif" /> <img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5n.gif" />\n
        Picture 5m.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_piston_hose.zip">Download the final scene here.</a></p>\n
        <p>I hope you enjoyed this tutorial and that it contributed something to your 3D Studio Max modeling skills.</p>
        """
      "grav" => Grav {}
    ]
    
  2. array:1 [
      "content" => array:2 [
        0 => __TwigTemplate_1fd2da7f05a02335033099a06781b7d00f84f79ced9a93dc72d9cf5790c09ebd {}
        1 => "block_content"
      ]
    ]
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
vendor
/
twig
/
twig
/
src
/
Template.php
     * directly.
     *
     * @return array An array of blocks
     */
    public function getBlocks()
    {
        return $this->blocks;
    }
 
    public function display(array $context, array $blocks = [])
    {
        $this->displayWithErrorHandling($this->env->mergeGlobals($context), array_merge($this->blocks, $blocks));
    }
 
    public function render(array $context)
    {
        $level = ob_get_level();
        ob_start(function () { return ''; });
        try {
            $this->display($context);
        } catch (\Exception $e) {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        } catch (\Throwable $e) {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        }
 
        return ob_get_clean();
    }
 
    protected function displayWithErrorHandling(array $context, array $blocks = [])
    {
        try {
Arguments
  1. array:28 [
      "config" => Config {}
      "system" => array:27 [
        "absolute_urls" => false
        "timezone" => ""
        "default_locale" => null
        "param_sep" => ":"
        "wrapped_site" => false
        "reverse_proxy_setup" => false
        "force_ssl" => false
        "force_lowercase_urls" => true
        "custom_base_url" => "http://www.3dvalley.com"
        "username_regex" => "^[a-z0-9_-]{3,16}$"
        "pwd_regex" => "(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}"
        "intl_enabled" => true
        "languages" => array:9 [
          "supported" => []
          "default_lang" => null
          "include_default_lang" => true
          "pages_fallback_only" => false
          "translations" => true
          "translations_fallback" => true
          "session_store_active" => false
          "http_accept_language" => false
          "override_locale" => false
        ]
        "home" => array:2 [
          "alias" => "/home"
          "hide_in_urls" => false
        ]
        "pages" => array:26 [
          "theme" => "minimaxing"
          "order" => array:2 [
            "by" => "default"
            "dir" => "asc"
          ]
          "list" => array:1 [
            "count" => 20
          ]
          "dateformat" => array:3 [
            "default" => null
            "short" => "jS M Y"
            "long" => "F jS \a\t g:ia"
          ]
          "publish_dates" => true
          "process" => array:2 [
            "markdown" => true
            "twig" => false
          ]
          "twig_first" => false
          "never_cache_twig" => false
          "events" => array:2 [
            "page" => true
            "twig" => true
          ]
          "markdown" => array:5 [
            "extra" => true
            "auto_line_breaks" => false
            "auto_url_links" => false
            "escape_markup" => false
            "special_chars" => array:2 [
              ">" => "gt"
              "<" => "lt"
            ]
          ]
          "types" => array:7 [
            0 => "txt"
            1 => "xml"
            2 => "html"
            3 => "htm"
            4 => "json"
            5 => "rss"
            6 => "atom"
          ]
          "append_url_extension" => ""
          "expires" => 604800
          "cache_control" => null
          "last_modified" => false
          "etag" => true
          "vary_accept_encoding" => false
          "redirect_default_route" => false
          "redirect_default_code" => "301"
          "redirect_trailing_slash" => true
          "ignore_files" => array:1 [
            0 => ".DS_Store"
          ]
          "ignore_folders" => array:2 [
            0 => ".git"
            1 => ".idea"
          ]
          "ignore_hidden" => true
          "hide_empty_folders" => false
          "url_taxonomy_filters" => true
          "frontmatter" => array:2 [
            "process_twig" => false
            "ignore_fields" => array:2 [
              0 => "form"
              1 => "forms"
            ]
          ]
        ]
        "cache" => array:13 [
          "enabled" => true
          "check" => array:1 [
            "method" => "file"
          ]
          "driver" => "apcu"
          "prefix" => "g"
          "purge_at" => "0 4 * * *"
          "clear_at" => "0 3 * * *"
          "clear_job_type" => "standard"
          "clear_images_by_default" => true
          "cli_compatibility" => false
          "lifetime" => 604800
          "gzip" => true
          "allow_webserver_gzip" => false
          "redis" => array:1 [
            "socket" => false
          ]
        ]
        "twig" => array:7 [
          "cache" => true
          "debug" => true
          "auto_reload" => true
          "autoescape" => false
          "undefined_functions" => true
          "undefined_filters" => true
          "umask_fix" => false
        ]
        "assets" => array:12 [
          "css_pipeline" => true
          "css_pipeline_include_externals" => true
          "css_pipeline_before_excludes" => true
          "css_minify" => true
          "css_minify_windows" => false
          "css_rewrite" => true
          "js_pipeline" => true
          "js_pipeline_include_externals" => true
          "js_pipeline_before_excludes" => true
          "js_minify" => true
          "enable_asset_timestamp" => false
          "collections" => array:1 [
            "jquery" => "system://assets/jquery/jquery-2.x.min.js"
          ]
        ]
        "errors" => array:2 [
          "display" => 1
          "log" => true
        ]
        "log" => array:2 [
          "handler" => "file"
          "syslog" => array:1 [
            "facility" => "local6"
          ]
        ]
        "debugger" => array:3 [
          "enabled" => false
          "shutdown" => array:1 [
            "close_connection" => true
          ]
          "twig" => true
        ]
        "images" => array:6 [
          "default_image_quality" => 85
          "cache_all" => false
          "cache_perms" => "0755"
          "debug" => false
          "auto_fix_orientation" => false
          "seofriendly" => false
        ]
        "media" => array:5 [
          "enable_media_timestamp" => false
          "unsupported_inline_types" => []
          "allowed_fallback_types" => []
          "auto_metadata_exif" => false
          "upload_limit" => 33554432
        ]
        "session" => array:9 [
          "enabled" => true
          "initialize" => true
          "timeout" => 1800
          "name" => "grav-site"
          "uniqueness" => "path"
          "secure" => false
          "httponly" => true
          "split" => true
          "path" => "/"
        ]
        "gpm" => array:5 [
          "releases" => "stable"
          "proxy_url" => null
          "method" => "auto"
          "verify_peer" => true
          "official_gpm_only" => true
        ]
        "accounts" => array:2 [
          "type" => "data"
          "storage" => "file"
        ]
        "strict_mode" => array:2 [
          "yaml_compat" => true
          "twig_compat" => true
        ]
      ]
      "theme" => array:2 [
        "enabled" => true
        "dropdown" => array:1 [
          "enabled" => false
        ]
      ]
      "site" => array:14 [
        "title" => "3Dvalley"
        "default_lang" => "en"
        "author" => array:2 [
          "name" => "Admin"
          "email" => "webmaster@3dvalley.com"
        ]
        "taxonomies" => array:2 [
          0 => "category"
          1 => "tag"
        ]
        "metadata" => array:1 [
          "description" => "Free 3D models and textures"
        ]
        "summary" => array:4 [
          "enabled" => true
          "format" => "short"
          "size" => 300
          "delimiter" => "==="
        ]
        "redirects" => array:12 [
          "/tutorials/3d-studio-max-hotkeys-and-mouse-essentials" => "/tutorials/threed-studio-max-hotkeys-and-mouse-essentials "
          "/tutorials/3d-studio-max-tutorial-modeling-a-plunger" => "/tutorials/modeling-a-plunger-in-3d-studio-max"
          "/tutorials/modeling-a-brake-rotor" => "/tutorials/modeling-brake-rotor-in-3d-studio-max"
          "/models" => "/3d-models"
          "/free-textures" => "/textures"
          "/textures.shtml" => "/textures"
          "/tutorials/rendering-objects-in-a-solidwire-mix" => "/tutorials/rendering-wip-images-in-3d-studio-max"
          "/tutorials/modeling-a-highly-detailed-basketball-in-3d-studio-max" => "/tutorials/modeling-a-highly-detailed-basketball-in-3ds-max/"
          "/models.shtml" => "/3d-models"
          "/c/tutorials" => "/tutorials"
          "/models/models_household.shtml" => "/3d-models/household"
          "/downloadables/3DStudioMAX-hotkeys.pdf" => "/tutorials/threed-studio-max-hotkeys-and-mouse-essentials"
        ]
        "routes" => null
        "blog" => array:1 [
          "route" => "/blog"
        ]
        "header" => array:2 [
          "title" => "I'm Jonathan Doe."
          "description" => "I'm a Manila based <span>graphic designer</span>, <span>illustrator</span> and <span>webdesigner</span> creating awesome and effective visual identities for companies of all sizes around the globe. Let's <a class="smoothscroll" href="#about">start scrolling</a> and learn more <a class="smoothscroll" href="#about">about me</a>."
        ]
        "copyright" => array:2 [
          0 => array:1 [
            "line" => "Copyright 2014 CeeVee"
          ]
          1 => array:1 [
            "line" => "Design by <a title="Styleshout" href="http://www.styleshout.com/">Styleshout</a>"
          ]
        ]
        "social" => array:7 [
          0 => array:2 [
            "url" => "#"
            "icon" => "facebook"
          ]
          1 => array:2 [
            "url" => "#"
            "icon" => "twitter"
          ]
          2 => array:2 [
            "url" => "#"
            "icon" => "google-plus"
          ]
          3 => array:2 [
            "url" => "#"
            "icon" => "linkedin"
          ]
          4 => array:2 [
            "url" => "#"
            "icon" => "instagram"
          ]
          5 => array:2 [
            "url" => "#"
            "icon" => "dribbble"
          ]
          6 => array:2 [
            "url" => "#"
            "icon" => "skype"
          ]
        ]
        "twitter" => array:7 [
          "id" => "657554810648948736"
          "domId" => "tw-widget1"
          "maxTweets" => 3
          "enableLinks" => "true"
          "showInteraction" => "false"
          "showImages" => "false"
          "showUser" => "false"
        ]
        "acxtest" => "TEST"
      ]
      "uri" => Uri {}
      "assets" => Assets {}
      "taxonomy" => Taxonomy {}
      "browser" => Browser {}
      "base_dir" => "/home/jhiemstraxartec/public_html/test"
      "home_url" => "/"
      "base_url" => ""
      "base_url_absolute" => "http://www.3dvalley.com"
      "base_url_relative" => ""
      "base_url_simple" => ""
      "theme_dir" => "/home/jhiemstraxartec/public_html/test/user/themes/minimaxing"
      "theme_url" => "/user/themes/minimaxing"
      "html_lang" => "en"
      "language_codes" => LanguageCodes {}
      "json" => "</script><script>"
      "myvar" => "</script><script>"
      "form" => null
      "form_max_filesize" => 32
      "form_json_response" => []
      "pages" => Page {}
      "page" => Page {}
      "header" => {}
      "media" => Media {}
      "content" => """
        <p>Like most tasks in 3D Studio Max and similar products, rigging robots is easy, if you know how. Depending on the complexity of the robot, some may find it even easier than rigging a human or animal character. This is because most parts of a robot do not deform during movement, with the exception of cabling and other flexible parts, so you don’t have to ‘skin’ it. One of the primary challenges in building a cool robot, which still looks cool when animated, is creating realistic mechanical joints.</p>\n
        \n
        <p>The first version of our example robotic leg below is not very realistic however, because it would collapse like a bone structure without muscles. In the second version, we will add some robotic ‘muscles’, and the third version will include a hose. Click on the download links below some of the pictures to download the corresponding scene.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/robotrigging_mainthumb_ani.gif" /></p>\n
        <h4>1. A Human Leg</h4>\n
        <p>When rigging a human leg, the mesh deforms when the knee bends, pushing vertexes away from each other on one side and towards each other on the opposite side. This is accomplished by using a Skin modifier that binds vertexes of the mesh to the bones. The colors of the vertexes indicate the weight values which dictate how much influence moving the joint will have on those vertexes. Red vertexes represent the most rigid parts.</p>\n
        <h4>2. Our Example Robot Leg</h4>\n
        <p>Robots are typically made of metal, plastic, or some other hard and rigid material that does not deform. The following picture shows the five objects that form the basis of our example leg.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p2a.jpg" /> <img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p2b.jpg" /></p>\n
        <h4>3. Rigging Our Example Robot Leg</h4>\n
        <p>As usual, I have to make a note that the following is just a way of doing this, which doesn’t necessarily means it is the way (we’ll actually show another way later on). Picture 3a below shows the (unsmoothed) wireframe of the objects that make up this leg. Click the link below it to download the scene, or download the scene including the bones by clicking the link below Picture 3h, or just watch the pictures if you do not feel like actually doing any of this right now.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3a.gif" />\n
        Picture 3a.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_start.zip">Download start scene here</a></p>\n
        <p>The red dots in the picture above represent the pivot of the object. In the scene you can download, I have already moved them to the correct position. The UpperLeg’s pivot is positioned at exactly the same position as the pivot of Cylinder01, and LowerLeg’s pivot is at the same position as the pivot of Cylinder02. When switching to the top view, they are all aligned. It is essential that the bones you add start or end exactly at those pivot points.</p>\n
        <p>A way of making sure the bones are positioned correctly is to snap to pivots. When you use this method it is also essential that all the pivots are aligned when viewing from the top. If in your robot they aren’t and it is too complex or difficult to align them, you can skip the following snap settings and just draw the bones, select them all and move them to the center of the leg (Top view). To use the snap setting, right-click the Snaps Toggle button on the main toolbar and select Pivot and clear others if necessary (see Picture 3b). Now click the Snaps Toggle button again (with the left mouse button) to enable it.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3b.gif" />\n
        Picture 3b.</p>\n
        <p>Click the Bones button in the Systems section on the Create tab of the Command Panel as displayed in Picture 3c below. Choose SplineIKSolver as the IK Solver and enable Assign to Children (you can use another IK Solver or none at all, if you prefer).</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3c.gif" />\n
        Picture 3c.</p>\n
        <p>Now draw the bones, by clicking on the spots 1, 2, and 3 shown in Picture 3d and then right-click anywhere in the viewport to stop. Spots 1, 2 and 3 are the pivot points of Cylinder01, Cylinder02, and Cylinder03.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3d.gif" />\n
        Picture 3d.</p>\n
        <p>When the Spline IK Solver dialog shown in Picture 3e below opens, just click OK.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3e.gif" />\n
        Picture 3e.</p>\n
        <p>Now before you link the bones to the leg, you should make sure that the pivots of the bones are positioned correctly on the pivot of the limbs, the Spline IK Solver we added moved them slightly. To move a bone’s pivot, click the Affect Pivot Only button on the Hierarchy tab of the Command Panel, and disable the Enabled button on the Motion tab of the Command Panel.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3f.gif" />\n
        Picture 3f.</p>\n
        <p>Then select the pivot of the bone and move it to the correct position. Make sure you zoom in and place it exactly in the center of the limbs’ pivots. You also might want to disable the snap to pivot setting first by clicking the Snaps Toggle button again. If for some reason you cannot get them in the right position, there is no need to continue, as the whole setup depends on the pivots’ position.</p>\n
        <p>When you are sure the pivots are positioned correctly, select Cylinder01 and link it to UpperLeg. Select Cylinder02 and link it to the LowerLeg, and select Cylinder03 to LowerLeg as well. To link one object to another click the Select and Link button on the main tool bar, select the object you want to link and drag to the object you want to link to. If you do it correctly, the object you link to, will flash white once.</p>\n
        <p>We will use the same select and link method to link the objects to the bones, instead of using a Skin modifier. Link UpperLeg to the upper bone, and link LowerLeg to the lower bone.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3g.gif" />\n
        Picture 3g.</p>\n
        <p>When you done all of the above, or download the scene including the bones by using the link below, select the IK Chain or any of the point helpers and move it. The knee joint should now operate as shown in Picture 3g, without any of the objects deforming during movement.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3h.gif" />\n
        Picture 3h.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_end.zip">Download scene here.</a></p>\n
        <h4>4. Another Approach</h4>\n
        <p>Before we continue with this leg and add some muscles, we will use another method of rigging this leg. As someone kindly pointed out to me, there is no absolute need to use bones . If you are new to rigging characters or robots in particular, you may want to go for the bones method discussed above, but a robot is often a skeleton by itself, eliminating the need for bones. 3D Studio Max allows any object to act like a bone, and allows you also to assign IK solvers to any hierarchical set of objects. Also in this type of ‘bone’ setup, it is absolutely imperative that the pivots of the objects are in the correct position. We will illustrate this with some pictures later.</p>\n
        <p>To make this work with the previous example (delete the previous bone structure or use the scene you downloaded earlier), and link the objects to each other as followed:</p>\n
        <p>Cylinder03 -&gt; LowerLeg\n
        LowerLeg -&gt; Cylinder02</p>\n
        <p>Cylinder02 -&gt; UpperLeg</p>\n
        <p>UpperLeg -&gt; Cylinder01</p>\n
        <p>Press the Schematic View (Open) button on the main toolbar to check if the hierarchy is now correct as displayed in Picture 4a.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4a.gif" />\n
        Picture 4a.</p>\n
        <p>Now all you need to do is add an IK Solver to this hierarchy to make it act like a robotic leg. You can use the IK Solver you prefer, but in this example, we are going to use the History Independent solver. Select Cylinder03, choose HI Solver from the IK Solvers section in the Animation menu, and select Cylinder01. To prevent you from linking the solver to UpperLeg instead of Cylinder01, use the Select by Name option, which basically means you should press the H key on your keyboard after you choose HI Solver from the menu, and then pick Cylinder01 from the list, instead of clicking on it in the viewport.</p>\n
        <p>If you performed the previous tasks correctly, the results should be like in Picture 4b with the IK Chain selected. If you move the IK Chain the leg should work. To make the task of animating this leg a bit more convenient, you should link the IK Chain to a Point Helper.</p>\n
        <p>A Point helper can be created by clicking the Point button in the Helpers section of the Create tab on the Command Panel, and clicking somewhere in the viewport, as depicted in Picture 4b below. In this case, I suggest you place it somewhere at the bottom of the leg. Use the same Select and Link method as discussed earlier to link the IK Chain to the Point helper, so you can animate the leg by moving the Point helper.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4b.gif" />\n
        Picture 4b.</p>\n
        <p>If your robot has a complex geometry and animating the individual objects slows down your computer too much, you can configure 3D Studio Max to display the objects as bones. When using our example leg from the previous steps, you should select Cylinder01, 02, 03, UpperLeg, and LowerLeg, and select Bone Tools from the Character menu. Enable the Bone On option on the Bone Tools dialog as shown below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4c.gif" />\n
        Picture 4c.</p>\n
        <p>Next, open the Display tab on the Command Panel, scroll down, and in the Link Display section enable the Display Links option and the Link Replaces Object option.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4d.gif" />\n
        Picture 4d.</p>\n
        <p>The results should be as depicted in Picture 4e below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4e.gif" />\n
        Picture 4e.</p>\n
        <p>Alternatively, you can enable only the Display Links option and right above the Link Display section enable the Display as Box option in the Display Properties section. The results should be as depicted in Picture 4f below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4f.gif" />\n
        Picture 4f.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_ik_end.zip">Download the scene here.</a></p>\n
        <h4>5. Muscles</h4>\n
        <p>As I mentioned earlier, the leg used in the example above is not very realistic; it needs some muscles to make it move automatically and at the same time give it some strength. You can make up your own mechanisms, but you can also use one of the three main methods used in modern real world robots:</p>\n
        <p>Electrical motors</p>\n
        <p>For the example leg from above, this would be the easy way out, as you would ‘only’ have to increase the size of the knee joint and modify it into to something like shown below in Photo I, so it becomes viable an electrical motor could fit inside. Additionally, rigging the robot is easy as you can use one of the methods we discussed earlier.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/motoman_sv3x.jpg" />\n
        Photo I. Industrial robot arm powered by electrical motors.</p>\n
        <p>Hydraulic/Pneumatic/Magnetic pistons</p>\n
        <p>Another commonly used method to power robots are pistons. A piston (see Photo II below) is basically consists of a metal bar that goes inside a tube. Pressurized air or oil is pumped into the piston to push out metal bar. This is usually the sound you here when a robot moves. If you want to make them realistic, you should attach a hose to it, which leads to a compressor somewhere in or on the robot. These hydraulic or pneumatic pistons are much more powerful than electrical motors. Smaller pistons may use magnetic force to either pull or push the metal bar. The latter would have electrical wires attached to it, instead of a hose.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/photo_ii.gif" />\n
        Photo II. Crane powered by hydraulic pistons.</p>\n
        <p>Picture 5a and 5b show our second example leg. It includes a piston that is made of two cylinders called Piston_PA and Piston_PB. Two additional cylinders (P_Axis_A and P_Axis_B) form the axis of the piston’s parts.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5a.gif" /> <img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5b.gif" />\n
        Picture 5a. &amp; Picture 5b.</p>\n
        <p>As you can see in Picture 5c below, we already rigged the leg with two bones and an IKSplineSolver. You can download the scene by clicking the link below the picture.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5c.gif" />\n
        Picture 5c.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_pistons_start.zip">Download the scene here.</a></p>\n
        <p>First, we will link the piston’s parts to the leg as followed:</p>\n
        <p>P_Axis_A -&gt; UpperLeg\n
        P_Axis_B -&gt; LowerLeg</p>\n
        <p>Piston_PA -&gt; P_Axis_A</p>\n
        <p>Piston_PB -&gt; P_Axis_B</p>\n
        <p>The hierarchy of the leg should now be exactly like in Picture 5d.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5d.gif" />\n
        Picture 5d.</p>\n
        <p>If we would bend the knee, by using the lower helper (Point3) for example, the two parts of the piston will not stay aligned correctly and will ‘break’ as shown in Picture 5e below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5e.gif" />\n
        Picture 5e.</p>\n
        <p>(If you moved the leg, press use Undo (Ctrl-Z) to move it back to its original position.)</p>\n
        <p>To make sure the metal bar stays inside the tube, we need to use a constraint, in this case the Look At constraint. As in the previous parts of this tutorial, the placement of the pivots of the piston’s parts is essential to make it work. The pivots for P_Axis_A and Piston_PA are exactly on the same position, and the pivots for P_Axis_B and Piston_PB are also exactly on the same position. We have already done this in the downloadable scene by selecting the parts that have the pivots on the same axis, enabling the Affect Pivot Only button (see Picture 3f) and using the Align tool (on both the Front, Top, and Left view).</p>\n
        <p>We will need to add two Look At constraints, one for each part of the piston. Select Piston_PA and select Look At from the Constraints section in the Animation menu, as depicted in Picture 5f below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5f.gif" />\n
        Picture 5f.</p>\n
        <p>Press the H key on your keyboard, select P_Axis_B, and click the Pick button. Piston_PA now changes its orientation. To make sure it point in the original direction, enable the Keep Initial Offset option on the Parameters section on the Motion tab of the Command Panel, as depicted in Picture 5g below. (The parameters section opened automatically when you added the Look At constraint.)</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5g.gif" />\n
        Picture 5g.</p>\n
        <p>Repeat this step for the other part of the piston, in other words: select Piston_PB, select Look At constraint from the Animation menu, pick the P_Axis_A as the target (using the H button to pick it). Also enable the Keep Initial Offset option again. So what we did is make one part of the piston ‘looks at’ the opposite part’s axis. The orientation is depicted with a blue line. If you select the helper Point03 and move it again, you will see that the metal bat slides neatly into the tube, as shown in Picture 5h below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5h.gif" />\n
        Picture 5h.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_pistons_end.zip">Download the scene here.</a></p>\n
        <p>To make it more realistic, we need to attach a pipe or hose to the hydraulic or pneumatic piston, and we need to make sure it moves and/or bends when the leg moves. There are many ways of doing this, but a relatively easy one is to use the extended primitive Hose. The advantage of using the Hose primitive is that you don’t need to rig it; no bones, and no IK. Instead, we are going to add two extra Cylinders, in addition to the Hose, and let the Hose start and end at those cylinders.</p>\n
        <p>In Picture 5i below you can see where we placed the two cylinders. The cylinder on the left is linked to UpperLeg, and the other is linked to Piston_PA. These cylinders represent the entry points of the hose, or the connector of a wire for example. You will probably want to use something more sophisticated than a cylinder, but make sure it is a separate object.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5i.gif" />\n
        Picture 5i.</p>\n
        <p>Next, create the hose by selecting Extended Primitives on the Create tab of the Command Panel, clicking the Hose button, and drawing a hose in any viewport, as shown in Picture 5j below. Don’t worry about its size, location, or shape yet.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5j.gif" />\n
        Picture 5j.</p>\n
        <p>On the Modify tab of the Command Panel, enable the Bound to Object Pivots. Click the Pick Top Object button and click on the left cylinder. Click the Pick Bottom Object button and click on the right cylinder (or use the H key on your keyboard).</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5k.gif" />\n
        Picture 5k.</p>\n
        <p>Depending on the orientation of the cylinders we use to connect the hose and the viewport you created them on, you may have to rotate the pivot of one or both cylinders. So if necessary, select the cylinder, enable the Affect Pivot Only button (picture 3f), and rotate the pivot. While you rotate the pivot, the hose will bend with it so you can easily see when it is at the right angle.</p>\n
        <p>When the hose is correctly aligned to the cylinders, click the hose again, scroll down below on the Modify tab, and disable the Flex Section Enable option as shown below in Picture 5l. Also decrease the Diameter: value in the Hose Shape section to a value that is less than the cylinders.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5l.gif" />\n
        Picture 5l.</p>\n
        <p>As you can see, the hose is too long and needs to hang more tightly against the leg. You can do this by decreasing the Tension values (see Picture 5k). In the final images below, we used 25 for both cylinders. If you move the leg again using on of the helpers, you will notice that the hose will stay in position and even bend when it has to. Click on one of the images to see the final animation.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5m.gif" /> <img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5n.gif" />\n
        Picture 5m.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_piston_hose.zip">Download the final scene here.</a></p>\n
        <p>I hope you enjoyed this tutorial and that it contributed something to your 3D Studio Max modeling skills.</p>
        """
    ]
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
vendor
/
twig
/
twig
/
src
/
TemplateWrapper.php
     * @internal
     */
    public function __construct(Environment $env, Template $template)
    {
        $this->env = $env;
        $this->template = $template;
    }
 
    /**
     * Renders the template.
     *
     * @param array $context An array of parameters to pass to the template
     *
     * @return string The rendered template
     */
    public function render($context = [])
    {
        // using func_get_args() allows to not expose the blocks argument
        // as it should only be used by internal code
        return $this->template->render($context, \func_num_args() > 1 ? func_get_arg(1) : []);
    }
 
    /**
     * Displays the template.
     *
     * @param array $context An array of parameters to pass to the template
     */
    public function display($context = [])
    {
        // using func_get_args() allows to not expose the blocks argument
        // as it should only be used by internal code
        $this->template->display($context, \func_num_args() > 1 ? func_get_arg(1) : []);
    }
 
    /**
     * Checks if a block is defined.
     *
     * @param string $name    The block name
     * @param array  $context An array of parameters to pass to the template
     *
Arguments
  1. array:28 [
      "config" => Config {}
      "system" => array:27 [
        "absolute_urls" => false
        "timezone" => ""
        "default_locale" => null
        "param_sep" => ":"
        "wrapped_site" => false
        "reverse_proxy_setup" => false
        "force_ssl" => false
        "force_lowercase_urls" => true
        "custom_base_url" => "http://www.3dvalley.com"
        "username_regex" => "^[a-z0-9_-]{3,16}$"
        "pwd_regex" => "(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}"
        "intl_enabled" => true
        "languages" => array:9 [
          "supported" => []
          "default_lang" => null
          "include_default_lang" => true
          "pages_fallback_only" => false
          "translations" => true
          "translations_fallback" => true
          "session_store_active" => false
          "http_accept_language" => false
          "override_locale" => false
        ]
        "home" => array:2 [
          "alias" => "/home"
          "hide_in_urls" => false
        ]
        "pages" => array:26 [
          "theme" => "minimaxing"
          "order" => array:2 [
            "by" => "default"
            "dir" => "asc"
          ]
          "list" => array:1 [
            "count" => 20
          ]
          "dateformat" => array:3 [
            "default" => null
            "short" => "jS M Y"
            "long" => "F jS \a\t g:ia"
          ]
          "publish_dates" => true
          "process" => array:2 [
            "markdown" => true
            "twig" => false
          ]
          "twig_first" => false
          "never_cache_twig" => false
          "events" => array:2 [
            "page" => true
            "twig" => true
          ]
          "markdown" => array:5 [
            "extra" => true
            "auto_line_breaks" => false
            "auto_url_links" => false
            "escape_markup" => false
            "special_chars" => array:2 [
              ">" => "gt"
              "<" => "lt"
            ]
          ]
          "types" => array:7 [
            0 => "txt"
            1 => "xml"
            2 => "html"
            3 => "htm"
            4 => "json"
            5 => "rss"
            6 => "atom"
          ]
          "append_url_extension" => ""
          "expires" => 604800
          "cache_control" => null
          "last_modified" => false
          "etag" => true
          "vary_accept_encoding" => false
          "redirect_default_route" => false
          "redirect_default_code" => "301"
          "redirect_trailing_slash" => true
          "ignore_files" => array:1 [
            0 => ".DS_Store"
          ]
          "ignore_folders" => array:2 [
            0 => ".git"
            1 => ".idea"
          ]
          "ignore_hidden" => true
          "hide_empty_folders" => false
          "url_taxonomy_filters" => true
          "frontmatter" => array:2 [
            "process_twig" => false
            "ignore_fields" => array:2 [
              0 => "form"
              1 => "forms"
            ]
          ]
        ]
        "cache" => array:13 [
          "enabled" => true
          "check" => array:1 [
            "method" => "file"
          ]
          "driver" => "apcu"
          "prefix" => "g"
          "purge_at" => "0 4 * * *"
          "clear_at" => "0 3 * * *"
          "clear_job_type" => "standard"
          "clear_images_by_default" => true
          "cli_compatibility" => false
          "lifetime" => 604800
          "gzip" => true
          "allow_webserver_gzip" => false
          "redis" => array:1 [
            "socket" => false
          ]
        ]
        "twig" => array:7 [
          "cache" => true
          "debug" => true
          "auto_reload" => true
          "autoescape" => false
          "undefined_functions" => true
          "undefined_filters" => true
          "umask_fix" => false
        ]
        "assets" => array:12 [
          "css_pipeline" => true
          "css_pipeline_include_externals" => true
          "css_pipeline_before_excludes" => true
          "css_minify" => true
          "css_minify_windows" => false
          "css_rewrite" => true
          "js_pipeline" => true
          "js_pipeline_include_externals" => true
          "js_pipeline_before_excludes" => true
          "js_minify" => true
          "enable_asset_timestamp" => false
          "collections" => array:1 [
            "jquery" => "system://assets/jquery/jquery-2.x.min.js"
          ]
        ]
        "errors" => array:2 [
          "display" => 1
          "log" => true
        ]
        "log" => array:2 [
          "handler" => "file"
          "syslog" => array:1 [
            "facility" => "local6"
          ]
        ]
        "debugger" => array:3 [
          "enabled" => false
          "shutdown" => array:1 [
            "close_connection" => true
          ]
          "twig" => true
        ]
        "images" => array:6 [
          "default_image_quality" => 85
          "cache_all" => false
          "cache_perms" => "0755"
          "debug" => false
          "auto_fix_orientation" => false
          "seofriendly" => false
        ]
        "media" => array:5 [
          "enable_media_timestamp" => false
          "unsupported_inline_types" => []
          "allowed_fallback_types" => []
          "auto_metadata_exif" => false
          "upload_limit" => 33554432
        ]
        "session" => array:9 [
          "enabled" => true
          "initialize" => true
          "timeout" => 1800
          "name" => "grav-site"
          "uniqueness" => "path"
          "secure" => false
          "httponly" => true
          "split" => true
          "path" => "/"
        ]
        "gpm" => array:5 [
          "releases" => "stable"
          "proxy_url" => null
          "method" => "auto"
          "verify_peer" => true
          "official_gpm_only" => true
        ]
        "accounts" => array:2 [
          "type" => "data"
          "storage" => "file"
        ]
        "strict_mode" => array:2 [
          "yaml_compat" => true
          "twig_compat" => true
        ]
      ]
      "theme" => array:2 [
        "enabled" => true
        "dropdown" => array:1 [
          "enabled" => false
        ]
      ]
      "site" => array:14 [
        "title" => "3Dvalley"
        "default_lang" => "en"
        "author" => array:2 [
          "name" => "Admin"
          "email" => "webmaster@3dvalley.com"
        ]
        "taxonomies" => array:2 [
          0 => "category"
          1 => "tag"
        ]
        "metadata" => array:1 [
          "description" => "Free 3D models and textures"
        ]
        "summary" => array:4 [
          "enabled" => true
          "format" => "short"
          "size" => 300
          "delimiter" => "==="
        ]
        "redirects" => array:12 [
          "/tutorials/3d-studio-max-hotkeys-and-mouse-essentials" => "/tutorials/threed-studio-max-hotkeys-and-mouse-essentials "
          "/tutorials/3d-studio-max-tutorial-modeling-a-plunger" => "/tutorials/modeling-a-plunger-in-3d-studio-max"
          "/tutorials/modeling-a-brake-rotor" => "/tutorials/modeling-brake-rotor-in-3d-studio-max"
          "/models" => "/3d-models"
          "/free-textures" => "/textures"
          "/textures.shtml" => "/textures"
          "/tutorials/rendering-objects-in-a-solidwire-mix" => "/tutorials/rendering-wip-images-in-3d-studio-max"
          "/tutorials/modeling-a-highly-detailed-basketball-in-3d-studio-max" => "/tutorials/modeling-a-highly-detailed-basketball-in-3ds-max/"
          "/models.shtml" => "/3d-models"
          "/c/tutorials" => "/tutorials"
          "/models/models_household.shtml" => "/3d-models/household"
          "/downloadables/3DStudioMAX-hotkeys.pdf" => "/tutorials/threed-studio-max-hotkeys-and-mouse-essentials"
        ]
        "routes" => null
        "blog" => array:1 [
          "route" => "/blog"
        ]
        "header" => array:2 [
          "title" => "I'm Jonathan Doe."
          "description" => "I'm a Manila based <span>graphic designer</span>, <span>illustrator</span> and <span>webdesigner</span> creating awesome and effective visual identities for companies of all sizes around the globe. Let's <a class="smoothscroll" href="#about">start scrolling</a> and learn more <a class="smoothscroll" href="#about">about me</a>."
        ]
        "copyright" => array:2 [
          0 => array:1 [
            "line" => "Copyright 2014 CeeVee"
          ]
          1 => array:1 [
            "line" => "Design by <a title="Styleshout" href="http://www.styleshout.com/">Styleshout</a>"
          ]
        ]
        "social" => array:7 [
          0 => array:2 [
            "url" => "#"
            "icon" => "facebook"
          ]
          1 => array:2 [
            "url" => "#"
            "icon" => "twitter"
          ]
          2 => array:2 [
            "url" => "#"
            "icon" => "google-plus"
          ]
          3 => array:2 [
            "url" => "#"
            "icon" => "linkedin"
          ]
          4 => array:2 [
            "url" => "#"
            "icon" => "instagram"
          ]
          5 => array:2 [
            "url" => "#"
            "icon" => "dribbble"
          ]
          6 => array:2 [
            "url" => "#"
            "icon" => "skype"
          ]
        ]
        "twitter" => array:7 [
          "id" => "657554810648948736"
          "domId" => "tw-widget1"
          "maxTweets" => 3
          "enableLinks" => "true"
          "showInteraction" => "false"
          "showImages" => "false"
          "showUser" => "false"
        ]
        "acxtest" => "TEST"
      ]
      "uri" => Uri {}
      "assets" => Assets {}
      "taxonomy" => Taxonomy {}
      "browser" => Browser {}
      "base_dir" => "/home/jhiemstraxartec/public_html/test"
      "home_url" => "/"
      "base_url" => ""
      "base_url_absolute" => "http://www.3dvalley.com"
      "base_url_relative" => ""
      "base_url_simple" => ""
      "theme_dir" => "/home/jhiemstraxartec/public_html/test/user/themes/minimaxing"
      "theme_url" => "/user/themes/minimaxing"
      "html_lang" => "en"
      "language_codes" => LanguageCodes {}
      "json" => "</script><script>"
      "myvar" => "</script><script>"
      "form" => null
      "form_max_filesize" => 32
      "form_json_response" => []
      "pages" => Page {}
      "page" => Page {}
      "header" => {}
      "media" => Media {}
      "content" => """
        <p>Like most tasks in 3D Studio Max and similar products, rigging robots is easy, if you know how. Depending on the complexity of the robot, some may find it even easier than rigging a human or animal character. This is because most parts of a robot do not deform during movement, with the exception of cabling and other flexible parts, so you don’t have to ‘skin’ it. One of the primary challenges in building a cool robot, which still looks cool when animated, is creating realistic mechanical joints.</p>\n
        \n
        <p>The first version of our example robotic leg below is not very realistic however, because it would collapse like a bone structure without muscles. In the second version, we will add some robotic ‘muscles’, and the third version will include a hose. Click on the download links below some of the pictures to download the corresponding scene.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/robotrigging_mainthumb_ani.gif" /></p>\n
        <h4>1. A Human Leg</h4>\n
        <p>When rigging a human leg, the mesh deforms when the knee bends, pushing vertexes away from each other on one side and towards each other on the opposite side. This is accomplished by using a Skin modifier that binds vertexes of the mesh to the bones. The colors of the vertexes indicate the weight values which dictate how much influence moving the joint will have on those vertexes. Red vertexes represent the most rigid parts.</p>\n
        <h4>2. Our Example Robot Leg</h4>\n
        <p>Robots are typically made of metal, plastic, or some other hard and rigid material that does not deform. The following picture shows the five objects that form the basis of our example leg.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p2a.jpg" /> <img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p2b.jpg" /></p>\n
        <h4>3. Rigging Our Example Robot Leg</h4>\n
        <p>As usual, I have to make a note that the following is just a way of doing this, which doesn’t necessarily means it is the way (we’ll actually show another way later on). Picture 3a below shows the (unsmoothed) wireframe of the objects that make up this leg. Click the link below it to download the scene, or download the scene including the bones by clicking the link below Picture 3h, or just watch the pictures if you do not feel like actually doing any of this right now.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3a.gif" />\n
        Picture 3a.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_start.zip">Download start scene here</a></p>\n
        <p>The red dots in the picture above represent the pivot of the object. In the scene you can download, I have already moved them to the correct position. The UpperLeg’s pivot is positioned at exactly the same position as the pivot of Cylinder01, and LowerLeg’s pivot is at the same position as the pivot of Cylinder02. When switching to the top view, they are all aligned. It is essential that the bones you add start or end exactly at those pivot points.</p>\n
        <p>A way of making sure the bones are positioned correctly is to snap to pivots. When you use this method it is also essential that all the pivots are aligned when viewing from the top. If in your robot they aren’t and it is too complex or difficult to align them, you can skip the following snap settings and just draw the bones, select them all and move them to the center of the leg (Top view). To use the snap setting, right-click the Snaps Toggle button on the main toolbar and select Pivot and clear others if necessary (see Picture 3b). Now click the Snaps Toggle button again (with the left mouse button) to enable it.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3b.gif" />\n
        Picture 3b.</p>\n
        <p>Click the Bones button in the Systems section on the Create tab of the Command Panel as displayed in Picture 3c below. Choose SplineIKSolver as the IK Solver and enable Assign to Children (you can use another IK Solver or none at all, if you prefer).</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3c.gif" />\n
        Picture 3c.</p>\n
        <p>Now draw the bones, by clicking on the spots 1, 2, and 3 shown in Picture 3d and then right-click anywhere in the viewport to stop. Spots 1, 2 and 3 are the pivot points of Cylinder01, Cylinder02, and Cylinder03.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3d.gif" />\n
        Picture 3d.</p>\n
        <p>When the Spline IK Solver dialog shown in Picture 3e below opens, just click OK.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3e.gif" />\n
        Picture 3e.</p>\n
        <p>Now before you link the bones to the leg, you should make sure that the pivots of the bones are positioned correctly on the pivot of the limbs, the Spline IK Solver we added moved them slightly. To move a bone’s pivot, click the Affect Pivot Only button on the Hierarchy tab of the Command Panel, and disable the Enabled button on the Motion tab of the Command Panel.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3f.gif" />\n
        Picture 3f.</p>\n
        <p>Then select the pivot of the bone and move it to the correct position. Make sure you zoom in and place it exactly in the center of the limbs’ pivots. You also might want to disable the snap to pivot setting first by clicking the Snaps Toggle button again. If for some reason you cannot get them in the right position, there is no need to continue, as the whole setup depends on the pivots’ position.</p>\n
        <p>When you are sure the pivots are positioned correctly, select Cylinder01 and link it to UpperLeg. Select Cylinder02 and link it to the LowerLeg, and select Cylinder03 to LowerLeg as well. To link one object to another click the Select and Link button on the main tool bar, select the object you want to link and drag to the object you want to link to. If you do it correctly, the object you link to, will flash white once.</p>\n
        <p>We will use the same select and link method to link the objects to the bones, instead of using a Skin modifier. Link UpperLeg to the upper bone, and link LowerLeg to the lower bone.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3g.gif" />\n
        Picture 3g.</p>\n
        <p>When you done all of the above, or download the scene including the bones by using the link below, select the IK Chain or any of the point helpers and move it. The knee joint should now operate as shown in Picture 3g, without any of the objects deforming during movement.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3h.gif" />\n
        Picture 3h.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_end.zip">Download scene here.</a></p>\n
        <h4>4. Another Approach</h4>\n
        <p>Before we continue with this leg and add some muscles, we will use another method of rigging this leg. As someone kindly pointed out to me, there is no absolute need to use bones . If you are new to rigging characters or robots in particular, you may want to go for the bones method discussed above, but a robot is often a skeleton by itself, eliminating the need for bones. 3D Studio Max allows any object to act like a bone, and allows you also to assign IK solvers to any hierarchical set of objects. Also in this type of ‘bone’ setup, it is absolutely imperative that the pivots of the objects are in the correct position. We will illustrate this with some pictures later.</p>\n
        <p>To make this work with the previous example (delete the previous bone structure or use the scene you downloaded earlier), and link the objects to each other as followed:</p>\n
        <p>Cylinder03 -&gt; LowerLeg\n
        LowerLeg -&gt; Cylinder02</p>\n
        <p>Cylinder02 -&gt; UpperLeg</p>\n
        <p>UpperLeg -&gt; Cylinder01</p>\n
        <p>Press the Schematic View (Open) button on the main toolbar to check if the hierarchy is now correct as displayed in Picture 4a.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4a.gif" />\n
        Picture 4a.</p>\n
        <p>Now all you need to do is add an IK Solver to this hierarchy to make it act like a robotic leg. You can use the IK Solver you prefer, but in this example, we are going to use the History Independent solver. Select Cylinder03, choose HI Solver from the IK Solvers section in the Animation menu, and select Cylinder01. To prevent you from linking the solver to UpperLeg instead of Cylinder01, use the Select by Name option, which basically means you should press the H key on your keyboard after you choose HI Solver from the menu, and then pick Cylinder01 from the list, instead of clicking on it in the viewport.</p>\n
        <p>If you performed the previous tasks correctly, the results should be like in Picture 4b with the IK Chain selected. If you move the IK Chain the leg should work. To make the task of animating this leg a bit more convenient, you should link the IK Chain to a Point Helper.</p>\n
        <p>A Point helper can be created by clicking the Point button in the Helpers section of the Create tab on the Command Panel, and clicking somewhere in the viewport, as depicted in Picture 4b below. In this case, I suggest you place it somewhere at the bottom of the leg. Use the same Select and Link method as discussed earlier to link the IK Chain to the Point helper, so you can animate the leg by moving the Point helper.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4b.gif" />\n
        Picture 4b.</p>\n
        <p>If your robot has a complex geometry and animating the individual objects slows down your computer too much, you can configure 3D Studio Max to display the objects as bones. When using our example leg from the previous steps, you should select Cylinder01, 02, 03, UpperLeg, and LowerLeg, and select Bone Tools from the Character menu. Enable the Bone On option on the Bone Tools dialog as shown below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4c.gif" />\n
        Picture 4c.</p>\n
        <p>Next, open the Display tab on the Command Panel, scroll down, and in the Link Display section enable the Display Links option and the Link Replaces Object option.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4d.gif" />\n
        Picture 4d.</p>\n
        <p>The results should be as depicted in Picture 4e below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4e.gif" />\n
        Picture 4e.</p>\n
        <p>Alternatively, you can enable only the Display Links option and right above the Link Display section enable the Display as Box option in the Display Properties section. The results should be as depicted in Picture 4f below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4f.gif" />\n
        Picture 4f.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_ik_end.zip">Download the scene here.</a></p>\n
        <h4>5. Muscles</h4>\n
        <p>As I mentioned earlier, the leg used in the example above is not very realistic; it needs some muscles to make it move automatically and at the same time give it some strength. You can make up your own mechanisms, but you can also use one of the three main methods used in modern real world robots:</p>\n
        <p>Electrical motors</p>\n
        <p>For the example leg from above, this would be the easy way out, as you would ‘only’ have to increase the size of the knee joint and modify it into to something like shown below in Photo I, so it becomes viable an electrical motor could fit inside. Additionally, rigging the robot is easy as you can use one of the methods we discussed earlier.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/motoman_sv3x.jpg" />\n
        Photo I. Industrial robot arm powered by electrical motors.</p>\n
        <p>Hydraulic/Pneumatic/Magnetic pistons</p>\n
        <p>Another commonly used method to power robots are pistons. A piston (see Photo II below) is basically consists of a metal bar that goes inside a tube. Pressurized air or oil is pumped into the piston to push out metal bar. This is usually the sound you here when a robot moves. If you want to make them realistic, you should attach a hose to it, which leads to a compressor somewhere in or on the robot. These hydraulic or pneumatic pistons are much more powerful than electrical motors. Smaller pistons may use magnetic force to either pull or push the metal bar. The latter would have electrical wires attached to it, instead of a hose.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/photo_ii.gif" />\n
        Photo II. Crane powered by hydraulic pistons.</p>\n
        <p>Picture 5a and 5b show our second example leg. It includes a piston that is made of two cylinders called Piston_PA and Piston_PB. Two additional cylinders (P_Axis_A and P_Axis_B) form the axis of the piston’s parts.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5a.gif" /> <img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5b.gif" />\n
        Picture 5a. &amp; Picture 5b.</p>\n
        <p>As you can see in Picture 5c below, we already rigged the leg with two bones and an IKSplineSolver. You can download the scene by clicking the link below the picture.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5c.gif" />\n
        Picture 5c.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_pistons_start.zip">Download the scene here.</a></p>\n
        <p>First, we will link the piston’s parts to the leg as followed:</p>\n
        <p>P_Axis_A -&gt; UpperLeg\n
        P_Axis_B -&gt; LowerLeg</p>\n
        <p>Piston_PA -&gt; P_Axis_A</p>\n
        <p>Piston_PB -&gt; P_Axis_B</p>\n
        <p>The hierarchy of the leg should now be exactly like in Picture 5d.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5d.gif" />\n
        Picture 5d.</p>\n
        <p>If we would bend the knee, by using the lower helper (Point3) for example, the two parts of the piston will not stay aligned correctly and will ‘break’ as shown in Picture 5e below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5e.gif" />\n
        Picture 5e.</p>\n
        <p>(If you moved the leg, press use Undo (Ctrl-Z) to move it back to its original position.)</p>\n
        <p>To make sure the metal bar stays inside the tube, we need to use a constraint, in this case the Look At constraint. As in the previous parts of this tutorial, the placement of the pivots of the piston’s parts is essential to make it work. The pivots for P_Axis_A and Piston_PA are exactly on the same position, and the pivots for P_Axis_B and Piston_PB are also exactly on the same position. We have already done this in the downloadable scene by selecting the parts that have the pivots on the same axis, enabling the Affect Pivot Only button (see Picture 3f) and using the Align tool (on both the Front, Top, and Left view).</p>\n
        <p>We will need to add two Look At constraints, one for each part of the piston. Select Piston_PA and select Look At from the Constraints section in the Animation menu, as depicted in Picture 5f below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5f.gif" />\n
        Picture 5f.</p>\n
        <p>Press the H key on your keyboard, select P_Axis_B, and click the Pick button. Piston_PA now changes its orientation. To make sure it point in the original direction, enable the Keep Initial Offset option on the Parameters section on the Motion tab of the Command Panel, as depicted in Picture 5g below. (The parameters section opened automatically when you added the Look At constraint.)</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5g.gif" />\n
        Picture 5g.</p>\n
        <p>Repeat this step for the other part of the piston, in other words: select Piston_PB, select Look At constraint from the Animation menu, pick the P_Axis_A as the target (using the H button to pick it). Also enable the Keep Initial Offset option again. So what we did is make one part of the piston ‘looks at’ the opposite part’s axis. The orientation is depicted with a blue line. If you select the helper Point03 and move it again, you will see that the metal bat slides neatly into the tube, as shown in Picture 5h below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5h.gif" />\n
        Picture 5h.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_pistons_end.zip">Download the scene here.</a></p>\n
        <p>To make it more realistic, we need to attach a pipe or hose to the hydraulic or pneumatic piston, and we need to make sure it moves and/or bends when the leg moves. There are many ways of doing this, but a relatively easy one is to use the extended primitive Hose. The advantage of using the Hose primitive is that you don’t need to rig it; no bones, and no IK. Instead, we are going to add two extra Cylinders, in addition to the Hose, and let the Hose start and end at those cylinders.</p>\n
        <p>In Picture 5i below you can see where we placed the two cylinders. The cylinder on the left is linked to UpperLeg, and the other is linked to Piston_PA. These cylinders represent the entry points of the hose, or the connector of a wire for example. You will probably want to use something more sophisticated than a cylinder, but make sure it is a separate object.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5i.gif" />\n
        Picture 5i.</p>\n
        <p>Next, create the hose by selecting Extended Primitives on the Create tab of the Command Panel, clicking the Hose button, and drawing a hose in any viewport, as shown in Picture 5j below. Don’t worry about its size, location, or shape yet.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5j.gif" />\n
        Picture 5j.</p>\n
        <p>On the Modify tab of the Command Panel, enable the Bound to Object Pivots. Click the Pick Top Object button and click on the left cylinder. Click the Pick Bottom Object button and click on the right cylinder (or use the H key on your keyboard).</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5k.gif" />\n
        Picture 5k.</p>\n
        <p>Depending on the orientation of the cylinders we use to connect the hose and the viewport you created them on, you may have to rotate the pivot of one or both cylinders. So if necessary, select the cylinder, enable the Affect Pivot Only button (picture 3f), and rotate the pivot. While you rotate the pivot, the hose will bend with it so you can easily see when it is at the right angle.</p>\n
        <p>When the hose is correctly aligned to the cylinders, click the hose again, scroll down below on the Modify tab, and disable the Flex Section Enable option as shown below in Picture 5l. Also decrease the Diameter: value in the Hose Shape section to a value that is less than the cylinders.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5l.gif" />\n
        Picture 5l.</p>\n
        <p>As you can see, the hose is too long and needs to hang more tightly against the leg. You can do this by decreasing the Tension values (see Picture 5k). In the final images below, we used 25 for both cylinders. If you move the leg again using on of the helpers, you will notice that the hose will stay in position and even bend when it has to. Click on one of the images to see the final animation.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5m.gif" /> <img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5n.gif" />\n
        Picture 5m.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_piston_hose.zip">Download the final scene here.</a></p>\n
        <p>I hope you enjoyed this tutorial and that it contributed something to your 3D Studio Max modeling skills.</p>
        """
    ]
    
  2. []
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
vendor
/
twig
/
twig
/
src
/
Environment.php
        @trigger_error(sprintf('The %s method is deprecated since version 1.22 and will be removed in Twig 2.0.', __METHOD__), E_USER_DEPRECATED);
 
        return $this->templateClassPrefix;
    }
 
    /**
     * Renders a template.
     *
     * @param string|TemplateWrapper $name    The template name
     * @param array                  $context An array of parameters to pass to the template
     *
     * @return string The rendered template
     *
     * @throws LoaderError  When the template cannot be found
     * @throws SyntaxError  When an error occurred during compilation
     * @throws RuntimeError When an error occurred during rendering
     */
    public function render($name, array $context = [])
    {
        return $this->load($name)->render($context);
    }
 
    /**
     * Displays a template.
     *
     * @param string|TemplateWrapper $name    The template name
     * @param array                  $context An array of parameters to pass to the template
     *
     * @throws LoaderError  When the template cannot be found
     * @throws SyntaxError  When an error occurred during compilation
     * @throws RuntimeError When an error occurred during rendering
     */
    public function display($name, array $context = [])
    {
        $this->load($name)->display($context);
    }
 
    /**
     * Loads a template.
     *
Arguments
  1. array:28 [
      "config" => Config {}
      "system" => array:27 [
        "absolute_urls" => false
        "timezone" => ""
        "default_locale" => null
        "param_sep" => ":"
        "wrapped_site" => false
        "reverse_proxy_setup" => false
        "force_ssl" => false
        "force_lowercase_urls" => true
        "custom_base_url" => "http://www.3dvalley.com"
        "username_regex" => "^[a-z0-9_-]{3,16}$"
        "pwd_regex" => "(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}"
        "intl_enabled" => true
        "languages" => array:9 [
          "supported" => []
          "default_lang" => null
          "include_default_lang" => true
          "pages_fallback_only" => false
          "translations" => true
          "translations_fallback" => true
          "session_store_active" => false
          "http_accept_language" => false
          "override_locale" => false
        ]
        "home" => array:2 [
          "alias" => "/home"
          "hide_in_urls" => false
        ]
        "pages" => array:26 [
          "theme" => "minimaxing"
          "order" => array:2 [
            "by" => "default"
            "dir" => "asc"
          ]
          "list" => array:1 [
            "count" => 20
          ]
          "dateformat" => array:3 [
            "default" => null
            "short" => "jS M Y"
            "long" => "F jS \a\t g:ia"
          ]
          "publish_dates" => true
          "process" => array:2 [
            "markdown" => true
            "twig" => false
          ]
          "twig_first" => false
          "never_cache_twig" => false
          "events" => array:2 [
            "page" => true
            "twig" => true
          ]
          "markdown" => array:5 [
            "extra" => true
            "auto_line_breaks" => false
            "auto_url_links" => false
            "escape_markup" => false
            "special_chars" => array:2 [
              ">" => "gt"
              "<" => "lt"
            ]
          ]
          "types" => array:7 [
            0 => "txt"
            1 => "xml"
            2 => "html"
            3 => "htm"
            4 => "json"
            5 => "rss"
            6 => "atom"
          ]
          "append_url_extension" => ""
          "expires" => 604800
          "cache_control" => null
          "last_modified" => false
          "etag" => true
          "vary_accept_encoding" => false
          "redirect_default_route" => false
          "redirect_default_code" => "301"
          "redirect_trailing_slash" => true
          "ignore_files" => array:1 [
            0 => ".DS_Store"
          ]
          "ignore_folders" => array:2 [
            0 => ".git"
            1 => ".idea"
          ]
          "ignore_hidden" => true
          "hide_empty_folders" => false
          "url_taxonomy_filters" => true
          "frontmatter" => array:2 [
            "process_twig" => false
            "ignore_fields" => array:2 [
              0 => "form"
              1 => "forms"
            ]
          ]
        ]
        "cache" => array:13 [
          "enabled" => true
          "check" => array:1 [
            "method" => "file"
          ]
          "driver" => "apcu"
          "prefix" => "g"
          "purge_at" => "0 4 * * *"
          "clear_at" => "0 3 * * *"
          "clear_job_type" => "standard"
          "clear_images_by_default" => true
          "cli_compatibility" => false
          "lifetime" => 604800
          "gzip" => true
          "allow_webserver_gzip" => false
          "redis" => array:1 [
            "socket" => false
          ]
        ]
        "twig" => array:7 [
          "cache" => true
          "debug" => true
          "auto_reload" => true
          "autoescape" => false
          "undefined_functions" => true
          "undefined_filters" => true
          "umask_fix" => false
        ]
        "assets" => array:12 [
          "css_pipeline" => true
          "css_pipeline_include_externals" => true
          "css_pipeline_before_excludes" => true
          "css_minify" => true
          "css_minify_windows" => false
          "css_rewrite" => true
          "js_pipeline" => true
          "js_pipeline_include_externals" => true
          "js_pipeline_before_excludes" => true
          "js_minify" => true
          "enable_asset_timestamp" => false
          "collections" => array:1 [
            "jquery" => "system://assets/jquery/jquery-2.x.min.js"
          ]
        ]
        "errors" => array:2 [
          "display" => 1
          "log" => true
        ]
        "log" => array:2 [
          "handler" => "file"
          "syslog" => array:1 [
            "facility" => "local6"
          ]
        ]
        "debugger" => array:3 [
          "enabled" => false
          "shutdown" => array:1 [
            "close_connection" => true
          ]
          "twig" => true
        ]
        "images" => array:6 [
          "default_image_quality" => 85
          "cache_all" => false
          "cache_perms" => "0755"
          "debug" => false
          "auto_fix_orientation" => false
          "seofriendly" => false
        ]
        "media" => array:5 [
          "enable_media_timestamp" => false
          "unsupported_inline_types" => []
          "allowed_fallback_types" => []
          "auto_metadata_exif" => false
          "upload_limit" => 33554432
        ]
        "session" => array:9 [
          "enabled" => true
          "initialize" => true
          "timeout" => 1800
          "name" => "grav-site"
          "uniqueness" => "path"
          "secure" => false
          "httponly" => true
          "split" => true
          "path" => "/"
        ]
        "gpm" => array:5 [
          "releases" => "stable"
          "proxy_url" => null
          "method" => "auto"
          "verify_peer" => true
          "official_gpm_only" => true
        ]
        "accounts" => array:2 [
          "type" => "data"
          "storage" => "file"
        ]
        "strict_mode" => array:2 [
          "yaml_compat" => true
          "twig_compat" => true
        ]
      ]
      "theme" => array:2 [
        "enabled" => true
        "dropdown" => array:1 [
          "enabled" => false
        ]
      ]
      "site" => array:14 [
        "title" => "3Dvalley"
        "default_lang" => "en"
        "author" => array:2 [
          "name" => "Admin"
          "email" => "webmaster@3dvalley.com"
        ]
        "taxonomies" => array:2 [
          0 => "category"
          1 => "tag"
        ]
        "metadata" => array:1 [
          "description" => "Free 3D models and textures"
        ]
        "summary" => array:4 [
          "enabled" => true
          "format" => "short"
          "size" => 300
          "delimiter" => "==="
        ]
        "redirects" => array:12 [
          "/tutorials/3d-studio-max-hotkeys-and-mouse-essentials" => "/tutorials/threed-studio-max-hotkeys-and-mouse-essentials "
          "/tutorials/3d-studio-max-tutorial-modeling-a-plunger" => "/tutorials/modeling-a-plunger-in-3d-studio-max"
          "/tutorials/modeling-a-brake-rotor" => "/tutorials/modeling-brake-rotor-in-3d-studio-max"
          "/models" => "/3d-models"
          "/free-textures" => "/textures"
          "/textures.shtml" => "/textures"
          "/tutorials/rendering-objects-in-a-solidwire-mix" => "/tutorials/rendering-wip-images-in-3d-studio-max"
          "/tutorials/modeling-a-highly-detailed-basketball-in-3d-studio-max" => "/tutorials/modeling-a-highly-detailed-basketball-in-3ds-max/"
          "/models.shtml" => "/3d-models"
          "/c/tutorials" => "/tutorials"
          "/models/models_household.shtml" => "/3d-models/household"
          "/downloadables/3DStudioMAX-hotkeys.pdf" => "/tutorials/threed-studio-max-hotkeys-and-mouse-essentials"
        ]
        "routes" => null
        "blog" => array:1 [
          "route" => "/blog"
        ]
        "header" => array:2 [
          "title" => "I'm Jonathan Doe."
          "description" => "I'm a Manila based <span>graphic designer</span>, <span>illustrator</span> and <span>webdesigner</span> creating awesome and effective visual identities for companies of all sizes around the globe. Let's <a class="smoothscroll" href="#about">start scrolling</a> and learn more <a class="smoothscroll" href="#about">about me</a>."
        ]
        "copyright" => array:2 [
          0 => array:1 [
            "line" => "Copyright 2014 CeeVee"
          ]
          1 => array:1 [
            "line" => "Design by <a title="Styleshout" href="http://www.styleshout.com/">Styleshout</a>"
          ]
        ]
        "social" => array:7 [
          0 => array:2 [
            "url" => "#"
            "icon" => "facebook"
          ]
          1 => array:2 [
            "url" => "#"
            "icon" => "twitter"
          ]
          2 => array:2 [
            "url" => "#"
            "icon" => "google-plus"
          ]
          3 => array:2 [
            "url" => "#"
            "icon" => "linkedin"
          ]
          4 => array:2 [
            "url" => "#"
            "icon" => "instagram"
          ]
          5 => array:2 [
            "url" => "#"
            "icon" => "dribbble"
          ]
          6 => array:2 [
            "url" => "#"
            "icon" => "skype"
          ]
        ]
        "twitter" => array:7 [
          "id" => "657554810648948736"
          "domId" => "tw-widget1"
          "maxTweets" => 3
          "enableLinks" => "true"
          "showInteraction" => "false"
          "showImages" => "false"
          "showUser" => "false"
        ]
        "acxtest" => "TEST"
      ]
      "uri" => Uri {}
      "assets" => Assets {}
      "taxonomy" => Taxonomy {}
      "browser" => Browser {}
      "base_dir" => "/home/jhiemstraxartec/public_html/test"
      "home_url" => "/"
      "base_url" => ""
      "base_url_absolute" => "http://www.3dvalley.com"
      "base_url_relative" => ""
      "base_url_simple" => ""
      "theme_dir" => "/home/jhiemstraxartec/public_html/test/user/themes/minimaxing"
      "theme_url" => "/user/themes/minimaxing"
      "html_lang" => "en"
      "language_codes" => LanguageCodes {}
      "json" => "</script><script>"
      "myvar" => "</script><script>"
      "form" => null
      "form_max_filesize" => 32
      "form_json_response" => []
      "pages" => Page {}
      "page" => Page {}
      "header" => {}
      "media" => Media {}
      "content" => """
        <p>Like most tasks in 3D Studio Max and similar products, rigging robots is easy, if you know how. Depending on the complexity of the robot, some may find it even easier than rigging a human or animal character. This is because most parts of a robot do not deform during movement, with the exception of cabling and other flexible parts, so you don’t have to ‘skin’ it. One of the primary challenges in building a cool robot, which still looks cool when animated, is creating realistic mechanical joints.</p>\n
        \n
        <p>The first version of our example robotic leg below is not very realistic however, because it would collapse like a bone structure without muscles. In the second version, we will add some robotic ‘muscles’, and the third version will include a hose. Click on the download links below some of the pictures to download the corresponding scene.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/robotrigging_mainthumb_ani.gif" /></p>\n
        <h4>1. A Human Leg</h4>\n
        <p>When rigging a human leg, the mesh deforms when the knee bends, pushing vertexes away from each other on one side and towards each other on the opposite side. This is accomplished by using a Skin modifier that binds vertexes of the mesh to the bones. The colors of the vertexes indicate the weight values which dictate how much influence moving the joint will have on those vertexes. Red vertexes represent the most rigid parts.</p>\n
        <h4>2. Our Example Robot Leg</h4>\n
        <p>Robots are typically made of metal, plastic, or some other hard and rigid material that does not deform. The following picture shows the five objects that form the basis of our example leg.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p2a.jpg" /> <img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p2b.jpg" /></p>\n
        <h4>3. Rigging Our Example Robot Leg</h4>\n
        <p>As usual, I have to make a note that the following is just a way of doing this, which doesn’t necessarily means it is the way (we’ll actually show another way later on). Picture 3a below shows the (unsmoothed) wireframe of the objects that make up this leg. Click the link below it to download the scene, or download the scene including the bones by clicking the link below Picture 3h, or just watch the pictures if you do not feel like actually doing any of this right now.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3a.gif" />\n
        Picture 3a.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_start.zip">Download start scene here</a></p>\n
        <p>The red dots in the picture above represent the pivot of the object. In the scene you can download, I have already moved them to the correct position. The UpperLeg’s pivot is positioned at exactly the same position as the pivot of Cylinder01, and LowerLeg’s pivot is at the same position as the pivot of Cylinder02. When switching to the top view, they are all aligned. It is essential that the bones you add start or end exactly at those pivot points.</p>\n
        <p>A way of making sure the bones are positioned correctly is to snap to pivots. When you use this method it is also essential that all the pivots are aligned when viewing from the top. If in your robot they aren’t and it is too complex or difficult to align them, you can skip the following snap settings and just draw the bones, select them all and move them to the center of the leg (Top view). To use the snap setting, right-click the Snaps Toggle button on the main toolbar and select Pivot and clear others if necessary (see Picture 3b). Now click the Snaps Toggle button again (with the left mouse button) to enable it.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3b.gif" />\n
        Picture 3b.</p>\n
        <p>Click the Bones button in the Systems section on the Create tab of the Command Panel as displayed in Picture 3c below. Choose SplineIKSolver as the IK Solver and enable Assign to Children (you can use another IK Solver or none at all, if you prefer).</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3c.gif" />\n
        Picture 3c.</p>\n
        <p>Now draw the bones, by clicking on the spots 1, 2, and 3 shown in Picture 3d and then right-click anywhere in the viewport to stop. Spots 1, 2 and 3 are the pivot points of Cylinder01, Cylinder02, and Cylinder03.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3d.gif" />\n
        Picture 3d.</p>\n
        <p>When the Spline IK Solver dialog shown in Picture 3e below opens, just click OK.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3e.gif" />\n
        Picture 3e.</p>\n
        <p>Now before you link the bones to the leg, you should make sure that the pivots of the bones are positioned correctly on the pivot of the limbs, the Spline IK Solver we added moved them slightly. To move a bone’s pivot, click the Affect Pivot Only button on the Hierarchy tab of the Command Panel, and disable the Enabled button on the Motion tab of the Command Panel.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3f.gif" />\n
        Picture 3f.</p>\n
        <p>Then select the pivot of the bone and move it to the correct position. Make sure you zoom in and place it exactly in the center of the limbs’ pivots. You also might want to disable the snap to pivot setting first by clicking the Snaps Toggle button again. If for some reason you cannot get them in the right position, there is no need to continue, as the whole setup depends on the pivots’ position.</p>\n
        <p>When you are sure the pivots are positioned correctly, select Cylinder01 and link it to UpperLeg. Select Cylinder02 and link it to the LowerLeg, and select Cylinder03 to LowerLeg as well. To link one object to another click the Select and Link button on the main tool bar, select the object you want to link and drag to the object you want to link to. If you do it correctly, the object you link to, will flash white once.</p>\n
        <p>We will use the same select and link method to link the objects to the bones, instead of using a Skin modifier. Link UpperLeg to the upper bone, and link LowerLeg to the lower bone.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3g.gif" />\n
        Picture 3g.</p>\n
        <p>When you done all of the above, or download the scene including the bones by using the link below, select the IK Chain or any of the point helpers and move it. The knee joint should now operate as shown in Picture 3g, without any of the objects deforming during movement.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3h.gif" />\n
        Picture 3h.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_end.zip">Download scene here.</a></p>\n
        <h4>4. Another Approach</h4>\n
        <p>Before we continue with this leg and add some muscles, we will use another method of rigging this leg. As someone kindly pointed out to me, there is no absolute need to use bones . If you are new to rigging characters or robots in particular, you may want to go for the bones method discussed above, but a robot is often a skeleton by itself, eliminating the need for bones. 3D Studio Max allows any object to act like a bone, and allows you also to assign IK solvers to any hierarchical set of objects. Also in this type of ‘bone’ setup, it is absolutely imperative that the pivots of the objects are in the correct position. We will illustrate this with some pictures later.</p>\n
        <p>To make this work with the previous example (delete the previous bone structure or use the scene you downloaded earlier), and link the objects to each other as followed:</p>\n
        <p>Cylinder03 -&gt; LowerLeg\n
        LowerLeg -&gt; Cylinder02</p>\n
        <p>Cylinder02 -&gt; UpperLeg</p>\n
        <p>UpperLeg -&gt; Cylinder01</p>\n
        <p>Press the Schematic View (Open) button on the main toolbar to check if the hierarchy is now correct as displayed in Picture 4a.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4a.gif" />\n
        Picture 4a.</p>\n
        <p>Now all you need to do is add an IK Solver to this hierarchy to make it act like a robotic leg. You can use the IK Solver you prefer, but in this example, we are going to use the History Independent solver. Select Cylinder03, choose HI Solver from the IK Solvers section in the Animation menu, and select Cylinder01. To prevent you from linking the solver to UpperLeg instead of Cylinder01, use the Select by Name option, which basically means you should press the H key on your keyboard after you choose HI Solver from the menu, and then pick Cylinder01 from the list, instead of clicking on it in the viewport.</p>\n
        <p>If you performed the previous tasks correctly, the results should be like in Picture 4b with the IK Chain selected. If you move the IK Chain the leg should work. To make the task of animating this leg a bit more convenient, you should link the IK Chain to a Point Helper.</p>\n
        <p>A Point helper can be created by clicking the Point button in the Helpers section of the Create tab on the Command Panel, and clicking somewhere in the viewport, as depicted in Picture 4b below. In this case, I suggest you place it somewhere at the bottom of the leg. Use the same Select and Link method as discussed earlier to link the IK Chain to the Point helper, so you can animate the leg by moving the Point helper.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4b.gif" />\n
        Picture 4b.</p>\n
        <p>If your robot has a complex geometry and animating the individual objects slows down your computer too much, you can configure 3D Studio Max to display the objects as bones. When using our example leg from the previous steps, you should select Cylinder01, 02, 03, UpperLeg, and LowerLeg, and select Bone Tools from the Character menu. Enable the Bone On option on the Bone Tools dialog as shown below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4c.gif" />\n
        Picture 4c.</p>\n
        <p>Next, open the Display tab on the Command Panel, scroll down, and in the Link Display section enable the Display Links option and the Link Replaces Object option.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4d.gif" />\n
        Picture 4d.</p>\n
        <p>The results should be as depicted in Picture 4e below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4e.gif" />\n
        Picture 4e.</p>\n
        <p>Alternatively, you can enable only the Display Links option and right above the Link Display section enable the Display as Box option in the Display Properties section. The results should be as depicted in Picture 4f below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4f.gif" />\n
        Picture 4f.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_ik_end.zip">Download the scene here.</a></p>\n
        <h4>5. Muscles</h4>\n
        <p>As I mentioned earlier, the leg used in the example above is not very realistic; it needs some muscles to make it move automatically and at the same time give it some strength. You can make up your own mechanisms, but you can also use one of the three main methods used in modern real world robots:</p>\n
        <p>Electrical motors</p>\n
        <p>For the example leg from above, this would be the easy way out, as you would ‘only’ have to increase the size of the knee joint and modify it into to something like shown below in Photo I, so it becomes viable an electrical motor could fit inside. Additionally, rigging the robot is easy as you can use one of the methods we discussed earlier.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/motoman_sv3x.jpg" />\n
        Photo I. Industrial robot arm powered by electrical motors.</p>\n
        <p>Hydraulic/Pneumatic/Magnetic pistons</p>\n
        <p>Another commonly used method to power robots are pistons. A piston (see Photo II below) is basically consists of a metal bar that goes inside a tube. Pressurized air or oil is pumped into the piston to push out metal bar. This is usually the sound you here when a robot moves. If you want to make them realistic, you should attach a hose to it, which leads to a compressor somewhere in or on the robot. These hydraulic or pneumatic pistons are much more powerful than electrical motors. Smaller pistons may use magnetic force to either pull or push the metal bar. The latter would have electrical wires attached to it, instead of a hose.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/photo_ii.gif" />\n
        Photo II. Crane powered by hydraulic pistons.</p>\n
        <p>Picture 5a and 5b show our second example leg. It includes a piston that is made of two cylinders called Piston_PA and Piston_PB. Two additional cylinders (P_Axis_A and P_Axis_B) form the axis of the piston’s parts.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5a.gif" /> <img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5b.gif" />\n
        Picture 5a. &amp; Picture 5b.</p>\n
        <p>As you can see in Picture 5c below, we already rigged the leg with two bones and an IKSplineSolver. You can download the scene by clicking the link below the picture.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5c.gif" />\n
        Picture 5c.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_pistons_start.zip">Download the scene here.</a></p>\n
        <p>First, we will link the piston’s parts to the leg as followed:</p>\n
        <p>P_Axis_A -&gt; UpperLeg\n
        P_Axis_B -&gt; LowerLeg</p>\n
        <p>Piston_PA -&gt; P_Axis_A</p>\n
        <p>Piston_PB -&gt; P_Axis_B</p>\n
        <p>The hierarchy of the leg should now be exactly like in Picture 5d.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5d.gif" />\n
        Picture 5d.</p>\n
        <p>If we would bend the knee, by using the lower helper (Point3) for example, the two parts of the piston will not stay aligned correctly and will ‘break’ as shown in Picture 5e below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5e.gif" />\n
        Picture 5e.</p>\n
        <p>(If you moved the leg, press use Undo (Ctrl-Z) to move it back to its original position.)</p>\n
        <p>To make sure the metal bar stays inside the tube, we need to use a constraint, in this case the Look At constraint. As in the previous parts of this tutorial, the placement of the pivots of the piston’s parts is essential to make it work. The pivots for P_Axis_A and Piston_PA are exactly on the same position, and the pivots for P_Axis_B and Piston_PB are also exactly on the same position. We have already done this in the downloadable scene by selecting the parts that have the pivots on the same axis, enabling the Affect Pivot Only button (see Picture 3f) and using the Align tool (on both the Front, Top, and Left view).</p>\n
        <p>We will need to add two Look At constraints, one for each part of the piston. Select Piston_PA and select Look At from the Constraints section in the Animation menu, as depicted in Picture 5f below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5f.gif" />\n
        Picture 5f.</p>\n
        <p>Press the H key on your keyboard, select P_Axis_B, and click the Pick button. Piston_PA now changes its orientation. To make sure it point in the original direction, enable the Keep Initial Offset option on the Parameters section on the Motion tab of the Command Panel, as depicted in Picture 5g below. (The parameters section opened automatically when you added the Look At constraint.)</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5g.gif" />\n
        Picture 5g.</p>\n
        <p>Repeat this step for the other part of the piston, in other words: select Piston_PB, select Look At constraint from the Animation menu, pick the P_Axis_A as the target (using the H button to pick it). Also enable the Keep Initial Offset option again. So what we did is make one part of the piston ‘looks at’ the opposite part’s axis. The orientation is depicted with a blue line. If you select the helper Point03 and move it again, you will see that the metal bat slides neatly into the tube, as shown in Picture 5h below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5h.gif" />\n
        Picture 5h.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_pistons_end.zip">Download the scene here.</a></p>\n
        <p>To make it more realistic, we need to attach a pipe or hose to the hydraulic or pneumatic piston, and we need to make sure it moves and/or bends when the leg moves. There are many ways of doing this, but a relatively easy one is to use the extended primitive Hose. The advantage of using the Hose primitive is that you don’t need to rig it; no bones, and no IK. Instead, we are going to add two extra Cylinders, in addition to the Hose, and let the Hose start and end at those cylinders.</p>\n
        <p>In Picture 5i below you can see where we placed the two cylinders. The cylinder on the left is linked to UpperLeg, and the other is linked to Piston_PA. These cylinders represent the entry points of the hose, or the connector of a wire for example. You will probably want to use something more sophisticated than a cylinder, but make sure it is a separate object.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5i.gif" />\n
        Picture 5i.</p>\n
        <p>Next, create the hose by selecting Extended Primitives on the Create tab of the Command Panel, clicking the Hose button, and drawing a hose in any viewport, as shown in Picture 5j below. Don’t worry about its size, location, or shape yet.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5j.gif" />\n
        Picture 5j.</p>\n
        <p>On the Modify tab of the Command Panel, enable the Bound to Object Pivots. Click the Pick Top Object button and click on the left cylinder. Click the Pick Bottom Object button and click on the right cylinder (or use the H key on your keyboard).</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5k.gif" />\n
        Picture 5k.</p>\n
        <p>Depending on the orientation of the cylinders we use to connect the hose and the viewport you created them on, you may have to rotate the pivot of one or both cylinders. So if necessary, select the cylinder, enable the Affect Pivot Only button (picture 3f), and rotate the pivot. While you rotate the pivot, the hose will bend with it so you can easily see when it is at the right angle.</p>\n
        <p>When the hose is correctly aligned to the cylinders, click the hose again, scroll down below on the Modify tab, and disable the Flex Section Enable option as shown below in Picture 5l. Also decrease the Diameter: value in the Hose Shape section to a value that is less than the cylinders.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5l.gif" />\n
        Picture 5l.</p>\n
        <p>As you can see, the hose is too long and needs to hang more tightly against the leg. You can do this by decreasing the Tension values (see Picture 5k). In the final images below, we used 25 for both cylinders. If you move the leg again using on of the helpers, you will notice that the hose will stay in position and even bend when it has to. Click on one of the images to see the final animation.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5m.gif" /> <img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5n.gif" />\n
        Picture 5m.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_piston_hose.zip">Download the final scene here.</a></p>\n
        <p>I hope you enjoyed this tutorial and that it contributed something to your 3D Studio Max modeling skills.</p>
        """
    ]
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
system
/
src
/
Grav
/
Common
/
Twig
/
Twig.php
        $ext = '.' . ($format ?: 'html') . TWIG_EXT;
 
        // determine if params are set, if so disable twig cache
        $params = $this->grav['uri']->params(null, true);
        if (!empty($params)) {
            $this->twig->setCache(false);
        }
 
        // Get Twig template layout
        $template = $this->template($page->template() . $ext);
 
        try {
            $output = $this->twig->render($template, $vars + $twig_vars);
        } catch (\Twig_Error_Loader $e) {
            $error_msg = $e->getMessage();
            // Try html version of this template if initial template was NOT html
            if ($ext !== '.html' . TWIG_EXT) {
                try {
                    $page->templateFormat('html');
                    $output = $this->twig->render($page->template() . '.html' . TWIG_EXT, $vars + $twig_vars);
                } catch (\Twig_Error_Loader $e) {
                    throw new \RuntimeException($error_msg, 400, $e);
                }
            } else {
                throw new \RuntimeException($error_msg, 400, $e);
            }
        }
 
        return $output;
    }
 
    /**
     * Wraps the Twig_Loader_Filesystem addPath method (should be used only in `onTwigLoader()` event
     * @param string $template_path
     * @param string $namespace
     */
    public function addPath($template_path, $namespace = '__main__')
    {
        $this->loader->addPath($template_path, $namespace);
    }
Arguments
  1. "tutorialfull.html.twig"
    
  2. array:28 [
      "config" => Config {}
      "system" => array:27 [
        "absolute_urls" => false
        "timezone" => ""
        "default_locale" => null
        "param_sep" => ":"
        "wrapped_site" => false
        "reverse_proxy_setup" => false
        "force_ssl" => false
        "force_lowercase_urls" => true
        "custom_base_url" => "http://www.3dvalley.com"
        "username_regex" => "^[a-z0-9_-]{3,16}$"
        "pwd_regex" => "(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}"
        "intl_enabled" => true
        "languages" => array:9 [
          "supported" => []
          "default_lang" => null
          "include_default_lang" => true
          "pages_fallback_only" => false
          "translations" => true
          "translations_fallback" => true
          "session_store_active" => false
          "http_accept_language" => false
          "override_locale" => false
        ]
        "home" => array:2 [
          "alias" => "/home"
          "hide_in_urls" => false
        ]
        "pages" => array:26 [
          "theme" => "minimaxing"
          "order" => array:2 [
            "by" => "default"
            "dir" => "asc"
          ]
          "list" => array:1 [
            "count" => 20
          ]
          "dateformat" => array:3 [
            "default" => null
            "short" => "jS M Y"
            "long" => "F jS \a\t g:ia"
          ]
          "publish_dates" => true
          "process" => array:2 [
            "markdown" => true
            "twig" => false
          ]
          "twig_first" => false
          "never_cache_twig" => false
          "events" => array:2 [
            "page" => true
            "twig" => true
          ]
          "markdown" => array:5 [
            "extra" => true
            "auto_line_breaks" => false
            "auto_url_links" => false
            "escape_markup" => false
            "special_chars" => array:2 [
              ">" => "gt"
              "<" => "lt"
            ]
          ]
          "types" => array:7 [
            0 => "txt"
            1 => "xml"
            2 => "html"
            3 => "htm"
            4 => "json"
            5 => "rss"
            6 => "atom"
          ]
          "append_url_extension" => ""
          "expires" => 604800
          "cache_control" => null
          "last_modified" => false
          "etag" => true
          "vary_accept_encoding" => false
          "redirect_default_route" => false
          "redirect_default_code" => "301"
          "redirect_trailing_slash" => true
          "ignore_files" => array:1 [
            0 => ".DS_Store"
          ]
          "ignore_folders" => array:2 [
            0 => ".git"
            1 => ".idea"
          ]
          "ignore_hidden" => true
          "hide_empty_folders" => false
          "url_taxonomy_filters" => true
          "frontmatter" => array:2 [
            "process_twig" => false
            "ignore_fields" => array:2 [
              0 => "form"
              1 => "forms"
            ]
          ]
        ]
        "cache" => array:13 [
          "enabled" => true
          "check" => array:1 [
            "method" => "file"
          ]
          "driver" => "apcu"
          "prefix" => "g"
          "purge_at" => "0 4 * * *"
          "clear_at" => "0 3 * * *"
          "clear_job_type" => "standard"
          "clear_images_by_default" => true
          "cli_compatibility" => false
          "lifetime" => 604800
          "gzip" => true
          "allow_webserver_gzip" => false
          "redis" => array:1 [
            "socket" => false
          ]
        ]
        "twig" => array:7 [
          "cache" => true
          "debug" => true
          "auto_reload" => true
          "autoescape" => false
          "undefined_functions" => true
          "undefined_filters" => true
          "umask_fix" => false
        ]
        "assets" => array:12 [
          "css_pipeline" => true
          "css_pipeline_include_externals" => true
          "css_pipeline_before_excludes" => true
          "css_minify" => true
          "css_minify_windows" => false
          "css_rewrite" => true
          "js_pipeline" => true
          "js_pipeline_include_externals" => true
          "js_pipeline_before_excludes" => true
          "js_minify" => true
          "enable_asset_timestamp" => false
          "collections" => array:1 [
            "jquery" => "system://assets/jquery/jquery-2.x.min.js"
          ]
        ]
        "errors" => array:2 [
          "display" => 1
          "log" => true
        ]
        "log" => array:2 [
          "handler" => "file"
          "syslog" => array:1 [
            "facility" => "local6"
          ]
        ]
        "debugger" => array:3 [
          "enabled" => false
          "shutdown" => array:1 [
            "close_connection" => true
          ]
          "twig" => true
        ]
        "images" => array:6 [
          "default_image_quality" => 85
          "cache_all" => false
          "cache_perms" => "0755"
          "debug" => false
          "auto_fix_orientation" => false
          "seofriendly" => false
        ]
        "media" => array:5 [
          "enable_media_timestamp" => false
          "unsupported_inline_types" => []
          "allowed_fallback_types" => []
          "auto_metadata_exif" => false
          "upload_limit" => 33554432
        ]
        "session" => array:9 [
          "enabled" => true
          "initialize" => true
          "timeout" => 1800
          "name" => "grav-site"
          "uniqueness" => "path"
          "secure" => false
          "httponly" => true
          "split" => true
          "path" => "/"
        ]
        "gpm" => array:5 [
          "releases" => "stable"
          "proxy_url" => null
          "method" => "auto"
          "verify_peer" => true
          "official_gpm_only" => true
        ]
        "accounts" => array:2 [
          "type" => "data"
          "storage" => "file"
        ]
        "strict_mode" => array:2 [
          "yaml_compat" => true
          "twig_compat" => true
        ]
      ]
      "theme" => array:2 [
        "enabled" => true
        "dropdown" => array:1 [
          "enabled" => false
        ]
      ]
      "site" => array:14 [
        "title" => "3Dvalley"
        "default_lang" => "en"
        "author" => array:2 [
          "name" => "Admin"
          "email" => "webmaster@3dvalley.com"
        ]
        "taxonomies" => array:2 [
          0 => "category"
          1 => "tag"
        ]
        "metadata" => array:1 [
          "description" => "Free 3D models and textures"
        ]
        "summary" => array:4 [
          "enabled" => true
          "format" => "short"
          "size" => 300
          "delimiter" => "==="
        ]
        "redirects" => array:12 [
          "/tutorials/3d-studio-max-hotkeys-and-mouse-essentials" => "/tutorials/threed-studio-max-hotkeys-and-mouse-essentials "
          "/tutorials/3d-studio-max-tutorial-modeling-a-plunger" => "/tutorials/modeling-a-plunger-in-3d-studio-max"
          "/tutorials/modeling-a-brake-rotor" => "/tutorials/modeling-brake-rotor-in-3d-studio-max"
          "/models" => "/3d-models"
          "/free-textures" => "/textures"
          "/textures.shtml" => "/textures"
          "/tutorials/rendering-objects-in-a-solidwire-mix" => "/tutorials/rendering-wip-images-in-3d-studio-max"
          "/tutorials/modeling-a-highly-detailed-basketball-in-3d-studio-max" => "/tutorials/modeling-a-highly-detailed-basketball-in-3ds-max/"
          "/models.shtml" => "/3d-models"
          "/c/tutorials" => "/tutorials"
          "/models/models_household.shtml" => "/3d-models/household"
          "/downloadables/3DStudioMAX-hotkeys.pdf" => "/tutorials/threed-studio-max-hotkeys-and-mouse-essentials"
        ]
        "routes" => null
        "blog" => array:1 [
          "route" => "/blog"
        ]
        "header" => array:2 [
          "title" => "I'm Jonathan Doe."
          "description" => "I'm a Manila based <span>graphic designer</span>, <span>illustrator</span> and <span>webdesigner</span> creating awesome and effective visual identities for companies of all sizes around the globe. Let's <a class="smoothscroll" href="#about">start scrolling</a> and learn more <a class="smoothscroll" href="#about">about me</a>."
        ]
        "copyright" => array:2 [
          0 => array:1 [
            "line" => "Copyright 2014 CeeVee"
          ]
          1 => array:1 [
            "line" => "Design by <a title="Styleshout" href="http://www.styleshout.com/">Styleshout</a>"
          ]
        ]
        "social" => array:7 [
          0 => array:2 [
            "url" => "#"
            "icon" => "facebook"
          ]
          1 => array:2 [
            "url" => "#"
            "icon" => "twitter"
          ]
          2 => array:2 [
            "url" => "#"
            "icon" => "google-plus"
          ]
          3 => array:2 [
            "url" => "#"
            "icon" => "linkedin"
          ]
          4 => array:2 [
            "url" => "#"
            "icon" => "instagram"
          ]
          5 => array:2 [
            "url" => "#"
            "icon" => "dribbble"
          ]
          6 => array:2 [
            "url" => "#"
            "icon" => "skype"
          ]
        ]
        "twitter" => array:7 [
          "id" => "657554810648948736"
          "domId" => "tw-widget1"
          "maxTweets" => 3
          "enableLinks" => "true"
          "showInteraction" => "false"
          "showImages" => "false"
          "showUser" => "false"
        ]
        "acxtest" => "TEST"
      ]
      "uri" => Uri {}
      "assets" => Assets {}
      "taxonomy" => Taxonomy {}
      "browser" => Browser {}
      "base_dir" => "/home/jhiemstraxartec/public_html/test"
      "home_url" => "/"
      "base_url" => ""
      "base_url_absolute" => "http://www.3dvalley.com"
      "base_url_relative" => ""
      "base_url_simple" => ""
      "theme_dir" => "/home/jhiemstraxartec/public_html/test/user/themes/minimaxing"
      "theme_url" => "/user/themes/minimaxing"
      "html_lang" => "en"
      "language_codes" => LanguageCodes {}
      "json" => "</script><script>"
      "myvar" => "</script><script>"
      "form" => null
      "form_max_filesize" => 32
      "form_json_response" => []
      "pages" => Page {}
      "page" => Page {}
      "header" => {}
      "media" => Media {}
      "content" => """
        <p>Like most tasks in 3D Studio Max and similar products, rigging robots is easy, if you know how. Depending on the complexity of the robot, some may find it even easier than rigging a human or animal character. This is because most parts of a robot do not deform during movement, with the exception of cabling and other flexible parts, so you don’t have to ‘skin’ it. One of the primary challenges in building a cool robot, which still looks cool when animated, is creating realistic mechanical joints.</p>\n
        \n
        <p>The first version of our example robotic leg below is not very realistic however, because it would collapse like a bone structure without muscles. In the second version, we will add some robotic ‘muscles’, and the third version will include a hose. Click on the download links below some of the pictures to download the corresponding scene.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/robotrigging_mainthumb_ani.gif" /></p>\n
        <h4>1. A Human Leg</h4>\n
        <p>When rigging a human leg, the mesh deforms when the knee bends, pushing vertexes away from each other on one side and towards each other on the opposite side. This is accomplished by using a Skin modifier that binds vertexes of the mesh to the bones. The colors of the vertexes indicate the weight values which dictate how much influence moving the joint will have on those vertexes. Red vertexes represent the most rigid parts.</p>\n
        <h4>2. Our Example Robot Leg</h4>\n
        <p>Robots are typically made of metal, plastic, or some other hard and rigid material that does not deform. The following picture shows the five objects that form the basis of our example leg.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p2a.jpg" /> <img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p2b.jpg" /></p>\n
        <h4>3. Rigging Our Example Robot Leg</h4>\n
        <p>As usual, I have to make a note that the following is just a way of doing this, which doesn’t necessarily means it is the way (we’ll actually show another way later on). Picture 3a below shows the (unsmoothed) wireframe of the objects that make up this leg. Click the link below it to download the scene, or download the scene including the bones by clicking the link below Picture 3h, or just watch the pictures if you do not feel like actually doing any of this right now.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3a.gif" />\n
        Picture 3a.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_start.zip">Download start scene here</a></p>\n
        <p>The red dots in the picture above represent the pivot of the object. In the scene you can download, I have already moved them to the correct position. The UpperLeg’s pivot is positioned at exactly the same position as the pivot of Cylinder01, and LowerLeg’s pivot is at the same position as the pivot of Cylinder02. When switching to the top view, they are all aligned. It is essential that the bones you add start or end exactly at those pivot points.</p>\n
        <p>A way of making sure the bones are positioned correctly is to snap to pivots. When you use this method it is also essential that all the pivots are aligned when viewing from the top. If in your robot they aren’t and it is too complex or difficult to align them, you can skip the following snap settings and just draw the bones, select them all and move them to the center of the leg (Top view). To use the snap setting, right-click the Snaps Toggle button on the main toolbar and select Pivot and clear others if necessary (see Picture 3b). Now click the Snaps Toggle button again (with the left mouse button) to enable it.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3b.gif" />\n
        Picture 3b.</p>\n
        <p>Click the Bones button in the Systems section on the Create tab of the Command Panel as displayed in Picture 3c below. Choose SplineIKSolver as the IK Solver and enable Assign to Children (you can use another IK Solver or none at all, if you prefer).</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3c.gif" />\n
        Picture 3c.</p>\n
        <p>Now draw the bones, by clicking on the spots 1, 2, and 3 shown in Picture 3d and then right-click anywhere in the viewport to stop. Spots 1, 2 and 3 are the pivot points of Cylinder01, Cylinder02, and Cylinder03.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3d.gif" />\n
        Picture 3d.</p>\n
        <p>When the Spline IK Solver dialog shown in Picture 3e below opens, just click OK.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3e.gif" />\n
        Picture 3e.</p>\n
        <p>Now before you link the bones to the leg, you should make sure that the pivots of the bones are positioned correctly on the pivot of the limbs, the Spline IK Solver we added moved them slightly. To move a bone’s pivot, click the Affect Pivot Only button on the Hierarchy tab of the Command Panel, and disable the Enabled button on the Motion tab of the Command Panel.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3f.gif" />\n
        Picture 3f.</p>\n
        <p>Then select the pivot of the bone and move it to the correct position. Make sure you zoom in and place it exactly in the center of the limbs’ pivots. You also might want to disable the snap to pivot setting first by clicking the Snaps Toggle button again. If for some reason you cannot get them in the right position, there is no need to continue, as the whole setup depends on the pivots’ position.</p>\n
        <p>When you are sure the pivots are positioned correctly, select Cylinder01 and link it to UpperLeg. Select Cylinder02 and link it to the LowerLeg, and select Cylinder03 to LowerLeg as well. To link one object to another click the Select and Link button on the main tool bar, select the object you want to link and drag to the object you want to link to. If you do it correctly, the object you link to, will flash white once.</p>\n
        <p>We will use the same select and link method to link the objects to the bones, instead of using a Skin modifier. Link UpperLeg to the upper bone, and link LowerLeg to the lower bone.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3g.gif" />\n
        Picture 3g.</p>\n
        <p>When you done all of the above, or download the scene including the bones by using the link below, select the IK Chain or any of the point helpers and move it. The knee joint should now operate as shown in Picture 3g, without any of the objects deforming during movement.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p3h.gif" />\n
        Picture 3h.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_end.zip">Download scene here.</a></p>\n
        <h4>4. Another Approach</h4>\n
        <p>Before we continue with this leg and add some muscles, we will use another method of rigging this leg. As someone kindly pointed out to me, there is no absolute need to use bones . If you are new to rigging characters or robots in particular, you may want to go for the bones method discussed above, but a robot is often a skeleton by itself, eliminating the need for bones. 3D Studio Max allows any object to act like a bone, and allows you also to assign IK solvers to any hierarchical set of objects. Also in this type of ‘bone’ setup, it is absolutely imperative that the pivots of the objects are in the correct position. We will illustrate this with some pictures later.</p>\n
        <p>To make this work with the previous example (delete the previous bone structure or use the scene you downloaded earlier), and link the objects to each other as followed:</p>\n
        <p>Cylinder03 -&gt; LowerLeg\n
        LowerLeg -&gt; Cylinder02</p>\n
        <p>Cylinder02 -&gt; UpperLeg</p>\n
        <p>UpperLeg -&gt; Cylinder01</p>\n
        <p>Press the Schematic View (Open) button on the main toolbar to check if the hierarchy is now correct as displayed in Picture 4a.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4a.gif" />\n
        Picture 4a.</p>\n
        <p>Now all you need to do is add an IK Solver to this hierarchy to make it act like a robotic leg. You can use the IK Solver you prefer, but in this example, we are going to use the History Independent solver. Select Cylinder03, choose HI Solver from the IK Solvers section in the Animation menu, and select Cylinder01. To prevent you from linking the solver to UpperLeg instead of Cylinder01, use the Select by Name option, which basically means you should press the H key on your keyboard after you choose HI Solver from the menu, and then pick Cylinder01 from the list, instead of clicking on it in the viewport.</p>\n
        <p>If you performed the previous tasks correctly, the results should be like in Picture 4b with the IK Chain selected. If you move the IK Chain the leg should work. To make the task of animating this leg a bit more convenient, you should link the IK Chain to a Point Helper.</p>\n
        <p>A Point helper can be created by clicking the Point button in the Helpers section of the Create tab on the Command Panel, and clicking somewhere in the viewport, as depicted in Picture 4b below. In this case, I suggest you place it somewhere at the bottom of the leg. Use the same Select and Link method as discussed earlier to link the IK Chain to the Point helper, so you can animate the leg by moving the Point helper.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4b.gif" />\n
        Picture 4b.</p>\n
        <p>If your robot has a complex geometry and animating the individual objects slows down your computer too much, you can configure 3D Studio Max to display the objects as bones. When using our example leg from the previous steps, you should select Cylinder01, 02, 03, UpperLeg, and LowerLeg, and select Bone Tools from the Character menu. Enable the Bone On option on the Bone Tools dialog as shown below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4c.gif" />\n
        Picture 4c.</p>\n
        <p>Next, open the Display tab on the Command Panel, scroll down, and in the Link Display section enable the Display Links option and the Link Replaces Object option.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4d.gif" />\n
        Picture 4d.</p>\n
        <p>The results should be as depicted in Picture 4e below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4e.gif" />\n
        Picture 4e.</p>\n
        <p>Alternatively, you can enable only the Display Links option and right above the Link Display section enable the Display as Box option in the Display Properties section. The results should be as depicted in Picture 4f below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p4f.gif" />\n
        Picture 4f.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_ik_end.zip">Download the scene here.</a></p>\n
        <h4>5. Muscles</h4>\n
        <p>As I mentioned earlier, the leg used in the example above is not very realistic; it needs some muscles to make it move automatically and at the same time give it some strength. You can make up your own mechanisms, but you can also use one of the three main methods used in modern real world robots:</p>\n
        <p>Electrical motors</p>\n
        <p>For the example leg from above, this would be the easy way out, as you would ‘only’ have to increase the size of the knee joint and modify it into to something like shown below in Photo I, so it becomes viable an electrical motor could fit inside. Additionally, rigging the robot is easy as you can use one of the methods we discussed earlier.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/motoman_sv3x.jpg" />\n
        Photo I. Industrial robot arm powered by electrical motors.</p>\n
        <p>Hydraulic/Pneumatic/Magnetic pistons</p>\n
        <p>Another commonly used method to power robots are pistons. A piston (see Photo II below) is basically consists of a metal bar that goes inside a tube. Pressurized air or oil is pumped into the piston to push out metal bar. This is usually the sound you here when a robot moves. If you want to make them realistic, you should attach a hose to it, which leads to a compressor somewhere in or on the robot. These hydraulic or pneumatic pistons are much more powerful than electrical motors. Smaller pistons may use magnetic force to either pull or push the metal bar. The latter would have electrical wires attached to it, instead of a hose.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/photo_ii.gif" />\n
        Photo II. Crane powered by hydraulic pistons.</p>\n
        <p>Picture 5a and 5b show our second example leg. It includes a piston that is made of two cylinders called Piston_PA and Piston_PB. Two additional cylinders (P_Axis_A and P_Axis_B) form the axis of the piston’s parts.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5a.gif" /> <img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5b.gif" />\n
        Picture 5a. &amp; Picture 5b.</p>\n
        <p>As you can see in Picture 5c below, we already rigged the leg with two bones and an IKSplineSolver. You can download the scene by clicking the link below the picture.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5c.gif" />\n
        Picture 5c.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_pistons_start.zip">Download the scene here.</a></p>\n
        <p>First, we will link the piston’s parts to the leg as followed:</p>\n
        <p>P_Axis_A -&gt; UpperLeg\n
        P_Axis_B -&gt; LowerLeg</p>\n
        <p>Piston_PA -&gt; P_Axis_A</p>\n
        <p>Piston_PB -&gt; P_Axis_B</p>\n
        <p>The hierarchy of the leg should now be exactly like in Picture 5d.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5d.gif" />\n
        Picture 5d.</p>\n
        <p>If we would bend the knee, by using the lower helper (Point3) for example, the two parts of the piston will not stay aligned correctly and will ‘break’ as shown in Picture 5e below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5e.gif" />\n
        Picture 5e.</p>\n
        <p>(If you moved the leg, press use Undo (Ctrl-Z) to move it back to its original position.)</p>\n
        <p>To make sure the metal bar stays inside the tube, we need to use a constraint, in this case the Look At constraint. As in the previous parts of this tutorial, the placement of the pivots of the piston’s parts is essential to make it work. The pivots for P_Axis_A and Piston_PA are exactly on the same position, and the pivots for P_Axis_B and Piston_PB are also exactly on the same position. We have already done this in the downloadable scene by selecting the parts that have the pivots on the same axis, enabling the Affect Pivot Only button (see Picture 3f) and using the Align tool (on both the Front, Top, and Left view).</p>\n
        <p>We will need to add two Look At constraints, one for each part of the piston. Select Piston_PA and select Look At from the Constraints section in the Animation menu, as depicted in Picture 5f below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5f.gif" />\n
        Picture 5f.</p>\n
        <p>Press the H key on your keyboard, select P_Axis_B, and click the Pick button. Piston_PA now changes its orientation. To make sure it point in the original direction, enable the Keep Initial Offset option on the Parameters section on the Motion tab of the Command Panel, as depicted in Picture 5g below. (The parameters section opened automatically when you added the Look At constraint.)</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5g.gif" />\n
        Picture 5g.</p>\n
        <p>Repeat this step for the other part of the piston, in other words: select Piston_PB, select Look At constraint from the Animation menu, pick the P_Axis_A as the target (using the H button to pick it). Also enable the Keep Initial Offset option again. So what we did is make one part of the piston ‘looks at’ the opposite part’s axis. The orientation is depicted with a blue line. If you select the helper Point03 and move it again, you will see that the metal bat slides neatly into the tube, as shown in Picture 5h below.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5h.gif" />\n
        Picture 5h.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_pistons_end.zip">Download the scene here.</a></p>\n
        <p>To make it more realistic, we need to attach a pipe or hose to the hydraulic or pneumatic piston, and we need to make sure it moves and/or bends when the leg moves. There are many ways of doing this, but a relatively easy one is to use the extended primitive Hose. The advantage of using the Hose primitive is that you don’t need to rig it; no bones, and no IK. Instead, we are going to add two extra Cylinders, in addition to the Hose, and let the Hose start and end at those cylinders.</p>\n
        <p>In Picture 5i below you can see where we placed the two cylinders. The cylinder on the left is linked to UpperLeg, and the other is linked to Piston_PA. These cylinders represent the entry points of the hose, or the connector of a wire for example. You will probably want to use something more sophisticated than a cylinder, but make sure it is a separate object.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5i.gif" />\n
        Picture 5i.</p>\n
        <p>Next, create the hose by selecting Extended Primitives on the Create tab of the Command Panel, clicking the Hose button, and drawing a hose in any viewport, as shown in Picture 5j below. Don’t worry about its size, location, or shape yet.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5j.gif" />\n
        Picture 5j.</p>\n
        <p>On the Modify tab of the Command Panel, enable the Bound to Object Pivots. Click the Pick Top Object button and click on the left cylinder. Click the Pick Bottom Object button and click on the right cylinder (or use the H key on your keyboard).</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5k.gif" />\n
        Picture 5k.</p>\n
        <p>Depending on the orientation of the cylinders we use to connect the hose and the viewport you created them on, you may have to rotate the pivot of one or both cylinders. So if necessary, select the cylinder, enable the Affect Pivot Only button (picture 3f), and rotate the pivot. While you rotate the pivot, the hose will bend with it so you can easily see when it is at the right angle.</p>\n
        <p>When the hose is correctly aligned to the cylinders, click the hose again, scroll down below on the Modify tab, and disable the Flex Section Enable option as shown below in Picture 5l. Also decrease the Diameter: value in the Hose Shape section to a value that is less than the cylinders.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5l.gif" />\n
        Picture 5l.</p>\n
        <p>As you can see, the hose is too long and needs to hang more tightly against the leg. You can do this by decreasing the Tension values (see Picture 5k). In the final images below, we used 25 for both cylinders. If you move the leg again using on of the helpers, you will notice that the hose will stay in position and even bend when it has to. Click on one of the images to see the final animation.</p>\n
        <p><img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5m.gif" /> <img alt="" src="/user/pages/04.tutorials/rigging-robotic-joints-in-3d-studio-max/p5n.gif" />\n
        Picture 5m.</p>\n
        <p><a href="/tutorials/rigging-robotic-joints-in-3d-studio-max/robotleg_piston_hose.zip">Download the final scene here.</a></p>\n
        <p>I hope you enjoyed this tutorial and that it contributed something to your 3D Studio Max modeling skills.</p>
        """
    ]
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
system
/
src
/
Grav
/
Common
/
Service
/
OutputServiceProvider.php
 
namespace Grav\Common\Service;
 
use Grav\Common\Page\Interfaces\PageInterface;
use Grav\Common\Twig\Twig;
use Pimple\Container;
use Pimple\ServiceProviderInterface;
 
class OutputServiceProvider implements ServiceProviderInterface
{
    public function register(Container $container)
    {
        $container['output'] = function ($c) {
            /** @var Twig $twig */
            $twig = $c['twig'];
 
            /** @var PageInterface $page */
            $page = $c['page'];
 
            return $twig->processSite($page->templateFormat());
        };
    }
}
 
Arguments
  1. "txt"
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
vendor
/
pimple
/
pimple
/
src
/
Pimple
/
Container.php
    {
        if (!isset($this->keys[$id])) {
            throw new UnknownIdentifierException($id);
        }
 
        if (
            isset($this->raw[$id])
            || !\is_object($this->values[$id])
            || isset($this->protected[$this->values[$id]])
            || !\method_exists($this->values[$id], '__invoke')
        ) {
            return $this->values[$id];
        }
 
        if (isset($this->factories[$this->values[$id]])) {
            return $this->values[$id]($this);
        }
 
        $raw = $this->values[$id];
        $val = $this->values[$id] = $raw($this);
        $this->raw[$id] = $raw;
 
        $this->frozen[$id] = true;
 
        return $val;
    }
 
    /**
     * Checks if a parameter or an object is set.
     *
     * @param string $id The unique identifier for the parameter or object
     *
     * @return bool
     */
    public function offsetExists($id)
    {
        return isset($this->keys[$id]);
    }
 
    /**
Arguments
  1. Grav {}
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
system
/
src
/
Grav
/
Common
/
Processors
/
RenderProcessor.php
 
namespace Grav\Common\Processors;
 
use Grav\Common\Page\Interfaces\PageInterface;
use Grav\Framework\Psr7\Response;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\RequestHandlerInterface;
 
class RenderProcessor extends ProcessorBase
{
    public $id = 'render';
    public $title = 'Render';
 
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler) : ResponseInterface
    {
        $this->startTimer();
 
        $container = $this->container;
        $output =  $container['output'];
 
        if ($output instanceof ResponseInterface) {
            return $output;
        }
 
        ob_start();
 
        // Use internal Grav output.
        $container->output = $output;
        $container->fireEvent('onOutputGenerated');
 
        echo $container->output;
 
        // remove any output
        $container->output = '';
 
        $this->container->fireEvent('onOutputRendered');
 
        $html = ob_get_clean();
 
Arguments
  1. "output"
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
    private $handler;
 
    /** @var ContainerInterface|null */
    private $container;
 
    /**
     * {@inheritdoc}
     * @throws InvalidArgumentException
     */
    public function handle(ServerRequestInterface $request): ResponseInterface
    {
        $middleware = array_shift($this->middleware);
 
        // Use default callable if there is no middleware.
        if ($middleware === null) {
            return \call_user_func($this->handler, $request);
        }
 
        if ($middleware instanceof MiddlewareInterface) {
            return $middleware->process($request, clone $this);
        }
 
        if (null === $this->container || !$this->container->has($middleware)) {
            throw new InvalidArgumentException(
                sprintf('The middleware is not a valid %s and is not passed in the Container', MiddlewareInterface::class),
                $middleware
            );
        }
 
        array_unshift($this->middleware, $this->container->get($middleware));
 
        return $this->handle($request);
    }
}
Arguments
  1. ServerRequest {}
    
  2. RequestHandler {}
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
 
        // Use default callable if there is no middleware.
        if ($middleware === null) {
            return \call_user_func($this->handler, $request);
        }
 
        if ($middleware instanceof MiddlewareInterface) {
            return $middleware->process($request, clone $this);
        }
 
        if (null === $this->container || !$this->container->has($middleware)) {
            throw new InvalidArgumentException(
                sprintf('The middleware is not a valid %s and is not passed in the Container', MiddlewareInterface::class),
                $middleware
            );
        }
 
        array_unshift($this->middleware, $this->container->get($middleware));
 
        return $this->handle($request);
    }
}
Arguments
  1. ServerRequest {}
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
system
/
src
/
Grav
/
Common
/
Processors
/
DebuggerAssetsProcessor.php
 
namespace Grav\Common\Processors;
 
use Grav\Framework\Psr7\Response;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\RequestHandlerInterface;
 
class DebuggerAssetsProcessor extends ProcessorBase
{
    public $id = 'debugger_assets';
    public $title = 'Debugger Assets';
 
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler) : ResponseInterface
    {
        $this->startTimer();
        $this->container['debugger']->addAssets();
        $this->stopTimer();
 
        return $handler->handle($request);
 
    }
}
 
Arguments
  1. ServerRequest {}
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
    private $handler;
 
    /** @var ContainerInterface|null */
    private $container;
 
    /**
     * {@inheritdoc}
     * @throws InvalidArgumentException
     */
    public function handle(ServerRequestInterface $request): ResponseInterface
    {
        $middleware = array_shift($this->middleware);
 
        // Use default callable if there is no middleware.
        if ($middleware === null) {
            return \call_user_func($this->handler, $request);
        }
 
        if ($middleware instanceof MiddlewareInterface) {
            return $middleware->process($request, clone $this);
        }
 
        if (null === $this->container || !$this->container->has($middleware)) {
            throw new InvalidArgumentException(
                sprintf('The middleware is not a valid %s and is not passed in the Container', MiddlewareInterface::class),
                $middleware
            );
        }
 
        array_unshift($this->middleware, $this->container->get($middleware));
 
        return $this->handle($request);
    }
}
Arguments
  1. ServerRequest {}
    
  2. RequestHandler {}
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
 
        // Use default callable if there is no middleware.
        if ($middleware === null) {
            return \call_user_func($this->handler, $request);
        }
 
        if ($middleware instanceof MiddlewareInterface) {
            return $middleware->process($request, clone $this);
        }
 
        if (null === $this->container || !$this->container->has($middleware)) {
            throw new InvalidArgumentException(
                sprintf('The middleware is not a valid %s and is not passed in the Container', MiddlewareInterface::class),
                $middleware
            );
        }
 
        array_unshift($this->middleware, $this->container->get($middleware));
 
        return $this->handle($request);
    }
}
Arguments
  1. ServerRequest {}
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
system
/
src
/
Grav
/
Common
/
Processors
/
PagesProcessor.php
            $this->addMessage("Routed to page {$page->rawRoute()} (type: {$page->template()}) [Not Found fallback]");
        } else {
            $this->addMessage("Routed to page {$page->rawRoute()} (type: {$page->template()})");
 
            $task = $this->container['task'];
            $action = $this->container['action'];
            if ($task) {
                $event = new Event(['task' => $task, 'page' => $page]);
                $this->container->fireEvent('onPageTask', $event);
                $this->container->fireEvent('onPageTask.' . $task, $event);
            } elseif ($action) {
                $event = new Event(['action' => $action, 'page' => $page]);
                $this->container->fireEvent('onPageAction', $event);
                $this->container->fireEvent('onPageAction.' . $action, $event);
            }
        }
 
        $this->stopTimer();
 
        return $handler->handle($request);
    }
}
 
Arguments
  1. ServerRequest {}
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
    private $handler;
 
    /** @var ContainerInterface|null */
    private $container;
 
    /**
     * {@inheritdoc}
     * @throws InvalidArgumentException
     */
    public function handle(ServerRequestInterface $request): ResponseInterface
    {
        $middleware = array_shift($this->middleware);
 
        // Use default callable if there is no middleware.
        if ($middleware === null) {
            return \call_user_func($this->handler, $request);
        }
 
        if ($middleware instanceof MiddlewareInterface) {
            return $middleware->process($request, clone $this);
        }
 
        if (null === $this->container || !$this->container->has($middleware)) {
            throw new InvalidArgumentException(
                sprintf('The middleware is not a valid %s and is not passed in the Container', MiddlewareInterface::class),
                $middleware
            );
        }
 
        array_unshift($this->middleware, $this->container->get($middleware));
 
        return $this->handle($request);
    }
}
Arguments
  1. ServerRequest {}
    
  2. RequestHandler {}
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
 
        // Use default callable if there is no middleware.
        if ($middleware === null) {
            return \call_user_func($this->handler, $request);
        }
 
        if ($middleware instanceof MiddlewareInterface) {
            return $middleware->process($request, clone $this);
        }
 
        if (null === $this->container || !$this->container->has($middleware)) {
            throw new InvalidArgumentException(
                sprintf('The middleware is not a valid %s and is not passed in the Container', MiddlewareInterface::class),
                $middleware
            );
        }
 
        array_unshift($this->middleware, $this->container->get($middleware));
 
        return $this->handle($request);
    }
}
Arguments
  1. ServerRequest {}
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
system
/
src
/
Grav
/
Common
/
Processors
/
TwigProcessor.php
 */
 
namespace Grav\Common\Processors;
 
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\RequestHandlerInterface;
 
class TwigProcessor extends ProcessorBase
{
    public $id = 'twig';
    public $title = 'Twig';
 
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler) : ResponseInterface
    {
        $this->startTimer();
        $this->container['twig']->init();
        $this->stopTimer();
 
        return $handler->handle($request);
    }
}
 
Arguments
  1. ServerRequest {}
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
    private $handler;
 
    /** @var ContainerInterface|null */
    private $container;
 
    /**
     * {@inheritdoc}
     * @throws InvalidArgumentException
     */
    public function handle(ServerRequestInterface $request): ResponseInterface
    {
        $middleware = array_shift($this->middleware);
 
        // Use default callable if there is no middleware.
        if ($middleware === null) {
            return \call_user_func($this->handler, $request);
        }
 
        if ($middleware instanceof MiddlewareInterface) {
            return $middleware->process($request, clone $this);
        }
 
        if (null === $this->container || !$this->container->has($middleware)) {
            throw new InvalidArgumentException(
                sprintf('The middleware is not a valid %s and is not passed in the Container', MiddlewareInterface::class),
                $middleware
            );
        }
 
        array_unshift($this->middleware, $this->container->get($middleware));
 
        return $this->handle($request);
    }
}
Arguments
  1. ServerRequest {}
    
  2. RequestHandler {}
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
 
        // Use default callable if there is no middleware.
        if ($middleware === null) {
            return \call_user_func($this->handler, $request);
        }
 
        if ($middleware instanceof MiddlewareInterface) {
            return $middleware->process($request, clone $this);
        }
 
        if (null === $this->container || !$this->container->has($middleware)) {
            throw new InvalidArgumentException(
                sprintf('The middleware is not a valid %s and is not passed in the Container', MiddlewareInterface::class),
                $middleware
            );
        }
 
        array_unshift($this->middleware, $this->container->get($middleware));
 
        return $this->handle($request);
    }
}
Arguments
  1. ServerRequest {}
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
system
/
src
/
Grav
/
Common
/
Processors
/
AssetsProcessor.php
 
namespace Grav\Common\Processors;
 
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\RequestHandlerInterface;
 
class AssetsProcessor extends ProcessorBase
{
    public $id = '_assets';
    public $title = 'Assets';
 
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler) : ResponseInterface
    {
        $this->startTimer();
        $this->container['assets']->init();
        $this->container->fireEvent('onAssetsInitialized');
        $this->stopTimer();
 
        return $handler->handle($request);
    }
}
 
Arguments
  1. ServerRequest {}
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
    private $handler;
 
    /** @var ContainerInterface|null */
    private $container;
 
    /**
     * {@inheritdoc}
     * @throws InvalidArgumentException
     */
    public function handle(ServerRequestInterface $request): ResponseInterface
    {
        $middleware = array_shift($this->middleware);
 
        // Use default callable if there is no middleware.
        if ($middleware === null) {
            return \call_user_func($this->handler, $request);
        }
 
        if ($middleware instanceof MiddlewareInterface) {
            return $middleware->process($request, clone $this);
        }
 
        if (null === $this->container || !$this->container->has($middleware)) {
            throw new InvalidArgumentException(
                sprintf('The middleware is not a valid %s and is not passed in the Container', MiddlewareInterface::class),
                $middleware
            );
        }
 
        array_unshift($this->middleware, $this->container->get($middleware));
 
        return $this->handle($request);
    }
}
Arguments
  1. ServerRequest {}
    
  2. RequestHandler {}
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
 
        // Use default callable if there is no middleware.
        if ($middleware === null) {
            return \call_user_func($this->handler, $request);
        }
 
        if ($middleware instanceof MiddlewareInterface) {
            return $middleware->process($request, clone $this);
        }
 
        if (null === $this->container || !$this->container->has($middleware)) {
            throw new InvalidArgumentException(
                sprintf('The middleware is not a valid %s and is not passed in the Container', MiddlewareInterface::class),
                $middleware
            );
        }
 
        array_unshift($this->middleware, $this->container->get($middleware));
 
        return $this->handle($request);
    }
}
Arguments
  1. ServerRequest {}
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
system
/
src
/
Grav
/
Common
/
Processors
/
SchedulerProcessor.php
namespace Grav\Common\Processors;
 
use RocketTheme\Toolbox\Event\Event;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\RequestHandlerInterface;
 
class SchedulerProcessor extends ProcessorBase
{
    public $id = '_scheduler';
    public $title = 'Scheduler';
 
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler) : ResponseInterface
    {
        $this->startTimer();
        $scheduler = $this->container['scheduler'];
        $this->container->fireEvent('onSchedulerInitialized', new Event(['scheduler' => $scheduler]));
        $this->stopTimer();
 
        return $handler->handle($request);
    }
}
 
Arguments
  1. ServerRequest {}
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
    private $handler;
 
    /** @var ContainerInterface|null */
    private $container;
 
    /**
     * {@inheritdoc}
     * @throws InvalidArgumentException
     */
    public function handle(ServerRequestInterface $request): ResponseInterface
    {
        $middleware = array_shift($this->middleware);
 
        // Use default callable if there is no middleware.
        if ($middleware === null) {
            return \call_user_func($this->handler, $request);
        }
 
        if ($middleware instanceof MiddlewareInterface) {
            return $middleware->process($request, clone $this);
        }
 
        if (null === $this->container || !$this->container->has($middleware)) {
            throw new InvalidArgumentException(
                sprintf('The middleware is not a valid %s and is not passed in the Container', MiddlewareInterface::class),
                $middleware
            );
        }
 
        array_unshift($this->middleware, $this->container->get($middleware));
 
        return $this->handle($request);
    }
}
Arguments
  1. ServerRequest {}
    
  2. RequestHandler {}
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
 
        // Use default callable if there is no middleware.
        if ($middleware === null) {
            return \call_user_func($this->handler, $request);
        }
 
        if ($middleware instanceof MiddlewareInterface) {
            return $middleware->process($request, clone $this);
        }
 
        if (null === $this->container || !$this->container->has($middleware)) {
            throw new InvalidArgumentException(
                sprintf('The middleware is not a valid %s and is not passed in the Container', MiddlewareInterface::class),
                $middleware
            );
        }
 
        array_unshift($this->middleware, $this->container->get($middleware));
 
        return $this->handle($request);
    }
}
Arguments
  1. ServerRequest {}
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
system
/
src
/
Grav
/
Common
/
Processors
/
BackupsProcessor.php
 
namespace Grav\Common\Processors;
 
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\RequestHandlerInterface;
 
class BackupsProcessor extends ProcessorBase
{
    public $id = '_backups';
    public $title = 'Backups';
 
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler) : ResponseInterface
    {
        $this->startTimer();
        $backups = $this->container['backups'];
        $backups->init();
        $this->stopTimer();
 
        return $handler->handle($request);
    }
}
 
Arguments
  1. ServerRequest {}
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
    private $handler;
 
    /** @var ContainerInterface|null */
    private $container;
 
    /**
     * {@inheritdoc}
     * @throws InvalidArgumentException
     */
    public function handle(ServerRequestInterface $request): ResponseInterface
    {
        $middleware = array_shift($this->middleware);
 
        // Use default callable if there is no middleware.
        if ($middleware === null) {
            return \call_user_func($this->handler, $request);
        }
 
        if ($middleware instanceof MiddlewareInterface) {
            return $middleware->process($request, clone $this);
        }
 
        if (null === $this->container || !$this->container->has($middleware)) {
            throw new InvalidArgumentException(
                sprintf('The middleware is not a valid %s and is not passed in the Container', MiddlewareInterface::class),
                $middleware
            );
        }
 
        array_unshift($this->middleware, $this->container->get($middleware));
 
        return $this->handle($request);
    }
}
Arguments
  1. ServerRequest {}
    
  2. RequestHandler {}
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
 
        // Use default callable if there is no middleware.
        if ($middleware === null) {
            return \call_user_func($this->handler, $request);
        }
 
        if ($middleware instanceof MiddlewareInterface) {
            return $middleware->process($request, clone $this);
        }
 
        if (null === $this->container || !$this->container->has($middleware)) {
            throw new InvalidArgumentException(
                sprintf('The middleware is not a valid %s and is not passed in the Container', MiddlewareInterface::class),
                $middleware
            );
        }
 
        array_unshift($this->middleware, $this->container->get($middleware));
 
        return $this->handle($request);
    }
}
Arguments
  1. ServerRequest {}
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
system
/
src
/
Grav
/
Common
/
Processors
/
TasksProcessor.php
                    }
 
                    $this->stopTimer();
 
                    return $response;
 
                } catch (NotFoundException $e) {
                    // Task not found: Let it pass through.
                }
            }
 
            if ($task) {
                $this->container->fireEvent('onTask.' . $task);
            } elseif ($action) {
                $this->container->fireEvent('onAction.' . $action);
            }
        }
        $this->stopTimer();
 
        return $handler->handle($request);
    }
}
 
Arguments
  1. ServerRequest {}
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
    private $handler;
 
    /** @var ContainerInterface|null */
    private $container;
 
    /**
     * {@inheritdoc}
     * @throws InvalidArgumentException
     */
    public function handle(ServerRequestInterface $request): ResponseInterface
    {
        $middleware = array_shift($this->middleware);
 
        // Use default callable if there is no middleware.
        if ($middleware === null) {
            return \call_user_func($this->handler, $request);
        }
 
        if ($middleware instanceof MiddlewareInterface) {
            return $middleware->process($request, clone $this);
        }
 
        if (null === $this->container || !$this->container->has($middleware)) {
            throw new InvalidArgumentException(
                sprintf('The middleware is not a valid %s and is not passed in the Container', MiddlewareInterface::class),
                $middleware
            );
        }
 
        array_unshift($this->middleware, $this->container->get($middleware));
 
        return $this->handle($request);
    }
}
Arguments
  1. ServerRequest {}
    
  2. RequestHandler {}
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
 
        // Use default callable if there is no middleware.
        if ($middleware === null) {
            return \call_user_func($this->handler, $request);
        }
 
        if ($middleware instanceof MiddlewareInterface) {
            return $middleware->process($request, clone $this);
        }
 
        if (null === $this->container || !$this->container->has($middleware)) {
            throw new InvalidArgumentException(
                sprintf('The middleware is not a valid %s and is not passed in the Container', MiddlewareInterface::class),
                $middleware
            );
        }
 
        array_unshift($this->middleware, $this->container->get($middleware));
 
        return $this->handle($request);
    }
}
Arguments
  1. ServerRequest {}
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
system
/
src
/
Grav
/
Common
/
Processors
/
RequestProcessor.php
        $uri = $request->getUri();
        $ext = mb_strtolower(pathinfo($uri->getPath(), PATHINFO_EXTENSION));
 
        $request = $request
            ->withAttribute('grav', $this->container)
            ->withAttribute('time', $_SERVER['REQUEST_TIME_FLOAT'] ?? GRAV_REQUEST_TIME)
            ->withAttribute('route', Uri::getCurrentRoute()->withExtension($ext))
            ->withAttribute('referrer', $this->container['uri']->referrer());
 
        $event = new RequestHandlerEvent(['request' => $request, 'handler' => $handler]);
        /** @var RequestHandlerEvent $event */
        $event = $this->container->fireEvent('onRequestHandlerInit', $event);
        $response = $event->getResponse();
        $this->stopTimer();
 
        if ($response) {
            return $response;
        }
 
        return $handler->handle($request);
    }
}
 
Arguments
  1. ServerRequest {}
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
    private $handler;
 
    /** @var ContainerInterface|null */
    private $container;
 
    /**
     * {@inheritdoc}
     * @throws InvalidArgumentException
     */
    public function handle(ServerRequestInterface $request): ResponseInterface
    {
        $middleware = array_shift($this->middleware);
 
        // Use default callable if there is no middleware.
        if ($middleware === null) {
            return \call_user_func($this->handler, $request);
        }
 
        if ($middleware instanceof MiddlewareInterface) {
            return $middleware->process($request, clone $this);
        }
 
        if (null === $this->container || !$this->container->has($middleware)) {
            throw new InvalidArgumentException(
                sprintf('The middleware is not a valid %s and is not passed in the Container', MiddlewareInterface::class),
                $middleware
            );
        }
 
        array_unshift($this->middleware, $this->container->get($middleware));
 
        return $this->handle($request);
    }
}
Arguments
  1. ServerRequest {}
    
  2. RequestHandler {}
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
 
        // Use default callable if there is no middleware.
        if ($middleware === null) {
            return \call_user_func($this->handler, $request);
        }
 
        if ($middleware instanceof MiddlewareInterface) {
            return $middleware->process($request, clone $this);
        }
 
        if (null === $this->container || !$this->container->has($middleware)) {
            throw new InvalidArgumentException(
                sprintf('The middleware is not a valid %s and is not passed in the Container', MiddlewareInterface::class),
                $middleware
            );
        }
 
        array_unshift($this->middleware, $this->container->get($middleware));
 
        return $this->handle($request);
    }
}
Arguments
  1. ServerRequest {}
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
system
/
src
/
Grav
/
Common
/
Processors
/
ThemesProcessor.php
 */
 
namespace Grav\Common\Processors;
 
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\RequestHandlerInterface;
 
class ThemesProcessor extends ProcessorBase
{
    public $id = 'themes';
    public $title = 'Themes';
 
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler) : ResponseInterface
    {
        $this->startTimer();
        $this->container['themes']->init();
        $this->stopTimer();
 
        return $handler->handle($request);
    }
}
 
Arguments
  1. ServerRequest {}
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
    private $handler;
 
    /** @var ContainerInterface|null */
    private $container;
 
    /**
     * {@inheritdoc}
     * @throws InvalidArgumentException
     */
    public function handle(ServerRequestInterface $request): ResponseInterface
    {
        $middleware = array_shift($this->middleware);
 
        // Use default callable if there is no middleware.
        if ($middleware === null) {
            return \call_user_func($this->handler, $request);
        }
 
        if ($middleware instanceof MiddlewareInterface) {
            return $middleware->process($request, clone $this);
        }
 
        if (null === $this->container || !$this->container->has($middleware)) {
            throw new InvalidArgumentException(
                sprintf('The middleware is not a valid %s and is not passed in the Container', MiddlewareInterface::class),
                $middleware
            );
        }
 
        array_unshift($this->middleware, $this->container->get($middleware));
 
        return $this->handle($request);
    }
}
Arguments
  1. ServerRequest {}
    
  2. RequestHandler {}
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
 
        // Use default callable if there is no middleware.
        if ($middleware === null) {
            return \call_user_func($this->handler, $request);
        }
 
        if ($middleware instanceof MiddlewareInterface) {
            return $middleware->process($request, clone $this);
        }
 
        if (null === $this->container || !$this->container->has($middleware)) {
            throw new InvalidArgumentException(
                sprintf('The middleware is not a valid %s and is not passed in the Container', MiddlewareInterface::class),
                $middleware
            );
        }
 
        array_unshift($this->middleware, $this->container->get($middleware));
 
        return $this->handle($request);
    }
}
Arguments
  1. ServerRequest {}
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
system
/
src
/
Grav
/
Common
/
Processors
/
PluginsProcessor.php
 
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\RequestHandlerInterface;
 
class PluginsProcessor extends ProcessorBase
{
    public $id = 'plugins';
    public $title = 'Plugins';
 
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler) : ResponseInterface
    {
        $this->startTimer();
        // TODO: remove in 2.0.
        $this->container['accounts'];
        $this->container['plugins']->init();
        $this->container->fireEvent('onPluginsInitialized');
        $this->stopTimer();
 
        return $handler->handle($request);
    }
}
 
Arguments
  1. ServerRequest {}
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
    private $handler;
 
    /** @var ContainerInterface|null */
    private $container;
 
    /**
     * {@inheritdoc}
     * @throws InvalidArgumentException
     */
    public function handle(ServerRequestInterface $request): ResponseInterface
    {
        $middleware = array_shift($this->middleware);
 
        // Use default callable if there is no middleware.
        if ($middleware === null) {
            return \call_user_func($this->handler, $request);
        }
 
        if ($middleware instanceof MiddlewareInterface) {
            return $middleware->process($request, clone $this);
        }
 
        if (null === $this->container || !$this->container->has($middleware)) {
            throw new InvalidArgumentException(
                sprintf('The middleware is not a valid %s and is not passed in the Container', MiddlewareInterface::class),
                $middleware
            );
        }
 
        array_unshift($this->middleware, $this->container->get($middleware));
 
        return $this->handle($request);
    }
}
Arguments
  1. ServerRequest {}
    
  2. RequestHandler {}
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
 
        // Use default callable if there is no middleware.
        if ($middleware === null) {
            return \call_user_func($this->handler, $request);
        }
 
        if ($middleware instanceof MiddlewareInterface) {
            return $middleware->process($request, clone $this);
        }
 
        if (null === $this->container || !$this->container->has($middleware)) {
            throw new InvalidArgumentException(
                sprintf('The middleware is not a valid %s and is not passed in the Container', MiddlewareInterface::class),
                $middleware
            );
        }
 
        array_unshift($this->middleware, $this->container->get($middleware));
 
        return $this->handle($request);
    }
}
Arguments
  1. ServerRequest {}
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
system
/
src
/
Grav
/
Common
/
Processors
/
InitializeProcessor.php
        }
 
        /** @var Uri $uri */
        $uri = $this->container['uri'];
        $uri->init();
 
        // Redirect pages with trailing slash if configured to do so.
        $path = $uri->path() ?: '/';
        if ($path !== '/'
            && $config->get('system.pages.redirect_trailing_slash', false)
            && Utils::endsWith($path, '/')) {
 
            $redirect = (string) $uri::getCurrentRoute()->toString();
            $this->container->redirect($redirect);
        }
 
        $this->container->setLocale();
        $this->stopTimer();
 
        return $handler->handle($request);
    }
}
 
Arguments
  1. ServerRequest {}
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
    private $handler;
 
    /** @var ContainerInterface|null */
    private $container;
 
    /**
     * {@inheritdoc}
     * @throws InvalidArgumentException
     */
    public function handle(ServerRequestInterface $request): ResponseInterface
    {
        $middleware = array_shift($this->middleware);
 
        // Use default callable if there is no middleware.
        if ($middleware === null) {
            return \call_user_func($this->handler, $request);
        }
 
        if ($middleware instanceof MiddlewareInterface) {
            return $middleware->process($request, clone $this);
        }
 
        if (null === $this->container || !$this->container->has($middleware)) {
            throw new InvalidArgumentException(
                sprintf('The middleware is not a valid %s and is not passed in the Container', MiddlewareInterface::class),
                $middleware
            );
        }
 
        array_unshift($this->middleware, $this->container->get($middleware));
 
        return $this->handle($request);
    }
}
Arguments
  1. ServerRequest {}
    
  2. RequestHandler {}
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
 
        // Use default callable if there is no middleware.
        if ($middleware === null) {
            return \call_user_func($this->handler, $request);
        }
 
        if ($middleware instanceof MiddlewareInterface) {
            return $middleware->process($request, clone $this);
        }
 
        if (null === $this->container || !$this->container->has($middleware)) {
            throw new InvalidArgumentException(
                sprintf('The middleware is not a valid %s and is not passed in the Container', MiddlewareInterface::class),
                $middleware
            );
        }
 
        array_unshift($this->middleware, $this->container->get($middleware));
 
        return $this->handle($request);
    }
}
Arguments
  1. ServerRequest {}
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
system
/
src
/
Grav
/
Common
/
Processors
/
DebuggerProcessor.php
 */
 
namespace Grav\Common\Processors;
 
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\RequestHandlerInterface;
 
class DebuggerProcessor extends ProcessorBase
{
    public $id = '_debugger';
    public $title = 'Init Debugger';
 
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler) : ResponseInterface
    {
        $this->startTimer();
        $this->container['debugger']->init();
        $this->stopTimer();
 
        return $handler->handle($request);
    }
}
 
Arguments
  1. ServerRequest {}
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
    private $handler;
 
    /** @var ContainerInterface|null */
    private $container;
 
    /**
     * {@inheritdoc}
     * @throws InvalidArgumentException
     */
    public function handle(ServerRequestInterface $request): ResponseInterface
    {
        $middleware = array_shift($this->middleware);
 
        // Use default callable if there is no middleware.
        if ($middleware === null) {
            return \call_user_func($this->handler, $request);
        }
 
        if ($middleware instanceof MiddlewareInterface) {
            return $middleware->process($request, clone $this);
        }
 
        if (null === $this->container || !$this->container->has($middleware)) {
            throw new InvalidArgumentException(
                sprintf('The middleware is not a valid %s and is not passed in the Container', MiddlewareInterface::class),
                $middleware
            );
        }
 
        array_unshift($this->middleware, $this->container->get($middleware));
 
        return $this->handle($request);
    }
}
Arguments
  1. ServerRequest {}
    
  2. RequestHandler {}
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
 
        // Use default callable if there is no middleware.
        if ($middleware === null) {
            return \call_user_func($this->handler, $request);
        }
 
        if ($middleware instanceof MiddlewareInterface) {
            return $middleware->process($request, clone $this);
        }
 
        if (null === $this->container || !$this->container->has($middleware)) {
            throw new InvalidArgumentException(
                sprintf('The middleware is not a valid %s and is not passed in the Container', MiddlewareInterface::class),
                $middleware
            );
        }
 
        array_unshift($this->middleware, $this->container->get($middleware));
 
        return $this->handle($request);
    }
}
Arguments
  1. ServerRequest {}
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
system
/
src
/
Grav
/
Common
/
Processors
/
ErrorsProcessor.php
 */
 
namespace Grav\Common\Processors;
 
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\RequestHandlerInterface;
 
class ErrorsProcessor extends ProcessorBase
{
    public $id = '_errors';
    public $title = 'Error Handlers Reset';
 
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler) : ResponseInterface
    {
        $this->startTimer();
        $this->container['errors']->resetHandlers();
        $this->stopTimer();
 
        return $handler->handle($request);
    }
}
 
Arguments
  1. ServerRequest {}
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
    private $handler;
 
    /** @var ContainerInterface|null */
    private $container;
 
    /**
     * {@inheritdoc}
     * @throws InvalidArgumentException
     */
    public function handle(ServerRequestInterface $request): ResponseInterface
    {
        $middleware = array_shift($this->middleware);
 
        // Use default callable if there is no middleware.
        if ($middleware === null) {
            return \call_user_func($this->handler, $request);
        }
 
        if ($middleware instanceof MiddlewareInterface) {
            return $middleware->process($request, clone $this);
        }
 
        if (null === $this->container || !$this->container->has($middleware)) {
            throw new InvalidArgumentException(
                sprintf('The middleware is not a valid %s and is not passed in the Container', MiddlewareInterface::class),
                $middleware
            );
        }
 
        array_unshift($this->middleware, $this->container->get($middleware));
 
        return $this->handle($request);
    }
}
Arguments
  1. ServerRequest {}
    
  2. RequestHandler {}
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
 
        // Use default callable if there is no middleware.
        if ($middleware === null) {
            return \call_user_func($this->handler, $request);
        }
 
        if ($middleware instanceof MiddlewareInterface) {
            return $middleware->process($request, clone $this);
        }
 
        if (null === $this->container || !$this->container->has($middleware)) {
            throw new InvalidArgumentException(
                sprintf('The middleware is not a valid %s and is not passed in the Container', MiddlewareInterface::class),
                $middleware
            );
        }
 
        array_unshift($this->middleware, $this->container->get($middleware));
 
        return $this->handle($request);
    }
}
Arguments
  1. ServerRequest {}
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
system
/
src
/
Grav
/
Common
/
Processors
/
LoggerProcessor.php
 
        /** @var Config $config */
        $config = $grav['config'];
 
        switch ($config->get('system.log.handler', 'file')) {
            case 'syslog':
                $log = $grav['log'];
                $log->popHandler();
 
                $facility = $config->get('system.log.syslog.facility', 'local6');
                $logHandler = new SyslogHandler('grav', $facility);
                $formatter = new LineFormatter("%channel%.%level_name%: %message% %extra%");
                $logHandler->setFormatter($formatter);
 
                $log->pushHandler($logHandler);
                break;
        }
        $this->stopTimer();
 
        return $handler->handle($request);
    }
}
 
Arguments
  1. ServerRequest {}
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
    private $handler;
 
    /** @var ContainerInterface|null */
    private $container;
 
    /**
     * {@inheritdoc}
     * @throws InvalidArgumentException
     */
    public function handle(ServerRequestInterface $request): ResponseInterface
    {
        $middleware = array_shift($this->middleware);
 
        // Use default callable if there is no middleware.
        if ($middleware === null) {
            return \call_user_func($this->handler, $request);
        }
 
        if ($middleware instanceof MiddlewareInterface) {
            return $middleware->process($request, clone $this);
        }
 
        if (null === $this->container || !$this->container->has($middleware)) {
            throw new InvalidArgumentException(
                sprintf('The middleware is not a valid %s and is not passed in the Container', MiddlewareInterface::class),
                $middleware
            );
        }
 
        array_unshift($this->middleware, $this->container->get($middleware));
 
        return $this->handle($request);
    }
}
Arguments
  1. ServerRequest {}
    
  2. RequestHandler {}
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
 
        // Use default callable if there is no middleware.
        if ($middleware === null) {
            return \call_user_func($this->handler, $request);
        }
 
        if ($middleware instanceof MiddlewareInterface) {
            return $middleware->process($request, clone $this);
        }
 
        if (null === $this->container || !$this->container->has($middleware)) {
            throw new InvalidArgumentException(
                sprintf('The middleware is not a valid %s and is not passed in the Container', MiddlewareInterface::class),
                $middleware
            );
        }
 
        array_unshift($this->middleware, $this->container->get($middleware));
 
        return $this->handle($request);
    }
}
Arguments
  1. ServerRequest {}
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
system
/
src
/
Grav
/
Common
/
Processors
/
ConfigurationProcessor.php
 
namespace Grav\Common\Processors;
 
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\RequestHandlerInterface;
 
class ConfigurationProcessor extends ProcessorBase
{
    public $id = '_config';
    public $title = 'Configuration';
 
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler) : ResponseInterface
    {
        $this->startTimer();
        $this->container['config']->init();
        $this->container['plugins']->setup();
        $this->stopTimer();
 
        return $handler->handle($request);
    }
}
 
Arguments
  1. ServerRequest {}
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
    private $handler;
 
    /** @var ContainerInterface|null */
    private $container;
 
    /**
     * {@inheritdoc}
     * @throws InvalidArgumentException
     */
    public function handle(ServerRequestInterface $request): ResponseInterface
    {
        $middleware = array_shift($this->middleware);
 
        // Use default callable if there is no middleware.
        if ($middleware === null) {
            return \call_user_func($this->handler, $request);
        }
 
        if ($middleware instanceof MiddlewareInterface) {
            return $middleware->process($request, clone $this);
        }
 
        if (null === $this->container || !$this->container->has($middleware)) {
            throw new InvalidArgumentException(
                sprintf('The middleware is not a valid %s and is not passed in the Container', MiddlewareInterface::class),
                $middleware
            );
        }
 
        array_unshift($this->middleware, $this->container->get($middleware));
 
        return $this->handle($request);
    }
}
Arguments
  1. ServerRequest {}
    
  2. RequestHandler {}
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
system
/
src
/
Grav
/
Framework
/
RequestHandler
/
Traits
/
RequestHandlerTrait.php
 
        // Use default callable if there is no middleware.
        if ($middleware === null) {
            return \call_user_func($this->handler, $request);
        }
 
        if ($middleware instanceof MiddlewareInterface) {
            return $middleware->process($request, clone $this);
        }
 
        if (null === $this->container || !$this->container->has($middleware)) {
            throw new InvalidArgumentException(
                sprintf('The middleware is not a valid %s and is not passed in the Container', MiddlewareInterface::class),
                $middleware
            );
        }
 
        array_unshift($this->middleware, $this->container->get($middleware));
 
        return $this->handle($request);
    }
}
Arguments
  1. ServerRequest {}
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
system
/
src
/
Grav
/
Common
/
Grav.php
                },
                'debuggerAssetsProcessor' => function () {
                    return new DebuggerAssetsProcessor($this);
                },
                'renderProcessor' => function () {
                    return new RenderProcessor($this);
                },
            ]
        );
 
        $default = function (ServerRequestInterface $request) {
            return new Response(404);
        };
 
        /** @var Debugger $debugger */
        $debugger = $this['debugger'];
 
        $collection = new RequestHandler($this->middleware, $default, $container);
 
        $response = $collection->handle($this['request']);
 
        $this->header($response);
        echo $response->getBody();
 
        $debugger->render();
 
        register_shutdown_function([$this, 'shutdown']);
    }
 
    /**
     * Set the system locale based on the language and configuration
     */
    public function setLocale()
    {
        // Initialize Locale if set and configured.
        if ($this['language']->enabled() && $this['config']->get('system.languages.override_locale')) {
            $language = $this['language']->getLanguage();
            setlocale(LC_ALL, \strlen($language) < 3 ? ($language . '_' . strtoupper($language)) : $language);
        } elseif ($this['config']->get('system.default_locale')) {
            setlocale(LC_ALL, $this['config']->get('system.default_locale'));
Arguments
  1. ServerRequest {}
    
/
home
/
jhiemstraxartec
/
public_html
/
test
/
index.php
 
// Set timezone to default, falls back to system if php.ini not set
date_default_timezone_set(@date_default_timezone_get());
 
// Set internal encoding if mbstring loaded
if (!\extension_loaded('mbstring')) {
    die("'mbstring' extension is not loaded.  This is required for Grav to run correctly");
}
mb_internal_encoding('UTF-8');
 
// Get the Grav instance
$grav = Grav::instance(
    array(
        'loader' => $loader
    )
);
 
// Process the page
try {
    $grav->process();
} catch (\Error $e) {
    $grav->fireEvent('onFatalException', new Event(array('exception' => $e)));
    throw $e;
} catch (\Exception $e) {
    $grav->fireEvent('onFatalException', new Event(array('exception' => $e)));
    throw $e;
}
 

Environment & details:

empty
empty
empty
empty
Key Value
redirect_after_login
"/tutorials/rigging-robotic-joints-in-3d-studio-max"
user
User {}
Key Value
LSPHP_ENABLE_USER_INI
"on"
PATH
"/usr/local/bin:/usr/bin:/bin"
TEMP
"/tmp"
TMP
"/tmp"
TMPDIR
"/tmp"
PWD
"/"
HTTP_ACCEPT
"*/*"
CONTENT_LENGTH
"0"
HTTP_HOST
"3dvalley.com"
HTTP_REFERER
"http://3dvalley.com/tutorials/rigging-robotic-joints-in-3d-studio-max/"
HTTP_USER_AGENT
"claudebot"
REDIRECT_REDIRECT_UNIQUE_ID
"ZflRAs3lf8k5c8dkxMhjNQAAACE"
REDIRECT_REDIRECT_SCRIPT_URL
"/tutorials/rigging-robotic-joints-in-3d-studio-max"
REDIRECT_REDIRECT_SCRIPT_URI
"http://3dvalley.com/tutorials/rigging-robotic-joints-in-3d-studio-max"
REDIRECT_REDIRECT_USER_ID
"4251328"
REDIRECT_REDIRECT_STATUS
"200"
REDIRECT_UNIQUE_ID
"ZflRAs3lf8k5c8dkxMhjNQAAACE"
REDIRECT_SCRIPT_URL
"/tutorials/rigging-robotic-joints-in-3d-studio-max"
REDIRECT_SCRIPT_URI
"http://3dvalley.com/tutorials/rigging-robotic-joints-in-3d-studio-max"
REDIRECT_USER_ID
"4251328"
REDIRECT_STATUS
"200"
UNIQUE_ID
"ZflRAs3lf8k5c8dkxMhjNQAAACE"
SCRIPT_URL
"/tutorials/rigging-robotic-joints-in-3d-studio-max"
SCRIPT_URI
"http://3dvalley.com/tutorials/rigging-robotic-joints-in-3d-studio-max"
USER_ID
"4251328"
SERVER_SIGNATURE
""
SERVER_SOFTWARE
"Apache"
SERVER_NAME
"3dvalley.com"
SERVER_ADDR
"160.153.32.224"
SERVER_PORT
"80"
REMOTE_ADDR
"3.235.42.157"
DOCUMENT_ROOT
"/home/jhiemstraxartec/public_html"
REQUEST_SCHEME
"http"
CONTEXT_PREFIX
""
CONTEXT_DOCUMENT_ROOT
"/home/jhiemstraxartec/public_html"
SERVER_ADMIN
"webmaster@3dvalley.com"
SCRIPT_FILENAME
"/home/jhiemstraxartec/public_html/test/index.php"
REMOTE_PORT
"38276"
REDIRECT_URL
"/test/tutorials/rigging-robotic-joints-in-3d-studio-max"
SERVER_PROTOCOL
"HTTP/1.1"
REQUEST_METHOD
"GET"
QUERY_STRING
""
REQUEST_URI
"/tutorials/rigging-robotic-joints-in-3d-studio-max"
SCRIPT_NAME
"/test/index.php"
PHP_SELF
"/test/index.php"
REQUEST_TIME_FLOAT
1710838018.908
REQUEST_TIME
1710838018
Key Value
LSPHP_ENABLE_USER_INI
"on"
PATH
"/usr/local/bin:/usr/bin:/bin"
TEMP
"/tmp"
TMP
"/tmp"
TMPDIR
"/tmp"
PWD
"/"
0. Whoops\Handler\PrettyPageHandler
1. Whoops\Handler\CallbackHandler