README.jp
5.67 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
*****************************************************************************
README / Release 1.23 06/09/97
*****************************************************************************
パッケージ内のマイクロコード:
(1) gspF3DEX.fifo.o/gspF3DEX.NoN.fifo.o:
Fast3D マイクロコードをベースに 頂点キャッシュを 32 に増やし,
2Triangles 命令を実装したものです. また DL のリンク数は 10 段から 18
段に増えています.
gspF3DEX.fifo.o は Near クリップ付で gspF3DEX.NoN.fifo.o は Near
クリップ無しのバージョンです.
(2) gspF3DLX.fifo.o/gspF3DLX.NoN.fifo.o:
F3DEX におけるサブピクセル計算を簡略化することで, 速度を上げたも
のです. このためテクスチャ使用時に, 少ししわなどが出る場合がありま
す.
F3DLX の GBI は F3DEX と互換です. また F3DLX の追加機能として
Clipping の ON/OFF を制御できます. クリッピング OFF の時にはパフォー
マンスが少し向上します. 詳しくは NewFunctions.jp をお読みください.
gspF3DLX.fifo.o は Near クリップ付で gspF3DLX.NoN.fifo.o は Near
クリップ無しのバージョンです.
このマイクロコードは Release 0.94 より追加されました.
(3) gspF3DLX.Rej.fifo.o/gspF3DLP.Rej.fifo.o:
通常のマイクロコードにおけるクリップ処理を止め, その代りとしてリ
ジェクト処理を実装したマイクロコードです.
ここでいうリジェクト処理とは, 「画面の外側の一定範囲内に 3 頂点
が入っている 3 角形のみを描画し, 1 頂点でも外に出ている場合はその
3 角形全体の描画を行なわない」というものです.
この範囲のことをリジェクトボックスと呼びます. リジェクトボックス
は, 条件によって異なりますが, X,Y 方向について言えば, 画面サイズが
320x240 の場合, 初期状態では, 以下の図の様に画面のおおよそ 2 倍分
の範囲となります.
この範囲は g*SPClipRatio で変更することができます. 値としては
FRUSTRATIO_2 から FRUSTRATIO_6 を指定できます.
また Z 方向(画面の奥行き方向)については, Far プレーンでリジェク
トされます. Near プレーンではリジェクトされません.
-160 480
-120 +--------------------------+
| | ___FRUSTRATIO_2 の時の
| 0 320 |/ リジェクトボックス
| 0 +------------+ |
| | | |
| | | |
| | 画面 | |
| | | |
| | | |
| 240+------------+ |
| |
| |
360 +--------------------------+
大きな 3 角形を表示するときに, リジェクト処理のため, 画面に
出るべき 3 角形であってもその 1 頂点が外に出ているために描画されな
いことがあります.
この場合は, その 3 角形をより小さな 3 角形に分割して, 不自然な
「ポリゴン欠け」が起こらないようにする必要があります.
F3DLX.Rej, F3DLP.Rej ではこのリジェクト処理を採用することによって
2 Triangles 命令の処理速度を上げることができました.
そのため, DL の生成時にはなるべく g*SP2Triangles を使用するように
してください.
gspF3DLX.Rej.fifo.o はテクスチャ補正ありのバージョンで,
gspF3DLP.Rej.fifo.o はテクスチャ補正なしのバージョンです.
F3DLP.Rej の方が F3DLX.Rej よりも僅かに早くなっています. SP の処理
はこれによって軽くなりますが, DP の処理自体には変化がないので DP が
SP の処理についてこない場合が多くなります. こうしたときには
render mode を RA モード(G_RM_RA_ZB_OPA_SURF)等にすることを検討す
る必要もあるでしょう.
またこのマイクロコードでは G_CULL_BOTH をサポートしていません.
これらのマイクロコードは Release 0.96 より追加されました.
(4) gspL3DEX.fifo.o:
Line3D マイクロコードの 32 頂点対応版です.
また F3DEX 系マイクロコードの 1Triangle, 2Triangles, 1Quadrangle
をワイアフレームで表示します.
このマイクロコードは Release 1.00 より追加されました.
*****************************************************************************
FIFO バッファの最小サイズ
F3DEX/LX/LX.Rej/LP.Rej/L3DEX マイクロコードの fifo バッファの最小サ
イズは, 0x300 bytes となっています. これは Fast3D での必要サイズ
(0x180 bytes) よりも大きいので注意してください.
*****************************************************************************
ヘッダファイル:
headers-2.0e/*.h U64 Dev 2.0e 用のヘッダファイル
headers-2.0f/*.h U64 Dev 2.0f 用のヘッダファイル
headers-2.0g/*.h U64 Dev 2.0g 用のヘッダファイル
headers-2.0h/*.h U64 Dev 2.0h 用のヘッダファイル
お使いの開発環境に応じたファイルを /usr/include/PR に移してお使い下さい.
*****************************************************************************
GBI の互換性について:
パッケージ内のマイクロコードの GBI (Graphics Binary Interface) と従
来のFast3D マイクロコードとの GBI にはバイナリレベルにおいての互換性が
ありません.
ただし gbi.h によって, これらの違いを吸収するように作成してあります.
同じ DL でもコンパイルオプションでそれぞれに適した GBI に振り分けられ
るようになっています.
具体的には gbi.h を include する前 (通常は ultra64.h を include すれ
ば gbi.h も include されます) にキーワード "F3DEX_GBI" を定義しておく
ことで, 本パッケージのマイクロコードに対応した GBI を出力します.
例えば, DL をファイル static_ex.c に記述したときには,
static_ex.c:
|
|#define F3DEX_GBI
|#include <ultra64.h>
|
のように, ultra64.h の include の前に #define F3DEX_GBI を追加してく
ださい.
Release 0.96 以降から F3DEX/F3DLX/F3DLX.Rej/F3DLP.Rej のマイクロコー
ドは全て GBI バイナリレベル互換となりました. よって, DL をそれぞれに使
い回すことが可能となりました. ただし, 前項で述べたようなリジェクト処理
のために同じ命令でも微妙に動作が異なっていますので同じ DL でも同じ画面
が描画されるとは限らないので注意は必要です.
任天堂株式会社開発第 3 部 安本 吉孝