Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

Spline Trail Rendererを使ってみた(Unity X Vive)

More than 3 years have passed since last update.

Viveのお絵かきアプリ「Tilt Brush」のブラシのように、Viveのコントローラーの動きに合わせて軌道が残る演出ってかっこいいですよね。
UnityにはもともとTrail Rendererというコンポーネントが用意されており、これを使えば簡単に似たような演出をすることができます。
しかし、Trail Rendererコンポーネントでは、荒っぽさが目立ったりして綺麗な表現をすることが難しいです(使いこなせばきっときれいにできるんだろうけど・・・)

Asset Storeで代用できるようなAssetがないか探したところ、Spline Trail Renderer(有料20ドル)を見つけました。
https://www.assetstore.unity3d.com/jp/#!/content/10236
DEMOもいい感じ+レビューも33件 平均星5個と高評価だったので、Spline Trail Rendererを使ってどんなことができるか試してみたいと思います。
Spline Trail Renderer - アセットストア - Google Chrome 2016-07-26 17.18.46.jpg

Spline Trail Rendererを使えばこんな感じの表現ができるそうだ
Spline Trail Renderer - アセットストア - Google Chrome 2016-07-26 17.17.21.png

*主にOnline Documentの翻訳/解説になるかと思います。
Online Documentはここ
http://splinetrailrenderer.blogspot.jp/

ちなみにTrailには
「引きずった跡,通った跡,痕跡(こんせき); 船跡,航跡.用例the trail of a slug ナメクジのはった跡.b(獣の)臭跡; (捜索などの)手がかり」等の意味があるそうだ
http://ejje.weblio.jp/content/trail

最新バージョン

最新バージョンは1.3とのこと(2016/7/26現在)
1.3からUnity5に完全対応した。

1.3の変更点はこちら
- ScriptとShaderをUnity5で100%コンパイルできるようにしたよ
- 2つのカラーを混ぜて表現できるカスタムShaderを追加したよ
- まれに発生していたOut of range exceptionsエラーを直したよ

更新日はTuesday, August 11, 2015だからちょいと古い気がするけど、十分に動作するならば問題はないか

使い方(基礎)

  1. 空のGameObjectを作成しよう
  2. そいつにSplineTrailRendererコンポーネントをつけよう
  3. そいつにMeshFilterとMeshRendererコンポーネントもつけよう
  4. Mesh RendererコンポーネントのMaterialsにSplineTrailRenderer/Samples/MaterialsにあるFadeTrailMaterialマテリアルを設定しよう
  5. SplineTrailRendererコンポーネントのパラメータを調整しよう(下の画像を参考に)

inspector.png
(この画像はOnline Documentに貼ってある画像です)

これでGameObjectを動かすと、スムースなTrailが自動的に作成されるよ!

実際にViveのコントローラーにつけてみた

Animation-compressor.gif

SplineTrailRendererのInspectorはこれ
Unity (64bit) - testLighting.unity - ViveFirstTest - PC, Mac & Linux Standalone_ _DX11_ 2016-07-31 20.20.24.jpg

ポイント パラメータは小さい値を入れる

Viveのコントローラーが3D世界だとものすごく小さいので
Emission DistanceHeightWidthを小さくしている。
Heightが小さすぎるとカメラとTrailの向きによっては、Trail自体がカメラに映らない場合があるのでちょっとだけ大きめにしている。
値が小さすぎるのか数回 IndexOutOfRangeExceptionエラーが発生する。

ポイント Dynamic Normal updateには必ずチェックを入れる

これにチェックを入れないと、Trailがカメラに映らない

問題点

レンダリングがコントローラーから0.1離れた場所までしか実行されないようになっている。
RenderMesh関数の
float length = Mathf.Max (spline.Length () - 0.1f, 0);
length = Mathf.Max (spline.Length () - 0.1f, 0);
この二行に書いてある0.1fを0.01fくらいにするといい感じにコントローラー付近までレンダリングしてくれる。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away