Rust(wgpu)でNURBS曲面を描画できるようになるまで

4
白山風露 @kazatsuyu

そして二重点に重なるようにするとこう pic.twitter.com/jMmVUqZvOG

2023-12-21 21:45:57
拡大
白山風露 @kazatsuyu

これはこれで浮き輪みたいな質感があって面白いのだがそれはそれとしておかしいのはおかしいので直さねばならぬ……

2023-12-21 21:49:55
白山風露 @kazatsuyu

浜辺ステージの背景にありそう pic.twitter.com/IYBZAY5l01

2023-12-21 21:51:54
拡大
Y​S​R @YSRKEN

@kazatsuyu どう見ても子供用の浮き輪です、本当にありがとうございました

2023-12-21 21:55:34
白山風露 @kazatsuyu

@YSRKEN トーラスにしたのも計算がなんかおかしいのも一応色を変えれるようにしたのも背景がこんな色なのも全部関係ないのに合わさったらこうなって笑ってる

2023-12-21 22:01:06
白山風露 @kazatsuyu

気づいたんだけど、NURBSの二重点ってそこで鋭角になる可能性がある訳じゃん。そしたら微分不可能な訳じゃん。円はうまく二重点が滑らかになるようなパラメーターを与えてるけど、特別扱いしないといけないのでは?

2023-12-21 23:32:06
白山風露 @kazatsuyu

長いバグ取りだった……

2023-12-22 23:24:07
白山風露 @kazatsuyu

今まで何がいけなかったかと言うと、実部が0の項に非実部が残り続けていたことだった。0.0だとおかしくてf64::MIN_POSITIVEだと問題ないみたいなケースの結果の差分を見ながら大きく差ができている項を絞り込んで非実部の値が0になっているべきところを消したら直った

2023-12-22 23:40:59
白山風露 @kazatsuyu

続いてこの「球を作ったら極がなんか変」問題を解決する必要が生まれた pic.twitter.com/qAiHaMKKdE

2023-12-22 23:52:18
拡大
白山風露 @kazatsuyu

いやまあ、これはなんとなく予想していた問題だけど。ポリゴンの頂点がここに集中して、場合によっては面積ゼロのポリゴンができてしまう分割アルゴリズムになってるので

2023-12-22 23:53:23
白山風露 @kazatsuyu

極で法線が変になるのは、わかる・・・ スゲーよくわかる。極は特殊な点からな・・・。だが、極の周りの三角形が全部真っ黒なのはどういうことだああ~~~っ!?ナメやがってこのポリゴン、超イラつくぜェ~~~ッ!!極以外の計算もおかしいってことじゃねーか!チクショーーッ!どういう事だ! pic.twitter.com/UVASuFzxYE

2023-12-23 13:00:23
拡大
白山風露 @kazatsuyu

冷静になったギアッチョ「極の法線の全成分がゼロの場合・・・、normalizeしたらゼロ除算が発生するからNaNになっちまう・・・。頂点情報の一つでもNaNがあると、フラグメントシェーダーに渡される値もNaNになって、レンダリング結果の色は黒になっちまうじゃねーか!チクショーーッ!」

2023-12-23 13:10:16

極の問題は計算式の修正ではなく、隣り合う制御点が重なっているような条件の時、それ以外の隣の制御点の座標との差がちょうど接平面上のベクトルであることからそれを使って法線を出すようにしたのでした