ファイル検索ロジックに関する考察

POSERでは'Runtime'フォルダ以下に大量のファイルがインストールされます。
ライブラリーからフィギュアを読み込んだ場合など必要なときにPOSERはファイルを読み込もうとします。
どのファイルを読み込むかはライブラリーフォルダ(POSERフォルダ:Runtime:libraries:)上の設定ファイル(*.CR2、*.PP2、*.PZ3など。'*'は任意の名称)に書かれています。
そのファイルがどこにあるかを探す順序にはある一定の法則があるようです。

テクスチャ・バンプマップなどイメージファイル検索の順序
Objファイルの場合
readScriptの場合
ライブラリーに登録せずに小道具・フィギュアを利用する

テクスチャ・バンプマップなどイメージファイル検索の順序

イメージファイルの検索は以下の順序のようです。

  1. ライブラリ上の同一フォルダ
  2. (フォルダが指定されていた場合)指定されたフォルダ
  3. POSERフォルダ POSER.EXEがあるフォルダからサブフォルダへ
  4. ファイルのあるフォルダ(インポートした場合)

興味深いのは、設定ファイル上でフォルダを指定したとしても、この順序が優占される点です。つまり、ライブラリ上の設定ファイルがあるフォルダにテクスチャーもインストールした場合、設定の如何にかかわらずこのテクスチャーが読み込まれるのです。
POSER5の場合、POSER5のフォルダを優先的に探します。

一度ファイルが見つかるとPOSERが起動している間そのファイルを使いつづけます。つまり、同一名称のイメージファイルを複数読み込めないと言うことです。
これはPOSERを再起動しない限り変更できません。
あまりありふれたファイル名にすると問題が発生することが考えられます。

Objファイルの場合

メッシュオブジェクトファイル(*.obj)はPOSERのバージョンで扱いが異なります。

POSER4ではRuntime:geometries:以下に置き、設定ファイルで正確にフォルダを指定しなければならないです。
これはPOSER4では一度Objファイルが呼び出されるとPOSERが自動的にリソースファイル(*.rsr)を作成、以降はリソースファイルを読み込もうとするためと思われます。

POSER5ではフォルダ指定なしの場合、カレントフォルダから読み込みます。

  1. (指定した場合)指定したフォルダ
  2. カレントフォルダ
  3. POSER5フォルダ以下を検索
「フォルダ指定なし」と言うのは、設定ファイルで'objFileGeom 0 0 test02.obj'などのようにフォルダ指定をしないことを言います。この状態では設定ファイルがあるフォルダから読み込もうとします。
PPP以降、Objファイルの扱いは変更されました。リソースファイルを作成しなくなりました。おそらくPPPも同様と考えられます。

readScriptの場合

DAZのVictoria3などに使われている非公開命令'readScript'は、複数の設定ファイルを一度に読み込み合成させることのできる命令です。[参考]MTの外部ファイル化
この命令の場合、ファイル指定はかなりシビヤな様です。

POSER4ではRuntime:libraries:character:以下におき、正確にフォルダ指定しなければならないようです。

POSER5ではフォルダ指定なしでカレントフォルダを参照させることができます。
が、他のフォルダを検索することは無いです。

ライブラリーに登録せずに小道具・フィギュアを利用する

POSER5からライブラリー管理機能が大幅に強化され、Runtimeフォルダが乱雑になることが無くなりました。
が、POSER4ユーザーは依然多く、悩みの種の一つです。
それを回避策の一つとして、ライブラリーに登録せずに小道具などを利用する方法があります。

要はインポート機能を使うのです。'インポート'と言うと他の3Dソフトからデータを読み込むという使い方が一般的です。が実は、POSERのデータも読み込めます。
filesearch1.jpg
小道具はもちろん、シーンファイル(*.PZ3)も読み込めます。キャラクターファイル(*.CR2)も拡張子をPZ3に変える事で同様に読み込めます。

ここで問題になるのはテクスチャーなどイメージファイル。通常はRuntime:textures:以下にインストールする必要がありますが、テキストエディターやCR2Builderなどでフォルダ設定を削除してやることで、カレントフォルダを検索するようになります。

	material default
		{
		KdColor 1 1 1 1
		KaColor 0 0 0 1
		KsColor 0 0 0 1
		TextureColor 0.8 0.8 0.8 1
		NsExponent 1
		tMin 0
		tMax 0
		tExpo 0
		bumpStrength 1
		ksIgnoreTexture 0
		reflectThruLights 0
		reflectThruKd 0
		textureMap ':Runtime:textures:test02.jpg'←赤字部分を削除
		0 0
		bumpMap NO_MAP
		reflectionMap NO_MAP
		transparencyMap NO_MAP
後は、使われているイメージファイルをすべて設定ファイルと同一のフォルダにおいてやることで問題なく動作します。

[8月9日加筆]単純にテクスチャーファイルなどを同一フォルダにおいておけば自動的に検索されるようです。つまり、上記の作業は不要です。

建物など使用頻度の低い小道具に用いると効果的です。
一つ問題点として、いわゆる'Obj外部参照型'小道具ではこの方法は使えません。

見分け方は、設定ファイルの先頭部に'geomCustom'という記述がある場合はOKです。

{

version
	{
	number 4.01
	}
prop Test02
	{
	geomCustom
		{
		numbVerts    8
		numbTVerts    16
		numbTSets     24
		numbElems   6
		numbSets    24
		v -0.200000 0.200000 -0.200000
		v 0.200000 0.200000 -0.200000......

このような記述がされている小道具は不可です。

{

version
	{
	number 4.01
	}
prop Test02
	{
	storageOffset 0 0.3487 0
	objFileGeom 0 0 :Runtime:geometries:test02.obj

	}......

また前述の通り、MTで改造されたフィギュアの場合、拡張子を'PZ3'に変更することで読み込むことができます。
これは、必要なObjファイルはすでにPOSERフォルダにインストールされているからです。