Discuss Scratch

scratch_kousai
Scratcher
4 posts

作品を軽量化する方法について議論しよう

scratch_kousai wrote:

僕は音楽がプロジェクトの一番重くなる原因だと思います。
音楽効果音を減らせばプロジェクトが軽くなると思いますが、それじゃああまり面白いプロジェクトにならないと思うので、それをどうしたほうが良いのかわかりません。

《他のプロジェクト軽量方法》
・コスチュームをビットマップ化する
・スプライトを減らしてクローンで作る
 
set [ コスチュームv] to [1]
create clone of [自分自身 v]

when I start as a clone
if <(コスチューム) = [1]> then

end
scratch_kousai
Scratcher
4 posts

作品を軽量化する方法について議論しよう

すみませんまだ使い方がよくわからないので……
trainfan233
Scratcher
70 posts

作品を軽量化する方法について議論しよう

同じスプライトがあるのであればクローンでやってみる。そうしたら軽くなるかもです。
create clone of [ なにか]

これを使う↑
戦闘ゲームの場合は倒されて、何かを送って↓
when I receive [なにか]
create clone of [ 自分自身]
自分自身のクローンを消す
これを使うといいですね

Last edited by trainfan233 (Nov. 23, 2024 09:13:17)

kadatumi
Scratcher
6 posts

作品を軽量化する方法について議論しよう

trainfan233 wrote:

同じスプライトがあるのであればクローンでやってみる。そうしたら軽くなるかもです。
create clone of [ なにか]

これを使う↑
戦闘ゲームの場合は倒されて、何かを送って↓
when I receive [なにか]
create clone of [ 自分自身]
自分自身のクローンを消す
これを使うといいですね
クローンを消すになるとたくさんクローンしても、全部消えてしまいます。
trainfan233
Scratcher
70 posts

作品を軽量化する方法について議論しよう

kadatumi wrote:

trainfan233 wrote:

同じスプライトがあるのであればクローンでやってみる。そうしたら軽くなるかもです。
create clone of [ なにか]

これを使う↑
戦闘ゲームの場合は倒されて、何かを送って↓
when I receive [なにか]
create clone of [ 自分自身]
自分自身のクローンを消す
これを使うといいですね
クローンを消すになるとたくさんクローンしても、全部消えてしまいます。
その場合は1スプライトにつき2つスプライト分にする→2分の1
kaisuke9244
Scratcher
100+ posts

作品を軽量化する方法について議論しよう

pen を使えば賄えると思います
kame0826
Scratcher
2 posts

作品を軽量化する方法について議論しよう

kaisuke9244 wrote:

pen を使えば賄えると思います
ありがとうございます
game_zenon
Scratcher
14 posts

作品を軽量化する方法について議論しよう

質問です。ブロックの量を少なくすることによって軽量化はできるのでしょうか?
9q9q9q
Scratcher
12 posts

作品を軽量化する方法について議論しよう

#130
軽量化の意味によりますが、データ量の比較なら、単純にブロック数が少ないプロジェクトは、データ量が小さく読み込みが早いです。
また、表示されるブロックを減らすことにより、中を見るとき、中をみて実行しているときの実行動作も速くなります。
一方、普通に見て実行している場合は、おそらくブロックの量に動作の速さはほとんど左右されません。理由はこれが軽いからです。
inoking
Scratcher
1000+ posts

作品を軽量化する方法について議論しよう

9q9q9q wrote:

一方、普通に見て実行している場合は、おそらくブロックの量に動作の速さはほとんど左右されません。理由はこれが軽いからです。
その作品は「ブロックが多いほど遅い」という話ではなかったのですか?
であれば、「ブロックの量に動作の速さはほとんど左右されません」を否定する理由になります。
9q9q9q
Scratcher
12 posts

作品を軽量化する方法について議論しよう

#132

inoking wrote:

9q9q9q wrote:

一方、普通に見て実行している場合は、おそらくブロックの量に動作の速さはほとんど左右されません。理由はこれが軽いからです。
その作品は「ブロックが多いほど遅い」という話ではなかったのですか?
であれば、「ブロックの量に動作の速さはほとんど左右されません」を否定する理由になります。
動作が遅くなったのは中を見てコードエディターを開いて実行した場合です。中を見ない場合では、単純なブロックの量による動作の速さの違いは見られませんでした。

Last edited by 9q9q9q (Nov. 28, 2024 04:21:23)

JIXG
Scratcher
11 posts

作品を軽量化する方法について議論しよう

こういう作品がありますこれ
これを見れば何をどれくらいデータ量を減らせばいいのかがわかります(神)
kouryou118103
Scratcher
1000+ posts

作品を軽量化する方法について議論しよう

その情報は古いようです。
最新の情報はこちら

Last edited by kouryou118103 (Dec. 23, 2024 09:06:07)

unnot-leas
Scratcher
1 post

作品を軽量化する方法について議論しよう

ディスカッションフォーラム初めてです

PENで3Dやアニメーションを作るとき、私はたいていturbowarpに頼らないとプロジェクト実行できませんがスクラッチでサクサクと動かしているプロジェクトがあります どうやっているのか教えてください
ioqj
Scratcher
500+ posts

作品を軽量化する方法について議論しよう

unnot-leas wrote:

(#134)
PENで3Dやアニメーションを作るとき、私はたいていturbowarpに頼らないとプロジェクト実行できませんがスクラッチでサクサクと動かしているプロジェクトがあります どうやっているのか教えてください
unnot-leasさん、ディスカッションフォーラムへようこそ!
一番大きな違いとしては、やはりデータ量とか、そういうのが大きいと思います。
あとはデータを基に情報を描きだすアルゴリズムとか、そこらへんが軽量化の要因なのでは、と思います。
プロジェクトによって方法は違うので、該当プロジェクトの中を見るのが手っ取り早い気はしますが。
KimiruHamiru
New Scratcher
500+ posts

作品を軽量化する方法について議論しよう

unnot-leas wrote:

PENで3Dやアニメーションを作るとき、私はたいていturbowarpに頼らないとプロジェクト実行できませんがスクラッチでサクサクと動かしているプロジェクトがあります どうやっているのか教えてください
想定している「スクラッチでサクサクと動かしているプロジェクト」が具体的にどのプロジェクトであるかによって、答えは違ってくるかなと思います。私の想定でちょっと書きます。

Scratchのアニメーションの仕組みは
・「0.033秒(1/30秒)」ごとに
・「違う画像を生成する処理」を
・「つぎつぎに実行する」
というのが基本で、「サクサク動かない」のは
「違う画像を生成する処理」が「0.033秒以内に終わってない」という状態である、
と言ってよいと思います。

この「処理」は大雑把に
・「点の位置を計算する」
・「ペンで描画する」
の2つに分けられます。
(可能なら、自分の環境(あるいは想定する環境)でそれぞれどれくらい時間がかかるか調べとくとよいです。 https://scratch-mit-edu.ezproxyberklee.flo.org/projects/483250811/ は参考になるかもしれません)

計算」の話題は後回しにする(どういう計算をするかによるので、人間が想像できる計算の種類の数だけ話が広がる)として、
ペンで描画する」の方は割と単純な話です。

「たくさん描くと重い」、「たくさん描かなければ軽い」です。

点を打つ」場合
「ペンを下ろす、ペンを上げる」という処理は、私の経験では
「0.033秒の間に繰り返せる回数」は「そこそこの性能のハード環境でも3000回ぐらいが限界」です。
(これはハードウェア環境によってかなり差があるはずで、もっと低い場合もあると思いますが、600ぐらいは行けると思います)
この部分は「(Scratchを使う限り)どうにもならない絶対的な壁」と思われるので、
「ペンを下ろす、ペンを上げる」の「回数自体をそれに合わせる
必要があるはずです。

純粋に「表示するものの頂点数を減らす」のはとても有効です。

ほかに、

私がよくやるのは「頂点数を間引く(まびく)」です。
「点を全部描かなくても全体として見ればなんか案外それっぽい」というのが前提で、
応用として「1フレームの時間内に書ききれないぐらいたくさん頂点がある」なら、「次のフレームも使えば猶予は倍になる、それでも足りなければさらに次のフレームも使って、時間をかけて描けばいい」という考え方を使う場合もあります。「各フレームで処理を中断する」ようにすれば、「描画が早くなるわけではない」ですが「操作が重くなることを回避」できます。

間引き方は、
頂点のリストを「走査(そうさ)して、次のフレームでは前回の終わりから描画再開する」、みたいなことをやるのが丁寧です。が、
状況によっては
頂点のリストの「何番目の頂点を描画するかはランダム」というので充分(場合によってはむしろ有効)な場合もあります。
原理上、いわゆる「ちらつき(フレームごとに部分部分が描かれないので明滅する)」とか「ティアリング(画面上半分とした半分で時間が違う)」とかが発生しますが、必要なら、なにがしかの「ぼやけさせる仕組み」で緩和(=ごまかし)します。
細かい話は省きますが、たとえば
https://scratch-mit-edu.ezproxyberklee.flo.org/projects/717010796/
では「半透明にした背景色」で「前フレームで描いたものを消さずに徐々に薄れさせる」ようなことをしています。

線を引く」場合
描画の目的は、「描きたいもの」で「画面の面積の一部(できればぜんぶ)を埋める」ことです。
1フレーム0.033秒の間に指定できる「点」の数が少ないなら、「線」とか「面」を描いちゃう(その方が単位時間内に多くの画面の面積を稼げる)という選択も有効です。
大雑把には
「100ピクセル並んだ点を1つ1.つ描く」よりは「始点終点を指定して線を引く」方が高速
という話です。よくある「ワイヤフレーム」とか「ポリゴン」とかいうのはその延長の話で、イマドキのコンピュータはその考え方を前提として専用ハード(GPU。おざっぱに言えば「ピクセル一つ一つ描く」じゃなく「条件に合ったピクセルを並列処理で同時に描く」仕組み)が作られているし、(GPU機能を直接使っていないにしても)Scratchで線を引く場合もそれなりに有効なようです(終端が円形の線を引くScratchの仕組みは思いのほか複雑な実装になってるようですが)。
Scratchで「レイキャスター」と呼ばれている3D迷路系のプロジェクトが「描画面積」のわりに超絶軽いのはこの「線を引く」という方法を選んでいるおかげです。
KimiruHamiru
New Scratcher
500+ posts

作品を軽量化する方法について議論しよう

計算」の方についてちょっとだけ書くと、
奥義は
「計算しない」
です。

具体的には、
・計算結果が固定になる物は、計算結果だけ記録して描画のタイミングでは計算しない。
・ループの外に出せる計算は、なるべく出す。計算が発生する回数を減らす。
・「どうしても必要」でなければ、メモリを確保しにいかない、リストを更新しない。
といった話になります。
何か小細工をした結果、かえって重くなる場合もあるかと思いますが、結局のところ
・「思いつくやり方全部実際動かしてみて、軽いものを選ぶ」
というのが私の目指すところです。
ito-noizi
Scratcher
100+ posts

作品を軽量化する方法について議論しよう

PENの話が上がっていたので、狭い話ですが驚いたという話をあげておきます。(まあ、当たり前なのではという気もしていますが)
ライフゲームを高速化するときはPENを上げ下げしないほうが1フレームに動かすブロック数が少なく軽量になるのではないかと友達に言ったら実装してくれました。
https://scratch-mit-edu.ezproxyberklee.flo.org/projects/1109140099/
線の描画には点の描画よりも時間がかかるみたいでだめらしいです。上にあるようなレイキャスティングは線がながいから成り立つ話なんですね~
(色が今後Nこ分変わらないならまとめて線を引くみたいなのは有効かもしれない)
KimiruHamiru
New Scratcher
500+ posts

作品を軽量化する方法について議論しよう

unnot-leas wrote:

PENで3Dやアニメーションを作るとき、私はたいていturbowarpに頼らないとプロジェクト実行できませんがスクラッチでサクサクと動かしているプロジェクトがあります どうやっているのか教えてください
「頂点を間引く」方向でunnot-leasさんのプロジェクトをリミックスしてみました。
https://scratch-mit-edu.ezproxyberklee.flo.org/projects/1135955733/

Powered by DjangoBB