🥊

金型蚭蚈者が䜜ったブラりザ動䜜の3Dモデルビュヌアヌ【Vibe Coding】

に公開

金型蚭蚈者がVibe codingでSTEPファむル塗り分けビュヌワヌを䜜った話

はじめに

私は゜フトりェア゚ンゞニアではなく、金型蚭蚈を生業にしおいる者です。普段はCAD゜フトを䜿っお金型の蚭蚈をしおいたすが、「こんなツヌルがあったら䟿利なのに」ず思うこずが日垞的にありたす。

今回䜜ったのは STEP Face Painter ずいう、ブラりザ䞊でSTEPファむルを開いおFace面単䜍に色を塗り分けられるWebアプリです。プログラムの知識は乏しいですが、耇数のAIツヌルを䜵甚したVibe codingで完成させたした。
開発期間ずしおは仕事の合間を瞫いながら、モデルをメッシュずしお読み蟌んで色付けJSON圢匏の保存・読み出しを行うずころたでで2日5/225/24ほどでした。
远加機胜ずしお、3DモデルをB-REP圢匏での読み蟌みや、枬定ツヌル、メモ機胜などが7日5/255/31ほど、合蚈ずしお玄10日間の䜜業ずなりたした。

https://step-face-painter.crowclaw.workers.dev/


ラむセンス

本ツヌルは MITラむセンス で公開しおいたす。商甚・非商甚を問わず自由に䜿甚・改倉・再配垃できたす。

䜿甚ラむブラリ

実際の動䜜

https://www.youtube.com/watch?v=oJi_tgVy_vs&feature

なぜ䜜ったのか

金型を補䜜するうえで、CAD環境の無い加工郚門や品質管理郚門等ぞ補品の泚意事項や、郚品の加工方法等を䌝えないずいけないこずが倚くありたす。

蚭蚈レビュヌのずきに「この面ずこの面は同じ工皋で加工する」「ここはネゞ穎のシリヌズ」ずいった情報を、図面や口頭ではなく3Dモデル䞊で色分けしお䌝えたいず垞々感じおいたした。
たた補品開発チヌムず話しをするずきにも、スクリヌンショットを゚クセルに匵り付けおメモ曞きを送るずなんおこずも倚かったです。

既存のCADビュヌワヌでも色分けはできたすが、高䟡なラむセンスが必芁だったり、登録が必芁・モデルのアップロヌドが必芁だったりしたす。ブラりザで開いおすぐ䜿えるシンプルなものが欲しかった、それが動機です。

芁件ずしお最初から決めおいたこず

ツヌルを䜿う珟堎のこずを考えるず、以䞋の3点は絶察に倖せたせんでした。

ファむルをサヌバヌにアップロヌドしない
金型の圢状デヌタは䌁業の機密情報です。クラりドサヌビスにデヌタを送るこずを犁じおいる䌚瀟も倚く、どんなに䟿利でも䜿えないツヌルになっおしたいたす。このアプリはすべおの凊理をブラりザ内で完結させおいるため、デヌタが倖郚に出るこずはありたせん。

完党オフラむンで動䜜する
工堎の珟堎ではむンタヌネットが䜿えない環境もありたす。ロヌカルサヌバヌを立おればオフラむンでも動き、USBメモリに入れお持ち運ぶこずすら可胜です。

ナヌザヌ登録が䞍芁
アカりント䜜成や利甚申請が必芁なツヌルは、珟堎ぞの導入ハヌドルが䞀気に䞊がりたす。URLを開くだけで䜿い始められるこずを目指したした。

マりス操䜜䞀芧

  • 巊クリック指定の色で色付け
  • 右クリックパン移動
  • マりスホむヌル拡倧・瞮小
  • Shift + 巊右クリックカメラ回転

䜜っおいるうちに面癜くなっおきた

最初の目的は「面ごずに色を塗る」それだけでした。

ただ、実際に動くものができおくるず「どうせなら枬定もしたい」「メモも残せたら䟿利」ず、蚭蚈珟堎で感じおきた「あったら嬉しい」機胜が次々ず圢になっおいきたした。

䞀方で、機胜が増えるほど気を぀けたのがUIのシンプルさです。CAD゜フトの経隓がない人でも盎感的に䜿えるこず、開いた瞬間に䜕をすればいいかわかるこず。機胜の充実ずわかりやすさの䞡立を垞に意識しながら䜜り進めたした。

特にこだわったのが粟密な圢状枬定です。芋た目の距離枬定ではなく、STEPファむルのB-Rep境界衚珟のゞオメトリデヌタを盎接参照するこずで、CAD゜フトず同等の粟床での枬定を実珟しおいたす。ポリゎンメッシュに倉換した埌の近䌌倀ではなく、元の数孊的な圢状から蚈算しおいるため、曲面や曲線䞊の点でも正確な倀が埗られたす。

3D䜍眮メモは、モデル䞊の任意の面にメモを貌り付けおCSVで出力できる機胜です。「この穎はここから枬定するこず」「この面は埌工皋で远加工あり」ずいった泚蚘を、図面ずは別に3Dモデルに盎接玐付けお残せたす。

気づいたら圓初の想定より機胜がずいぶん増えおいたしたが、どれも蚭蚈珟堎で実際に欲しいず感じおきたものなので、䜜っおいお楜しかったです。


䜕ができるのか

STEPファむルの読み蟌みず衚瀺

ロヌカルのSTEPファむルをブラりザにドロップするだけで3D衚瀺されたす。サヌバヌぞのアップロヌドは䞍芁で、すべおブラりザ内で完結したす。

Face単䜍の塗り分けFaceIDモヌド

STEPファむルはB-Rep境界衚珟ずいう圢匏でゞオメトリを持っおおり、面Faceひず぀ひず぀にIDが振られおいたす。このFaceIDを䜿っお、面ごずに個別の色を蚭定できたす。

  • 面モヌドクリックした面1枚に色を塗る
  • パヌツモヌド゜リッド郚品単䜍でたずめお塗る

金型蚭蚈でいえば加工の面肌、「研削加工指定」「攟電加工指定」「鏡面仕䞊げ面」ずいった区分けを芖芚化するのに䜿えたす。
耇数パヌツが入ったファむルだず、モデル単䜍で色分けを行うなどでしょうか。

パヌツツリヌによる衚瀺切替

アセンブリ構造のSTEPファむルでは、パヌツごずに衚瀺・非衚瀺を切り替えられたす。耇雑なアセンブリでも芋たい郚分だけを確認できたす。

カラヌデヌタの保存ず読み蟌み

塗り分けた色の情報はJSONファむルずしお保存でき、次回読み蟌んで再珟できたす。STEPファむルずセットで保管しおおけば、レビュヌのたびに塗り盎す必芁がありたせん。

クむックツヌル

  • 枬定モヌド2点間の距離やモデルの䜓積・衚面積を蚈枬
  • 断面カットモデルを任意の平面で切断しお断面を確認
  • 3Dメモモデル䞊の任意の䜍眮にメモを貌り付けおメモリストのみをCSVで出力

技術的な構成

私自身はプログラムを曞けないので、AIに「こういうものを䜜りたい」ず䌝えながら進めたした。結果ずしお䜿われた䞻な技術は以䞋のずおりですAIから教えおもらった内容ベヌスです。

opencascade.js

STEPファむルの読み蟌みずパヌスに䜿っおいるラむブラリです。もずもずはC++で曞かれたCADカヌネル「OpenCASCADE TechnologyOCCT」をWebAssemblyに倉換したものです。

これによっお、サヌバヌなしでブラりザだけでSTEPファむルを解析し、FaceIDの取埗やB-Rep→メッシュの倉換ができおいたす。

Three.js

3D衚瀺郚分のラむブラリです。opencascade.jsで倉換したメッシュデヌタをThree.jsで描画しおいたす。芖点操䜜軌道コントロヌルや゚ッゞ衚瀺、断面カットClippingPlaneもThree.jsの機胜を掻甚しおいたす。

Cloudflare Pages

Cloudflare Pagesでホスティングしおいたす。GitHubリポゞトリず連携するだけで自動デプロむが蚭定でき、サヌバヌ費甚はれロです。CDNによる高速配信も無料で䜿えたす。


Vibe codingの進め方

基本的な流れはこうです。

  1. 「こういう機胜が欲しい」を日本語でAIに䌝える
  2. AIがコヌドを生成する
  3. ブラりザで動かしお確認する
  4. 動かなかったり、意図ず違う動きをしたら、その状況をそのたたAIに䌝える
  5. 2に戻る

蚭蚈者ずしお「こういうずきに䜿う」「こういう情報が芋えるず嬉しい」ずいう甚途のむメヌゞは明確にあるので、その郚分はAIより私のほうが詳しいです。逆にコヌドがなぜ動かないかは党くわかりたせんが、AIが勝手に盎しおくれたす。

耇数のAIツヌルを䜿ったのは、埗意䞍埗意があったからです。詰たったずきに別のAIに投げるず解決するこずもありたした。


苊劎した点

opencascade.jsは情報が少なく、AIも正確な情報を持っおいないこずが倚かったです。「こう曞けばできるはずです」ず蚀われたコヌドが動かないこずが䜕床もありたした。゚ラヌメッセヌゞをそのたたAIに貌り付けお「なぜですか」ず繰り返すうちに解決しおいくのですが、この工皋が䞀番時間がかかりたした。
console.logを芋お頂ければ、その時の名残が随所にありたすね。


今埌の予定

解決しおない、残課題が1぀ありたす。
パヌツ・フェむスの色塗りにおいお、初期はドラッグ時に連続しお色塗りができおいたのですが、䜕かの機胜実装時にクリックした箇所しか着色できなくなっおいたす。
これはなるべく早いうちに盎したいずは思っおいたす。

远加ずしお欲しい機胜ずしおは、以䞋の項目でしょうか。

  • メモツヌル䜿甚時、ScreenShotでメモも保存
  • メモツヌルのミニりィンドをドラッグで移動
  • むンポヌト圢匏の拡匵
    IGESは欲しい、STL・OBJは出来れば、X_T・SAB・SATは倚分無理そう
  • クむックツヌルの操䜜感向䞊パむメニュヌ化
  • モバむル環境での操䜜性向䞊

おわりに

プログラムを曞けない蚭蚈者でも、「䜕を䜜りたいか」さえ明確であれば、Vibe codingで実甚的なツヌルを䜜れる時代になったず実感しおいたす。

このツヌルが同じような課題を持぀蚭蚈者の方の参考になれば幞いです。フィヌドバックや改善提案があれば歓迎したす。

゜ヌスコヌドはGitHubで公開しおいたす。

https://github.com/crowclae/STEP-Face-Painter

Discussion