ローグライクの有望な影を探しています





親愛なるKhabrovchans、2Dベーグルに適した影を見つけるというトピックに関する研究の継続に注目します。



この投稿は、 出版物の続編であり、エラーやアイデアのさらなる発展に関する一種の研究です。



彼らのコメントで、尊敬された批評家は、閉じた空間では影が角張っていて、やや不自然であることが判明したことを正しく指摘しました。 いくつかの解決策が提案されましたが、 レイキャストを使用して影を計算する提案が気に入りました。







私は明確にし、ビデオカードでは動作しません(まだ動作していません)。すべての結果はCPU上でモデル化されます。



この作品では、レイキャスティングは、観測者からの光線を障害物(スクリーンの境界)と交差し、衝突の場所を強調するまで宇宙に投げ込むことにより、画像を構築する方法として理解されています。



ここでは、タイルとレイの交差に基づく簡易バージョンのレーキキャスティングを使用します。 この方法は、過去の擬似3次元ゲーム(たとえば、被験者にいる人に関するWolfenstein_3Dなど)で広く使用されており、2次元空間に適応しています。







アルゴリズムは、理解と実施の両方にとって十分に単純です。 私は自分の実装をもたらします:



パスカル
// i,j -  ,  -  // X,Y -    // r -     //   if cos(a)<0 then begin di :=-1; ddi:= 0; end else begin di := 1; ddi:= 1; end; if sin(a)<0 then begin dj :=-1; ddj:= 0; end else begin dj := 1; ddj:= 1; end; //        Y x1 := (i+ddi) * tile_size; y1 := y+ (x1-x) * tan(a); Dx := len(x,y,x1,y1); y1 := (j+ddj) * tile_size; x1 := x+ (y1-y) * cotan(a); Dy := len(x,y,x1,y1); sum_lenX := 0; sum_lenY := 0; //    X  Y   a rX := abs(tile_size / cos(a)); rY := abs(tile_size / sin(a)); //    repeat if sum_lenX+DX < sum_lenY+DY then begin x1 := (i+ddi) * tile_size; y1 := y+ (x1-x) * tan(a); i := i+di; //         key := is_wall(i,j); sum_lenX := sum_lenX + DX; if DX<>rX then DX:=rX; //       if r<sum_lenX then Break; end else begin y1 := (j+ddj) * tile_size; x1 := x+ (y1-y) * cotan(a); j := j+dj; //         key := is_wall(i,j); sum_lenY := sum_lenY + DY; if DY<>rY then DY:=rY; //       if r<sum_lenY then Break; end; until (      ); // x1,y1  
      
      





ビームは各軸のセルを同じ距離で横切るため、計算を節約し、タイル内に壁があるかどうかのみを確認できます。 障害物との交差点が必要であり、その座標を記憶します。



私の実装では、すべての三角法と除算を角度ごとに別々のテーブルに取り出し、アルゴリズムを大幅に加速しました。



目的のステップですべての方向に光線を発射すると、おおよそ次の図が得られます。







光線の数を数千に増やすと、スコープの目的の多面体が得られます。 もちろん、3Dアクセラレータのように、画像の各ピクセルに光線を投射することは可能ですが、ここではビデオカードなしではできません。







レイヤーのさらなる作業が始まります。



範囲 これ以降、光線はオブジェクトの深さを少し通過します。 このようなゲームの慣習は、2Dゲームに特有のユニークな環境を作り出します。







照明マップの生成。 事前に静的光源を生成し、パフォーマンスを向上させるためにキャッシュします。画面に表示するプロセスで動的光源を適用します。







すべてをまとめる。 不足しているのは、ひどいモンスターと宝物...多くの宝物です。







光の透過の曲率が変化する壁は私には行きませんでしたが、多分それはアマチュアです。







プロトタイプを作成する過程で、モデルの多くのバリエーションを試しましたが、そのうちのいくつかはホラーに適しています:







私は特に壁からの光線の多重反射の効果が好きでしたが、その素朴な実装でさえ非常に遅いので、私はビデオカードと友達になったときに将来のためにそれを残しました。



ご清聴ありがとうございました。



再生するリンク (Windows用のEXE)



パート1パート3



All Articles