PMXdl

PMDGfB^0.1.0.1ȍ~y PMXGfB^ ɂđΉĂ PMX`(2.0ȍ~)̃f[^tH[}bgyѓdlłB


gp

KɊւĂ PMXGfB^ƋʂƂȂ܂B

Ǘ͂ňꊇčs܂BȉςɂĂNG(ł͈ؑΉ܂)
tH[}bgJɂĂŊǗ܂B

eAvP[VȂǂł̃tH[}bg̗pɂẮAcłΎȐӔCɂĎRɍsĂB


o[WǗƌ݊

PMX̌݊verŌɊǗ܂B
Ήveȑꍇ݂͂₩ɏ𒆒fĂB

ȂAPMX1.0͔JƂȂ܂(擪L[wb_\قȂ̂ŁAԈēǂݍ܂Ȃ悤)

݂̍ŐVver 2.1 ƂȂ܂B


f[^tH[}bg

` : oCî
oCg : gGfBA
eLXgGR[h : jR[h(UTF16LE) y UTF8 ̑I

{f[^^ƃoCgTCY

[C#/HLSL+] : oCgTCY  | [C]

byte	: 1  - Ȃ  | unsigned char
sbyte	: 1  -   | char

ushort	: 2  - Ȃ  | unsigned short
short	: 2  -   | short

uint	: 4  - Ȃ  | unsigned int
int	: 4  -   | int (32bitŒ)

float	: 4  - Px | float

float2	: 8  (4 * 2)  | Vector2 - X,Y(or U,V) ̏
float3	: 12 (4 * 3)  | Vector3 - X,Y,Z(or R,G,B) ̏
float4	: 16 (4 * 4)  | Vector4 - X,Y,Z,W(or R,G,B,A) ̏

TextBuf	:  | 4 + obt@

bitFlag : 1 | 1byte ɂ 8tO bit-0:OFF 1:ON


TextBuf (eLXgobt@)
int : oCg
byte * oCg : byte GR[h`PMXwb_ɋL

obt@TCY 4 + n [byte]

GfB^̃GR[h́A

oCg
byte[] buf = Encoding.Unicode.GetBytes(str);	// UTF16
byte[] buf = Encoding.UTF8.GetBytes(str);	// UTF8


string str = Encoding.Unicode.GetString(buf, 0, buf.Length);	// UTF16
string str = Encoding.UTF8.GetString(buf, 0, buf.Length);	// UTF8

ꂾłB
ῗׂăCu(.NET Framework)ɂ܂Ă̂ŁAŔȂǂɂ͑ΉłȂƎv܂B
TQ[gyA̎舵ɂĂȂǏڍוs


IndexQƂ̃oCgTCY
ef[^IndexQƒl f[^̑ɑ΂ 1,2,4oCgōœKB

Ώۂ́A

_
eNX`(e[uǗ)
ގ
{[
[t


̊eځBQƂĂ鑤IndexlσTCYɂȂ܂B

ef[^TCYɂĂPMXwb_ɋLڂ܂B

f[^͈̔͂ƃoCgTCY̊֌W - _ 8^16bit̂ݕȂƂĈ܂B

E_ - Ȃ
[oCgTCY] : _͈
1 : 0 ` 255
2 : 256 ` 65535
4 : 65536 ` 2147483647  ɂȂ̂Œ


E{[^eNX`^ގ^[t^ - 
[oCgTCY] : f[^͈
1 : 0 ` 127
2 : 128 ` 32767
4 : 32768 ` 2147483647

{[⍄̂Ȃǂ -1QƒlƂĈ܂Bގ͍ގ[tɂ-1:SގƂ݂Ȃ܂B
GfB^łIndexQƂׂ͂ int(32bit) ŊǗĂ܂B


PMX̃f[^\Tv - ver2.0p(2.1ȍ~͉LɒǋLĂ܂)

-擪-

PMXwb_
-
f
-
_ [int]
_ * _
-
ʐ [int]
Qƒ_Index * ʐ
-
eNX` [int]
eNX`pX * eNX`
-
ގ [int]
ގ * ގ
-
{[ [int]
{[ * {[
-
[t [int]
[t * [t
-
\g [int]
\g * \g
-
̐ [int]
 * ̐
-
Joint [int]
Joint * Joint

-I-


evf int (4oCg) ŌŒBef[^͉σTCYŋL^̂ŒӁB



PMXwb_

4 : byte[4]	| "PMX " | ASCII 0x50,0x4d,0x58,0x20  󔒂ɒ (PMX1.0"Pmx "ɂȂĂ̂ŊԈႦȂ悤)
4 : float	| ver (2.0/2.1)

܂Ń}WbNio[

1 : byte	| 㑱f[^̃oCgTCY  PMX2.0 8 ŌŒ
n : byte[8]	| byte * oCgTCY

oCg - byte
  [0] - GR[h  | 0:UTF16 1:UTF8
  [1] - ǉUV 	| 0`4 ڍׂ͒_Q

  [2] - _IndexTCY | 1,2,4 ̂ꂩ
  [3] - eNX`IndexTCY | 1,2,4 ̂ꂩ
  [4] - ގIndexTCY | 1,2,4 ̂ꂩ
  [5] - {[IndexTCY | 1,2,4 ̂ꂩ
  [6] - [tIndexTCY | 1,2,4 ̂ꂩ
  [7] - IndexTCY | 1,2,4 ̂ꂩ


f

4 + n : TextBuf	| f
4 + n : TextBuf	| fp
4 + n : TextBuf	| Rg
4 + n : TextBuf	| Rgp


_

ǉUVɂ
PMX̒_ɂ͒ǉUV(g4DxNg)ő4܂Ŋi[邱Ƃ\Bǉ̓wb_Ŏw肳B
AǉUV̓t@CTCYɑ傫êŁAsvȂȂԂ]܂B

EFCgɂ
1_ɂő4{[܂ł̃EFCgi[\B
i[@͑Ή{[ySDEFɊ֘AA

BDEF1
BDEF2
BDEF4
SDEF

 4p^[ɕނ(1byteŌ`L^)
L^f[^́A({[IndexQƂintƂĉ)

BDEF1 : int 		| 4   | {[̂
BDEF2 : int,int,float 	| 4*3 | {[2ƁA{[1̃EFCgl(PMD)
BDEF4 : int*4, float*4	| 4*8 | {[4ƁAꂼ̃EFCglBEFCgv1.0łۏ͂Ȃ
SDEF  : int,int,float, float3*3 
			| 4*12 | BDEF2ɉASDEFpfloat3(Vector3)3Bۂ̌vZł͂ɕ␳l̎ZoKv(ꉞ̂܂BDEF2ƂĂgp\)

ƉσTCYɂȂ̂ŒӁB


[_f[^]

12 : float3  | ʒu(x,y,z)
12 : float3  | @(x,y,z)
8  : float2  | UV(u,v)

16 * n : float4[n] | ǉUV(x,y,z,w)  PMXwb_̒ǉUVɂ
  n:ǉUV 0`4

1 : byte    | EFCgό` 0:BDEF1 1:BDEF2 2:BDEF4 3:SDEF

ό`ɂpf[^قȂ^QIndex-1:QƂ̏ꍇ̂Œ

BDEF1 ->
  n : {[IndexTCY  | EFCg1.0̒P{[(QIndex)

BDEF2 ->
  n : {[IndexTCY  | {[1̎QIndex
  n : {[IndexTCY  | {[2̎QIndex
  4 : float              | {[1̃EFCgl(0`1.0), {[2̃EFCgl 1.0-{[1EFCg

BDEF4 ->
  n : {[IndexTCY  | {[1̎QIndex
  n : {[IndexTCY  | {[2̎QIndex
  n : {[IndexTCY  | {[3̎QIndex
  n : {[IndexTCY  | {[4̎QIndex
  4 : float              | {[1̃EFCgl
  4 : float              | {[2̃EFCgl
  4 : float              | {[3̃EFCgl
  4 : float              | {[4̃EFCgl (EFCgv1.0̕ۏ͂Ȃ)

SDEF ->
  n : {[IndexTCY  | {[1̎QIndex
  n : {[IndexTCY  | {[2̎QIndex
  4 : float              | {[1̃EFCgl(0`1.0), {[2̃EFCgl 1.0-{[1EFCg
 12 : float3             | SDEF-Cl(x,y,z)
 12 : float3             | SDEF-R0l(x,y,z)
 12 : float3             | SDEF-R1l(x,y,z) ClvvZ

EFCg܂

4 : float    | GbW{  ގ̃GbWTCYɑ΂Ă̔{l




n : _IndexTCY     | _̎QIndex

3_(3_Index)1
ގ̖ʐ͍ގ̖(_)ŊǗ (PMD)


eNX`

ގŎQƂeNX`pX̃e[u

4 + n : TextBuf	| eNX`pX

ގ͂IndexQƁBeNX`^XtBA^Toonňꊇėp
LToon -> toon01.bmp`toon10.bmp ̓eNX`e[uɂ͓Ȃ̂Œ

PMDƓlɃfʒuƂăTutH_w肪\
pX؂ɂĂ̓VXeŔF\ȕ('\'or'/'Ȃ)ƂAPMXƂČŒ͂ȂB


ގ

4 + n : TextBuf	| ގ
4 + n : TextBuf	| ގp

16 : float4	| Diffuse (R,G,B,A)
12 : float3	| Specular (R,G,B)
4  : float	| SpecularW
12 : float3	| Ambient (R,G,B)

1  : bitFlag  	| `tO(8bit) - ebit 0:OFF 1:ON
                   0x01:ʕ`, 0x02:nʉe, 0x04:ZtVhE}bvւ̕`, 0x08:ZtVhE̕`, 
                   0x10:GbW`

16 : float4	| GbWF (R,G,B,A)
4  : float	| GbWTCY

n  : eNX`IndexTCY     | ʏeNX`, eNX`e[u̎QIndex
n  : eNX`IndexTCY     | XtBAeNX`, eNX`e[u̎QIndex  eNX`gq̐Ȃ
1  : byte	| XtBA[h 0: 1:Z(sph) 2:Z(spa) 3:TueNX`(ǉUV1x,yUVQƂĒʏeNX``s)

1  : byte	| LToontO 0:pl͌Toon 1:pl͋LToon
--
LToontO:0 ̏ꍇ
 n : eNX`IndexTCY     | TooneNX`, eNX`e[u̎QIndex

LToontO:1 ̏ꍇ
 1 : byte	| LTooneNX`[0`9] -> ꂼ toon01.bmp`toon10.bmp ɑΉ
--
ǂ炩Ȃ̂Œ


4 + n : TextBuf	|  : R^XNvgLq^GtFNgւ̃p[^zuȂ

4  : int	| ގɑΉ(_) (K3̔{ɂȂ)


{[

4 + n : TextBuf	| {[
4 + n : TextBuf	| {[p

12 : float3	| ʒu
n  : {[IndexTCY  | e{[̃{[Index
4  : int		| ό`Kw

2  : bitFlag*2	| {[tO(16bit) ebit 0:OFF 1:ON

{[tO
 0x0001  : ڑ(PMDq{[w)\@ -> 0:WItZbgŎw 1:{[Ŏw

 0x0002  : ]\
 0x0004  : ړ\
 0x0008  : \
 0x0010  : 

 0x0020  : IK

 0x0080  : [Jt^ | t^Ώ 0:[U[ό`l^IKN^dt^ 1:ẽ[Jό`
 0x0100  : ]t^
 0x0200  : ړt^

 0x0400  : Œ
 0x0800  : [J

 0x1000  : ό`
 0x2000  : Oeό`

ꂼ̋@\ڍׂ͌q̋@\Tvōs܂B

tOɂČpi[f[^ω̂Œ

--
ڑ:0 ̏ꍇ
 12 : float3	| WItZbg, {[ʒȗΕ

ڑ:1 ̏ꍇ
 n  : {[IndexTCY  | ڑ{[̃{[Index
--

---
]t^:1 ܂ ړt^:1 ̏ꍇ
 n  : {[IndexTCY  | t^e{[̃{[Index
 4  : float	| t^
---

--
Œ:1 ̏ꍇ
 12 : float3	| ̕xNg
--

---
[J:1 ̏ꍇ
 12 : float3	| X̕xNg
 12 : float3	| Z̕xNg t[Zo@͌q
---

--
Oeό`:1 ̏ꍇ
 4  : int  	| Keyl
--

---
IK:1 ̏ꍇ IKf[^i[

 n  : {[IndexTCY  | IK^[Qbg{[̃{[Index
 4  : int  	| IK[v (PMDyMMDł255񂪍őɂȂ悤ł)
 4  : float	| IK[vvZ1񂠂̐px -> WAp | PMDIKlƂ4{قȂ̂Œ

 4  : int  	| IKN : 㑱̗vf
 <IKN>
   n  : {[IndexTCY  | N{[̃{[Index
   1  : byte	| px 0:OFF 1:ON
   ----
   px:1̏ꍇ
     12 : float3	|  (x,y,z) -> WAp
     12 : float3	|  (x,y,z) -> WAp
   ----
 </IKN>
 * IKN
---


[t

[t
i[\ȃ[t͑ʂāA

_[t
UV[t
{[[t
ގ[t
O[v[t

5ށBUV[t́AUV^ǉUV1`4̌v5ނɕނB
ǉUVɂĂ͕svUV[ti[邱Ƃ邪A[t͓ɍ폜Ȃǂ͍sȂ̂ŒӁB


ꂼA

_[t
n  : _IndexTCY  | _Index
12 : float3	| WItZbg(x,y,z)

UV[t
n  : _IndexTCY  | _Index
16 : float4	| UVItZbg(x,y,z,w) ʏUVz,wsvڂɂȂ邪[tƂẴf[^l͋L^Ă

{[[t
n  : {[IndexTCY  | {[Index
12 : float3	| ړ(x,y,z)
16 : float4	| ]-NH[^jI(x,y,z,w)

ގ[t
n  : ގIndexTCY  | ގIndex -> -1:SގΏ
1  : ItZbgZ` | 0:Z, 1:Z - ڍׂ͌q
16 : float4	| Diffuse (R,G,B,A) - Z:1.0^Z:0.0 lƂȂ(ȉ)
12 : float3	| Specular (R,G,B)
4  : float	| SpecularW
12 : float3	| Ambient (R,G,B)
16 : float4	| GbWF (R,G,B,A)
4  : float	| GbWTCY
16 : float4	| eNX`W (R,G,B,A)
16 : float4	| XtBAeNX`W (R,G,B,A)
16 : float4	| TooneNX`W (R,G,B,A)

O[v[t
n  : [tIndexTCY  | [tIndex  dlO[v[t̃O[v͔ΉƂ
4  : float	| [t : O[v[t̃[tl * [t = Ώۃ[t̃[tl

X̃[tItZbgƂB


[[tf[^]

4 + n : TextBuf	| [t
4 + n : TextBuf	| [tp

1  : byte	| pl (PMD:JeS) 1:() 2:() 3:(E) 4:̑(E)  | 0:VXe\

1  : byte	| [t - 0:O[v, 1:_, 2:{[, 3:UV, 4:ǉUV1, 5:ǉUV2, 6:ǉUV3, 7:ǉUV4, 8:ގ

4  : int  	| [t̃ItZbg : 㑱̗vf
ItZbgf[^ * n  | [tނɏ]ăItZbgf[^i[ قȂނ͕̍s


ގ[t̉Z`ɂ
̃[ťĂяolāAZp̍ގ[tlƉZp̍ގ[tl͕ʊǗ]܂B
z肵Ă铮́A[tݒ̕ZZ^ZZĕێA`掞ɁA

ގl x Zl + Zl 

Ń[tKpsB
Z^Zdl̂́AԂŊS(A:0)񓧉(A:1) Ƃ[t\Ẑ݂ł͍쐬łȂ߁B
܂Z0+ZɂA(̍ގlɊւ炸)Cӂ̎wlւ̕ϊȈՂɂȂB

eNX`(eNX`^XtBA^Toon)̃[tAl(񓧉ߓx)̓eNX`RGBߍ(Z:(1,1,1)Ƃ̔䗦^Z:(0,0,0)Ƃ̔䗦)ɎgpB
`ɎgpeNX`Al̓[tKp̃eNX`̒lgƁB


\g

{[^[tʉĊi[\
PMD/PMXGfB^ł RootpPMD݊̕\ggƂďzuB

4 + n : TextBuf	| g
4 + n : TextBuf	| gp

1  : byte	| gtO - 0:ʏg 1:g

4  : int  	| gvf : 㑱̗vf
<gvf>
  1 : byte	| vfΏ 0:{[ 1:[t
  ----
  vfΏ:0̏ꍇ
    n  : {[IndexTCY  | {[Index

  vfΏ:1̏ꍇ
    n  : [tIndexTCY  | [tIndex
  ----
</gvf>
* gvf


PMX̏Ԃł́A

\g:0(擪) -> "Root"(gw) | g {[:0(擪{[)ǉBΉΘg̃[gʒuւ̐ݒp
\g:1       -> "\"(gw) | PMDϊ͘g \g Ɠl̔zu (ꕔȂǂŎIɒǉꍇ)

Ƃgzu܂BǵAgtO1yјgŔf(ҏWɌč폜Ȃ悤ɒ)




p[^PMD̍̂Ɠl

4 + n : TextBuf	| ̖
4 + n : TextBuf	| ̖p

n  : {[IndexTCY  | ֘A{[Index - ֘AȂ̏ꍇ-1

1  : byte	| O[v
2  : ushort	| Փ˃O[vtO

1  : byte	| ` - 0: 1: 2:JvZ
12 : float3	| TCY(x,y,z)

12 : float3	| ʒu(x,y,z)
12 : float3	| ](x,y,z) -> WAp

4  : float	| 
4  : float	| ړ
4  : float	| ]
4  : float	| 
4  : float	| C

1  : byte	| ̂̕Z - 0:{[Ǐ](static) 1:Z(dynamic) 2:Z + Boneʒu킹


Joint

p[^PMDJointƓl

4 + n : TextBuf	| Joint
4 + n : TextBuf	| Jointp

1  : byte	| Joint - 0:XvO6DOF   | PMX2.0ł 0 ̂(gp)
--
Joint:0 ̏ꍇ

n  : IndexTCY  | ֘AAIndex - ֘AȂ̏ꍇ-1
n  : IndexTCY  | ֘ABIndex - ֘AȂ̏ꍇ-1

12 : float3	| ʒu(x,y,z)
12 : float3	| ](x,y,z) -> WAp

12 : float3	| ړ-(x,y,z)
12 : float3	| ړ-(x,y,z)
12 : float3	| ]-(x,y,z) -> WAp
12 : float3	| ]-(x,y,z) -> WAp

12 : float3	| ol萔-ړ(x,y,z)
12 : float3	| ol萔-](x,y,z)
--





@\Tv

ǉUV

PMX̊e_ɂ4܂4DxNgǉzu\B
f[^IɂPMXwb_̎wɌW炸 44DxNgzuĂƂ]܂B

EGtFNg猩_obt@(Z}eBbNƂ̊֌W)

struct PmxVertex{

float3 Position : POSITION;
float3 Normal : NORMAL;

float2 UV    : TEXCOORD0;

float4 UVA1  : TEXCOORD1;
float4 UVA2  : TEXCOORD2;
float4 UVA3  : TEXCOORD3;
float4 UVA4  : TEXCOORD4;

...
};

UV[t̑ΏۂɂȂĂǉUVPMXt@C̒_ɑ݂ȂꍇłA
(0,0,0,0)ftHglƂĔzuĂ΁AUV[tGtFNgCӂ̏\ɂȂ܂B



{[ό`

ό`
{[̕ό`

1. O^
2. Kw
3. Index

ɂĒ(K)Aɕό`sB1̃{[ɂ郍[Jό`IK̃NQƂ1̂݁B

F
A, O,Kw2,Index0
B, ,Kw1,Index1
C, O,Kw0,Index2
D, ,Kw0,Index3
E, O,Kw0,Index4
F, O,Kw1,Index5



C, O,Kw0,Index2
E, O,Kw0,Index4
F, O,Kw1,Index5
A, O,Kw2,Index0

<Z>

D, ,Kw0,Index3
B, ,Kw1,Index1

Ƃŕό`sB


ό`p[^
1̃{[ό`p[^͈ȉ̒ʂ

E[U[ɂ ]^ړ  	| PMD/PMXGfB^ł̓XP[l
E{[[tɂ ]^ړ
Et^̏ꍇ     t^]^t^ړ  | ۑĂƂődt^\ɂȂ
EIKN̏ꍇ     IK]

E{[ό`ɂ郍[Jό`
E_Ȃǌ`ό`p̃O[oό`

]̓NH[^jIAړ3DxNgAό`Ԃ͓ϊsz


t^ɂ
([Jt^ł͂Ȃꍇ)
t^͕t^e{[

E[U[ɂ ]^ړ
E{[[tɂ ]^ړ
Et^̏ꍇ     t^]^t^ړ
EIKN̏ꍇ     IK]

Lό`ʂg̕ό`ʂɂɉό`sB
]^ړ͕ʍڂƂĂꂼǉ(ЕłOK)

t^e̐eqό`ɂ{[ό`Ԃ͕t^Ώۂł͂Ȃ̂ŒӁB
[Jt^̏ꍇ̓{[ό`Ԃʂɕt^邱Ƃ\(dt^̏ꍇ͖)

t^ό`sAt^ό`ʂ{[ɕۑA
ʂ̕t^{[t^eQƂꂽꍇɂ̕ό`ʂndt^\

RȂt^{[łeq֌Wɂʏ̃{[ό`͉\ƂȂB


ό`p[^̓Kp

0. ׂẴ{[̃[J^O[oό`Ԃ
1. [U[̉]^ړʂׂẴ{[ɐݒ
2. {[[tɂ]^ړʂΉ{[ɐݒ

3. ό`̐K
4. K̏Ƀ{[ό`s

4.1. {[̃[Jό`(ڍׂ͌q)
4.2. IK̏ꍇIKό`


ȏ̎菇łׂẴ{[ό`B

ό`̓KṕAό`ɂO[oό`ʂ[Jό`ʂɈU߂A
eQƂό`p邱ƂōsB



[Jό`

E](NH[^jI)̌vZ
[Jt^ł͂Ȃꍇ:
[et^](or e] * e][t) * t^eIKN]:t^ * ] * ][t * IKN

[Jt^̏ꍇ:
[t^ẽ[Jό`(s)̉]]:t^ * ] * ][t * IKN

--
vZ:
0. ]ʂPʉ]ʂƂĊJn

1. Y{[t^̏ꍇ : 
 1.1 [Jt^̏ꍇ : * t^ẽ[Jό`(s)̉] [Jt^D
  <> t^et^{[̏ꍇ : * t^e̕t^](q) 
  <>         t^{[ł͂Ȃꍇ : * t^ẻ] * t^ẻ][t

 1.2 t^eIKN̏ꍇ([Jt^ł͂Ȃꍇ) : * t^eIKN]

 1.3 t^1ȊȌꍇ : ]ʂt^ŕ␳(Quaternion.Slerp()z)

 1.4 t^eIKN`][t(t^ŕ␳ς)`][t 𓖊Y{[̕t^]ʂƂĕۑ(ʂ̕t^{[̕t^eɂȂꍇ̑dt^ό`p)
    t^]  { [et^](or e] * e][t) * t^eIKN]:t^ * ] * ][t } 
             ܂ { [t^ẽ[Jό`(s)̉]]:t^ * ] * ][t }

2. Y{[̉]ʒǉ : * ] * ][t

3. Y{[IKN]ʂꍇ : * IKN]

IKN]ʂ͓Y{[t^QƂԂɕʂIK{[ɂĕό`^XV\̂ŁA
lĕt^]ʂUO`(t^QƎɍČvZ)ɂȂĂ܂B
t^eIKN͎QƎɊm肳Ă܂Ȃǂ̖肪܂AbIɂ̂悤ȌvZƂĂ܂B


Eړ(3DxNg)̌vZ
[Jt^ł͂Ȃꍇ:
[et^ړ(or eړ + eړ[t)]*t^ + ړ + ړ[t

[Jt^̏ꍇ:
[t^ẽ[Jړ]*t^ + ړ + ړ[t

t^ẽ[Jړ:{[ړʂƂČvZ bΉ
 = {[ʒu(=[Js4s1/2/3vf) - {[ʒu

--
vZ:({Iɉ]Ɠ)

0. ړʂ0ړʂƂĊJn

1. Y{[t^̏ꍇ : 
 1.1 [Jt^̏ꍇ : * t^ẽ[Jړ [Jt^D
  <> t^et^{[̏ꍇ : + t^e̕t^ړ(q)
  <>         t^{[ł͂Ȃꍇ  : + t^ëړ + t^ëړ[t

 1.2 t^1ȊȌꍇ : ړʂt^ŕ␳(t^ZOK)

 1.3 et^ړ(t^ŕ␳ς)`ړ[t 𓖊Y{[̕t^ړʂƂĕۑ(ʂ̕t^{[̕t^eɂȂꍇ̑dt^ό`p)
    t^ړ  { [et^ړ(or eړ + eړ[t)(or e[Jړ)]:t^ + ړ + ړ[t }

2. Y{[̈ړʒǉ : + ړ + ړ[t



Zoꂽ]^ړ̗lA

[Js = (XP[s) * ]s * ړs

vZAe{[̃ItZbgyѐẽ[JsɍB

Y{[IK{[̏ꍇA(IK{[^IK^[Qbg̈ʒu֌W)IKNIK]ʂČvZ  {[IKN]ʂXVB
PMXIKό`IK{[̕ό`ɂ̂܂ܕό`s(PMD̂悤ɑS{[ό`Ȃǂ̏Œł͂Ȃ̂Œ)


ȏ̎菇łׂẴ{[̃[Jό`XVB

ό`̓KṕAό`ɂO[oό`ʂ[Jό`ʂɖ߂A
eQƂό`p邱ƂōsB



ό`ɂό`ʂ̎QƂɂ

eqό`ɂ`BKvȕό`́AeqɃ{[ό`ĂяoKvB
qȅł͐ό`ȂB

[U[ʂQƂt^`B̏ꍇ́At^e̕ό`OɃ{[ό`ĂяoĂɕό`
(1iK̂݁^dt^sꍇ͕t^eɕό`ĂKv)

{[[tQƂt^̏ꍇlłB




PMD̝{[Ɠn̎dg݁B{[l{[̓ό`ʂɂ͊֗^ȂB
쎞̈ړyщ]w肵ŌŒ艻@\LB


[J

̃[Jt[Cӂɒ`邽߂̎p[^B
X^ZŎw肷邪A炪֌Wł͂Ȃꍇ̂ňȉ̌vZŕ␳B

Y = Vector3.Cross(Z, X);   // Vector3.Cross():xNg
Z' = Vector3.Cross(X, Y);

PMDł͘r֘Âݎq{[̕XAO-ZƂ鎲Ń[Jt[쐬͗lB


Oeό`

w肳ꂽ{[̓fÕ{[e{[Ƃĕό`邱Ƃ\B
̏ꍇ̎ʗpIDƂKeyl(int)pӂĂB

̃tOwɊւ炸ڑ@\𗘗p\ɂĂ悢ƎvB

̍\𗘗p邱ƂŁAႦ΃fANZT̂悤ɓ̃f̓{[Ɋ֌Wt\A
rIKg蓯m̐ڑyё샂fɂꊇ邱Ƃ\ƂȂB

pƂĎ̃{[̐eڑ̕tւȂǂlB


{[̑(tOl)ɂ

 0x0001  : ڑ
 0x0002  : ]\
 0x0004  : ړ\
 0x0008  : \
 0x0010  : 
 0x0020  : IK
 0x0080  : [Jt^
 0x0100  : ]t^
 0x0200  : ړt^
 0x0400  : Œ
 0x0800  : [J
 0x1000  : ό`
 0x2000  : Oeό`

Ƃ邪A̒Ń{[̕ό`ɌW鑮

 0x0020  : IK
 0x0080  : [Jt^
 0x0100  : ]t^
 0x0200  : ړt^
 0x1000  : ό`
 0x2000  : Oeό`

݂̂ŁAc

 0x0001  : ڑ
 0x0002  : ]\
 0x0004  : ړ\
 0x0008  : \
 0x0010  : 
 0x0400  : Œ
 0x0800  : [J

́A\yё쎞̐ڂɂȂB
{[̕ό`lɂ͊֗^Ȃ̂ŒӁB


PMDƂ̌݊

IK^]e ȊÕ{[\͖Ȃϊ\B
L2ނ́Aeqnł̕ό`A^C~Ołɓ̕ό`ŝŁA
{I1{[1x݂̂̕ό`łPMX̃{[\ł͂܂ϊłȂꍇB

PMDPMX ϊł́A

IK{[yтIKeƂĂn̕ό`Kw 01
]eȉ̕ό`Kw 02

ɂׂĕϊđΉĂ邪(nԂ炳̊Kw𒲐)A
{[\ɂĂ͂̕ϊł͈قȂό`lɂȂ\̂ŒӁB

Ή@ƂẮAPMD̕ό`̍\ɑ΂āAPMX̃{[\({[͐eqort^)
p邱ƂlB









======================================================================================================================

PMX2.1g^ύX

f[^\

-擪-

(ȗ)
-
Joint [int]
Joint * Joint
-
SoftBodyt [int]
SoftBody * SoftBody		| 2.0̌֌tŔzu

-I-


PMXwb_
ver 2.1

2.0ƓłB


_

EFCgɂ
QDEF : int*4, float*4	| 4*8 | {[4ƁAꂼ̃EFCglBEFCgv1.0łۏ͂Ȃ

ǉB

QDEF  DualQuaternion(fANH[^jI) ̃EFCgό`łB
ό`@ɂĂ͑̌J񂪂̂ŏȗ܂B


[_f[^]

(ȗ)
1 : byte    | EFCgό` 0:BDEF1 1:BDEF2 2:BDEF4 3:SDEF 4:QDEF(2.1g)

QDEF ->
  n : {[IndexTCY  | {[1̎QIndex
  n : {[IndexTCY  | {[2̎QIndex
  n : {[IndexTCY  | {[3̎QIndex
  n : {[IndexTCY  | {[4̎QIndex
  4 : float              | {[1̃EFCgl
  4 : float              | {[2̃EFCgl
  4 : float              | {[3̃EFCgl
  4 : float              | {[4̃EFCgl (EFCgv1.0̕ۏ͂Ȃ)

f[^` BDEF4 Ƌ





n : _IndexTCY     | _̎QIndex

----

` PMX2.0 ƓlłAގPoint^Line`ւ̑Ή̂߁A

A-B-C Ƃʃp^[ȊOɂAA-A-A(1-Point)  A-B-A(1-Line) Ȃǂ̒_Qƃp^[ɑΉKv܂B

dԂł̕svڂ̕`ɂĂ͓Ɏw͂܂B
PMXGfB^ł͏d̂܂ܕ`悵Ă܂B

PMXGfB^ł A-B-C p^[́A

Point : 3_S Point`
Line  : A-B, B-C, C-A ō 3ӂLine`

Ƃ`sĂ܂Bꂼ Indexobt@̎ʏ́ʂƂ͈قȂ̂łӂB



ގ

(ȗ)
1  : bitFlag  	| `tO(8bit) - ebit 0:OFF 1:ON
                   0x01:ʕ`, 0x02:nʉe, 0x04:ZtVhE}bvւ̕`, 0x08:ZtVhE̕`, 
                   0x10:GbW`, 0x20:_J[(2.1g), 0x40:Point`(2.1g), 0x80:Line`(2.1g)
(ȗ)
4  : float	| GbWTCY, Point`掞PointTCY(2.1g)

----

_J[  : _ "ǉUV1" ̒l(float4) "ƖvZ̐Fl" Ƃĕ`ɗp郂[h
Point`   : `v~eBu PointList ŕ`
Line`    : `v~eBu LineList ŕ`

Point^Line oƂ ON ̏ꍇ Point D

PMXGfB^ł́A

Point`掞 -> ZtVhE^VhE}bv^nʉe^GbW(PointTCYpɃGbWTCY]p܂)
Line`掞  -> GbW (ZtVhEnʉe͍ގݒ̂܂)

ƂĂ܂B

_J[̐FlɂẮAގAƖF̐FvZ̒lƂA
̐FlɃeNX`^Toon^XtBA^ZtVhEȂǂ̉HVF[_ōsĂ܂B

dl ǉUV1 QƂĂ̂ŁAXtBÃTueNX`[hƂ͋ł܂B

FvZ͎ɂقȂ錋ʂɂȂ܂APMX̎dlƂČŒ͂܂BRɎĂB

Ⴆ ǉUV1 łȂAǉUV1`3(4) ܂łg Diffuse/Specular/Ambient ƂāA
_FƖvZɗpȂǂ̔Wl܂B



[t

[t

tbv[t
CpX[t

ǉ


tbv[t
n  : [tIndexTCY  | [tIndex
4  : float	| [tl

f[^` O[v[t Ƌ

CpX[t
n  : IndexTCY  | Index
1  : [JtO   | 0:OFF 1:ON
12 : float3	| ړx (x,y,z)
12 : float3	| ]gN (x,y,z)    ړx^]gN ׂ 0 ̏ꍇ"~"Ƃēꉻ


[[tf[^]
(ȗ)
1  : byte	| [t - 0:O[v, 1:_, 2:{[, 3:UV, 4:ǉUV1, 5:ǉUV2, 6:ǉUV3, 7:ǉUV4, 8:ގ, 
                               9:tbv(2.1g) 10:CpX(2.1g)

----

tbv[t̎@

tbv[t͕o^ꂽ[tAtbv[t̃[tlI郂[tłB
Ώۃ[t̐؂ւ_͓o^[tɂω܂B

o^\ȑΉ[t̓tbv[t܂őSẴ[tɑΉ܂B

(0)͂ǂ̃[tIȂԂȂ̂ŁAI (o^ + 1) IΏېƂȂ܂B

[tlΉ郂[tւ̕ΐA

count : o^[t
value : tbv[t̃[tl
ƂāA

   index = (int)((count + 1) * value) - 1;

ƂȂ܂B[tl[l(0-,1)̏ꍇindex͈͂𒴂̂Ő␳sĂ(0-1̊Ol)

: 9o^Ń[tl0.3̏ꍇ
   index = (9+1)*0.3 - 1 = 3-1 = 2   -> 3Ԗڂ̓o^[t [0,1,2,3,.....]

[tl̓Kp@͒PɁA

  IΏۂ̃[tl "݂̏ԂɊւ炸" tbv[tŎw肳ꂽ[tlɓւ

słB

ό`̏Ԃł͊e[tl͏Ă̂ŁA
tbv[t [U[⃂[Vݒ肳ꂽlIɏ㏑邾Ŏ\łB


O[v[t⑼̃tbv[tƂ̋

O[v[tƈقȂtbv[t͓o^ɑ΂Đ͂܂Bdl͎go^邱Ƃ\łB
邽߂Ɉȉ̎菇Ń[tŜ̕ό`s܂B

[[tό`]

1. yу[U[^[Ve[tl̐ݒ (ό`) Ŝ̃[tli[ꏊ\ߗpӂĂ܂B

2. [tIndexɏό`
 2.1 tbv[t̏ꍇ : tbvό` -> Ώۂ̃[tlwlŏ
 2.2 O[v[t̏ꍇ : O[vvf̃tbv[ttbvό` -> Ώۂ̃[tlwlŏ
 2.3 ȊȌꍇ       : ό`͍sȂ

3. ēx[tIndex(擪)ό`
 3.1 tbv[t̏ꍇ : ό`͍sȂ
 3.2 O[v[t̏ꍇ : O[vvf̃tbv[tăO[vό`
 3.3 ȊȌꍇ       : [tό`

ꂼ̃[t͕ό`Ɏg̃[tlQƂ邱ƂŁAtbv^O[v[tgݍ킹ό`\ƂȂ܂B

{IIndexƂĐ̕D悳̂̓{[ό`ƓłA
tbv[tɂ郂[tl̏Ȃǂ͏㏑Ɏxẑłӂ(p΃[tό`ɓ[tقȂ郂[tlŎg܂킷Ƃ\)



CpX[t̎@

1. ̖ xCpX^]gN[J^O[oŕĕێłꏊmۋyяB

2. CpX[tό`  : [tl 0 ̑Ώۂ̓CpXό`sȂB
  CpXݒ肪[S0]~̏ꍇ
 2.1a Ώۂ̍̂ɏtOON (ǂꂩłtOONȂ珉Ώ)

  CpX̏ꍇ
 2.1b CpX[t̐ݒ * [tl[0-1()] Ώۍ̂̕ێlɉZ(]gNXYZƂĉZ)

3. SẴ[tό`m (ȉ͕ZOɕGWɐݒŝ]܂)
 3.1 tOONΏۂ̍̂֏ݒ(LQ)
 3.2 CpXΏۂ̍̂֐ݒ(LQ)

4. ZV~[g

[tl͊ɂ[0-1]łKv͂܂BO[v[tȂǂQƂꂽꍇ[0-1]łĂAݒ[-1]Ȃǂʂɂ肦܂B


 ݒ(~)
setLinearVelocity()
setAngularVelocity()
setInterpolationLinearVelocity()
setInterpolationAngularVelocity()
setInterpolationWorldTransform()
clearForces()

ɂ^Ԃ܂(p[^0l)

S~Ȃǂ̕₷ꍇ͕ύXɂȂ邩܂B

 CpXݒ
applyCentralImpulse()
applyTorqueImpulse()

ɂ葬xCpXAgN𒼐ڕt܂(O[oݒ̏ꍇAl̉H͓ɕKv܂)

[J̏ꍇ́Ẫt[Ŏ␳ (GfB^̎ł́A]gNxCpXƓľvZŎ␳sĂ܂)

[J^O[ȏvCpXĺA҂Z 2ɕĕʁXɕ֑MĂ܂B

{[Ǐ](Static y Kinematic) ̏ꍇ̓CpXݒȂǂ̕Kv͂܂(GfB^ł͊֌WȂMĂ܂)







Joint

(ȗ)
1  : byte	| Joint - 0:ȕt6DOF, 1:6DOF, 2:P2P, 3:ConeTwist, 4:Slider, 5:Hinge

JointނɊւ炸ȉ̃f[^ ȕt6DOF(0) Ɠ`

----

JointނƕZ̑Ή

 ȕt6DOF   | 0
PMX2.0yPMDƓl

Ή: btGeneric6DofSpringConstraint()


 6DOF        | 1
ȕt6DOF ɑ΂ ol萔-ړ/] 

Ή: btGeneric6DofConstraint()


 P2P         | 2
PointToPoint - e^ol萔

Ή: btPoint2PointConstraint()   Joint⍄̂̉]p͈̍ӖȂ̂Œ


 ConeTwist    | 3
~͈͎wł̉]pJoint

Ή: btConeTwistConstraint()

setLimit()
  _swingSpan1  : ]- - Z
  _swingSpan2  : ]- - Y
  _twistSpan   : ]- - X
  _softness    : ol萔-ړ - X
  _biasFactor  : ol萔-ړ - Y
  _relaxationFactor :ol萔-ړ - Z

setDamping()
  damping      : ړ- - X

setFixThresh()
  fixThresh    : ړ- - X

enableMotor()  : ړ- - Z  | [^[L - 0:OFF 1:ON

<[^[L̏ꍇ>
  setMaxMotorImpulse()
    maxMotorImpulse : ړ- - Z

  setMotorTargetInConstraintSpace() : ol萔-](xyz) 3]radlƂċL^ -> ]ʂ֕ϊĐݒ
<>
 Joint̃p[^ɂĂ܂A[^[֌W̓삪sȂ̂ŎbIȑΉƂȂ܂B

 ] Ԃł̎oIȎpxXYZ߂Ă܂A
dlIɂ X ԂƂ

 X(_twistSpan)  : P
 Y(_swingSpan2) : ]͈͂̊g-(c)
 Z(_swingSpan1) : ]͈͂̊g-c()

Ƃ\mƎv܂B


 Slider        | 5
ړJoint

Ή: btSliderConstraint()

setLowerLinLimit() : ړ- - X
setUpperLinLimit() : ړ- - X
setLowerAngLimit() : ]- - X
setUpperAngLimit() : ]- - X

setPoweredLinMotor() : ol萔-ړ - X  | [^[L - 0:OFF 1:ON
<ړ[^[L̏ꍇ>
  setTargetLinMotorVelocity() : ol萔-ړ - Y
  setMaxLinMotorForce()       : ol萔-ړ - Z
<>

setPoweredAngMotor() : ol萔-] - X  | [^[L - 0:OFF 1:ON
<][^[L̏ꍇ>
  setTargetAngMotorVelocity() : ol萔-] - Y
  setMaxAngMotorForce()       : ol萔-] - Z
<>


 Hinge         | 6
]Joint

Ή: btHingeConstraint()

setLimit()
  low          : ]- - X
  high         : ]- - X
  _softness    : ol萔-ړ - X
  _biasFactor  : ol萔-ړ - Y
  _relaxationFactor :ol萔-ړ - Z

enableMotor() : ol萔-] - X  | [^[L - 0:OFF 1:ON
<][^[L̏ꍇ>
  enableAngularMotor()
    enableMotor     : ol萔-] - X
    targetVelocity  : ol萔-] - Y
    maxMotorImpulse : ol萔-] - Z
<>


eJointɂĂAY⍄̂Ƃ̈ʒuYȂǂ͒ʏJointƕς炸̂ŁAKX␳sƁB




SoftBody  PMX2.1̐VKǉ

4 + n : TextBuf	| SoftBody
4 + n : TextBuf	| SoftBodyp

1  : byte	| ` - 0:TriMesh 1:Rope

n  : ގIndexTCY  | ֘AގIndex

1  : byte	| O[v
2  : ushort	| Փ˃O[vtO

1  : bitFlag  	| tO(8bit) - ebit 0:OFF 1:ON
tO
 0x01   : B-Link 쐬 
 0x02   : NX^쐬
 0x04   : NG      ̏ڍׂ͉L̎Q

4  : int	| B-Link 쐬
4  : int	| NX^

4  : float	| 
4  : float	| Փ˃}[W

4  : int	| AeroModel - 0:V_Point, 1:V_TwoSided, 2:V_OneSided, 3:F_TwoSided, 4:F_OneSided

<config>
4  : float	| VCF
4  : float	| DP 
4  : float	| DG 
4  : float	| LF 
4  : float	| PR 
4  : float	| VC 
4  : float	| DF 
4  : float	| MT 
4  : float	| CHR
4  : float	| KHR
4  : float	| SHR
4  : float	| AHR

<cluster>
4  : float	| SRHR_CL
4  : float	| SKHR_CL
4  : float	| SSHR_CL
4  : float	| SR_SPLT_CL
4  : float	| SK_SPLT_CL
4  : float	| SS_SPLT_CL

<iteration>
4  : int	| V_IT
4  : int	| P_IT
4  : int	| D_IT
4  : int	| C_IT

<material>
4  : float	| LST
4  : float	| AST
4  : float	| VST

4  : int	| AJ[̐
<AJ[>
  n  : IndexTCY  | ֘AIndex
  n  : _IndexTCY  | ֘A_Index
  1  : byte	| Near [h  0:OFF 1:ON
</AJ[>
* AJ[̐

4  : int	| Pin_
<Pin_>
  n  : _IndexTCY  | ֘A_Index
</Pin_>
* Pin_



SoftBody̎@

܂ bullet  SofyBodyf(appSoftBodyDemo) ɂڂʂĂB

PMX(2.1)̕Z MMD Ƃ̌݊̂ bullet 2.75 ɂĂ܂B


 [hݒ
btSoftRigidDynamicsWorld() 삷悤ύXĂ(f̂܂܂ŏ\Ǝv܂)

PMXGfB^ł air_density = 1.2f ŏBnʂ͏]ʂ薳ʂzuĂ܂(SofyBody͓˂Ă܂悤ł)

d͐ݒ̓[hSoftBodyŕʊǗȂ̂łӂB


 SoftBody̍쐬^o^

1. SoftBodyCX^X쐬
` :
 TriMesh -> btSoftBodyHelpers::CreateFromTriMesh() ō쐬BގɊ֘A-_(ʒu) 𕨗ɍ悤ɐ`ēnĂB

 Rope    -> btSoftBodyHelpers::CreateRope() ""쐬 (̒_(ʒu)ƒ_ԂNڑ鏈ŕKv\)

Ô SoftBody ̈ʒu͏B btSoftBody::transform()
f̖@͎g܂񂪁Aό`̖@̓tB[hobNĕ`Ɏgp܂B


2. p[^ݒ
 btSoftBody::setTotalMass()     : 
 btCollisionShape::setMargin()  : }[W   btSoftBody::getCollisionShape()

 btSoftBody::collisions |= btSoftBody::fCollision::VF_SS;  : Փ˃tO(SofyBodyƏՓ˂悤ύX)


3. Config ݒ   | btSoftBody::Config
 aeromodel   : AeroModel        PMX̐l(bl)̂܂܎gȂ

 kVCF        : VCF
...
 kSS_SPLT_CL : SS_SPLT_CL       k*** ͓̃p[^̂܂ܐݒBSĂ̕\L͏ȗB

 viterations : V_IT
 piterations : P_IT
 diterations : D_IT
 citerations : C_IT


4. Material XV
 btSoftBody::appendMaterial()


5. BendingConstraints 
 B-Link ON ̏ꍇ
 btSoftBody::generateBendingConstraints()   : B-Link 4.  Material ō쐬


6. Material ݒ
 kLST : LST           Config Ɠl
 kAST : AST
 kVST : VST


7. NX^
 NX^ ON ̏ꍇ
 btSoftBody::generateClusters()    : NX^ŏ
 btSoftBody::collisions = btSoftBody::fCollision::CL_SS | btSoftBody::fCollision::CL_RS;     : NX^֕ύX


8. NG
 NG ON ̏ꍇ
 btSoftBody::randomizeConstraints()


9. AJ[̂̐ݒ
 btSoftBody::appendAnchor()      : _Indexo^͕̂[h̒lȂ̂Œ(v␳)


10. s_̐ݒ
 SoftBody̑Ώۃm[h(_) -> m_im = 0;    : m[h(_)Index͕[h̒l

 btSoftBody::Node::m_im


11. O[vݒyу[h֓o^
 ʏ̍̂ƓlłB



 SoftBody̕ό`菇

ZO : 
 Pin_̍WύX
  - {[ό`璸_ʒuό`  SoftBodỹm[h_ʒu𒼐ڐݒ   btSoftBody::Node::m_x


Z


Z
 AJ[̂Near
  - ̂{[Ǐ]̏ꍇ : Ή̃m[h_̑x̕։ZB
                             btSoftBody::Node::m_x ƍ̈ʒu̍ m_v ։Z  ʂ͂قƂǂ܂B
  - ̂̂̏ꍇ : ̈ʒum[h_ʒu֋ړ   QlFbNJointp̍̈߂

 SoftBody _(Node::m_x)^@(Node::m_n)̎擾  `֎gp ({[ό`͑SĖ)

 SoftBodyΏۍގł͂Ȃގ`掞A_ SoftBody ό`Ăꍇ SoftBody ̒lɏ]ƁB



 ΉڂƖ_Ȃ

{[n̐ݒ͂ł܂Bm[h(_)̎ʐݒ͑ΉĂ܂B

@\Iɂ͔jf̕\Ȃǂ m[h̃NO ȂǂŊȒPɕ\ł܂A
O̐ݒ@`łȂ̂ŃftH[}bgƂĂ͑Ή܂B

NX^gpĂꍇAV~[gŃG[I܂(قڊm)
bulletV~[gŖNĂ悤łBNX^Pin_ɂ钼ڈʒuݒƑlqH

[v`Ȃ̂ɃbVŐꍇA̋t͕V~[gG[Iꍇ܂B
p[^lɂĂlɃG[Iꍇ܂B

SoftBody ̊ep[^ɂĂ

/*---------------------------------------------------------------------------
<config>
eAeroModel::_	aeromodel;	// Aerodynamic model (default: V_Point)
btScalar	kVCF;		// Velocities correction factor (Baumgarte)
btScalar	kDP;		// Damping coefficient [0,1]
btScalar	kDG;		// Drag coefficient [0,+inf]
btScalar	kLF;		// Lift coefficient [0,+inf]
btScalar	kPR;		// Pressure coefficient [-inf,+inf]
btScalar	kVC;		// Volume conversation coefficient [0,+inf]
btScalar	kDF;		// Dynamic friction coefficient [0,1]
btScalar	kMT;		// Pose matching coefficient [0,1]		
btScalar	kCHR;		// Rigid contacts hardness [0,1]
btScalar	kKHR;		// Kinetic contacts hardness [0,1]
btScalar	kSHR;		// Soft contacts hardness [0,1]
btScalar	kAHR;		// Anchors hardness [0,1]

<cluster>
btScalar	kSRHR_CL;	// Soft vs rigid hardness [0,1] (cluster only)
btScalar	kSKHR_CL;	// Soft vs kinetic hardness [0,1] (cluster only)
btScalar	kSSHR_CL;	// Soft vs soft hardness [0,1] (cluster only)
btScalar	kSR_SPLT_CL;	// Soft vs rigid impulse split [0,1] (cluster only)
btScalar	kSK_SPLT_CL;	// Soft vs rigid impulse split [0,1] (cluster only)
btScalar	kSS_SPLT_CL;	// Soft vs rigid impulse split [0,1] (cluster only)

<iteration>
int		viterations;	// Velocities solver iterations
int		piterations;	// Positions solver iterations
int		diterations;	// Drift solver iterations
int		citerations;	// Cluster solver iterations

<material>
btScalar	m_kLST;		// Linear stiffness coefficient [0,1]
btScalar	m_kAST;		// Area/Angular stiffness coefficient [0,1]
btScalar	m_kVST;		// Volume stiffness coefficient [0,1]

---------------------------------------------------------------------------*/

ƂȂĂ܂A(fł)ʔ͈͂ɒ[ɏȒl(0.001ȉ)̂̂ 1000PʂŎĝ܂ł悤Ȃ̂ŁA
舵ɓłB

炭ʂ̂Ȃp[^Ǝv܂AꉞʂSĂ܂B

ȂAɒ[ȃp[^lɂƊȒPɕV~[ĝAbulletSoftBody̓̂悤łB


SoftBody̎̂͂قǓ̂ł͂܂񂪁A^pɂĂ͎cOȂ琸x⑬xȂǖ_̂ŁA
ꍇɂĂ͑ΉȂƂȂǂAIɓĒ΂낵Ǝv܂B







ȏ

ɖkP (PMXdl ver2.1)


