この記事はHoudiniアドベントカレンダー2025 1日目の記事です。
はじめに
KineFX、APEXの記事と書いて、次は何を書くかとなると、やはり筋肉でしょう。
筋肉はすべてを解決する。
この記事を書こうと思ったきっかけは 10月に開催されたHoudini Hiveです。
このイベント内では
「Big Flex: Controlling Muscle Shapes with Otis (Otisを使った筋肉ターゲットシェイプワークフローの使い方)」 というタイトルで、SideFXのキャラクターTDであるLiesbeth Levickさんがマッスル機能についての講演をされていました。
講演後、 Houdiniでマッスルを触っている方は手を上げてくださいと呼びかけられ、会場を見渡すと、なんと2〜3人程度でほとんどの人が手を上げていなかったことが記憶に残っています。(日本だけではなく世界中から平日朝に来るようなHoudinistが集まっているのに!)
その影響か後日のメガリスでの交流会(ユーザーミーティング)では マッスル機能の補習授業も行われていました。
私も、マッスルにはこれまで一度も触れてきませんでした。
できたらいいなと一抹の憧れと共に、この機能への畏怖の念もありました。
なぜなら、めちゃくちゃ難しそうだと思っていたからです。
そもそもアニメーションですらヒィヒィ言っているのに、それに加えて骨と筋肉を別途用意してシミュレーションなど
時間がいくらあっても足りなさそうです。
しかし、誰もやっていないのであれば、素人の私がやっても粗が目立たないのではということで
初心者ながらマッスルの深淵への第一歩の記事として、皆様に紹介できればと思います。
Houdiniに筋肉の機能がついたのはいつからか
かつて、筋肉シミュレーションは「FEM(Finite Element Solver:有限要素法)」が主流でした。この機能はHoudini13から実装されています。当時は筋肉の機能も旧ボーンと同じくSOPレベルではなくオブジェクトレベルでした。
実際にオブジェクトレベルマッスルを自分で触っていないので当時のマスタークラスの動画を見ての感想になってしまいますが、セットアップはなかなか複雑で大変そうです。
13以降はFEMソルバーをベースにしつつ、筋肉の形状(Muscle Object)の作成、リグへのアタッチ、スキン(皮膚)の滑りなどを統合した専用シェルフツールが提供されました。
その後大きな機能の変化が訪れます。それが、Houdini19です。このバージョンから実装されたのが、VellumベースのMuscle & Tissue(筋肉と組織)システムです。
Houdini19のリリースイベント時に表示されたマッスルワークフローの図
※注意:上記のワークフローでマッスルは作れますが、あくまでマッスルだけです。ティシューやスキンは後段工程
この筋肉のシステムはHoudini17から実装されたVellumを採用することで、高速かつプロシージャルなワークフローを実現しています。つまり筋肉用に高レベルなSOPのHDAとして機能しているわけです。
直近バージョン20ではマッスルオブジェクトを簡易に実装できるフランケンマッスル、Vellumマッスルの結果を学習して高速化する機械学習デフォーマー「Otis」も実装されています。
筋肉年表
| バージョン | リリース年 | 機能 | コンテキスト | 備考 |
|---|---|---|---|---|
| Houdini 13 | 2013 | Muscle Object | Object | FEM ソルバーの実装。Muscle Object、Muscle Rig レガシーなシステムで現在は非推奨 |
| Houdini 17 | 2018 | Vellum Solver | SOP | Vellum の登場 XPBD ベースのソルバーが登場。当初は布向けなどの用途だったが、その高速性と SOP 統合が後のマッスルシステムの基盤となる |
| Houdini 19 | 2021 | Vellum Muscles & Tissue | SOP | SOP レベル / Vellum マッスルの初実装 Muscle Properties, Muscle Flex, Muscle Solver Vellum 等が登場。SOP 完結型 |
| Houdini 19.5 | 2022 | Franken Muscle | SOP | フランケンマッスルの対応 Franken Muscle SOP により、複数の筋肉を単一メッシュとして統合・管理可能に |
| Houdini 21 | 2024 | Otis Solver Otto Character |
SOP | Otis ソルバーの対応 Muscle Auto Tension Lines による自動化。テストキャラ Otto の同梱 |
とはいっても、基本的なことがわからないと、これらの違いがイマイチ良くわからないので、基礎概念から解説していきます。
この記事の内容は主にHoudini20.5で公開された最新のマッスルマスタークラスの動画とマッスルのヘルプ:Muscles & Tissueのワークフローを見た上での内容となっています。
概念:3つのパス構造
まず、Houdiniがどのように「体」を捉えているかを理解する必要があります。
人間の体は、脳の司令によって細胞の動きで 筋肉 → 骨 を動かしますが、3DCGの世界では逆。ボーンがまず初めに骨として動き、それに追従して筋肉がシミュレーションされます。
つまり、本物のような筋肉表現を行うために、実際の体で起こっていることと逆の事象(嘘)を発生させているわけです!
そして、Houdini内では現実の生物構造を模倣するために、筋肉のシステム用の3つのパスを利用します。
3つのパスの流れ概念図:骨が筋肉を動かし、筋肉が組織を押し上げ、最終的に皮膚が変形する
-
Muscle(筋肉):
骨の動き(Animation)によって駆動され、収縮・膨張する部分 -
Tissue(筋組織):
筋肉と骨を覆う、脂肪や筋膜の層。Muscleシミュレーションの結果を入力とし、全体を包み込んで筋肉のスライドや揺れ(Jiggle)が加えられます -
Skin(皮膚):
最終的なレンダリング用の表面。Tissueの上でシミュレーションされ、シワやたるみを表現します
ティシューって何? マッスルTissueとティッシュペーパー:
筋肉組織(マッスルティシュー)も紙の組織(ティッシュペーパー)も語源は「織る」。
英語の tissue の語源は、ラテン語の texere(織る)に由来し、さらに古フランス語の tissu(織られたもの・帯・薄い布)、印欧祖語(Proto-Indo-European, PIE)の語根 *tek- に起源を持ちます。この語源から、様々な意味へ枝分かれしていきました。
- 生物学的な「筋肉組織:(Muscle Tissue)」
18〜19世紀初頭、フランスの解剖学者のビシャ氏(Xavier Bichat)が、人体の構造を研究していた際、皮膚や筋肉、結合組織などがまるで繊維が織り込まれた布のようになっていることに着目し、体の細胞の集合体のことをティシューと呼ぶようになったそうです。
- 「ティッシュペーパー」
もともと非常に薄く、透き通るような上質な布(織物)のことを「ティッシュ」と呼んでいました。 そこから転じて、「薄くて柔らかい紙」のことを「ティッシュ・ペーパー(織物のような紙)」と呼ぶようになりました。
語根 *tek- (この語根は「生み出す」「形作る」「構築する」という意味を持つそうです。)はコンテキスト・テクスチャなど3DCGの他の単語にも派生しています
カピバラでシンプルな筋肉を作ってみる
ヘルプを参照し、簡易なジオメトリで筋肉を作っていきます。
サンプルとしてはカピバラがOutputに様々なパターンのオブジェクトがあるのでテスト用として最適です。
スケールに注意:
Houdiniの物理シミュレーションは、1単位=1メートルとして計算されます。
MayaやBlenderからインポートした身長170cmのキャラクターをそのまま使うと、Houdini上で170mとなってしまい、筋肉の質量(Mass)が大きくなりすぎて全く動かなくなってしまいます。Transformなどでスケールを0.01倍してください。
筋肉ジオメトリに対して Measure SOP(Type: Volume)を接続し、体積を確認することが可能です。
もしくは、Vellum Solver接続後に Vellum Constraint Properties のInfoから、Total Massを確認することも可能です。
ノードネットワーク
このあと、色々とノードのパラメータの設定について語っていますが、何の設定もせずノードを繋ぐだけでも一応・・・一応動きます。なのでスキップしてもらっても大丈夫です。
Tポーズ(Rest Position)の準備
後ほどセットするVellumソルバーは、アニメーション中の現在の形状と初期状態(Rest)を比較して、どれくらい伸びているかを計算します。KineFXなどで、基本的にはRest状態のデータは出力されていることが多いですが、筋肉用に明示的に設定されたAttributeとして tpose をセットしておく必要があります。注意点として、KineFXとしてのPolylineボーンだけではなく、実際に筋肉に追従する骨オブジェクトのほうのボーンもtposeとしてRestを用意しておく必要があります。※筋肉のほうは後述するソリッド化時に自動で生成されます。
そんなときに便利なのが Set T-poseノード(実体はtpose設定の入ったRest Position SOPのラッパー)です。これでRestのポーズを簡単に準備できます。これがないと、ソルバーはプリロールのないアニメーションで初期位置がズレて崩壊します。
マッスルIDの命名
システムは「どの筋肉がどれか」を識別するために muscle_id (Primitive Attribute) を使用します。
group_0 のような適当な名前ではなく、l_biceps (左上腕二頭筋)、r_quads (右大腿四頭筋) のように、左右がわかる命名規則(l_ r_ 接頭辞)が推奨されています。ミラーリング工程で反転も可能です。
推奨される命名規則とAttribute
| 対象 | Attribute名 | Type | 推奨値の例 | 備考 |
|---|---|---|---|---|
| 筋肉 | muscle_id |
Primitive |
l_biceps, r_quads
|
左右対称(Mirror)作業のために l_ r_ 接頭辞は必須 中央はc_
|
| 骨 | bone_id |
Primitive |
l_humerus, spine_01
|
|
| Tポーズ | tpose |
Point | (Vector3) |
PAttributeの初期値を格納 |
交差チェック:
ミラー時は交差(Intersection)に注意が必要です。
筋肉同士、あるいは筋肉と骨が初期状態でめり込んでいると、Vellumは爆発を防ぐために、その部分の衝突判定を無効化(Disable)します。結果、シミュレーション中に爆発したり、筋肉が骨をすり抜けたり、ドロドロに溶けたような挙動になります。
センターに存在する骨などを c_ * で除外する。交差チェック(Intersection Analysis)で赤くハイライトされていないか確認する。→めり込んでいたらSculptノードなどで事前にめり込みを解消。などの工夫が必要です。
筋肉を作る
準備ができたら、筋肉を構築します。
カピバラの3出力の中のMuscleを選び、Muscle SolidifyとFiber Groomというノードを接続します。
Muscle Solidify:中身を詰める
モデリングされた筋肉オブジェクトをそのまま筋肉シミュレーションとして利用することはできません。中身の体積を維持する計算を行うためにポリゴンサーフェスを、内部まで充填された四面体メッシュ(テトラヘドロン)に変換します。これにより、Vellumは体積(Volume)を計算できるようになります。
そこで登場するのが Muscle Solidify ノードです。
Muscle Solidifyの主要パラメータ目安
| パラメータ | 目安値 | 影響 |
|---|---|---|
| Max Tet Size |
0.02 ~ 0.05
|
内部の粗さ。細かいほど変形は綺麗だが計算が重くなる |
| Surface Triangle Size | 入力メッシュに合わせる | 表面の細かさ。Remesh設定で制御される。事前にRemeshノードを使っていれば切ってもOK |
Fiber Groom:筋繊維の方向・力の向きを決める
筋肉はただの肉の塊ではありません。繊維(ファイバー)の方向に沿って収縮する動きが発生します。
Fiber Groomノードを使い、その方向を定義します。筋繊維の方向は、オブジェクトの形状である程度自動でセット(円柱状の筋肉は自動で長軸方向をセット)されますが、、僧帽筋や広背筋のような複雑な形状は、手動でブラシを利用しグルーミングして、力の流れを作ってあげる必要があります。
この筋繊維の方向が間違ってしまうと、筋肉がねじれて縮んでしまいます。
操作方法:
ビューポートでEnterキーを押してステートに入り、筋肉の上をなぞるだけ
Muscle Propertiesの設定:物理特性とマッスル拘束
設定ノードは大きく分けて2つあります。
- Muscle Properties(物理特性): 筋肉自体の硬さや強さ。
- Muscle Constraint Properties(マッスル拘束): 筋肉を骨や他の筋肉にどう繋ぎ止めるか。
なぜ分かれているのか?
それは 筋腹(Muscle Belly)と腱(Tendon) という解剖学的な役割の違いをシミュレーション上で再現するためです。
拘束(コンストレイント)が無いとどうなるか、、。
筋肉がぶっ壊れます
柔らかく収縮する筋腹と、骨にガッチリ固定される滅茶苦茶硬い腱。この2つを使い分ける必要があります。
以降のパラメータの値についてはマッスルマスタークラスの動画の情報を参考にしています。
Muscle Propertiesのスタック構造
これらのノードはタブごとに効果を積み重ねていくスタック構造になっています。
- タブ1(General Settings): Group欄を空欄にします。これで全筋肉に値が適用されます。ここで全てのパラメータを有効化してベース値を作ります。
-
タブ2以降: 特定の筋肉(例:
l_arm_group)を指定し、変更したいパラメータだけを有効化して上書きします。
Muscle Properties(物理特性)
ここで筋肉の質(やわらかさなど)を決めます。
物理プロパティの調整指針
| パラメータ | デフォルト | 調整の方向性 | 効果 |
|---|---|---|---|
| Shape Stiffness | 100 |
下げる | 筋肉が柔らかくなり、揺れやすくなる。下げすぎると形が崩れる。 |
| Fiber Strength | 5 |
上げる | 収縮時の力が強くなる。Flex時に筋肉が強く縮む。 |
| Fiber Volume Scale | 1 |
1.1 ~ 1.3
|
収縮時に体積を強制的に増やし、ムキムキとしたパンプアップを表現する。 |
Muscle Constraint Properties(マッスル拘束特性)
筋肉を所定の位置に留めるための留め具の設定です。
大きく3種類の留め具があります。
Muscle Ends(筋肉の端=腱のピン留め)
腱の先端を骨に完全固定します。
内部的には他の拘束の100万倍の剛性を持っており、絶対に外れないアンカーとして機能します。
Radiusでどこまでを「端」とするかを決めますが、ここでの設定は大まかで構いません。後述するMuscle Paintで微調整できます。
Muscle to Bone(側面のスライド拘束)
筋肉は端だけで支えられているわけではありません。側面も骨に沿っています。
しかし、完全に固定されると筋肉は動けません。そこで「骨から離れないようにしつつ、表面を滑る(Slide)」という拘束を作ります。
-
Slide Rate:
1なら氷の上のように自由に滑り、0なら接着剤のように固定されます。 - Velocity Stiffness Factor: 非常に便利な機能です。「速い動きの時だけ拘束を硬くする」ことができます。これにより、激しいアクション時に筋肉が慣性で置いていかれるのを防ぎつつ、静止時は柔らかさを保てます。
Muscle to Muscle(筋肉同士の結合)
隣り合う筋肉同士を繋ぎ止め、バラバラになるのを防ぎます。これを設定しないと、動いた時に筋肉の間に隙間(Gaping)ができてしまいます。
- 接続ロジック: ソース筋肉の内部ポイントからターゲット筋肉の表面へ接続します。
-
Attachment Candidates:
距離が近いからといって、全ての筋肉をくっつけてはいけません。例えば、太ももの前側と裏側の筋肉は独立して動くべき。と動画で解説されていました。その場合!target_nameのように除外設定で、特定の筋肉とはくっつかないように制御します。
動きの自動化:Tension LinesとFlex
ここまでで体はできました。次は動きです。
手付けで筋肉の収縮タイミングをキーフレームするのは無理があるので、ボーンのアニメーションの動きに応じて自動化します。
Muscle Tension Lines
関節を跨ぐように、骨と骨を結ぶラインを描きます。これが「今動け!伸縮しろ!」というようなセンサーになります。
関節が曲がってラインが縮むと、それを検知して筋肉を収縮させます。
手動で設定が面倒であればMuscle Auto Tension Linesノードというものもあります。ある程度自動でラインを引いてくれます。
Tip:
ラインを描く際は、実際の筋肉の長さではなく、関節ピボットから等距離の短いラインを引くのがコツです。
長いラインだと、関節が曲がっても全体の長さの変化率(%)はわずかです。しかしピボット近くに短いラインを引けば、曲げた時の変化率が大きくなり、センサーとしての感度が良くなります。
手動のTension LineとAutoで設定したTension Line。Auto(Muscle Idから自動で割り振り)は上手くやらないと結構適当なラインになってしまう。けど、一応動きます。
Muscle Flex
ラインの伸縮を受け取り、筋肉の muscle_tension Attribute(0〜1)を駆動します。
-
Activation Ratio:
-
1.0未満(例: 0.8): ラインが縮むと発火(通常の収縮) -
1.0以上(例: 1.2): ラインが伸びると発火(伸張性収縮など)
-
マッスルシミュレーション
シミュレーションでは Muscle Solver Vellum ノードを利用します。場合によってはチューニングも必要です。
筋肉シミュレーションにおいて、最も品質を左右するのはSubstepsです。
筋肉の拘束は非常に硬い(Stiffnessが高い)ため、計算ステップが足りないと拘束が満たされず、ゴムのように伸びてしまいます。※なぜか筋肉が垂れ下がる&Stiffnessを上げても直らない場合などはSubstepsを上げてると治ることがあるようです。
要ファイルキャッシュ: この処理は重いのでFile Cacheノードを使い、必ずMuscleシミュレーションをキャッシュしましょう。シミュレーションはマッスルシミュレーションと、後段のティシューシミュレーションがあります
Muscle Glue:接着剤
どれだけ調整しても、筋肉が開いてしまう場合は **Muscle Glue**ノード を使います。
これはMuscle to Muscleの強力版で、ガチガチに接着する機能です。
Muscle Paintを使って、開いてほしくない境界線だけをマスクペイントし、物理的に一体化できます。
Tissue(筋肉組織)で包む:脂肪と皮膚の構築
筋肉(Muscle)ができたら、次はそれを包み込むティシュー(Tissue)を作ります。
Muscleパスだけでは、筋肉と筋肉の間に隙間があったり、骨が剥き出しだったりします。これらをまとめて一つの袋に入れて、隙間をゼリー(脂肪・結合組織)で満たす工程のようなイメージがTissueパスです。
ここでは以下の3つのジオメトリを入力として使用します。
- Skin Surface: キャラクターのガワ(最終的な皮膚の形状)
- Muscle Geometry: 先ほどシミュレーションした筋肉(キャッシュ)
- Bone: アニメーションする骨
Tissue Solidify:隙間を埋める
ここでも登場するのが Solidify ですが、名前は Tissue Solidify ノードです。
このノードは外側のスキンと内側の筋肉・骨の間の空間を計算し、そこを埋めるように四面体メッシュを生成してくれます。
Tissue Solidify
ここで生成されるTissueは、自動的に2つの層(Layer)として管理されます。
- Core(コア層): 筋肉や骨に接する内側の層
- Tissue(ティシュー層): 皮膚に近い外側の層
Tissue Properties:滑りの設定
Tissueシミュレーションで重要なパラメータ、それは 「スライディング(Sliding)」 です。
現実の体では、筋肉が動いても、皮膚がそれに100%くっついて動くわけではありません。筋肉の動きの上を、皮膚と脂肪がズルッと滑ることで、いい感じのアニメーションにしてくれます。
Tissue Properties ノードの Sliding タブで設定します。
Tissue設定の勘所
| パラメータ | 推奨設定 | 効果 |
|---|---|---|
| Sliding Rate |
0.5 ~ 0.8
|
筋肉の上を皮膚がどれくらい滑るか。0だと接着、1だと完全に滑る |
| Shrinkage |
0.95 程度 |
組織を少しだけ収縮させ、皮膚を内側に吸い付かせる(真空パックのような)効果。たるみを防ぐ。 |
Tissue Solver
設定が終われば Tissue Solver Vellum でシミュレーションします。
ここでは、内側の筋肉(Muscle Simの結果)が衝突オブジェクト(Collider)として機能し、その動きに合わせてTissueが変形・スライドします。
計算は重くなりますが、この工程を経ることで、ボコボコとした筋肉の形状が脂肪で程よくなじみ、有機的なシルエットが生まれます。
仕上げ:ハイメッシュへの転送
Tissueシミュレーションが終わりましたが、このままでは四面体メッシュなのでレンダリングできません。最後に、シミュレーション結果(四面体メッシュ)の動きを、元々の綺麗なスキンメッシュ(HighRes)に転送します。具体的にはPoint Deformノードを利用します。
- HighResスキンを用意
-
Point DeformSOP を使用します- 第1入力: 変形させたいHighResスキン
-
第2入力: Tissueの初期形状(
Extract T-PoseなどでRest状態にしたもの) -
第3入力: Tissueのシミュレーション結果(
File Cache後)
これで、筋肉と脂肪の揺れを持ったアニメーションが完成します。
シワの表現
シワの表現をする場合は Wrinkleを利用する手段があります。
メッシュの解像度を上げる必要がありますが、RestとDeformだけで、いい感じのシワを作ってくれるので非常におすすめです。
ただ、適当に作ってしまうと、おじさんが入ったヌイグルミ感がでてしまいます。
完成
マッスルのパラメータは全くいじっていませんが、一応筋肉はプルプルしています。
新しい機能
新しい機能も、バージョンを重ねるごとに登場しています。
フランケンマッスル
ここまで長々とVellumマッスルの解説をしてきましたが、「こんな面倒なこと、毎回やらないといけないの?面倒くさすぎる」と思った方もいるでしょう。
とくに筋肉のモデル作るのが大変すぎる。骨のモデルも大変すぎる、見えないのに!!
例えば空想のモンスターなどは、既存の動物の解剖学モデルから流用した筋肉などを利用できなくはないですが、明らかにオーバースペックです。
解剖学的に正しいことよりも、素早く筋肉を実装して、いい感じの筋肉の動き(シミュレーション)のイテレーションを回したほうが効率的な場合があります。そのために用意された機能が 「フランケンマッスル(Franken Muscle)」 です。
Franken Muscle SOP:筋肉を描くことが可能
フランケンマッスルは、わざわざMayaやZBrushで筋肉をモデリングする必要がありません。Houdiniのビューポート上で、骨やスキンの上に直接「筋肉の領域」をペイントするだけで、プロシージャルに筋肉の塊を生成してくれる機能です。
やり方は簡単です。
-
Franken Muscle Paintノードを作成し、ボーンとスキンを接続 - ビューポートでMuscle Paintモードへ
- ここに筋肉が欲しいという場所をブラシで塗る
これで、塗った範囲の骨とスキンの間に、筋肉のジオメトリが自動生成されます。
塗るのが面倒なら Franken Muscle ノードで、既存の筋肉からMuscleIdを第2入力でAttributeをTransferすることも可能です。
なぜ「フランケン」なのか?
この機能の面白いところは、複数の筋肉を個別のオブジェクトとして作るのではなく、「融合した一つの塊」 として扱うことができる点です(つぎはぎの怪物のように!)。
フランケンマッスルでは筋肉をまとめて一つのメッシュとして生成し、内部に muscle_id を埋め込むことができます。
これにより、シミュレーション時の筋肉同士の衝突計算を省略できたり、セットアップの手間を減らすことができます。
「背景のモブキャラだけど筋肉の揺れは欲しい」「クリーチャーの触手の中に肉感を足したい」といったケースでは、このフランケンマッスルが時短ツールになります。
機械学習デフォーマー「Otis」
Houdini21でも新機能が追加されました。
これはHoudini Hiveでも紹介された機能になります
Otisは、Vellumマッスルの結果を学習して、シミュレーションなしで高速に再現する機械学習デフォーマーです。
これまで解説してきたVellumマッスル(Muscle & Tissue)は、物理計算であるため、どうしても計算に時間がかかります。Substepsを上げればなおさらです。
Otisは、このVellumシミュレーションの計算結果(骨のポーズと、それに対応する筋肉・組織の変形)を教師データとして学習します。そして学習後は、骨のポーズを入力するだけで、推論によって瞬時に変形結果を返します。
Ottoのモデルなどで展開すると、以下のような出力がされます。

Ottoは2つの大きなネットワークのプリセットがあります
Otisの学習済みデータはコンポーネントとして保存されます。
面白いのは、この学習結果をトポロジーの異なる別のキャラクターにも転送できるという点です。
例えば、標準体型のモデルで学習させた「筋肉の動き方」を、太ったキャラクターや痩せたキャラクターに適用することが可能です。骨の構造さえ同じであれば、Otisは「この骨の角度なら、筋肉はこう変形するはずだ」という推論を、ターゲットの形状に合わせて実行してくれます。やばすぎる!!
オークのボーンとマッスルが。。人間から生まれてしまった。。。
まとめ
Houdiniのマッスルシステムは、ノードベースの利点を最大限に活かし、一度組めば他のキャラクターにも流用可能なプロシージャル性を持っています。フランケンマッスルやOtisのように、Houdiniのバージョンが進むにつれて高速化や使いやすさも向上しています。
筋肉に取り組むにあたり、実際に使うノード自体はそこまで多くはないのですが、事前の筋肉の知識やそれぞれのノードの役割がいまいち理解できず、学習時にそこの理解に非常に時間がとられました。今回の記事では特に躓いたところを重点的に書いたつもりです。
長くなってしまいましたが、この記事が皆さんの「はじめての筋肉」の一助になれば幸いです!
間違いなどありましたらご指摘ください。
それでは、良き筋肉ライフを!

























