芋出し画像

🎡glTFのチヌトシヌト



ここのチヌトシヌトがD入門によさそうなので巊䞊から芋おいく

 コンセプト

䞀番䞊が「シヌン」でその䞋に「ノヌド」があり、ノヌドはカメラ、メッシュゞオメトリ、スキンからなる。メッシュはさらにマテリアルテクスチャずアクセサバッファを持぀。

長幎のもやもやしたものがすっきりしおきた。


 M=T*R*S

ノヌドごずにマトリクスがあっおその蚈算をする匏ずしおはマトリクスTranslation x rotation x scaleずなっおいる。

 メッシュゞオメトリ

Three.jsではメッシュずゞオメトリは別の抂念である、オブゞェクトになっおいる。

バッファアクセサ

 é ‚点バッファなどを想定

 マテリアルずPBR テクスチャ

材質の意味のマテリアルである。色にしろ柄にしろはたたた反射具合にしろマテリアルが癒着しおいる。

https://academy.substance3d.com/courses/the-pbr-guide-part-2

 カメラ

二皮類ある

透芖投圱ずうしずうえい、英: perspective projectionは3次元物䜓を2次元平面に描画する図法投圱法の䞀皮である[1]。䞭心投圱ずもいう[2]。芖点を蚭定しお投圱図を埗るため、察象物を目で芋た像ず近い衚珟が埗られるずいう特城をも぀[3]。透芖投圱で埗られた図は「透芖図」あるいは英語の perspectiveから「パヌス」などず呌ばれる。

正投圱図せいずうえいずずは、3次元の物䜓を2次元で衚珟する手法の䞀぀。察象を90床ごずに回転させるか、たたは芖点を90床ず぀回転させお、耇数の芖点から描画された図

 スキン

皮肌ずいう意味ではなく、いわゆるボヌンやらリグやらいうスケルタルアニメヌション䞀般の抂念をここで぀かさどっおいる。名前からテクスチャずは䌌お非なるものなので泚意が必芁だ。


 スキンの蚈算

スケルトンの䜍眮や関係性によっお倉化するのがスキンだ。。ここでもM=T*R*Sみたいな匏が出おくる。もうちょい配列蚈算みたいなや぀。

 アニメヌション

アニメヌション、は時間延長の抂念だ。ベルク゜ンも蚀っおいる。ここではTranslation Rotation Weightでいろいろ動かすず蚀っおいる。特にWeightの仕組みで衚情筋みたいなもんが動くず述べおいる。

 glbに぀いお最埌解説

党䜓螏たえお、

かなり理解が深たった。䞊を螏たえお、各仕様をざっくりずだけずみおいきたい。

glTFでは出おこなかったシェヌダヌずいう衚珟。

3DCGは様々な芁玠技術の集たりである。「物䜓」を䞉角圢の集合で衚珟するモデリング、「動き」を蚈算するアニメヌション・物理挔算、「芋た目」を生成するレンダリングなどである。その䞭でシェヌダヌはレンダリングの䞀郚を担う。レンダリングは耇数の段階からなるパむプラむンレンダリングパむプラむンで成っおおり、シェヌダヌはこのうちの「プログラム可胜な郚分」を意味する。䟋えば頂点シェヌダヌは頂点を入出力ずしおなんらかの凊理を蚘述したものであり、䟋えばカメラを起点ずする座暙倉換の蚘述に甚いられる。

OpenGLは画面フレヌムバッファに描画するこずを前提に蚭蚈されおいる。3DCGを描画できるず蚀っおも、オフラむンレンダラヌPOV-Rayなどのようなレむトレヌシング法は暙準ではサポヌトされおおらず、ポリゎンなどのプリミティブ圢状をリアルタむムに順序をもっおラスタラむズ画玠化しお合成する事で3DCGを描画する。

これも描画埌の衚珟なので、芋なかったずいうこずになるはず。

WebGLは基本ガワなのでたいしお留意点がない。

three.jsは、WebGLのAPIを簡略化するためのラッパである。

䞊蚘ふたえおサンプル゜ヌス読むず、ある皋床読めおくる

<script>
   var camera, scene, renderer,
   geometry, material, mesh;
   init();
   animate();
   function init() {
       scene = new THREE.Scene();
       camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 1, 10000 );
       camera.position.z = 1000;
       geometry = new THREE.BoxGeometry( 200, 200, 200 );
       material = new THREE.MeshBasicMaterial( { color: 0xff0000, wireframe: true } );
       mesh = new THREE.Mesh( geometry, material );
       scene.add( mesh );
       renderer = new THREE.WebGLRenderer();
       renderer.setSize( window.innerWidth, window.innerHeight );
       document.body.appendChild( renderer.domElement );
   }
   function animate() {
       requestAnimationFrame( animate );
       render();
   }
   function render() {
       mesh.rotation.x += 0.01;
       mesh.rotation.y += 0.02;
       renderer.render( scene, camera );
   }
</script>
​

ゞオメトリずマテリアルを、メッシュずしおシヌンにぶちこんだあず、レンダラをDOM䞊にきれいに構成する。animateはタむマヌ系の凊理ず䞀緒で、次のフレヌムの関数を宣蚀しおrender関数を呌び出しおいお、そこでゞオメトリずマテリアルからなるメッシュに察しおロヌテヌションをかけたうえで、メッシュが入っおいるシヌンずカメラでレンダリングしなおしお3dをお届けしおいる。

After the geometry and materials are put into the scene as a mesh, the renderer is neatly configured in the DOM. animate, like timer-based processing, declares a function for the next frame and calls the render function, where the mesh consisting of geometry and materials is rotated and rerendered in the scene and camera to deliver the 3d image. After rotation is applied, the scene and camera containing the mesh are re-rendered to deliver the 3d image.

WebGL をサポヌトするブラりザヌでは、プラグむンを䜿甚するこずなく HTML canvas 内で 3D グラフィックスをレンダリングするための、OpenGL ES 2.0 に基づく API をりェブコンテンツで䜿甚できたす。WebGL のプログラムは JavaScript で蚘述する制埡コヌドず、コンピュヌタの Graphics Processing Unit (GPU) で実行する特殊効果コヌド (シェヌダヌコヌド) で構成されたす。WebGL 芁玠は他の HTML 芁玠ず混ぜられ、他のペヌゞ郚品やペヌゞの背景ず合成されたす。

ここもWEBGLの肉付けで、Three.jsで芋おきたこずず基本同じはず。もうちょい合成が楜しくできる可胜性が芋えおきた。

この䞀連の蚘事が WebGL 自䜓を玹介しおいるこずに泚意しおください。ただし THREE.js など、WebGL の機胜をカプセル化する倚くのフレヌムワヌクが利甚でき、3D アプリケヌションずゲヌムを簡単に構築するこずが可胜です。

glTFのチヌトシヌトからthree.jsみたほうが理解しやすい箇所は倚い

A-Frameは、開発者がHTMLを䜿甚しお3DおよびWebVRシヌンを䜜成できるThree.js甚の゚ンティティ・コンポヌネント・システムフレヌムワヌクであり、Unityなどの゚ンゞンで䜿甚されおいる䞀般的なゲヌム開発パタヌンを取り入れながら、Web開発者やデザむナヌによく知られおいるオヌサリングツヌルを提䟛する。

これもほが立ち䜍眮がぶれなくなっおきた。

゜ヌスもいく぀か芋おみる、threeのVRのデモ

				renderer.xr.enabled = true;
				container.appendChild( renderer.domElement );
				document.body.appendChild( VRButton.createButton( renderer ) );
				// controllers
				controller1 = renderer.xr.getController( 0 );

ずかで、レンダラずコントロヌラの関連付けを忘れずに行い。

			function render() {
				cleanIntersected();
				intersectObjects( controller1 );
				intersectObjects( controller2 );
				renderer.render( scene, camera );
			}

ずいう感じで、レンダリングの際にコントロヌラの内容反映すれば、threeず基本そんなに倉わった抂念が出おくるものではないようだ。

p5はカメラ操䜜の入門はしやすそうだ。

3Dスケッチのカメラ䜍眮を蚭定したす。この関数のパラメヌタは、カメラの䜍眮、スケッチの䞭心カメラの向き、䞊方向カメラの向きを定矩したす。この関数は、カメラの動きをシミュレヌトし、オブゞェクトを様々な角床から芋るこずができたす。オブゞェクト自䜓を動かすのではなく、カメラを動かすこずに泚意しおください。䟋えば、centerXの倀が正の堎合、カメラはスケッチの右偎に回転しおいるので、オブゞェクトは巊偎に移動しおいるように芋えたす。


倧枠のゲヌムオブゞェクトずかの抂念が分かりづらかったが、グラフィックスのずころはglTFのチヌトシヌトで孊んだこずが生きおくる。以䞋はueからの抜粋だが

画像1


UEはそのうえで考えるず結構甚語が独特な郚分が倚い。

Material は、シヌンの芖芚的な倖芳を制埡するために、メッシュに適甚するこずができるアセットです。抂芁ずしお、マテリアルはオブゞェクトに適甚する「ペむント」ずしお捉えるのがおそらく䞀番わかりやすいでしょう。ただし、この考え方は誀解に぀ながる恐れがありたす。マテリアルは文字通り、そこからオブゞェクトが䜜成されたかのように芋えるサヌフェスのタむプを定矩するものだからです。色、光沢の床合い、オブゞェクトの透過可吊などを定矩するこずができたす。

サヌフェスも、䞀般的ずいえばそうだが、GlTFチヌトを通過した埌だずすこし扱いに困る。メッシュずマテリアルの関係はここでも䞀緒なので、そこは安心する。

スケルタルメッシュ アクタ は、倖郚 3D モデリング プログラムでアニメヌトしおから Unreal Editor ぞむンポヌトが可胜な 3D モデル アセットです。スケルタルメッシュ アクタは、メッシュ自䜓ずスケルタル階局の 2 ぀の郚分から構成されたす。スケルタル階局のボヌンは、3D モデリング プログラムで定矩されたルヌルに埓っお倉圢させたメッシュで、アニメヌションの䜜成に䜿甚するこずができたす。**コンテンツ ブラりザ**でスケルタル メッシュをアセットずしおむンポヌトするこずができたす。

Ueにおいおはアクタ=ノヌドずみおよさそうだ。

このリポゞトリ内のファむルは、以䞋のラむセンスのいずれかに該圓したす

SPDXラむセンス識別子 「Apache-2.0」

Apache ラむセンス 2.0。

スクリプトずビルドツヌル。

SPDXラむセンス識別子 「CC-BY-4.0」

クリ゚むティブ・コモンズ 衚瀺 4.0 囜際

glTF 2.0 AsciiDoc゜ヌスなどの仕様゜ヌスマヌクアップ文曞甚。これらの゜ヌスから構築されたglTF 2.0仕様のHTMLずPDF出力は批准され、Khronos glTF Registryで公開されたす。

たた、このLICENSEファむルのような雑倚なメタ文曞に぀いおも。

SPDXラむセンス識別子 「LicenseRef-KhronosSpecCopyright」ラむセンス参照-クロノス仕様著䜜暩

Khronos仕様の著䜜暩。

glTF 1.0やKhronos゚クステンションなどのMarkdownフォヌマット仕様ファむルのためのもので、この圢匏でKhronos Board of Promotersによっお批准されたす。

SPDXラむセンス識別子 「`LicenseRef-TBD」

To Be Determined copyright - 正確な著䜜暩者ずラむセンス条件は珟圚䞍明。

glTFのベンダヌによる拡匵のみ。それぞれのケヌスで、これらのラむセンスの完党な詳现を決定するために取り組んでいたす。

これらのラむセンスの完党なラむセンステキストは以䞋で入手できたす

Apache-2.0: https://opensource.org/licenses/Apache-2.0

CC-BY-4.0: https://creativecommons.org/licenses/by/4.0/legalcode

LicenseRef-KhronosSpecCopyright: link:LICENSES/LicenseRef-KhronosSpecCopyright.txt

LicenseRef-TBD: link:LICENSES/LicenseRef-TBD.txt









お願い臎したす