トゲトゲやユガミを補正してハイクオリティ3Dの一歩を踏み出そう(爆速オンライン3Dゲームの作り方 #05)

トゲトゲやユガミを補正してハイクオリティ3Dの一歩を踏み出そう(爆速オンライン3Dゲームの作り方 #05)
グリフパッチ(動画)
ok-scratch(執筆)

和訳解説は動画作者のグリフパッチさんご本人から許可をいただいて掲載しております。
チャンネルはYOUTUBE ( by griffpatch )からどうぞ。

空間の歪みを補正したり、壁のトゲトゲをスムーズにして、よくあるスクラッチの3D実装とは一線を画したハイクオリティなコーディングを紹介する!
スターター
プロジェクト
リミックス用プロジェクトへ
難しさ

任意)自分の作業中のスクラッチ作品URLを記録しておこう!再開するときに便利だよ。

LOADING...

※ この記録は今使ってるPCに保存されます。別のPCで作業するときは表示されません。

スクラッチプログラミングに挑戦している皆さん、どうも!スクラッチコーチです。

ゴンザレスからゲームクリエイターへの挑戦(ちょうせん)(じょう)

いよいよ3D迷宮(めいきゅう)潜入(せんにゅう)したスクラッチキャット。あたりは(くら)くなるように実装(じっそう)したから、暗闇(くらやみ)(かく)れながら(おく)(すす)()ことができる。でも、あれ?(とお)くを()ようとすると空間(くうかん)がゆがんで、しっかり距離感(きょりかん)把握(はあく)できなくなってしまった!それに、(かべ)がトゲトゲだから(かお)()さって(いた)いwこれはなんとかしないとね!

今回(こんかい)目標(もくひょう)「ゆがみを補正(ほせい)してズームアウトも可能(かのう)にする」

プレイヤーの角度(かくど)視野(しや)(かく)、それに距離(きょり)などの要素(ようそ)がからみあって、ズームアウトしても空間(くうかん)がゆがんで()えてしまったり、(かべ)がやたらギザギザに()えてしまったり、(こま)かい問題(もんだい)がまだまだ(のこ)っている。

BEFORE

現状(げんじょう)だと、視野(しや)(かく)を120にするとこんな(かん)じに周辺(しゅうへん)がゆがんでみえる。

AFTER

補正(ほせい)()周辺(しゅうへん)もまっすぐ()える。
↓さらに、ズームアウトもできるから(とお)くや(ちか)くを()るといった演出(えんしゅつ)可能(かのう)になるぞ。
実装(じっそう)目標(もくひょう)としては以下(いか)(とお)り!
  • (かべ)のトゲトゲをスムーズにする
  • ()()(かん)する処理(しょり)をプレイヤーを起点(きてん)にまとめて、管理(かんり)しやすくする
  • ズームしても空間(くうかん)がゆがまないようにする
おっけぃ!
トゲトゲやユガミを補正してハイクオリティ3Dの一歩を踏み出そう(爆速オンライン3Dゲームの作り方 #05)を語るok-scratch ok-scratch

u003cpu003e今回(こんかい)はこういった()()のクオリティを洗練(せんれん)させることで、より(うつく)しい3D空間(くうかん)実現(じつげん)していこう!またまた三角(さんかく)関数(かんすう)(ぎゃく)三角(さんかく)関数(かんすう)なんていうブロックも使(つか)っていくけど、(むずか)しい計算(けいさん)はスクラッチがやってくれるから安心(あんしん)してね!u003c/pu003e

トゲトゲを(なめ)らかにする

スプライト「レイキャスター」を(ひら)く。
定義(ていぎ)「_シングル・レイ」の歩数(ほすう)変更(へんこう)しよう。
こうすると(かべ)がますますケバケバというかトゲトゲになる。
こっちの歩数(ほすう)()える。
うん、ちょっとマシになったね。
とりあえず(いま)段階(だんかい)ではこのくらいでOKだ!今回(こんかい)のチュートリアルでは、このトゲトゲみたいに()()のクオリティを洗練(せんれん)させていくぞ。

視点(してん)をプレイヤーで一元(いちげん)管理(かんり)する

(いま)色々(いろいろ)実験(じっけん)しながら(つく)ってきたので、プレイヤーとレイキャスターで処理(しょり)()(みだ)れている状態(じょうたい)なんだ。これからプロジェクトが複雑(ふくざつ)になるから、(いま)のうちにもっとシステマティックな管理(かんり)体制(たいせい)というか、強固(きょうこ)管理(かんり)体制(たいせい)(つく)っておきたい。それが一元(いちげん)管理(かんり)()ばれる管理(かんり)体制(たいせい)で、カンタンに()うとゲームのメインループを1つのスプライトに集約(しゅうやく)しておくやり(かた)なんだ。今回(こんかい)はプレイヤーの「ずっとループ」から(いろ)んなメッセージを()ばして、ゲームの(おも)だった処理(しょり)(3D()処理(しょり))を実行(じっこう)されるようにしていきたい。こうしておくと、3D()にテコ()れしたいときはプレイヤーから調(しら)べればいい、っていうシンプルな原則(げんそく)()(はい)る。デバッグしていると「どこから()たらいいんだっけ……」と途方(とほう)()れることがあるけど、このシンプルな原則(げんそく)「プレイヤーから見始(みはじ)める」があれば、それだけデバッグが(らく)になるんだよ。具体的(ぐたいてき)には以下(いか)(てん)をスプライト「プレイヤー」が(おき)(てん)になるように修正(しゅうせい)していく。
  • 視野(しや)(かく)と★解像(かいぞう)()といった()()(かん)する変数(へんすう)(いま)はレイキャスターで管理(かんり)してる)
  • どの方向(ほうこう)()いているか、という角度(かくど)(いま)はレイキャスターで管理(かんり)してる)

視野(しや)(かく)と★解像(かいぞう)()移動(いどう)する

視野(しや)(かく)解像(かいぞう)()変数(へんすう)を、プレイヤーに移動(いどう)しておいて。
レイキャスターの(ほう)は2つのブロックを()しておいて。

定義(ていぎ)「_プレイヤーティック」を(つく)

スプライト「プレイヤー」を(ひら)こう。
定義(ていぎ)「_プレイヤーティック」を(つく)る。
トゲトゲやユガミを補正してハイクオリティ3Dの一歩を踏み出そう(爆速オンライン3Dゲームの作り方 #05)を語るok-scratch ok-scratch

u003cpu003eティックというのは日本語(にほんご)だと「秒針(びょうしん)がチクタク」みたいな意味(いみ)なんだけど、()かりやすい(わけ)がないからティックって()く。ティックはゲームクリエイターにはメジャーな単語(たんご)だからチクタクってニュアンスで(おぼ)えるのがいいよ。u003c/pu003e

ずっとループの中身(なかみ)をごっそり(うつ)すよ。
移動(いどう)(もと)には定義(ていぎ)()わりに()いておこう。
定義(ていぎ)「_プレイヤーティック」の最後(さいご)についてるメッセージ「レイキャストする」は()(はず)しておこう。
()わりに、もともとの「ずっとループ」の(なか)でメッセージを(おく)るようにするよ。(もど)すって(かん)じかな。

定義(ていぎ)「_レイキャスターを初期(しょき)()する」を(つく)

ずっとループの(なか)()()そう。

カメラのゆがみを(なお)してズームアウトできるようにする

レイキャスターで「角度(かくど)」っていう変数(へんすう)(つく)ったけど、(じつ)はこのままだと視野(しや)(かく)によっては3D()がうまくいかないことがある。

変数(へんすう)「★カメラの角度(かくど)」を(つく)って、変数(へんすう)角度(かくど)」と()()える

このゆがみを(なお)最初(さいしょ)の一()として(あたら)しい変数(へんすう)用意(ようい)するよ。
レイキャスターを初期(しょき)()するところで()きを()()てる。
トゲトゲやユガミを補正してハイクオリティ3Dの一歩を踏み出そう(爆速オンライン3Dゲームの作り方 #05)を語るok-scratch ok-scratch

u003cpu003eこのカメラの角度(かくど)(プレイヤーの()き)を、(いま)までレイキャスターで使(つか)ってた「角度(かくど)」という変数(へんすう)()わりに使(つか)っていくよ。u003c/pu003e

スプライト「レイキャスター」

スプライト「レイキャスター」を(ひら)こう。
メッセージ「レイキャストする」を()()ったタイミングで、プレイヤーの()きに()けていた部分(ぶぶん)を、★カメラの角度(かくど)()()えよう。(うご)きに(ちが)いはないよ。
そして定義(ていぎ)「_レイキャストする」にて、角度(かくど)という変数(へんすう)()きを()()ててたところは()してOK。
定義(ていぎ)「_シングル・レイ」で使(つか)っていた角度(かくど)も、★カメラの角度(かくど)()()えよう。
うん、(うご)きに(ちが)いがないはずだから(ねん)のためテストしておいてね。

u003cpu003eどこを()ているかという角度(かくど)や★視野(しや)(かく)など()()(かん)することをプレイヤーを起点(きてん)管理(かんり)できるようになったu003c/pu003e

さて、このままだと視野(しや)(かく)()えたときに「ゆがみ」が発生(はっせい)してしまうって(つた)えていたね。↓このショート動画(どうが)をチェックしてみて。
()(まえ)(かべ)はまっすぐ()えるけど、周囲(しゅうい)(かべ)がぐにょっと()がって()えるよね。魚眼(ぎょがん)レンズみたいな状態(じょうたい)。これがなぜ発生(はっせい)するのかっていうと、(じつ)陰影(いんえい)のところで実装(じっそう)した変数(へんすう)距離(きょり)」の計算(けいさん)原因(げんいん)なんだ。()(まえ)(かべ)よりも、(なな)(まえ)にある(かべ)のほうが(くら)()えるように、三角(さんかく)関数(かんすう)使(つか)って距離(きょり)(さい)計算(けいさん)したところだよ。↓これ。
これのせいで魚眼(ぎょがん)レンズ状態(じょうたい)だけど、陰影(いんえい)には必要(ひつよう)処理(しょり)だった。だから距離(きょり)()えずに、今度(こんど)は★カメラの角度(かくど)(さい)計算(けいさん)することでゆがみを(なお)していく。しかーし!ここで(ふたた)難解(なんかい)数式(すうしき)使(つか)うことになる。いやいや、安心(あんしん)してほしい。今回(こんかい)もスクラッチのブロックで用意(ようい)されているものを使(つか)うだけだからね。使(つか)うのはアークタンジェント、いわゆる(ぎゃく)三角(さんかく)関数(かんすう)という計算(けいさん)だ。
トゲトゲやユガミを補正してハイクオリティ3Dの一歩を踏み出そう(爆速オンライン3Dゲームの作り方 #05)を語るok-scratch ok-scratch

u003cpu003e(ぎゃく)三角(さんかく)関数(かんすう)がどんな内容(ないよう)なのか、それは。。。よく()からないからウィキペディアで調(しら)べたってグリフパッチさんも動画(どうが)()ってたwu003c/pu003e

トゲトゲやユガミを補正してハイクオリティ3Dの一歩を踏み出そう(爆速オンライン3Dゲームの作り方 #05)を語るok-scratch ok-scratch

u003cpu003e丸投(まるな)げじゃんu003c/pu003e

トゲトゲやユガミを補正してハイクオリティ3Dの一歩を踏み出そう(爆速オンライン3Dゲームの作り方 #05)を語るok-scratch ok-scratch

u003cpu003eい、いま大切(たいせつ)なのは、(ぎゃく)三角(さんかく)関数(かんすう)魚眼(ぎょがん)レンズ状態(じょうたい)(なお)せるっていうことさ!u003c/pu003e

プレイヤー

スプライト「プレイヤー」を(ひら)こう。

変数(へんすう)「★DV」を(つく)

DVっていうのは、無理(むり)やり和訳(わやく)するなら方向性(ほうこうせい)とか。でもピンとこないからDVにしておいた。スクショだと★つけてないけど、この(あと)(なお)したので()けておいてね!
よぉし、ちょっと複雑(ふくざつ)演算(えんざん)()()から注意深(ちゅういぶか)くマネしてくれ。矢印(やじるし)(とお)りにはめていってね。
トゲトゲやユガミを補正してハイクオリティ3Dの一歩を踏み出そう(爆速オンライン3Dゲームの作り方 #05)を語るok-scratch ok-scratch

u003cpu003etanはタンジェントって()ばれてて、これは(ぎゃく)じゃなくて普通(ふつう)三角(さんかく)関数(かんすう)。これも高校(こうこう)数学(すうがく)かな。まぁブロックを使(つか)うだけだから数学(すうがく)苦手(にがて)(ひと)も、(なら)ってない(ひと)も、問題(もんだい)なし。u003c/pu003e

最終的(さいしゅうてき)に↓こんな演算(えんざん)()()
これを(さき)ほど(つく)った定義(ていぎ)「_レイキャスターを初期(しょき)()する」で、★DVの()としてセットするよ。

レイキャスター

スプライト「レイキャスター」を(ひら)こう。
さっき()いたばかりだけど、メッセージ「レイキャストする」を()()ったときに★カメラの角度(かくど)()けていたところは()そう。
さらに、定義(ていぎ)「_レイキャストする」で使(つか)っている2つの角度(かくど)()えるブロックを()そう。
(あたら)しく★DVを使(つか)って角度(かくど)計算(けいさん)をしていく。ここで登場(とうじょう)するのがatanアークタンジェントだ。大丈夫(だいじょうぶ)、atanの計算(けいさん)自体(じたい)はスクラッチがやってくれるから、(ぼく)らは(ただ)しい(しき)(つく)ることに集中(しゅうちゅう)しよう。↓これらのブロックを用意(ようい)して、矢印(やじるし)沿()ってブロックをはめていってほしい。
↓こういう演算(えんざん)ができるはずだ。
これをループの(なか)()きに()()てよう。

CHECK! 魚眼(ぎょがん)レンズ状態(じょうたい)(なお)ったかテストする

やったぜ!アークタンジェント(さま)魚眼(ぎょがん)レンズを(なお)してくれたぜ。めちゃめちゃすっきりしたよね。数学(すうがく)(ちから)ってスゲー!

u003cpu003eカメラのゆがみが(なお)ったu003c/pu003e

ズームアウトを実現(じつげん)する

定義(ていぎ)「_シングル・レイ」に()って。
変数(へんすう)(たか)さ」を設定(せってい)しているところを()つけて、ここの適当(てきとう)演算(えんざん)修正(しゅうせい)しよう。4,000っていう数字(すうじ)最初(さいしょ)適当(てきとう)設定(せってい)してあったよね。
この演算(えんざん)はいったん(はず)して、(あたら)しい演算(えんざん)(つく)っていくよ。↓この演算(えんざん)(つく)って。
これを(たか)さに()()てよう。

CHECK ズームアウトされるようになったかテストする

ちょっとショート動画(どうが)画素(がそ)(あら)いけど、わかるかな。4000のときと改善(かいぜん)した(とき)比較(ひかく)してる。
トゲトゲやユガミを補正してハイクオリティ3Dの一歩を踏み出そう(爆速オンライン3Dゲームの作り方 #05)を語るok-scratch ok-scratch

u003cpu003eこれでズームインもズームアウトも(ただ)しく描画(びょうが)されるようになった。たとえばスナイパーが(てき)(ねら)うときはズームインして視野(しや)(かく)(せま)くなる()わりに(とお)くまで()える、みたいな仕様(しよう)実装(じっそう)するときも安心(あんしん)して(つく)れるようになったというわけだ。最高(さいこう)!u003c/pu003e

u003cpu003eズームアウトしたら距離(きょり)(とお)くなる演出(えんしゅつ)実現(じつげん)できたu003c/pu003e

まとめ

今回(こんかい)()()(かん)する改善(かいぜん)ができた。ギザギザな3Dとはおさらばだぜ!って()っても、このあともっと改善(かいぜん)していくから、(いま)以上(いじょう)のもとを追求(ついきゅう)していこう。今回(こんかい)以下(いか)のことができるようになったぞ。
  • ()らばっていた()()(かん)する処理(しょり)を、プレイヤーを起点(きてん)にすることができた
  • トゲトゲになっていた(かべ)(なめ)らかにした
  • ズームすると(ゆが)んでいた角度(かくど)自然(しぜん)()えるよう補正(ほせい)できた
この処理(しょり)によってよくあるスクラッチのレイキャスティングとは一線(いっせん)(かく)すクオリティになった。おめでとう!って、あれあれ、まだスクラッチキャットが(すす)めずにいるぞ!次回(じかい)もチェックしてみよう。

グリフパッチさんの動画(どうが)参考(さんこう)にしています

今回(こんかい)のチュートリアルは世界(せかい)No.1スクラッチャーとして名高(なだか)いグリフパッチさんの動画(どうが)参考(さんこう)にしているよ。ただし手順(てじゅん)一部(いちぶ)()えているところもあるんだ。
ブクマよろしくお願いします! ブクマよろしくお願いします!
どんどん追記・更新していくので、ブックマークやシェアよろしくお願いします!

スクラッチプログラミングのゲーム攻略

スクラッチプログラミングのゲーム

    • 厳選されたスクラッチ人気作品リストがレビュー付きで楽しめます
      趣味に関するスクラッチ作品例
      勉強になるスクラッチ作品