生成AIの支援によるCGプログラム作成

CG関連の 基礎技術(ほぼ100)のプログラムコードを最近の生成AI(特に Copilot)で作成(JavaScript,一部WebGL)してみた。   2024/11/3
殆どのプログラムはhtmlファイルにjsファイルが含まれてるので、AIが出力したhtmlファイルをクリックするのみで実行される。  参考; このファイルベ ジエクリッピングの例, CGARTS

CG基礎

ワイヤーフレーム表示

立方体の陰影表示 three.js

ドーナツ形状の表示
(マウスで回転)three.js

Raytracing webGL

zバッファー法で描画

レイトレーシング (フレームバッファに書込)

コーネルボックス three.js

パーティクルシステム
(アニメーション) three.js

レイトレーシング

レイマーチング法webGL

レンズ形状 レイマーチング法 webGL

花火パー ティクルシステム
(マウスで点火)three.js


モー ションブロー

立方体の表示法切り替えthree.js

球の表示法の切り替え three.js

レ イマーチング法(屈折) webGL

レイトレーシング法(屈折)

レ イトレーシング法屈折率指定)  three.js

テクスチャーマッピング
(ファイル選択) three.js

テクスチャーマッピング three.js

バンプマッピング three.js

色の補間

多角形の走査変換

グローのスムーズシェーデイング

グリッドで三角形の塗りつぶし

SingleValuFunc


一価関数の3D表示


流れアニメーション webGL


曲線/曲面

ベジエ曲線(マ ウス操作)

有理ベジ エ曲線の分割

有理 ベジエ曲線の分割(下部重み指定)

ベジエ 曲線(次数指定、制御点移動)
ベジエ関数の凸包

ベジエ関数の凸包

3D曲線の表 示(マウスで変更)three.js

BezierSurface 2D

BezierSurface 3D(points)

BezierSurface 3D(shaded)

NURBS曲線

デ ボアの方法を用いたNURBS曲線

3D曲 線上をマウスクリック
three.js

ベジエ曲線の次数上げ

ニュートン法を用いた交点

ベ ジエクリッピングを用いた曲線交差

折れ線近似のNURBS曲線の交差

ベジエクリッピング(幅を交差する区間

円と曲線の衝突(アニメーション)

ガウスニュートン法を用いた
ベジエ曲線の交点

ベジエ曲面を描画(WebGL);エラー webGL

ベジエ曲面を描画(WebGL) エラー

境界 箱を用いたBezier曲線の交差

多項式からベジエ関数への変換

ファット ラインを用いた交差
フラクタル



コッホ曲線

チェルビンスキーの三角形

Lシステム

マンデルブロー集合

フラクタル曲 線(中 点変位)

PerlinNoise

3Dフラクタル山

2Dフラクタル山
その他

指数関数の描画

長方形同士の交差判定

線分のクリップ

線 分の交差判定

ブレゼンハムの線分生成

グリッドでのブレゼンハムアルゴリズム

多角形の内部判定(マウスで指定 した点が内部か)

走査変換と多角形の内部判定

ウィンドウで多角形をクリップ

ボロノイ図

凸包

ポケモン風

2025カレンダー

多角形と水平線の交差

レインボー
画像処理


バイレテラルフィルタ

3 filters

Edge filters

モザイク

2値化

ネガポジ反転
ゲーム


shooting   【操 作方法】
>左 矢印キー:左移動>  右矢印キー:右移動
ス ペースキー/上矢印キー:弾を発射

戦闘機攻撃


オセロゲーム

BlackJack


15Puzzle


Tic-Tac-Toe
説明図


反射.屈折モデル(入射角等指定)


Phongの鏡面反射モデル(エラーあり)

3原色の混合(エラー)
学生の制作

ラジオシティ法

Zbuffer法(2三角形)

地球マッピング

フラクタル葉


花火

曲線軌道のモーションブラー


レンズのシミュレーション


点光源

レイマーチング法による箱
未解決; NURBS曲線をBezierに変換、ポイントレンダリング、パストレーシング、サブサーフェススキャタリング、コーステック、サブヂビジョンサーフェス、微分レンダリング、フラクタル山

生 成AIの利用方法・経験(プロンプト例)

一行程度のプロンプトで書ける。例えば「〇〇法を用いて△を描くコード をJavaScriptで書け。」と簡単で、追加で「マウスでみる方向を変えるように修正」とか 「xxのエラーが出たので修正してください」を追加する 程度。
曲線の例;「3次のベジエ曲線を描くコードを JavaScriptで書け。」 次に「制御点と制御多角形も描け。」 次に「次数を2から6までsliderで指定できるようにし、制御点はマウスで移 動できるようにしてください」とプロンプトを入力。
ゲームの例;「シューティングゲームを JavaScriptで書け」、次に「操作方法をHTMLファイルに書け」と簡単
結果はhtmlにJavaScriptを含んで出力される。〇〇.htmlファイルを作成しクリックすると実行される。あるいはhtmlと JavaScriptファイルを別に出力される。htmlにjsファイルを呼ぶように記述されてるので、htmlファイルクリックすると実行される。


CGが分かるとはどういう意味であるか。
・レベルA; CGソフトを使いこなしCG作品が創れる
・レベルB; CGで使われるレイトレーシング法などのアルゴリズムを理解してる
・レベルC; 同上の基本的技法のプログラムを組める
・VR、メタバース、ゲームなどの応用で、CGをツールとして使える
生成AIが進歩した今の学生は、プログラミングの講義は受けてなくても、CGの基本技法を体験できることが重要である。

なぜJavaScriptで生成AIに作らせるか? 
手軽にでき携帯電話でも動作出来ることが重要;C言語やPythonnが一般的であるがこれらはコンパイラーが必要で有料なことが多い。ブラウザーがみれ る端末ならどんな装置でもいいことから、htmlとJavaScriptで動作するというのは利便性がいい。このサイトの幾つかは列車の中でスマホで生成 AIを利用して作成した。



生成AIIに AIを利用したコーデイングに聞いたら下記の特徴

生成AI(例えばCopilot)によるプログラミングの 有効性について、多くの観点から考えることができます。ここにいくつかの主要なポイントを挙げてみます:

効 率の向上

生成AIはプログラマーのコード作 成やデバッグの作業を迅速に行うことで、開発の効率を大幅に向上させます。例えば、基本的なテンプレートの生成や一般的なプログラミングパターンの提供に より、プログラマーは反復的なタスクに費やす時間を節約できます。

エ ラーレートの削減

AIは大量のデータを学習し、 一般的なエラーやバグを検出する能力を持っています。そのため、生成AIを使うことで、コードのエ ラーレートが削減され、より高品質なソフトウェアを開発することが可能です。

学 習と教 育

生成AIは、初心者プログラマーや 学習者にとって優れた教育ツールとなり得ます。AIは複雑なプログラムやアル ゴリズムの構造を示し、ステップバイステップでコードの説明を提供することで、プログラミングスキルの向上を助けます。

創 造性の促進

プログラマーはAIを使って新しいアイデアを 生成し、それを基に独自の創造的なプロジェクトを進めることができます。生成AIは、多様なソリューション を提案することで、プログラマーの発想力を刺激します。

チー ムコラボレーションの強化

生成AIは、チーム開発の際にも大 いに役立ちます。AIはコードレビューやドキュ メントの生成、さらにはタスクの自動化までを支援することで、チームのコミュニケーションと効率を向上させます。


開発に至る経緯

1998年

2000年
1998年、CGの講義を補助し体験・遠隔学習を実現するのが目的で 西田が製作した CGの基礎から応用(最先端の研究も含む)の Java Appletがあります。これはCD化(左画像参考)し発売しま した。その後CG教科書の付録としました。教科書を発売 した。2000 年11月にCGARTS協会がCGを独学で学習する方のために開講した「インターネット通信講座 CG標準コース[技術編]Part1」と「同講座Part2」(その後に講座名変更:「CG-ARTS e-ラーニングCGテクニックスマ スターコース」)で、CGアルゴリズムの理解を体験的に行えるように開発したJava教材(左の画像参照)とされ た。
この教材は2002年に情報処理学会から「優秀教材賞」を頂いた。2017年には教材開発を発 表し、CGARTSのサイトにて無料公開し た。同時にこの体験サイトはN高校の教材に も採用された。
近年の生成AI(例えばCOPILOT)の進化により、体験するのみでなくプログラム作成の教育にも有効利用できるように本サイトを作成した。