Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
20191120_ThreeJSTokyo
Search
Yutaka Obuchi
November 20, 2019
Programming
970
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
20191120_ThreeJSTokyo
Yutaka Obuchi
November 20, 2019
More Decks by Yutaka Obuchi
See All by Yutaka Obuchi
Web世界で君の3Dモデルに生を吹き込む方法
fms_cat
0
4.7k
NotITG now supports shaders!
fms_cat
1
700
Other Decks in Programming
See All in Programming
カツオ、ご期待ください
suneo3476
0
190
半永久的に提供し続けられるプライベートクラウドを目指して ― 利用者の認知負荷を抑えるAPI抽象化とハードウェア世代交代の基盤設計
tomokon
0
500
Jetpack Compose Mechanisms
skydoves
3
820
UnityでSystem.Net.WebSocketsなWebSocketサーバが動かないのでUnity Monoのコードを覗いてみた / about implementing websocket server with unity mono
drumath2237
1
610
Vue Fes Japan の “作る側”に関わってみて
naokihaba
0
160
月間100万人のサービス刷新で、 技術選定をHonoに振り切った話
yutobara
8
6.6k
Findy - エンジニア向け会社紹介/Findy Company Deck
findyinc
6
400k
ハーネス設計入門 〜 基礎知識の整理から実務へのステップアップ 〜
kinopeee
28
32k
Agents on Rails - Rails at Scale 2026
irinanazarova
0
560
Everything will be SERVERLESS — 信じて運用した10年の経験値 / Everything Will be Serverless — Lessons Learned from 10 Years of Operational Experience
seike460
PRO
1
1.1k
Verilogで学ぶCPU自作入門
uyuki234
8
4.1k
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
750
Featured
See All Featured
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
How to make the Groovebox
asonas
2
2.5k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.6k
brightonSEO & MeasureFest 2025 - Winning Strategies for Black Friday CRO & PPC - Christian Goodrich
cargoodrich
3
870
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
280
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
410
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Optimizing for Happiness
mojombo
378
71k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
560
Designing for humans not robots
tammielis
254
26k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.4k
Mobile First: as difficult as doing things right
swwweet
225
10k
Transcript
pixiv Inc. OBUCHI Yutaka 2019.11.20
2 FMS_Catです
3 Yutaka “FMS_Cat” Obuchi 趣味 WebGLやさんです
OBUCHI Yutaka (FMS_Cat) ピクシブ株式会社で やってます Three.js Unity
OBUCHI Yutaka (FMS_Cat) さんと やってます
のはなし
VRMっていう3Dアバターフォーマットを Three.jsで使えるようにしました @pixiv/three-vrm
VRoid Hubという3Dアバター共有ハブの プロダクトで必要だった
技術背景 VRM: 3Dキャラクター表現に特化した 3Dモデルフォーマット https://vrm.dev/
技術背景 VRMはglTFの拡張機能として定義されている https://raw.githubusercontent.com/KhronosGroup/glTF /master/specification/2.0/figures/gltfOverview-2.0.0b.png
技術背景 Humanoid インタフェース 表情制御のための ブレンドシェイプ トゥーン マテリアル 一人称視点用の フィールド 揺れもの
フィールド・実装 メタ情報 ライセンスなど
技術背景 - glTFの実装 - VRM拡張の実装 全部イチからやるのは工数デカすぎ……
技術背景 WebGLライブラリ 有名・簡単・アクティブ https://threejs.org/
技術背景 GLTFLoaderもある https://threejs.org/examples/?q=gltf#webgl_loader_gltf
技術背景 GLTFLoaderでVRMを見てみる https://gltf-viewer.donmccurdy.com/ 魅力が ぜんぜん 違う!
アーティストが表現したいものを 確実にユーザーに届けるには VRMの漏れない実装は不可欠 技術背景
なかでもマテリアルの実装 技術背景 Unlit(ライティングなし) MToon
Materials (MToon) MToonマテリアル - VRMが標準でサポートするトゥーンマテリアル - 最低限で効果的なライティング表現 - セル調・イラスト調など幅広いトゥーン表現 -
MatCapによる擬似的なスペキュラ表現 - アウトラインによる線画風表現
Materials (MToon) Unlit(ライティングなし) MToon
Materials (MToon) Unlit(ライティングなし) MToon
Materials (MToon) Unlit(ライティングなし) MToon
Materials (MToon) How to make your own material on Three.js
Materials (MToon) How to make your own material on Three.js
1, /src/renderers/shaders/ShaderLibから テンプレートとなるマテリアルを探す https://github.com/mrdoob/three.js/tree/dev/src/renderers/shaders/ShaderLib
Materials (MToon) How to make your own material on Three.js
2, シェーダ完全理解する https://github.com/mrdoob/three.js /blob/dev/src/renderers/shaders/ShaderLib/meshphong_frag.glsl.js #include !!? https://github.com/mrdoob/three.js /blob/dev/src/renderers/webgl/WebGLProgram.js
Materials (MToon) How to make your own material on Three.js
2, シェーダ完全理解する #include !!? https://github.com/mrdoob/three.js /blob/dev/src/renderers/webgl/WebGLProgram.js https://github.com/mrdoob/three.js /blob/dev/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js
Materials (MToon) How to make your own material on Three.js
2, シェーダ完全理解する https://github.com/mrdoob/three.js /blob/dev/src/renderers/shaders/ShaderLib/meshphong_frag.glsl.js #include !!? https://github.com/mrdoob/three.js /blob/dev/src/renderers/webgl/WebGLProgram.js #include が展開されると トータル854行 + ランタイム時注入113行
Materials (MToon) How to make your own material on Three.js
3, 実装していく
https://github.com/mrdoob/three.js /blob/dev/src/renderers/shaders/ShaderLib/meshphong_frag.glsl.js Materials (MToon) ライティング
Materials (MToon) https://github.com/mrdoob/three.js /blob/dev/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js ライトごと RE = レンダリング方程式
Materials (MToon) https://github.com/mrdoob/three.js /blob/dev/src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl.js dot!!
Materials (MToon) アウトラインの実装に最も時間を要した
Materials (MToon) ジオメトリを法線方向に膨らませ カリングを裏返しにする(裏だけ描画) 二度の描画が必要
Materials (MToon) Unityは1シェーダ内で 複数パスを定義可能だが、 Three.jsでは不可能 (= 1シェーダ1パス) 通常のシェーディング アウトライン
Materials (MToon) マルチマテリアルの仕組みをハックした https://threejs.org/docs/#api/en/core/BufferGeometry
Materials (MToon) Three.jsのデータ構造(ざっくり) Mesh (Object3D) Material 0 Material 1 Material
2 Geometry VBO/IBO Group 0 Group 2 Group 1
Materials (MToon) Mesh (Object3D) Material: 肌 Material: 上着 Material: スカート
Geometry VBO/IBO Group: 肌 Group: スカート Group: 上着 Material: 肌Outline Group: 肌Outline
Materials (MToon)
MToonMaterial そんな@pixiv/three-vrmの MToonマテリアルですが Three.jsはカスタムマテリアルを クラスにするのがチョー面倒 本題
MToonMaterial THREE.ShaderMaterialを継承して MToonMaterialを定義します
MToonMaterial fogとかlightsとかを有効化するコード 忘れると ”なんか動かない……” になりがち
MToonMaterial Uniformをいろいろ 生み出すコード
MToonMaterial テクスチャごとのフォーマットを 定義するコードをGLSLに入れる
MToonMaterial いくつかの map などのメンバは Three.jsのパイプラインにより利用される
MToonMaterial いくつかの map などのメンバは Three.jsのパイプラインにより利用される https://github.com/mrdoob/three.js/blob/master /src/renderers/WebGLRenderer.js https://github.com/mrdoob/three.js/blob/master /src/renderers/shaders/ShaderChunk/map_fragment.glsl.js
MToonMaterial でも結局MToonのあらゆる機能を Three.jsにあてがおうとすると シェーダで再定義が必要 uvスクロールをしたいのでvUvでは不十分
MToonMaterial ここまでやっても VRMからMToonのパラメタを デシリアライズするのはまだ面倒く (MToonMaterialを独立したマテリアルとして 使えるようVRM仕様とガチガチにはしていない)
MToonMaterial MToonのプロパティ名から 命名フォーマットを変えるコード (e.g. _SphereAdd → sphereAdd )
MToonMaterial 前述したとおり アウトライン向けに2つ目のMToonMaterialを生成
MToonMaterial そしてグループにする
MToonMaterial 感情 苦しいです あまりマテリアルをモジュールとすることが Three.jsでは考えられていなさそう
MToonMaterial 期待: NodeMaterial NodeMaterial https://twitter.com/mrdoob/status/667765526131826688
MToonMaterial マテリアルが可搬な世界観に到達できるのは いつになるのだろうか……
MToonMaterial より良い実装のイメージがある方 他のマテリアルモジュールの実装を知っている方 その他、VRM・MToonに興味がある方 助けて https://github.com/pixiv/three-vrm/
そんな ですが
メンテナンスできる人が ぜんぜんいない (社内ではほぼ のみ)
採用してます - WebGLやUnityで キャラクターをめっちゃ魅力的に見せたい方 - VRMの仕様まで踏み込んで3Dキャラクターの 世界をもっと明るくしたい方 ピクシブです
None