sfc-sdp / GameCanvas-Unity

慶應義塾大学『スマートデバイスプログラミング』教材 GameCanvas for Unity
http://web.sfc.keio.ac.jp/~wadari/sdp/
MIT License
46 stars 19 forks source link

GC5 で追加する機能の列挙 #107

Closed seibe closed 4 years ago

seibe commented 5 years ago

GameCanvas v4.0 で追加する機能を列挙する

seibe commented 5 years ago

大目標として、TX乗り換え路線図を描けるくらいの表現力が欲しい。

TX

seibe commented 5 years ago

となると……

必ず必要

あると捗る

seibe commented 5 years ago

ちなみに Processing の描画APIはこんな感じ。

Shape 
createShape()
loadShape()
PShape

2D Primitives
arc()
circle()
ellipse()
line()
point()
quad()
rect()
square()
triangle()

Curves
bezier()
bezierDetail()
bezierPoint()
bezierTangent()
curve()
curveDetail()
curvePoint()
curveTangent()
curveTightness()

3D Primitives
box()
sphere()
sphereDetail()

Attributes
ellipseMode()
rectMode()
strokeCap()
strokeJoin()
strokeWeight()

Vertex
beginContour()
beginShape()
bezierVertex()
curveVertex()
endContour()
endShape()
quadraticVertex()
vertex()

Loading & Displaying
shape()
shapeMode()
seibe commented 5 years ago

方法1

Processing とほぼ同じ手法で実装する。具体的には java.awt.geom.GeneralPath に相当するものを用意し、各描画命令内部でそれを使う。 問題は、描画命令の発行回数が多くなりがちという点。動的バッチングを実装すれば緩和できるが、仕組みは複雑になる。

方法2

プリミティブそれぞれに専用の仕組みを用意して描画する。線分/ベジエ/多角形のみ GeneralPath 相当の仕組みで描画する。 これであれば Instancing により発行回数を比較的抑えられる。ただし仕組みは複雑になる。

seibe commented 5 years ago

ComputeShader が使えれば良かったんだけど、昨年10月時点で GL ES 3.1 以降のシェアは 40%台 だったので、このタイミングで採用するのは随分アグレッシブ。

seibe commented 5 years ago

まずは汎用パス描画の仕組みを作る。で