ObjNode

Nintendo Confidential


6. ObjNode


(1) ObjNode

u32 obj_render_pri オブジェクトの描画優先順位及びN64ブレンダのモードを設定します。なお、簡単にレンダーモードを設定するNIFFモードと、N64のマクロを厳密に設定するN64GBIモードとがあり、N64GBIモードを使用する場合はこのフィールドには描画時の優先順位のみを記述します。この場合レンダーモードはobj_render_type_*フィールドに記述することになります。NIFF1.0で定義されていましたN64モードは廃止されます。

NIFFモードの場合、2サイクル時でもobj_render_priフィールドは一つしかありませんので、NIFF→N64コンバータ内で自動的にG_RM_PASSフラグを使用する必要があります。

NIFFモードとN64GBIモードの切り替えは上位8bitのフラグで識別します。上位8bitに下記のフラグのうちどちらかを記述してください。


OBJ_RENDER_FLAG_NIFF	0x00
OBJ_RENDER_FLAG_N64GBI	0x04

NIFFモードの場合はさらに下位24bitに対して下記のフラグが定義されています。いずれかのフラグをセットしてください。

OBJ_RENDER_NIFF_OPA_SURF	0xd00000
OBJ_RENDER_NIFF_OPA_INTER	0xb00000
OBJ_RENDER_NIFF_OPA_DECAL	0x900000
OBJ_RENDER_NIFF_TEX_EDGE	0x700000
OBJ_RENDER_NIFF_XLU_SURF	0x500000
OBJ_RENDER_NIFF_XLU_INTER	0x300000
OBJ_RENDER_NIFF_XLU_DECAL	0x100000

OBJ_RENDER_NIFF_OPA_SURFは不透明サーフェイスをレンダリングする場合に設定します。

OBJ_RENDER_NIFF_OPA_INTERは不透明の貫通するサーフェイスをレンダリングする場合に設定します。

OBJ_RENDER_NIFF_OPA_DECALはあるサーフェイス上にデカールのように張り込むタイプの不透明サーフェイスをレンダリングする場合に設定します。

OBJ_RENDER_NIFF_TEX_EDGEはテクスチャのアルファチャンネルを「抜き」として使用する場合に設定します。

OBJ_RENDER_NIFF_XLU_SURFは半透明サーフェイスをレンダリングする場合に設定します。

OBJ_RENDER_NIFF_XLU_INTERは半透明の貫通するサーフェイスをレンダリングする場合に設定します。

OBJ_RENDER_NIFF_XLU_DECALはあるサーフェイス上にデカールのように張り込むタイプの半透明サーフェイスを使用する場合に設定します。

それぞれのモードは基本的にモデルやマテリアルによって異なりますので、本来はユーザーが設定するべき物です。CGツールからNIFFにコンバートする際にはその設定用のインターフェイスをユーザー側に提供するか、デフォルト値として不透明サーフェイスの場合はOBJ_RENDER_NIFF_OPA_SURFを、半透明サーフェイスの場合はOBJ_RENDER_NIFF_XLU_SURFを出力してください。

u32 obj_render_type0
u32 obj_render_type1
obj_render_priフィールドでOBJ_RENDER_FLAG_N64GBIを設定した場合、このフィールドでレンダーモードを指定します。obj_render_type0が1サイクル目のレンダーモードを、obj_render_type1が2サイクル目のレンダーモードをそれぞれ表しています。

下記のようにそれぞれフラグが設定されていますので、ユーザーが自由にレンダーモードを設定してください。このテーブルとアンチエイリアス、ZBUFFER情報に従ってレンダーモードを組み立てて出力するように、NIFF→N64コンバータを作成してください。(例:アンチエイリアス及びZBUFFER使用時のOPA_SURFモードはG_RM_AA_ZB_OPA_SURF)


/******************************************************
N64 Style

In the document of NIFF1.0, we describe the flag setting
render mode.
But this may be hard to use, especially for designers.
So we changed N64 type render mode definition.
Please set the following name and new n64 style bit.
These names are "#define" macro name
in /usr/include/PR/gbi.h, they are 
usually used by N64 programmers.

********************************************************/

/********************************************************
 obj_render_type0 and obj_render_type0_for_fog

31          22 21                         0
[     0x4     |       render_macro        ]

**********************************************************/

#define OBJ_RENDER_TYPE0_GBI_MODE     0x01000000

/* render_macro */

#define OBJ_RENDER_TYPE0_OPA_SURF     0x100
#define OBJ_RENDER_TYPE0_XLU_SURF     0x101
#define OBJ_RENDER_TYPE0_OPA_DECAL    0x102
#define OBJ_RENDER_TYPE0_XLU_DECAL    0x103
#define OBJ_RENDER_TYPE0_OPA_INTER    0x104
#define OBJ_RENDER_TYPE0_XLU_INTER    0x105
#define OBJ_RENDER_TYPE0_TEX_EDGE     0x106
#define OBJ_RENDER_TYPE0_TEX_INTER    0x107
#define OBJ_RENDER_TYPE0_SUB_SURF     0x108
#define OBJ_RENDER_TYPE0_PCL_SURF     0x109
#define OBJ_RENDER_TYPE0_OPA_TERR     0x10a
#define OBJ_RENDER_TYPE0_TEX_TERR     0x10b
#define OBJ_RENDER_TYPE0_SUB_TERR     0x10c
#define OBJ_RENDER_TYPE0_CLD_SURF     0x10d
#define OBJ_RENDER_TYPE0_OVL_SURF     0x10e
#define OBJ_RENDER_TYPE0_ADD          0x10f
#define OBJ_RENDER_TYPE0_NOOP         0x110
#define OBJ_RENDER_TYPE0_PASS         0x111
#define OBJ_RENDER_TYPE0_FOG_SHADE_A  0x112
#define OBJ_RENDER_TYPE0_FOG_PRIM_A   0x113



/**************************************************
 obj_render_type1 and obj_render_type1_for_fog

31          22 21                         0
[     0x4     |       render_macro        ]

***************************************************/

#define OBJ_RENDER_TYPE1_GBI_MODE     0x01000000

/* render_macro */

#define OBJ_RENDER_TYPE1_OPA_SURF     0x200
#define OBJ_RENDER_TYPE1_XLU_SURF     0x201
#define OBJ_RENDER_TYPE1_OPA_DECAL    0x202
#define OBJ_RENDER_TYPE1_XLU_DECAL    0x203
#define OBJ_RENDER_TYPE1_OPA_INTER    0x204
#define OBJ_RENDER_TYPE1_XLU_INTER    0x205
#define OBJ_RENDER_TYPE1_TEX_EDGE     0x206
#define OBJ_RENDER_TYPE1_TEX_INTER    0x207
#define OBJ_RENDER_TYPE1_SUB_SURF     0x208
#define OBJ_RENDER_TYPE1_PCL_SURF     0x209
#define OBJ_RENDER_TYPE1_OPA_TERR     0x20a
#define OBJ_RENDER_TYPE1_TEX_TERR     0x20b
#define OBJ_RENDER_TYPE1_SUB_TERR     0x20c
#define OBJ_RENDER_TYPE1_CLD_SURF     0x20d
#define OBJ_RENDER_TYPE1_OVL_SURF     0x20e
#define OBJ_RENDER_TYPE1_ADD          0x20f
#define OBJ_RENDER_TYPE1_NOOP         0x210



u32 obj_render_cycle_type_for_fog Fogを使用したシーンにオブジェクトを配置した場合に使用するN64RDPのサイクルタイプを記述します。下記のフラグが定義されています。

OBJ_RENDER_CYC_1CYC	0x00000000
OBJ_RENDER_CYC_2CYC	0x00000001

上記のフラグをいずれかをセットします。デフォルトではOBJ_RENDER_CYC_2CYCを指定してください。
u32 obj_render_pri_for_fog Fogを使用したシーンにオブジェクトを配置した場合に使用するオブジェクトの描画優先順位及びN64ブレンダのモードを設定します。なお、簡単にレンダーモードを設定するNIFFモードと、N64のマクロを厳密に設定するN64GBIモードとがあり、N64GBIモードを使用する場合はこのフィールドには描画時の優先順位のみを記述します。この場合レンダーモードはobj_render_type_*フィールドに記述することになります。

NIFFモードの場合、2サイクル時でもobj_render_priフィールドは一つしかありませんので、NIFF→N64コンバータ内で自動的にG_RM_FOG_SHADE_Aフラグを使用する必要があります。

NIFFモードとN64GBIモードの切り替えは上位8bitのフラグで識別します。上位8bitに下記のフラグのうちどちらかを記述してください。


OBJ_RENDER_FLAG_NIFF	0x00
OBJ_RENDER_FLAG_N64GBI	0x04

NIFFモードの場合はさらに下位24bitに対して下記のフラグが定義されています。いずれかのフラグをセットしてください。

OBJ_RENDER_NIFF_OPA_SURF	0xd00000
OBJ_RENDER_NIFF_OPA_INTER	0xb00000
OBJ_RENDER_NIFF_OPA_DECAL	0x900000
OBJ_RENDER_NIFF_TEX_EDGE	0x700000
OBJ_RENDER_NIFF_XLU_SURF	0x500000
OBJ_RENDER_NIFF_XLU_INTER	0x300000
OBJ_RENDER_NIFF_XLU_DECAL	0x100000

OBJ_RENDER_NIFF_OPA_SURFは不透明サーフェイスをレンダリングする場合に設定します。

OBJ_RENDER_NIFF_OPA_INTERは不透明の貫通するサーフェイスをレンダリングする場合に設定します。

OBJ_RENDER_NIFF_OPA_DECALはあるサーフェイス上にデカールのように張り込むタイプの不透明サーフェイスをレンダリングする場合に設定します。

OBJ_RENDER_NIFF_TEX_EDGEはテクスチャのアルファチャンネルを「抜き」として使用する場合に設定します。

OBJ_RENDER_NIFF_XLU_SURFは半透明サーフェイスをレンダリングする場合に設定します。

OBJ_RENDER_NIFF_XLU_INTERは半透明の貫通するサーフェイスをレンダリングする場合に設定します。

OBJ_RENDER_NIFF_XLU_DECALはあるサーフェイス上にデカールのように張り込むタイプの半透明サーフェイスを使用する場合に設定します。

それぞれのモードは基本的にモデルやマテリアルによって異なりますので、本来はユーザーが設定するべき物です。CGツールからNIFFにコンバートする際にはその設定用のインターフェイスをユーザー側に提供するか、デフォルト値として不透明サーフェイスの場合はOBJ_RENDER_NIFF_OPA_SURFを、半透明サーフェイスの場合はOBJ_RENDER_NIFF_XLU_SURFを出力してください。

u32 obj_render_type0_for_fog

u32 obj_render_type1_for_fog

obj_render_pri_for_fogフィールドでOBJ_RENDER_FLAG_N64GBIを設定した場合、このフィールドでレンダーモードを指定します。obj_render_type0_for_fogが1サイクル目のレンダーモードを、obj_render_type1_for_fogが2サイクル目のレンダーモードをそれぞれ表しています。

下記のようにそれぞれフラグが設定されていますので、ユーザーが自由にレンダーモードを設定してください。このテーブルとアンチエイリアス、ZBUFFER情報に従ってレンダーモードを組み立てて出力するように、NIFF→N64コンバータを作成してください。(例:アンチエイリアス及びZBUFFER使用時のOPA_SURFモードはG_RM_AA_ZB_OPA_SURF)



/***************************************************
N64 Style

In the document of NIFF1.0, we describe the flag setting
render mode.
But this may be hard to use, especially for designers.
So we changed N64 type render mode definition.
Please set the following name and new n64 style bit.
These names are "#define" macro name
in /usr/include/PR/gbi.h, they are 
usually used by N64 programmers.

****************************************************/

/****************************************************
 obj_render_type0 and obj_render_type0_for_fog

31          22 21                         0
[     0x4     |       render_macro        ]

*****************************************************/

#define OBJ_RENDER_TYPE0_GBI_MODE     0x01000000

/* render_macro */


#define OBJ_RENDER_TYPE0_FOG_SHADE_A  0x112
#define OBJ_RENDER_TYPE0_FOG_PRIM_A   0x113



/*****************************************************
 obj_render_type1 and obj_render_type1_for_fog

31          22 21                         0
[     0x4     |       render_macro        ]

******************************************************/

#define OBJ_RENDER_TYPE1_GBI_MODE     0x01000000

/* render_macro */

#define OBJ_RENDER_TYPE1_OPA_SURF     0x200
#define OBJ_RENDER_TYPE1_XLU_SURF     0x201
#define OBJ_RENDER_TYPE1_OPA_DECAL    0x202
#define OBJ_RENDER_TYPE1_XLU_DECAL    0x203
#define OBJ_RENDER_TYPE1_OPA_INTER    0x204
#define OBJ_RENDER_TYPE1_XLU_INTER    0x205
#define OBJ_RENDER_TYPE1_TEX_EDGE     0x206
#define OBJ_RENDER_TYPE1_TEX_INTER    0x207
#define OBJ_RENDER_TYPE1_SUB_SURF     0x208
#define OBJ_RENDER_TYPE1_PCL_SURF     0x209
#define OBJ_RENDER_TYPE1_OPA_TERR     0x20a
#define OBJ_RENDER_TYPE1_TEX_TERR     0x20b
#define OBJ_RENDER_TYPE1_SUB_TERR     0x20c
#define OBJ_RENDER_TYPE1_CLD_SURF     0x20d
#define OBJ_RENDER_TYPE1_OVL_SURF     0x20e
#define OBJ_RENDER_TYPE1_ADD          0x20f
#define OBJ_RENDER_TYPE1_NOOP         0x210


なお、本フィールドはFOG使用時のためのフィールドになりますので、obj_render_type0_for_fogはFOG_SHADE_AあるいはFOG_PRIM_Aのいずれかの選択になります。
u32 obj_chain_root_link_num このObjからリンクするChainRootノード数を記述します。
u32 external_lod_obj_num 外部ファイル参照するLOD Obj数を記述します。
u32 external_obj_num 外部ファイル参照するchild Obj数を記述します。
u32 obj_chain_root_link このObjからリンクするChainRootノードのインデックス番号を記述します。なお、obj_chain_root_link_num = 0の場合、このフィールドは記述されません。
u32 external_lod_obj_dist LOD Objを外部ファイル参照する場合、そのObjのLODレベルの切り替え距離を記述します。 外部ファイル参照しない(external_lod_obj_num = 0)場合、このフィールドは記述されません。
u32 external_lod_obj_file_name_index LOD Objを外部ファイル参照する場合、参照するファイル名をExternalNameList内のインデックス番号で指定します。

ファイル名はディレクトリ名などを含まない形で記述してください。

外部ファイル参照しない(external_lod_obj_num = 0)場合、このフィールドは記述されません。

u32 external_lod_obj_name_index LOD Objを外部ファイル参照する場合、そのLOD Obj名をExternalNameList内のインデックス番号で記述します。

外部ファイル参照しない(external_lod_obj_num = 0)場合、このフィールドは記述されません。

u32 external_obj_file_name_index child Objを外部ファイル参照する場合、参照するファイル名をExternalNameList内のインデックス番号で指定します。

ファイル名はディレクトリ名などを含まない形で記述してください。

外部ファイル参照しない(external_obj_num = 0)場合、このフィールドは記述されません。

u32 external_obj_name_index child Objを外部ファイル参照する場合、そのObj名をExternalNameList内のインデックス番号で記述します。 外部ファイル参照しない(external_obj_num = 0)場合、このフィールドは記述されません。

Go to the data chunk

Go back to the index


Copyright 1998,1999 NINTENDO Co.,Ltd. All rights reserved.
Copyright 1998,1999 MONEGI CORPORATION All rights reserved.