Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
僕は雪が見たい(雪シェーダーの作成)
Search
a-pxl
October 25, 2019
Technology
0
600
僕は雪が見たい(雪シェーダーの作成)
雪シェーダーを作成する
・反射計算
・頂点座標の変更
・歩いた跡をつける
・テッセレーションシェーダー
a-pxl
October 25, 2019
Tweet
Share
More Decks by a-pxl
See All by a-pxl
俺、女の子になります
aizupxl
0
71
Blender 簡単ピストンリグ
aizupxl
0
660
Other Decks in Technology
See All in Technology
Oracle Database@Azure:サービス概要のご紹介
oracle4engineer
PRO
3
200
NIKKEI Tech Talk #41: セキュア・バイ・デザインからクラウド管理を考える
sekido
PRO
0
230
2025年の医用画像AI/AI×medical_imaging_in_2025_generated_by_AI
tdys13
0
140
202512_AIoT.pdf
iotcomjpadmin
0
150
MySQLとPostgreSQLのコレーション / Collation of MySQL and PostgreSQL
tmtms
1
1.3k
20251218_AIを活用した開発生産性向上の全社的な取り組みの進め方について / How to proceed with company-wide initiatives to improve development productivity using AI
yayoi_dd
0
740
AI との良い付き合い方を僕らは誰も知らない
asei
0
280
Entity Framework Core におけるIN句クエリ最適化について
htkym
0
130
2025-12-27 Claude CodeでPRレビュー対応を効率化する@機械学習社会実装勉強会第54回
nakamasato
4
1.2k
Redshift認可、アップデートでどう変わった?
handy
1
100
Cloud WAN MCP Serverから考える新しいネットワーク運用 / 20251228 Masaki Okuda
shift_evolve
PRO
0
110
コールドスタンバイ構成でCDは可能か
hiramax
0
110
Featured
See All Featured
Why Our Code Smells
bkeepers
PRO
340
57k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
3.5k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
32
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
53
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
We Are The Robots
honzajavorek
0
120
GitHub's CSS Performance
jonrohan
1032
470k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
196
70k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
130
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
410
Transcript
僕は雪が見たい 照屋 尚志
自己紹介 ・照屋 尚志(てるや ひさし) ・修士1年 ・筋トレサボってた ・それとうどん過剰摂取 ・そして少し太った
皆さんは雪はお好きですか
よく言われること 沖縄には海があるじゃん めんどくさいよ 自転車使えなくなるよ
こちとら雪に夢を抱いてんだよ
私にとっての雪
皆が夢見るように
目標 雪原を作る
始めに ・Planeの作成
雪原の完成!!
嘘です
シェーダーを作成します ・雪の反射を作る ・凹凸を作る ・歩いたところを凹むようにする
シェーダーでやったこと ・ランバート反射、スペキュラ反射 ・ホワイトノイズ、パーリンノイズ作成 ・テッセレーションシェーダー ・頂点座標の変更・法線を求める ・depthカメラを使用した軌跡描画
1.雪の反射について
雪はチカチカ反射する
反射の実装 ・ランバート反射、スペキュラ反射の実装 ・ホワイトノイズテクスチャの作成 ・テクスチャを使用してチカチカ反射させる
ランバート反射について
説明する前に ・法線ベクトル - 面に対して垂直なベクトル(wikipediaより)
ランバート反射 θ 法線ベクトル:N 光源方向ベクトル:L 反射 = max(0, (N ・L)) ベクトルNとベクトルLの内積
0以下であれば値を0にする
スペキュラ反射について
スペキュラ反射について ・スペキュラ反射には主に2種類あります - フォンの反射モデル : 計算が大変 - ブリン・フォン反射モデル : 計算が楽 ・ここでは後者について解説します
ブリン・フォン反射モデル 法線ベクトル:N 光源方向ベクトル:L 視点方向ベクトル:V ハーフベクトル:H θ θ ハーフベクトル : H
= (V + L) / 2 反射量 = max(0, (N ・H)) ベクトルNとベクトルHの内積 0以下であれば値を0にする
実装する
チカチカ反射させる ・先程のスペキュラ反射にホワイトノイズを加える
ホワイトノイズ ・1マスごとにランダムな値を書き込む ・ここでは白~黒の色をランダムに書き込む ・反射で白の部分を反射させ、黒は反射させない
ノイズを追加
表面を凸凹したい
頂点について
凹凸を作る ・ノイズを使って頂点の高さを変える ・パーリンノイズを使う 今はネットから見つけたものを使用
実際にやってみた
問題に気づく ・凹凸がカクカクしている ・頂点数が少ない ・反射がちゃんと出来ていない ・法線が垂直のまま
頂点数を増やしたい..... テッセレーションシェーダー!
テッセレーションシェーダー
テッセレーションシェーダー
テッセレーションシェーダーの実装 ・わけわからんことをずらずら書く ・調べたら出てくるのでそこを 参照してください ※こちらは開発途中のものです
テッセレーションシェーダーの実装
結果
まだ足りない
法線を求める ・反射は法線を元に計算される ・凹凸に合わせた法線を求める必要がある
法線を求める ・隣の頂点同士の高さの差を求める ・隣の頂点の高さはノイズテクスチャから求められる
隣の高さをみる (i, j) (i + 1, j) (i - 1,
j) (i, j - 1) (i, j + 1)
隣の高さをみる (i, j) (i + 1, j) (i - 1,
j) (i, j - 1) (i, j + 1) 黒:低い 白:高い 低 高 低 高
外積を計算 ・隣の高さを使用して外積を計算
外積を計算 法線 =
結果
歩いた後を付ける
カメラの深度 ・カメラでは深度を取ることが出来ます ・深度を使って距離を計ることが出来ます
カメラの深度
カメラの深度
RenderTexture ・カメラが取ったものをRenderTextureに 書 きこむことが出来ます ・RenderTextureを使用して 赤い部分を 凹ませます 実際に書き込んだもの →
カメラの準備 ・Planeの下にカメラを仕込む
結果
凹凸と足跡を合わせる
凹凸と足跡を合わせる ・頂点を上げる計算と下げる計算で法線の求め方が変わる ・凹凸を作成する場合と凹ませる場合の両方とも頂点を 下げ るよう変更 ・2つのテクスチャデータを計算して求める ・どこにも参考記事がない.......
頑張った結果
考察 ・頂点の計算の仕方によって法線の計算が変わる ・丁度よい計算が未だ決まっていない ・改良の余地あり
最後に
ユニティちゃんを歩かせてみた
ユニティちゃんを歩かせてみた
参考にしたゲーム 風ノ旅ビト
参考資料(反射関係)
参考資料(テッセレーション) ・Esさんのサイトから UnityTexturePaintでリアルタイムにオブジェクトを変形する ハイトマップから法線情報の生成 テッセレーション基礎
参考資料(足跡) [Unity] CustomRenderTextureに移動跡を書き込む 【Unity】雪をかき分けるような処理の実装を見ることができる「Snow Trail」紹介