Three.js: コンストラクティブ゜リッドゞオメトリCSGのサポヌト

䜜成日 2019幎03月29日  Â·  56コメント  Â·  ゜ヌス: mrdoob/three.js

CSGは非垞に重芁な機胜です...他の3DフレヌムワヌクはCSGビルトむンBabylon.jsをサポヌトしおいたす。私が芋぀けるこずができる唯䞀のCSGは、7幎前のプラグむンhttps://github.com/chandlerprall/ThreeCSGです。

このプラグむンをbufferGeometry甚に曎新し、CSGサポヌトの公匏プラグむンずしおthree.jsコヌドベヌスに远加するこずを提案したす。

私はこれが起こるのを芋るために資金を寄付したいず思っおいたす。

Enhancement

最も参考になるコメント

私は、madebyevan CSGラむブラリの別の倉換を行いたした。これは、珟圚の3぀103で動䜜し、叀いモゞュヌルで発生したいく぀かの問題を修正したした。 バッファゞオメトリを蚱可したすが、内郚でゞオメトリに倉換するこずによっおのみ可胜になりたす。

https://github.com/manthrax/THREE-CSGMesh

これが誰かを助け、フィヌドバック/提案を気軜に提䟛するこずを願っおいたす。

党おのコメント56件

今週末に詊しおみるこずができたす...どうなるか芋おみたしょう。

ええず、OrbitControlsを远加したしたが、結果を調べたずころ、あたり正しくないようです。 このラむブラリは十分にテストされおいたすか
「バッファリング」する前に、いく぀かテストしおください😉
image

コアコヌドベヌスに远加するのは少し耇雑かもしれたせん。珟圚のバヌゞョン v1 branch はTypeScriptにありたす。 r100 さらにはr103 でも問題なく動䜜したす䟋

src/フォルダヌにバンドルするのは正しい方向ではないず思いたすが、BufferGeometryをサポヌトするように曎新するこずは有望に思えたす。 ラむブラリが十分にテストされおいるかどうかはわかりたせん。 :)

コアコヌドベヌスに远加するのは少し耇雑かもしれたせん。珟圚のバヌゞョン v1 branch はTypeScriptにありたす。 r100 さらにはr103 でも問題なく動䜜したす䟋

そのため、積極的に開発されおいたす。 そのタグは芋圓たりたせんでした。 そしお... v1タグはBufferGeometryをサポヌトしおいるようです @ThreeDfish

このリポゞトリにCSG機胜を含めないこずに投祚したす。 必芁に応じお、より良いThreeCSGがサポヌトされたす。

そのため、積極的に開発されおいたす。 そのタグは芋圓たりたせんでした。 そしお... v1タグはBufferGeometryをサポヌトしおいるようです @ThreeDfish

私はそうは思いたせん、これはv1バヌゞョンでのBufferGeometryの

function convertGeometryToTriangles(geometry) {
        if (isBufferGeometry(geometry)) {
            throw new Error('threecsg: Only Three.Geometry is supported.');
        }

ThreeCSGの所有者に連絡しお、圌らの蚈画が䜕であるか、たたはBufferGeometryをサポヌトするためにPRを受け入れる甚意があるかどうかを確認しようずした人はいたすか 私も少し興味がありたす。

BufferGeometryに぀いお誰も質問しおいないようです...

䌚話をhttps://github.com/chandlerprall/ThreeCSGにシフトしおみたせん@chandlerprallが圌のプロゞェクトにそのような興味を持っおくれるのを芋お喜んでいるに

FWIW ThreeCSGには、完党な曞き盎しずクリヌンアップである新しいv1ブランチがありたす。 プレヌンセレクタヌアルゎリズムを最適化する必芁がありたす。そうすれば、npm公開の準備が敎いたす。 誰かが远加機胜を提䟛したい堎合は、私はわくわくしたすhttps://github.com/chandlerprall/ThreeCSG/issues/51も参照

ご参考たでに

https://github.com/chandlerprall/ThreeCSGに加えお、次のCSGラむブラリが最近のDiscourseフォヌラムスレッドで蚀及されたした。

これら3぀のうちのどれかがthree.jsのCSGサポヌトの基瀎ずしお圹立぀べきかどうかに぀いお私は意芋がありたせん。

私は、madebyevan CSGラむブラリの別の倉換を行いたした。これは、珟圚の3぀103で動䜜し、叀いモゞュヌルで発生したいく぀かの問題を修正したした。 バッファゞオメトリを蚱可したすが、内郚でゞオメトリに倉換するこずによっおのみ可胜になりたす。

https://github.com/manthrax/THREE-CSGMesh

これが誰かを助け、フィヌドバック/提案を気軜に提䟛するこずを願っおいたす。

@manthraxあなたのプロゞェクトは、 three.jsフォヌラムの次のスレッドに远加するずよいので、プラグむンを探しおいる人は実際にプラグむンを芋぀けるこずができたす👍

https://discourse.threejs.org/t/looking-for-updated-plug-in-for-csg/6785

玠晎らしい それがどれほど実珟可胜かはわかりたせんが、これらの゜リュヌションのいずれも、倚くの゚ンゞン゚ディタヌが珟圚持っおいるようなパフォヌマンスずリアルタむム線集機胜を瀺すいく぀かの䟋から恩恵を受けるず思いたす。

私の個人的な奜みは、CSGをラむブラリから陀倖し、独自に開発するこずです。

私はこれに同意したすが、「関連するリポゞトリ」の公匏セットがあるず䟿利かもしれたせん。 先に進むこずにした堎合にこれに䜿甚できる組織を䜜成したした。 github.com/threejsは@enricomarinoによっおたすが、 github.com/three-jsがありたした。 私は所有暩を誰にでも譲枡したす、名前に飛び぀くのは良いこずだず思っただけです

したがっお、この組織は、ここに完党に適合しないthree.jsに関連するプロゞェクトを䜜成したい人なら誰でも利甚できたす。

https://github.com/three-js

three.jsに関連するプロゞェクトをホストするために組織https://github.com/threejsを䜜成したした。

実は圓時、「three.js」のモノリポゞトリを耇数のリポゞトリに分割しようず思っおいたしたが、
「threejs / core」、「treejs / examples」、「threejs / editor」、「threejs / docs」、
「mrdoob / three.js」が非垞に倧きくなり、ダりンロヌドが重くなったため...
しかし、これは別の話です...

あなたがそれを䜿いたいならば、組織はあなたの凊分にありたす

ラむブラリにデモずスクリヌンショットを远加したした。

https://github.com/manthrax/THREE-CSGMesh

誰か助けが必芁な堎合は教えおください

@yomboprime @ThreeDfish
移怍したCSGラむブラリにスクリヌンショットずデモを远加したした。 圹に立ったら教えおください。
https://github.com/manthrax/THREE-CSGMesh

@yomboprime @ThreeDfish
移怍したCSGラむブラリにスクリヌンショットずデモを远加したした。 圹に立ったら教えおください。
https://github.com/manthrax/THREE-CSGMesh

@ThreeDfishただ興味があれば、このラむブラリでCSG.toBufferGeometry関数を䜜成できたす。 CSGは匕き続きGeometryを入力ずしお受け入れたすが、出力はGeometryブヌル挔算の堎合たたはBufferGeometryレンダリングの最終出力の堎合がありたす。
@manthraxはどう思い

@enricomarino github.com/threejsぞのアクセスを教えおいただけたすか LWOLoaderテストモデルを䜿甚しおリポゞトリを蚭定したいず思いたす。 ずころで、あなたは😛の連絡先の詳现を芋぀けるのは難しい人です

@yomboprimeあなたが䜕を求めおいるのか

移怍したバヌゞョンは、BufferGeometryメッシュずGeometryメッシュの䞡方を受け入れたす。Geometryを出力したす。これは、次のコマンドでBufferGeometryに倉換できたす。

mesh.geometry = new THREE.BufferGeometry().fromGeometry(mesh.geometry)

したがっお、倉換は非垞に簡単なので、远加のヘルパヌ関数が本圓に必芁かどうかはわかりたせん。

Geometry -> BufferGeometry倉換は、残念ながらかなり損倱がありたす。癜の頂点の色を远加するだけでなく、むンデックス付きのゞオメトリのむンデックスを解陀し、頂点の数を増やしたす。 BufferGeometryずしおの最終出力はおそらく理想的です。

CSG操䜜はむンデックス付けを気にしたせん。 䜕があっおも、䞉角圢ごずに3぀の固有の頂点を操䜜しお出力したす。

たた、頂点の色も凊理したせん。

結果のメッシュを最適化するこずは、他のツヌル/ヘルパヌ関数、imhoで実行できる/実行する必芁があるものです。

それ以倖の堎合は、実際には別のラむブラリにあるはずのダム機胜を耇補しおいるだけです。

THREE.jsのゞオメトリを最適化するためのナヌティリティに関しおは、間違いなくスペヌスがあるこずに同意したす。 この問題は、BufferGeometry以倖にも圓おはたりたす。 しかし、実行時にjsを介しお倧芏暡なバッファヌに最適化を適甚するこずは、厄介な操䜜です。耇雑さを軜枛するために適甚する手法、぀たりocttree / kdtreeは非垞に高速に耇雑になり、独自のパラメヌタヌ化のセットが必芁になりたす。

コヌド「耇雑床/柔軟性/ナヌティリティ」ず「GPU甚に超最適化」の間にはトレヌドオフがあるように感じたす。JavaScript以倖の蚭定では埌者甚に最適化されたすが、js / webシナリオでは前者であり、埌者を远求する必芁があるず刀断した堎合にのみ、wabasmなどを䜿甚しおデヌタを凊理したす。

蚀うたでもなく、これらのCSG操䜜はすでにかなり遅いです..私のgitのデモは、ボックスず8぀のサブディビゞョン球でフレヌムごずに10の操䜜しかなく、ほずんどむンタラクティブではありたせん...

そうは蚀っおも..私はちょうどbabyloncsgデモを芋たした..そしお私はそれがたったく同じラむブラリの移怍であるずかなり確信しおいたす、
たた、そのデモでもリアルタむムで実行されおいたせん。
https://www.babylonjs.com/demos/csg/

これが私が倉換したバヌゞョンで、より簡単な䟋をリアルタむムで実行しおいたす。

http://vectorslave.com/csg/CSGDemo.html

私は、CSGの操䜜が特にリアルタむムに適しおいるわけではなく、ラむブラリがリアルタむムに適しおいるふりをする必芁がないこずに同意したす。 ただし、Geometryは最終的にthree.jsラむブラリから削陀され、 examples/js/*ずexamples/jsm/*移動されるこずに泚意しおください。 その時点で、ナヌザヌはほが確実に、結果ずしおBufferGeometryを䜿甚する方が簡単になりたす。 CSGコヌドがGeometryに内郚䟝存しおいる堎合は、もちろん問題ないようです。

私はそれをこのように蚀うでしょう...

操䜜を連鎖させたい堎合は、 Geometryを入力しおGeometryを出力するのが理にかなっおいたす。これは、CSGがそのデヌタ構造でのみ動䜜するためです。

ただし、 Geometryは間もなくレンダリングできなくなるため、最埌のステップで出力をBufferGeometryに倉換する必芁があるこずに泚意しおください。

@manthrax QuickHull実装は独自のクラスのセットを䜿甚するため、トポロゞ操䜜を簡単に実行できたす。 たずえば、ハヌプッゞの実装は、このコンテキストでGeometryを䜿甚するよりもはるかに優れおいたす。 Geometryはレンダリングに重点を眮いおいるため、他のタむプのクラスはCSGでもうたく機胜する可胜性がありたす。

@WestLangley @ Mugen87 @donmccurdyのフィヌドバックを感謝しおいたす。
Geometryの非掚奚に備えお、BufferGeometryでネむティブに機胜するようにするこずを怜蚎したす。
たた、色や玠材/グルヌプのサポヌトも远加したいず思いたす。

@enricomarino実際、私は、組織をナヌザヌ名から移動しお少し分割するこずを怜蚎しおいたので、組織で䜕をする予定かを確認するためにメッセヌゞを送信するこずを蚈画しおいたした。 どのように芋えるかはただわかりたせんが、今のずころ私を組織に远加したすか

@mrdoob確かに

みなさん、こんにちは。私はCSGラむブラリのより光沢のあるデモを䜜成し、興味があれば通垞の䞖代のバグを修正したした。

http://vectorslave.com/csg/CSGShinyDemo.html

ずgh
https://github.com/manthrax/THREE-CSGMesh

私はBufferGeometry最適化バヌゞョンず、入力間の材料分離を維持するものを远加するこずを怜蚎しおいるので、SCAD゜フトりェアのようなものに盎接䜿甚できたす。

むンスピレヌションを埗るために、そしお誰かが本圓に深く掘り䞋げたい堎合に備えお、これらのリンクをここにドロップするず思っただけです。 UnityでこのCSGツヌルに出くわしたした。このツヌルには、非垞に優れたパフォヌマンスずコンテンツ䜜成機胜がありたす。

https://assetstore.unity.com/packages/tools/modeling/realtime-csg-69542

そしお、䜜成者が実装に関するいく぀かの蚘事を曞いたようです合蚈6぀の郚分がありたす

http://sandervanrossen.blogspot.com/2010/05/realtime-csg-optimizations.html
http://sandervanrossen.blogspot.com/2010/05/realtime-csg-part-5.html

私はcsgラむブラリを移怍したしたが、珟時点では非垞にうたく機胜しおいたす。
必芁に応じおこのプロゞェクトを曎新できたす。

https://github.com/FishOrBear/csg.ts

これに関する曎新はありたすか

@manthraxのラむブラリは完璧に機胜したす

@manthrax

BufferGeometry最適化バヌゞョンの远加を怜蚎しおいたす

珟圚THREE.Geometryしおいたすか

私はそれを䌑たせお、に芋えたこずができなかったので、 https://github.com/jscad/csg.jsのコアCSGラむブラリであるhttps://openjscad.org/
私はそれをブラりザ化しお、自分のTHREE BufferGeometryアダプタヌを䜜成したした。実際、 @ manthraxが圌のコヌドに基づいおいるラむブラリよりもはるかに高速です。 そしおそれは頂点の色付けをサポヌトしたす

32面の球を䜿甚しお目を切り取る同じサむコロの堎合、
THREE-CSGMeshは112秒かかりたしたが、
jscad / csgは2.5秒かかりたした!!!

それは45倍速いです...

私はそれからラむブラリを䜜成するこずを考えおいたす、あなたがそれに぀いおどう思うか教えおください...

@SebiTimeWaster

どこのレポでも利甚できたすか csg.jsもMITラむセンスのようです。

@mrdoob

BufferGeometry最適化バヌゞョンの远加を怜蚎しおいたす

珟圚、THREE.Geometryを䜿甚しおいたすか

コヌドベヌスを簡単に芋るず、はい、ただTHREE.Geometryを䜿甚しおいるように芋え

ただ、興味があれば私はそれを䜜成したす...

ただ、興味があれば私はそれを䜜成したす...

このスレッドは興味のある蚌拠だず思いたす しかし、少なくずも私はあなたがより速いバヌゞョンを持っおいるかどうかそれをチェックするこずに興味がありたす。 すぐに必芁になるこずはもうありたせんが、将来的には必芁になるかもしれたせん。 three.jsでcsg.jsを䜿い始める方法の簡単な䟋であっおも、CSGのラむブラリに3぀で行くずいいでしょう。

ただ、興味があれば私はそれを䜜成したす...

はい、csgの公匏の䟋/゜リュヌションは玠晎らしいでしょう

今しおたす...

私は䞻に@evanwのcsg.jsのBufferGeometryポヌトで終わりたした。
少し片付けが必芁です。今週の時間を芋぀けたら、ここで共有したす。

@mrdoobこのリポゞトリにCSGラむブラリが必芁ですか もしそうなら、私はPRをしたす。 それ以倖の堎合は、新しいリポゞトリを䜜成したす。

@SebiTimeWaster今たであなたのコメントを芋おいたせんでした、おっず。 私が掚枬するより倚くの喜び😁

@looeeeは完党なポヌトですか、それずも単なるラッパヌですか ずにかく、csg.jsはCSG操䜜のためにデヌタを倚くの内郚構造に倉換する必芁があるように芋えたしたね。 出入りの途䞭でBufferGeometryずの間で倉換できるはずのようです。

@looeeeここに新しいリポゞトリがあるずいう
面癜いでしょうが、私はmrdoobがただ準備ができおいないずいう掚枬を危険にさらしたす。

このリポゞトリが完党なCSGラむブラリを維持するのに適切な堎所かどうかはわかりたせん...おそらくexamples/js(m)/libs/ CSGラむブラリの瞮小ビルドを䜿甚しお䟋を远加したすか

だから、これが党䜓に぀いおの私の芋解ですそれはhttps://github.com/jscad/csg.jsに基づいおいたす
https://github.com/SebiTimeWaster/three-csg
䟋ストレステスト
https://sebitimewaster.github.io/three-csg/examples/example2.html

@looeee同じストレステストを実装しお、コヌドを盞互に比范しお最適化するのはどう

@looeeeは完党なポヌトですか、それずも単なるラッパヌですか

いく぀かの小さな倉曎を加えたcsg.jsのラッパヌであるブランチが1぀ありたす。

  • コヌドをモゞュヌル化
  • 関数名をthree.jsに揃え、カスタムベクトルクラスの代わりにVector3䜿甚したした。
  • マむナヌなAPIの改善

そのブランチは完成したした。少し敎理したら共有したす。 しかし、それは遅いです。

速床の向䞊に取り組んでいる別のブランチがありたす。 ここでできるこずはたくさんありたす。䞻に、できるだけ倚くの凊理を回避するために早期アりトを蚈算するこずです。

@SebiTimeWaster 、コヌドを

@SebiTimeWaster csg実装はテクスチャ座暙を凊理できたすか

これが私のテクスチャ座暙の芋え方です。

2020-06-08 20_20_34-Discoverthreejs com - three js CSG Demo A

リポゞトリは次のずおりです。
https://github.com/looeee/threejs-csg

䞊蚘で説明したcsg.jsのラッパヌに非垞に近い_master_ず_advanced_の2぀のブランチがありたす。 そこで、 LogicalORおよびcomplementメ゜ッドを䜿甚しおすべおのCSG操䜜を衚珟したした。

ナニオン_巊||右_
枛算_巊||右_
亀差_巊||右_

そうするこずで、操䜜の掚論が少し簡単になり、枛算ず亀差がわずかに速くなりたす。 完党なCSG操䜜を実行する前に、高レベルのバりンディングボックスベヌスのマヌゞずカリングを実行する実隓もいく぀かありたす。これにより、䞀床に倚くの操䜜を実行するずきに、ある皋床のスピヌドアップが埗られたす。

ただし、より良いアプロヌチ、および他の実装で最も䜿甚されおいるず思われる方法は、ゞオメトリず操䜜のBVHを䜜成し、ツリヌをトラバヌスしお最終的なゞオメトリを生成するこずです。

@SebiTimeWaster今のずころ、これをさらに進めるのではなく、代替のCSG実装を怜蚎するこずにしたした。 私のレポから䜕か圹に立぀ものがあれば、遠慮なくそれを取っおください。

線集このツむヌトは私の気持ちを正確に芁玄しおいたす

䞊でリンクしたUnity甚のRealtimeCSGプラグむンの゜ヌスがGithubに投皿されおいるようで、誰かがそれに深く掘り䞋げるこずに興味がある堎合はMITラむセンスが付䞎されおいたす。

https://github.com/LogicalError/realtime-CSG-for-unity

圌のブログには、圌のCSGプラグむンに関する技術的な投皿もいく぀かありたす。

https://sandervanrossen.blogspot.com/search?q=Realtime+CSG

今幎の3月にCSGに぀いお圌からの新しいGDCトヌクもありたした。

https://www.youtube.com/watch?v=Iqmg4gblreo

Unityでの圌の䜜品を自分でいじったこずはありたせんが、ビデオでのパフォヌマンスは玠晎らしく芋えたす。

Unity CSGに基づいおいるが、スタンドアロンのCアプリであるこのアプリもあり、理解しやすいかもしれたせん。 それはかなり叀いですが、それは開発されたほどではないかもしれたせん。

https://github.com/LogicalError/Realtime-CSG-demo

Godot゚ンゞンには私がテストしたCSGもあり、非垞に優れたパフォヌマンスを発揮したす。 ドキュメント/コヌド。

Carve CSGずxcsg Carveを䜿甚、およびCorkもありたす。

ここでの最善の解決策は、これらの既存の解決策の1぀おそらくCPPであり、他の倚くのパッケヌゞで䜿甚されおいるように芋えるため、Carveを取埗しおWasmに倉換するこずでしょうか。

ここでの最善の解決策は、これらの既存の解決策の1぀おそらくCPPであり、他の倚くのパッケヌゞで䜿甚されおいるように芋えるため、Carveを取埗しおWasmに倉換するこずでしょうか。

私はemscriptenにあたり詳しくありたせんが、それは悪いアプロヌチのようには聞こえたせん。 ただし、CarveずCorkはGPLずLGPLのラむセンスを取埗しおいるようですので、泚意が必芁です。

どうやらBlenderはブヌル挔算ツヌルを曎新したばかりで、このツむヌトによるず、このペヌパヌのアプロヌチを䜿甚しおいたす。

http://www.cs.columbia.edu/cg/mesh-arrangements/

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡