ペむントをレベル゚ディタヌずしお䜿甚する

私のすべおの意識的なプログラミング掻動は、ゲヌムを䜜るのが奜きで、゚ディタヌや他のナヌティリティを䜜るのが奜きではありたせんでした。 私の䞻な線集者はほずんどい぀もペむントでした。 しかし、レベルが静的で、タむルマリオのようなタンクで構成されるゲヌムの堎合、これは倚かれ少なかれ正圓化されたす。 ペむントで䜜成されたレベルファむルの1ピクセルは、ゲヌムのタむルに察応したす。 しかし、タむルがなく、ゲヌムの堎所が䞍均䞀な岩の倚い掞窟で構成されるゲヌムを䜜成する堎合はどうでしょう。 たたは、倚くの可動芁玠フラむングプラットフォヌム、゚レベヌタ、円状に回転する䞞鋞があるゲヌム。



私はただそのような目的のために゚ディタを䜜成したくありたせんでした。 この蚘事では、これをペむントでどのように解決したかを説明したす。



これはゲヌムのデモンストレヌションや広告ではなく、ゲヌムで䜿甚される方法の説明なので、ゲヌムの名前ずリンクを提䟛したせん。



凹凞マップ


最初のゲヌムは、さたざたなゲヌムプレむでは茝きたせん。ゞェット゚ンゞンの助けを借りお移動する特定の朜氎艊でプレむし、岩や他の敵をかわしたす



電話で撮圱されたビデオの品質をおpoびしたす



ビデオは、堎所が地球觊れおはならない、背景、氎、回転するハリネズミ敵、およびこれらのハリネズミを攟出する゚ミッタヌで構成されるこずを瀺しおいたす。 はい、そこには魚ず藻がありたすが、それらはランダムに生成され、レベルファむルずは関係ありたせん。



ビデオのレベルは巊偎に衚瀺されたす4回増加



巊䞊隅に緑のピクセルが衚瀺されおいるため、開始䜍眮がマヌクされおいたす。この堎所を芚えおおく必芁がありたす。 それ以降のすべおの図はそれを瀺したす。



レベルファむルは3぀の局で構成されたす。



氎は地球ず亀差し、背景は地球ず氎ず亀差するため、3぀の局に分割されたす。 文字サむズは、マップファむル内のピクセルのサむズの半分です。



今のようにレンダリングしおタむル単䜍で衚瀺するず、堎所は巚倧な正方圢で構成されたす。 そしお、そのようなタむルの数は非垞に倚いこのカヌドでは61x69。 そのため、別のレンダリング方法タむル以倖が適甚され、1回の呌び出しでマップを衚瀺できたす実際には、3぀の別々の氎、背景、最終接着。 これは、レベル党䜓が1぀のテクスチャに配眮されおいるためです。これをtex_levelず呌びたしょう。 そしお、圌女はフルスクリヌンクワッドポリゎン、スクリヌンのサむズを匕っ匵りたす。 この前に、テクスチャ座暙は、キャラクタヌにアタッチされおいる仮想カメラに応じお蚭定されたす。



å·Š-これは、tex_levelテクスチャず仮想カメラカバレッゞの倖芳です。 右偎には、フルスクリヌンクワッドに割り圓おられたテクスチャ座暙がありたす。 tex_levelテクスチャの䞀郚が画面に圓たりたす。



たず、tex_levelテクスチャを準備する必芁がありたす。 これを行うには、このテクスチャのピクセルの配列を䜜成したす。

unsigned int pix[w*h];
      
      





ここで、wはレベルのあるファむルの幅、hは3で割った高さです3぀のレむダヌがあるため。



ルヌプでは、各レむダヌから゜ヌスマップのすべおのピクセルを読み取り、色タむルの皮類に応じお、ピクセルpix内の察応するカラヌチャンネルを埋めたす。぀たり、



 for(int i=0;i<w*h;i++) //    { int c=GetPixel(i%w,i/w); //   1-  if(c==RGB(0,0,0)) pix[i]=0xff; //   –   (R ) c=GetPixel(i%w,i/w+h); //   2-  if(c==RGB(0,0,255)) pix[i]|=0xff0000; //  –  (B ) c=GetPixel(i%w,i/w+h+h); //   3-  if(c==RGB(127,127,127)) pix[i]|=0xff00; //  –  (G ) }
      
      





技術的特城実際には、wずhは、マップの幅ず高さの最も近い䞊向きの2の环乗に等しく、欠萜しおいるピクセルは赀コヌドグラりンドされ、このサむクルは擬䌌コヌドず芋なすこずができたす。



配列内の同じピクセルに土地、氎、背景を含めるこずができるこずがわかりたす。 pix配列に基づいお、tex_levelテクスチャが䜜成されたす。pix配列自䜓は䟝然ずしお有甚です。



巊偎には完成したtex_levelテクスチャがあり、右偎にはゲヌム内にありたす。 カメラは開始䜍眮にありたす。



移動をより䟿利にするために、tex_levelからRチャネルのみを出力したす。 地球だけ。



最初に、これらの巚倧な正方圢を取り陀く必芁がありたす。 これを行うには、tex_levelテクスチャに転送する前に、ピクセル配列をGaussに埓っおりォッシュアりトする必芁がありたすがかし半埄は経隓的に遞択されたした。 これで、同じ堎所がより良く芋えたす



巊偎はがかし前の地面、右偎はがかし埌です。

技術的な詳现がかしの前に、元のピクセルが既にストレッチされた配列の2x2ピクセルを占めるように、pix配列を2回ストレッチする必芁がありたす。



しかし、ここでは地球の境界が非垞にがやけおいたす。 がやけた境界線を明確な境界線に倉えるプロセスを理解するためにこのプロセスを明確な境界線フィルタヌず呌びたしょう、1次元の堎合を考えたす。 圌は䌌おいたす。 するず、地球のがやけた境界線は次のようになりたす。







このグラフから0.5を匕き、いく぀かの倧きな数このプロゞェクトでは50を掛け、境界[0;に沿っお切り取りたすクランプ操䜜。 1]、぀たり 0未満のすべおが0になり、1を超えるすべおが1になりたす。



その結果、癜がすぐに黒に倉わるこずはありたせんこれは重芁です。



次に、これらすべおの操䜜をtex_levelテクスチャで行いたす。 このテクスチャからの遞択をlevel_colorに保存するず、フィルタヌは次のようになりたすclamp((level_color.r – 0.5) * 50.0, 0.0, 1.0)











はるかに優れおおり、よく芋るず、2぀の環境間のむンタヌフェヌスに゚むリアシングがないこずがわかりたす。 しかし、このような境界線は滑らかすぎお滑らかなので、少しノむズを远加したしょう。 これを行うために、 Perlinノむズを含むテクスチャが生成されたしたノむズパラメヌタは経隓的に遞択されたした。それをノむズず呌びたしょう。 ノむズテクスチャからサンプリングするためのテクスチャ座暙は、tex_levelのテクスチャ座暙よりも䜕倍も倧きいです。 これは、ゲヌムでtex_levelテクスチャの䞀郚のみを芋おいる間に、ノむズテクスチャが画面内で数回繰り返されるこずを意味したす。 ノむズテクスチャずtex_levelからサンプルを远加しおから、クリアボヌダヌフィルタヌを適甚したす。







tex_level + noiseの巊偎、右偎に明確な境界フィルタヌ。



技術的詳现ノむズテクスチャの倀の範囲は0〜1です。したがっお、noise-0.5* kをtex_levelサンプルに远加したす。ここで、kは境界摂動係数ですプロゞェクトでは0.3。



これで、テクスチャを匷制するだけになりたす。 地球のテクスチャは既に存圚したすこれは単なる普通のテクスチャですが、ただ氎がないため、最初に準備する必芁がありたす。



アルゎリズムは地面ずたったく同じですが、Rチャンネルからサンプリングする代わりに、Bチャンネルからサンプルを䜜成する必芁がありたす。 氎が含たれおいるのはそこです。 もう1぀の違いは、通垞のノむズの代わりに、アニメヌション化されたノむズ時間ずずもに滑らかに倉化するを䜿甚しお、氎ず空気の境界で波を䜜成するこずです。 アニメヌションノむズの䜜成は、この蚘事の範囲倖です。 この段階では、空のテクスチャを適甚し、氎の圹割は青い色実隓的に遞択によっお果たされたす。 氎の局を取埗するステップのすべおのステップを以䞋に瀺したす。







巊から右がやけた氎の境界線、アニメヌション化されたノむズずフィルタヌ、青から空のテクスチャぞの補間。



次のステップは、背景レンダリングです。 今回は、Gチャネルのtex_levelから遞択したす。 この段階で根本的に新しいものはありたせん。背景マスクを取埗し、前の段階の石のテクスチャこの堎合ず氎のテクスチャを補間したす。 もちろん、埮劙な点もありたす。背景の氎䞭郚分に远加のフィルタヌが重ねられたす。これは、氎自䜓が氎の厚さの圱響を䞎えるのず同じですが、これは蚘事の範囲倖です。 同じ段階で、魚や藻などの装食的な芁玠がレンダリングされたす。 最埌に、背景レむダヌは次のようになりたす。







技術的な詳现氎䞭の流れによる「藻の移動」の効果を䞎えるために、藻でスプラむトをレンダリングするずきにテクスチャ座暙のxコンポヌネントの倉䜍を䜿甚したした。 このオフセットの倧きさは、アニメヌション化されたノむズのある同じテクスチャからすべお読み取られたした。



そしお最埌のステップは接着です。 蚘事の冒頭でアヌスマスクを受け取ったので、それを䜿甚しお、アヌスのテクスチャず背景レむダヌを補間したす。 最終結果は次のようになりたす。

非衚瀺のテキスト






アむデアの開発。 地面に耇数のテクスチャを適甚したい堎合は、別のレむダヌを远加したす。このレむダヌでは、地球のピクセルが4぀の異なる色より少なく、しかしそれ以䞊ではないでペむントされたす。 このレむダヌから別のマスクテクスチャが䜜成されたすレむダヌの4色-マスクの4぀のカラヌチャネル。ただし、1぀マスクの1぀ず察応する4぀のグラりンドテクスチャではなく、远加の5぀のテクスチャサンプルを䜜成する必芁がありたす。



衝突怜知


タむルゲヌムで衝突が非垞に単玔に定矩されおいる堎合タむルの配列から遞択を行い、䞍可解なタむルにヒットするかどうかを確認したす。 それからここでそれはあたりにも倱瀌になりたす、なぜなら 芖芚的にはタむルはありたせんが、さたざたな角床の衚面がありたす。 ちなみに、アヌスコヌドはシステムコヌドでは䜿甚できたせんビデオカヌドの蚈算段階の1぀にすぎたせん。 しかし、Gaussによっおがやけたpix配列がありたす。 この配列の芁玠では、䞋䜍バむトのみが興味深いです。なぜなら、 ここが土地の保管堎所です。 芖芚的には、この配列は次のようになりたすカメラに該圓する配列のフラグメントのみが瀺されおいたす。実際、マップ党䜓が配列に含たれおいたす。







これは、 バむリニアフィルタリングがそこで䜿甚され、がかし埌の配列の生の倀のみが䜿甚されるため、がかした境界線のある画像ずは異なりたす。



この配列の倀は高さマップに䌌おいたす;地球の芖芚的な境界ずほが䞀臎する高さの倀を遞択できたす経隓的に遞択したす。 高さをより正確に決定するには、 双線圢補間を䜿甚する必芁がありたす。 たた、特定のポむントの近くで3぀の高さを蚈算するず、このポむントの募配を非垞に正確に決定でき、それは地球の芖芚面の法線ず䞀臎したす。 このゲヌムの法線は1か所でのみ䜿甚されたした-ゞェットで地球の衚面を曲がるために









ダむナミックマップ


したがっお、蚘事の冒頭で提起された最初の問題は解決されたした。タむルは芋えず、䞍均䞀な岩の倚い颚景のみです。 しかし、芁玠の移動はどうですか これは2番目のゲヌムを瀺したす- スヌパヌミヌトボヌむのアナログ



倚くの可動芁玠がありたす盎線で動くたたは䞭心の呚りを回転する䞞のこ、スパむクずのこぎりの動くプラットフォヌム、ドア、散乱タむル。 そしお、のこぎりはただサむズが異なりたす。



レンダリングプロセスは最初のゲヌムに完党に類䌌しおいるため、マップの圢匏の怜蚎に限定しおいたす。 ビデオの地図は次のようになりたす5倍に拡倧。



このマップは6぀のレむダヌで構成されおいたすゲヌムには5぀の異なるタむプのレむダヌがあり、すべおここに衚瀺されおいたす。 前のゲヌムずは異なり、ここでのレむダヌの数は任意です。 巊䞊隅にピクセルのセットがありたすレむダヌずたったく同じ数がありたす。 レむダヌのタむプを指定するだけですこれにより、レむダヌの順序ず数を気にする必芁がなくなりたす。 最初の2぀のレむダヌは明らかです。オブゞェクトレむダヌ-プレむダヌず盞互䜜甚する芁玠地面、スパむク、のこぎり、開始、終了、タむルの散乱および背景レむダヌ。 4番目のレむダヌは、最初のレむダヌず同様に、オブゞェクトのレむダヌです巊䞊隅の4番目のピクセルも黒です。 オブゞェクトが他のオブゞェクトず亀差するため、いく぀かのオブゞェクトをこのレむダヌに移動する必芁がありたした理論的には、同じレむダヌは任意の数になりたす。



技術的な特性 tex_levelテクスチャは地面ず背景にのみ配眮されこのゲヌムには氎はありたせん、他のすべおのオブゞェクトはレベルファむルから配列に読み蟌たれたす。



3番目のレむダヌを怜蚎しおください。 以䞋は、赀ず青のドアず察応するキヌです。 したがっお、ドアもオブゞェクトですが、オブゞェクトレむダヌに配眮するこずはできたせん。このレむダヌの赀ず青の色は、それぞれスパむクず回転の䞭心䞋に぀いおですでに占められおいるためです。 䞀般に、タむルのグルヌプはこのレむダヌでマヌクされたす。 同じグルヌプのタむルは同じ色で、すべお互いに隣接しおいたす。 グルヌプには2぀のタむプがありたす。



オブゞェクトのレむダヌこの堎合、4番目では、回転グルヌプの回転䞭心は青でマヌクされおいたすここでは、3぀目のレむダヌから実際に回転グルヌプに萜ちたのは1぀の䞭心のみであり、残りもレンダリングされるため、装食的な芁玠の圹割を果たしたす。 回転グルヌプにはただ2぀ののこぎりがありたした第4局の黄色。 それらは回転䞭心の呚りを回転したす。



5番目のレむダヌは、鋞の寞法を赀のグラデヌションで瀺したす。 のこぎりにこのレむダヌからの赀いピクセルがない堎合、デフォルトでそのサむズが䜿甚されたす。 たた、6番目のレむダヌには、灰色のグラデヌションでグルヌプを移動するための軌跡ず速床、および鋞を回転させるための速床ず方向がありたす。 䞀郚のレむダヌには、このレむダヌに関係のない䜙分な色がありたす。マップを読み蟌むずき、それらは単に無芖されたすたずえば、ほずんどすべおのレむダヌは地球の黒いピクセルを持ち、それらに関連しおナビゲヌトするマップを䜜成するずきにのみ必芁でした。



アむデアの開発。 理論的には、ペむントを䜿甚しお3Dシュヌティングゲヌムのマップを䜜成できたす。マップファむルはレむダヌのマトリックスで構成されたす。 このマトリックスの行はゲヌム内のレむダヌの高さに察応し、列には同じタむプのレむダヌが含たれたす。 たずえば、1列目にはマップゞオメトリ1぀のレむダヌは特定の高さのマップのセクションがあり、2列目にはパむントのキヌカラヌを䜿甚しおテクスチャを割り圓おるこずができたす。



おそらくそれだけです。 「ペむントのマップ゚ディタヌ」ずいうトピックが明らかになるこずを願っおいたす。



All Articles