[Minecraft]mod作成専用スレ

このエントリーをはてなブックマークに追加
247名無しさんの野望
作成ではなく修正ですが質問させてください

通称、水影MOD(GLSLとSEUS v10 with water shader)に水影用修正テクスチャ
を使うと色々表示されないブロックがあったのでsoartexFanVerのseus対応版
を使ったのですが、こっちは水に対応してないらしく水面にニンジン葉が出ます
http://minus-k.com/nejitsu/loader/up212151.png

水影用テクスチャと見比べるとニンジンと競合する場所があるので
http://minus-k.com/nejitsu/loader/up212210.png

SEUSシェーダーのzipにあるfinal.fshの水面処理関連(520行目あたりから)の
どっかのtexture2Dの引数をいじればいけるかなと考えています。

マではありますが、shader初挑戦なのでgoogle先生に聞きながらやってます
//REFRACTION のコメントのあたりが臭いのですが、まだうまくいきません
どなたかシェーダーに強い人お助けを
248名無しさんの野望:2012/12/24(月) 17:58:19.66 ID:aVRw/BS4
そのソースやテクスチャ関連を弄ったことがないので、あんまり足しになることは言えんけど
テクスチャ座標は、一つのint値の8bitを使って16x16のテクスチャ位置の座標情報を持たせてあったはず
なので、そのあたりを処理してるとこを見つけ出せば修正は容易な気がするよ

ビット演算については割愛するけど、
 int x = (textureCoord & 15) << 4;
 int z = textureCoord & 240;

こんな感じで分解してやることが出来る

たとえば、247の画像の赤枠左上のテクスチャであれば、左から10、上から12番目の座標が必要になるので
x座標=160 (16px ×10)、z座標=192 (16px ×12)になるので、
xのほうを4ビット右シフトし、x = 160 = 1010 0000 → 0000 1010 (=10)
10 + 192 = 202 が赤枠左上のテクスチャの位置情報になる。こんな感じ

勘のいい人は気づくかもしれないけど
左から10(= 1010) 、上から12 (=1100)、160(=1010 0000)、192(=1100 0000)、202(=1100 1010)

あとは、そのあたりの数値を処理してる場所を探せば置き換える値も見つかるんじゃないかな
249名無しさんの野望:2012/12/24(月) 18:01:08.23 ID:aVRw/BS4
あー、座標は 16x16 テクスチャの話ね
つっても、もっと高解像度のテクスチャの場合であれ、
この座標にテクスチャの大きさにあわせた倍率をかける感じで座標出してると思うけど
250名無しさんの野望:2012/12/24(月) 18:03:08.89 ID:aVRw/BS4
的外れだったらゴメンネ
251名無しさんの野望:2012/12/24(月) 18:23:44.42 ID:BwM4QT5x
>>248-250
うおwテクスチャサイズ(64)掛けちゃダメだったのか
ありがとう、やってみます。
252名無しさんの野望:2012/12/24(月) 21:44:06.70 ID:C+GoWllw
質問なんですが
mobのモデルをプレイヤーモデルにする方法がわからないのです。
例えば、「ModelMagmaCube.java」のファイルを「ModelPlayer.java」
として使うには「ModelMagmaCube.java」のどこのソースを
いじればいいのでしょうか?
詳しい方お願いします。
253名無しさんの野望:2012/12/24(月) 23:50:52.03 ID:BwM4QT5x
202(0xCA)のテクスチャ番号を呼び出してる場所が見つからないので
色々なとこのtexture2Dの第2引数に1個ずらして確かめるつもりで
+ vec2(0.0f,1.0f)入れてみたけど、水面のニンジンが消えない・・

http://minus-k.com/nejitsu/loader/up212306.png
ぶちきれてニンジン潰したった

今のところシェーディングの知識が足りなさすぎるんで
修正すべき箇所を見つけられないけど、チェストが半透明になってたので
透過処理の対象となるテクスチャ番号(?)の情報がかなり古いVer
を元にしている気がする(チェストでも悪戦苦闘中)
254名無しさんの野望:2012/12/24(月) 23:59:36.16 ID:hNpqqct0
>>252
コンストラクタとrenderとその他必要な部分をいじるといいよ
255名無しさんの野望:2012/12/25(火) 00:20:31.00 ID:/JBJuAeS
>>254
その他必要な部分というとどんなところでしょうか?
また、MODにより追加されたMobのモデルにするときも
同じ方法でできますでしょうか?
良かったらご回答お願いします。
256名無しさんの野望:2012/12/25(火) 06:54:47.30 ID:MNK+ygxR
>>253
使っている SEUS のバージョンが分からないけど、ここでは v10 RC2 with water shader と仮定する

人参が映らない v10 RC5 の各ファイルと比較すると、どうやら問題点は
gbuffers_textured_lit.fsh の以下の部分


float texblock = 0.0625f;

if (tex.r > 0.99 && tex.b > 0.99 && tex.g < 0.1f) {
transx -= texblock * 3.0f;
iswater = 1.0f;
} else {
iswater = 0.0f;
}

gl_FragData[0] = texture2D(texture, texcoord.st + vec2(transx, transy)) * zero * color;


ここが見つかれば直すのは簡単だろう

>>248
3Dグラフィックでのテクスチャ座標はテクスチャの大きさに関わらず0.0〜1.0。
ちなみに、0.0625 = 1/16
257名無しさんの野望:2012/12/25(火) 20:35:22.58 ID:ujRXi4Yw
テクスチャ座標 texcoord.stの指すところがマゼンタで塗りつぶされてると
transx が -3/16 になるから、左に3ブロックずらして
gl_FragData[0] にテクスチャをセットする…おお、これっぽい!

サンタさんありがとう!
258名無しさんの野望:2012/12/25(火) 21:28:46.61 ID:ujRXi4Yw
259名無しさんの野望:2012/12/25(火) 21:41:32.07 ID:/MikpUII
>>258
ちなみにRC5の方では↓の様ににテクスチャ使わない方式に変わってる

if (tex.r > 0.99 && tex.b > 0.99 && tex.g < 0.1f) {
tex = vec4(0.5f, 0.9f, 0.9f, 0.2f);
iswater = 1.0f;
}else {
iswater = 0.0f;
}

gl_FragData[0] = tex * color;