2009年03月19日
テクスチャーを綺麗にUPするには?
白と黒の2色で半分半分に塗られたテクスチャーを用意して、
テクスチャーアニメーションで、白黒を点滅させようと思うのですが、
PC上では、綺麗に直線で2色になっている画像を、セカンドライフにUPLOADすると
境界線あたりがぼやけてしまいます。
そのため、アニメーションをさせると、綺麗に、白だけ黒だけの画像にならず、
周囲数ドットがぼやけてしまいます。
BMPでも、PNGでも、TGAでも結果は同じで、「ロスのない圧縮を使用」にチェックを入れても同じでした。
JPEG変換の影響かとは、思いますが、画像の劣化(にじみ)のないUPの方法をご存じの方はいらっしゃらないでしょうか?
参考:
UP元はこういう画像です
テクスチャーアニメーションで、白黒を点滅させようと思うのですが、
PC上では、綺麗に直線で2色になっている画像を、セカンドライフにUPLOADすると
境界線あたりがぼやけてしまいます。
そのため、アニメーションをさせると、綺麗に、白だけ黒だけの画像にならず、
周囲数ドットがぼやけてしまいます。
BMPでも、PNGでも、TGAでも結果は同じで、「ロスのない圧縮を使用」にチェックを入れても同じでした。
JPEG変換の影響かとは、思いますが、画像の劣化(にじみ)のないUPの方法をご存じの方はいらっしゃらないでしょうか?
参考:
UP元はこういう画像です

テクスアップのときは大概、256×256か512×512です
大きいほどきれいですが表示に時間がかかります
横にスクロールするようなアニメーションなら、テクスチャ使うしかないですけど。
解像度はKさんがおっしゃるように256×256はないと奇麗に見えないかもしれませんね。
境界線がはみ出てしまうことはよくありますので、白ならば白の画像の真ん中辺りを使い、黒ならば黒い面の真ん中を使うようにすると、綺麗に単色の面だけを出す事ができると思いますよ。
画像については、SLにアップする際に自動で圧縮がかかってしまうようなので、作ったままの状態で・・・というのは難しいような気がします。
横方向に大きく縦方向には短い画像で問題ないです(縦方向は繰り返しえお使う)
そうやって画像自体の大きさを小さくできますからきれいに見えてなおかつテクスサイズを抑えることができます
まず、スクリプトからの変更では、0.2秒のウェイトがかかってしまうため、高速で切り替える方法として、テクスチャーアニメーションを使おうと思ったのです。
テクスチャーアニメーションの指定では、2分割にすると、縮尺0.5で固定となるので、縮尺の調整で、ぼけている部分を排除するという方法はできないです。
いちおう、1024x1024でも試してみました。
遠目には、綺麗に見えますが、拡大すると、やはりぼけているため、テクスチャーアニメーション(縮尺0.5)では境界付近に違う色が見受けられました。
isoletteさんのおっしゃる方法で、1024x16とかで、ごまかすしかないのかなぁ。。。
GIMPでJPEG保存してもぼけないのに、、、なぜ、SLは、、、
スクロールというか水テクスチャのような動きではなくて
テクスチャの白と黒の部分を交互に表示させるために
半分ずつの”切り替え”エンドレスなんですよね?
0.2秒のウェイトが気になるくらい高速に切り替えているとしたら
残像がにじみのように見えるというか、、
そもそもにじみなど見えないくらい高速なんじゃないかとイメージしますが
どうでしょう?
それと、試すなら
縦横同サイズじゃなくて、256×512とかですね
縦横比率を変えるのは、ごまかしじゃなくて、普通に使われてる方法ですよ
縦横のサイズを32x512で境界線に1ドット程度の細い筋が出ます。
これを回避するには、面の繰り返しを0.5から0.49等に設定し
Timer使って面のテクスチャを個別に設定するしかないかもしれません。
■画像サイズ
1)128x128 両サイドに少しグレーのにじみがある
2)32x32 両サイドに少しグレーのにじみがある(大)
3)64x512 比較的目立たないが、境界線に細い筋がある
4)32x512 比較的目立たないが、境界線に細い筋がある
■実験で使用したスクリプト
default
{
state_entry()
{
llSetTextureAnim( ANIM_ON | LOOP, ALL_SIDES, 2, 2, 0, 4, 1 );
}
touch_start(integer total_number)
{
llSetTextureAnim( LOOP, ALL_SIDES, 2, 2, 0, 4, 1 );
// STOP
}
}
paoさんにいったっては、実験までしていただき、誠にありがとうございます。
作りたいのは、細長い物を0.1秒程度の早さで点滅させたいのです。
実際には、白黒ではなく、白と透明の2色で、グローの点滅をしようとしています。
高速で点滅させても、やはり、にじみの部分が線となって見えてしまいます。
やはり、セカンドライフでのアップロードでは、にじまないでアップするのは、ムリだと言うことで、あきらめます。
そこで、対応策として、横2分割のアニメーションではなく、横に32分割してもっと速くアニメーションすることにします。
(画像が32x32のため)
llSetTextureAnim(ANIM_ON | LOOP, ALL_SIDES, 2, 1, 0, 2, 5);
↓このように変更
llSetTextureAnim(ANIM_ON | LOOP, ALL_SIDES, 32, 1, 0, 32, 128 );
点滅しないときは、みなさんのおっしゃるとおり、横の繰り返しを0.4などにしてにじみの部分を使わないようにします。
ありがとうございました。
>独り言。。。
スカルプトでは、値の変化はないんだから、、アップした画像が変化してるのではなく、表示の問題か??
SetAlphaは、0秒だったのですか、、、それは知らなかったです。。
ただ、SetAlphaによる透明と、テクスチャーによる透明では、グローの光り方が違うので、今回は残念ながら使えないです。
α値での透明は、グローが入ってると透明にならず、光が残ってしまうので。
勉強になりました。ありがとうございます。