README.jp
5.05 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
-----------------------------------------------------------------------------
README.jp (Japanese version) --- Release 1.21
-----------------------------------------------------------------------------
o F3DEX マイクロコード一覧:
(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, G_CULL_FRONT をサポート
していません.
これらのマイクロコードは Release 0.96 より追加されました.
(4) gspL3DEX.fifo.o:
Line3D マイクロコードの 32 頂点対応版です.
また F3DEX 系マイクロコードの 1Triangle, 2Triangles, 1Quadrangle
をワイアフレームで表示します.
このマイクロコードは Release 1.00 より追加されました.
-----------------------------------------------------------------------------
o 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 部 安本 吉孝