テクスチャペイントの話
皆さんこんばんはぐっちーです。
もう1月も終わりですね。この記事を書いたあとに今月の成果を記事にしようと思います。
今回はUnityで動的にテクスチャペイントをした話をしたいと思います。
どんなことをしたのか
イメージ的には某イカちゃんゲームのような感じでボールが当たったところに色がつく感じのことを実装しました。
いい感じになってきた
— グッチー (@guchimoriVR82) January 15, 2020
せっかくUniRx勉強してるので使おうと思ったけどうまくコードかけなかったのでとりあえず別の方法で実装してあとから治す
ちゃんとインク残量も色ごとに表示されるよ pic.twitter.com/OzWaSGFc7w
こんな感じでもともと白かった場所にインクをぶちまけた用な図を描画します。
全体の流れ
全体の流れとしては
みたいな感じです。
それぞれの処理の細かいところを紹介していきます。
UV座標の取得
Unityに関して言えばRaycastHitを使うことで簡単にUV座標は取ってこれます。
RaycastHit.textureCoordがRayの衝突した場所のUV座標なのであとはこれをShaderに渡してそこを中心に貼りたい画像を描画してもらうだけです。
RayCastHitを使わない場合でもできるようですがここでは省略します。
描画の部分
描画させたいオブジェクトにくっつけたマテリアルのフラグメントシェーダーの部分はこんな感じになっています。
_PaintUVは先程取得したUV座標で_BrushScaleはインクの図の拡縮度です。_PaintUVを中心にh離れた範囲(インクの図が描画される範囲)内であればインクの図を、そうでなければもともとのテクスチャを描画させる。という処理です。
あとはスクリプトから色やインクの図のテクスチャ、拡縮度などをシェーダーに渡してBlitする処理を描いてあげればいい感じです。
だいぶ雑に紹介しましたがそんなこんなでテクスチャペイントができました。
なお、今回の記事で紹介したテクスチャペイントの詳細やRaycastHitを使わない方法などは以下の記事を参考もといほぼ引用させて頂いております。
また、上の記事を書かれている方がこのテクスチャペイントを使えるアセットを公開しているとのことなのでそちらもリンクを置いておきます。
実際に完成したものの紹介記事は別途公開しますのでそちらもお願いいたします。
それでは今日はこの辺で( ー`дー´)キリッ
0コメント