Labo Aquaria

UE4 is my life style.
Here is the Labo I show my creation with UE4 and Oreo...
フォントシェーダーで遊ぼうあどばんす
0

    フォントシェーダーで遊ぼう Advanceです

     

    この記事はUnreal Engine 4 (UE4) Advent Calendar 2019 その2の23日目の記事のちょっと細かい編

    https://qiita.com/advent-calendar/2019/ue4_deux

     

    StarWarsを見てきました!乙女的に悶えるがあまり叫びたくなったAquariaです。

    という事で、続き続きー。

     

     

    「古の魔法石、契約の名の元に力を示せ!変幻!」

    「フォントシェーダーで遊ぼう」

    前回は導入編として、Lerpを使用した基本的な変化のシェーダをご紹介しました。

    次はその肉付けと捉えてください。テクスチャを削ってどこまでいけるかギリギリまでやってやろうぜ、編です。

     

    概要は前と変わりありません。

    やる事はマテリアル、テクスチャ、フォント、ブループリントを使ったテキストの形状変化です。
    フォント用のマテリアルを用意し、そのマテリアル内で疑似的な立体感を付けたテクスチャAとBを任意の値で変化させ、その制御をブループリントで行います。

    今回は疑似的な立体に使うノーマルマップも無理矢理フォントテクスチャから作ります。その分ノードが増えるので煩雑にはなりますから、許されるならノーマルマップテクスチャは作る方が良いと思いますが、これも一つのアイディアとして読んでみてください。

     

    全体図。


     

     

    0.おさらい

    まずはフォントを用意し、フォントのテクスチャを作成します。

    その後、各文字に合わさるように石のテクスチャを作成し、これをUE4に取り込みます。

    マテリアルとブループリントを作成し、ブループリントは前回同様、"VertexColor"の値を使ってアニメーション出来る状態にタイムラインを用意しておきます。

     

     

     

    1. マスクを作る

    まずはフォントサンプルと石のテクスチャを形状変化させます。"Lerp"のAとBにそれぞれの値を繋ぎ、"VertexColor"のRを変化用の値としてAlphaに入力します。これを"Opacity Mask"に繋ぎます。

    ここで、ただ2つのテクスチャ間を行き来するだけでは物足りないので、ノイズ用のテクスチャをフォントサンプルのテクスチャと合わせて形状をさらに変化させます。下画面内の場合、"Add"の先にノイズテクスチャが繋がっています。

    そして、その強度を調整する値として"VertexColor"のGをここでは使用します。

     

     

    2. 表面の見た目を作る

    R・G・Bにそれぞれ違うノイズを割り当てたテクスチャを使って、表面を作ります。このままでは白黒の情報なので、色ノードを足して後で調整できるようにします。

     

     

     

    3. 石の中を表現する

    Parallaxを利用して石の中間層を表現します。疑似的に奥行きを見せる事の出来るBumpOffsetを使い、結果をノイズテクスチャに繋げます。

     

     

     

    4. 傾きに応じた色の変化を作る

    見る角度に応じて色が変化するように、"Fresnel"から出力された情報を元に色を振り分け、先に作成した表面の色と掛け合わせます。

     

     

     

    5. 色を付ける

    2で作成した表面と3で作成した内部、4の角度に応じた色のノードをここで合わせ、その結果を"BaseColor"に繋げます。今回はフォントと石の色をそれぞれ変えたいので、フォントの明色・フォントの暗色・石の明色・石の暗色、この四つの色を用意し、それをなめらかに変化させる為に”Lerp”で繋ぎます。

     

     

     

    6. 石の中にある光を表現する

    もう1つParallaxを利用して石の内部で光が揺らめいているような表現を作ります。UVアニメーションをさせて、常時ノイズが動いている状態にするには"Time" と"Panner"を使います。この計算された結果は"EmissiveColor"に繋げるのですが、まずは次の工程で色を加えます。

     

     

     

    7. 色を付ける

    先に作成した光の揺らめきに色を加え、強度を調整します。

    角度によって光の強弱を変化させ、傾きが大きいと光が見えないようにします。また、形状に応じて光の強度を変化させる為、値を入力して調子出来るようにします。

    角度による光の調整は"Fresnel"を用いて、テクスチャがカメラに直面している時は白を返し、傾きが大きい時は黒を返すようにします。"Multiply"の先は"EmissiveColor"に繋げます。

     

     

     

     

    8. 立体感を作る

    このままではぺらっぺらの平面にしか見えないので、ここで疑似的な立体感をノーマルマップで作ります。

    出来るならノーマルマップテクスチャを用意した方が良いのですが、ここは限界にチャレンジして、マスク用のテクスチャを利用します。

    まずは"NormalFromHeightmap"にそれぞれのテクスチャを繋げ、これも"Lerp"で切り替えられるようにします。

     

     

     

    9. ブループリントで最終結果を確認する

    ブループリントでテキストを確認します。作成したマテリアルを割り当てて、"TextRenderColor"の数値を変化させると、形状が変化するはずです。

     

     


     

    以上、フォントシェーダの作り方でした。

    今回は、ハガレンやりたいな、エリクシルっぽいのが良いなあ、血っぽい石もいいな、なんて妄想から石とテキストの形状変化にしましたが、もちろん工夫次第で石ではなく水や金属も出来るはずです。ノイズを使ったディゾルブを含めたりすると、もっと心躍る魔法的表現が出来ると思います。

    テキストなんてシンプルで読みやすければイイ!なんて言わず、これを機に色々試してみてくださいね。

     

    では、良い年末を!

    Have lovely new year!

     

    | UE4 | 13:39 | comments(0) | - |
    フォントシェーダーで遊ぼう
    0

      Happy holiday! How's it going guys?

       

      この記事はUnreal Engine 4 (UE4) Advent Calendar 2019 その2の23日目の記事です。

      https://qiita.com/advent-calendar/2019/ue4_deux

       

      休日じゃない人も休日の人もいかがお過ごしでしょうか。

      アドベントカレンダー23日目の記事担当、Aquariaです!

      実は最近ガンダムを見始めて、泥濘にハマった足が抜けなくなり、今回のお題もミノフスキー粒子シェーダにするか結構真剣に悩んだのですが、今日は元のお題通りGUIネタでちゃんと記事を書きます。

      というわけで、いきまーす。

       


       

       

       

      「古の魔法石、契約の名の元に力を示せ!変幻!」

      「フォントシェーダーで遊ぼう」

      今回は、石の形をテキストに変える物質変化系シェーダの作り方をご紹介します。

      勿論Houdiniなどを使用すれば豪華に美しいものが出来るでしょう。

      ただ、状況に応じてもっとチープにしたい事もあるかと思います。今回は疑似的な立体表現を用いてテキストの演出を作る練習をします。

       

      必要なのはマテリアル、テクスチャ、フォント、制御するためのブループリントです。
      フォントテクスチャ”A”と石のテクスチャ”B”を作成し、マテリアルで、AB間の表示を変更できるようにします。この変化をヌルりとさせる為に、グラデーションの幅のあるテクスチャ2種を掛け合わせ、定めた閾値を境に白黒分け、それをマスクとします。

      さらに、魔法石は紙ではなく石ですので、立体的な表現が必要になります。これをノーマルマップを用いてドッキリテクスチャー的に疑似的な立体感や質感を与えます。あとは石の内部で光る物質を疑似的な奥行きで見せ、魔法的な要素を盛り込みます。最後に詠唱を唱える感じでブループリントを使ってテキストを呼び出せば完成です。

       

       

      順を追って説明しなくていいから、具体的な作成方法が見たい、という方はAdvanceへ

       


       

      1.フォントテクスチャを作る

      まずはフォントの中でも"A signed distance field"を利用したテクスチャを使用します。自分の好きなフォントの規約を確認した後、コンテンツブラウザ内にフォントを作成します。この時、フォントは"A signed distance field"テクスチャとして出力します。

       

      1. コンテンツブラウザにフォントデータをドロップする。
      2. "Details > Font > Font Cache Type" の "Runtime" を "Offline"に変更。導かれるがままに進むと画面にテクスチャが表示される。
      3. "Detail > Offline Font > Use Distance Field Alpha" をOnにする。
      4. Assetメニュー内の "Reimport NewFont" を選択する。
      5. ”Export”を選択して出力する。

       

       

      2.石のテクスチャを作る

      次に作成するのは石のテクスチャですが、それぞれの文字に応じた石を用意する為に、先に作成したフォントテクスチャを複製し、それを加工して石の形を作ります。UE4で表示されるテキストはフォントデータの ”Characters” のUVで設定された矩形で切り取られていますので、それぞれの絵はそれぞれの矩形内(下画像の黄線)に収める必要があります。

       

        >>

       

       

       

      3.フォントと石の切り替えの仕組みを作る

      マテリアルに移りましょう。先に作ったテクスチャを呼び出し、ノードを繋いでいきます。

      後にブループリントで値を調整する為に、"VertexColor"を利用します。フォントから石への変化はアニメーション出来るように”Lerp"を利用します。この結果を調整した後、マスクとして使用します。

       

       

      LerpのAlphaの数値を変えると形状変化を確認できるはずです。

       

       

       

      4.立体感を出す

      ノーマルマップも3と同じように"Lerp"を用いてアニメーションさせます。この時、入力される値を3と同じにし、ノーマルマップは3のマスクと連動させます。(VertexColorのR)

       

       

       

       

      5.パララックスで疑似的な奥行きを作る

      このままだと味気ない石にしか見えません。そこで石の内部を作成しましょう。平面に対し疑似的に奥行きを与えるにはパララックスマッピングが挙げられます。これは視線と法線ベクトルの変化に従ってテクスチャ座標のずれを生じさせます。疑似的に奥行きのある絵と表面の絵を重ねる事で厚みを出します。さらに、テクスチャに対しアニメーションを付けたいので、UVの移動を使います。

      今回はパララックスマッピングには"BumpOffset"を用いて奥行きを出し、"Panner"でUVを移動させます。この画像と任意の色を掛け合わせて、BaseColorに入力します。

       

       

      ノイズが少し奥の方に表示されているように見えます。

       

       

       

      6.テキストを確認する

      ブループリント上でテキストを表示し、先に作成したマテリアルを入れて、挙動を確認します。

      タイムラインを使ってキーフレームを作成し、任意のキーを押すとテキストレンダーカラーの値が動くようにノードを繋ぎます。

      1. "Add Components > TextRender"
      2. "Details > Text > TextMaterial" に作成したマテリアルを入れる。
      3. "Details > Font" に任意のフォントを設定する。
      4. "TextRenderColor"を操作して、テキストと石のテクスチャが移り変わるか確認する。
      5. "Timeline"を作成し、Colorの値を作成、0-1の値を行き来するようにキーフレームを打つ。
      6. "SetTextRenderColor"と"Timeline"を繋ぎ、アニメーションさせる。

       

      | UE4 | 14:42 | comments(0) | - |
      Switch of post process
      0

         

        Hi, guys. How's it going?

        Today, I'm gonna show you about BluePrint of switching post process settings I've tweeted for 2 or 3 days ago.

        今日は数日前についったーしたポストプロセスの切り替えブループリントの紹介をします。


        I guess It's really peacky usage for post process. If you need looking at 3d model in any environments just like sketchfab, or you wanna check out some visuals drawn in buffer, this way can be useful.

        What you can see in this article is a making of the switch of post process with BP.

         

        Are you ready for UE4?

        Let's begin with fun!

         

        First, let us make a new Blueprint as you already know.
        Second, we turn on this checkbox "show engine content" which shows materials  "Buffer Visualization".

        Now, we should see those materials in a folder of the content browser below.

        まずはブループリントを作ってください。 次に"show engine content"の項目から"Buffer Visualization"をオンにしてください。

        下記のマテリアルがコンテンツブラウザ上に見えるはずです。

         

         

         

        Let's see what "BaseColor" is inside.

        We first focus on the red material expression "SceneTexture".

        It is a way you can get access a specific buffer like "Specular", "WorldNormal" you choose while post processing. It is connected to "Emissive color" through next node cause it is "PostProcessMaterial".

        例えば、”BaseColor”の中身がどうなっているか確認しましょう。

        最初にマテリアルエクスプレッションの "SceneTexture"を見てください。

        これはポストプロセス中、あなたが選んだ特定のバッファにアクセスする方法です。 これはポストプロセスマテリアルなので、次のノードを通り、エミッシブに繋がれているのが確認できます。

         

         

        By the way, what is this "Feature level Switch"?
        It is said "The Feature Level Switch node allows you to make simplified materials for lower powered devices" by UE4 official. It can let us even designer choose each single specific texture does match our each device who is not good at code.
        Good job UE4! Love it.

        では、"Feature level Switch"とは何でしょう。

        UE4には「性能が低めのデバイス向けに単純化したマテリアルを作成することができます。」と書かれてあります。

        コードが書けないデザイナーでも、任意のテクスチャをそれぞれのデバイスに応じて選択できるわけです。

        UE4サイコー!

         

        Move on to BluePrint!

        We'd firstly start to put a camera on BP to make a switch for the post process we need. 

         

        1. Get a camera component on "Event Graph" and set its camera's "Focus Settings" and itself as the target. Make a variable "Focus settings" to connect to it. You might want to skip this process If you don't need settings for Focus.

         

        2. Set "Post Process Settings". Make a variable "Post Process Settings" to connect to it.

         

        3. Set "Set Post Process Blend Weight" after it.  And set any key for calling it during play its level If you need.

        In my case, it's set "0: default", "1:BaseColor", "2: WorldNomal", "3: Roughness", "4 to 9: My setting", something like below.

         

        では、ブループリントを作っていきましょう。

        まずはカメラをBP上に作成します。

        1. カメラコンポーネントを取得します。カメラの”Focus Settings” をセットし、自身をターゲットとして繋ぎます。"Focus Settings"を変数として作成して、繋ぎます。 もしカメラのフォーカス設定が必要ない方はこの工程をスキップして良いです。

        2. ”Post Process Settings"をセット、変数を作成して繋ぎます。

        3. その後、"Set Post Process Blend Weight"を繋ぎ、必要な場合は呼び出す為のキーを割り当てます。

        複数の切り替えが出来るように、それぞれのキーを割り当てると便利です。プレイしてみて、下記のようになるはずです。

         

         

        Got a job done. Let's go to level and do this.

        Thank you for reading and enjoy UE4 life!

         

        | UE4 | 11:55 | comments(0) | - |
        Widget and Niagara
        0

          ごきげんいかがですかー。

          とうとうCGWORLD Vol.250が発売されました。

          https://cgworld.jp/magazine/cgw250.html

           

           

          私はUIデザイナー向けのNiagaraEditorチュートリアルを担当させて頂きました。

          みんなでNiagaraを楽しみましょう。

          雑誌で紹介したプロジェクトファイルは下記です。

          https://github.com/Aquariaue4/UE4Projects

           

          では、さっそく作り方をご紹介。


           

          [ざいりょう]

          • "Niagara System"*1
          • "Niagara Emitter"*1
          • "Niagara Module Script" *2
          • "RenderTargetTexture" *1
          • "WidgetBP"*1
          • ”良い感じのフォント”

           

          Ex.

          "Niagara Module Script"

          A: テクスチャからパーティクルポジションとカラーを取得して特定のプロパティに格納するモジュール。

          B: 格納したプロパティを利用してモーフィングさせるモジュール。

           

          "Blueprint"

          レンダーターゲットにWidgetを描画して、Niagaraをスポーンさせる。

           

          ”いい感じのフォント”

          あまり細いと見えない。太目推奨。

           


           

          [Niagara Emitter]

          まずは大量のパーティクルを利用するために、SimTargetをGPUに変更します。

           

          1.今回は一度しかパーティクルを発生させないので、値を”1”に変更します。

          2.最終的にRenderTargetTextureを入れますが、まずは確認用のテクスチャを入れます。

           

          Spawn Burst Instantaneousはパーティクルを一度に発生させるものです。今回はマシンが動く限りの数値を入れてみました。通常は処理との相談になりますけど。

           

          パーティクルの発生位置・色・ライフを定め、各プロパティに順番に格納します。

           

          1.まずはパーティクルをBoxの形に発生させます。

          次に作成するモジュールをBoxLocationの下に置きます。BoxScaleは発生させたパーティクルの範囲、つまりBoxLocationと同じ数値を入力します。この数値をテクスチャのUVに変換して、該当部分の色を取得します。

           

          2.テクスチャの特定チャンネルを利用する事で、色ごとに処理を分ける事が出来ます。

           

           

          [Niagara Module Script]

          現在のパーティクル位置をUVに変換し、テクスチャの色を取得する処理を作ります。

          MapGetに以下のプロパティを呼び出します。

           

          Particles.Vector

          • Particles.Position

          Module.Vector

          • Module.BoxScale

          Module.Int

          • Module.ColorChannel

          Emitter.TextureSample

          • Emitter.TextureSample

          1.IntをChannelに変換します。これをターゲットチャンネルとして次に説明するノードに繋ぎます。

          2.取得したBoxScaleの値からUVを算出し、各パーティクルの位置に相当するテクスチャの色を取得します。

           

          1.色を取得した各パーティクルを特定の色でふるいにかけます。

           

          2.カラーの値がAlphaで指定された値より小さければ、パーティクルは新たに指定されたポジション・色・ライフを与えられます。ここではライフを0にして、発生した後このモジュールを通った時点でパーティクルは消えるようにしています。

           

          3.パーティクル発生範囲のX軸をカーブの値の横軸として利用するため、Floatとして保存します。

           

           

          [Niagara Emitter]

          1.新しくプロパティを作成し、アニメーション開始時の色を登録します。

          2.アニメーション開始時の位置を決めるため、Locationモジュールを利用して、パーティクルを再配置します。今回はBoxの形状に一旦配置した後、CurlNoiseLocationを利用してノイズを与えています。

           

          3.再配置した値は現在のパーティクル位置、Particles.Positionです。新しく作成したプロパティにこれを繋ぎます。▽のドロップダウンメニューから選択します。

           

           

          CurlNoiseForceを使用して、パーティクルに動きを与えます。

           

           

          [Niagara Module Script]

          Particles.Spawnで設定した値を使って、モーフィングの処理を作ります。

          まずはMapGetで必要な情報を取得します。

          Particles.Vector

          • Particles.BeginningPosition
          • Particles.EndPosition

          Module.float

          • Module.MorphRate
          • Module.AffectedPosition
          • Module.WorldPosition
          • Module.NewVariable

          Particles.LinearColor

          • Particles.BeginningColor
          • Particles.EndColor

          Engine.DeltaTime

          • Engine.DeltaTime

          Particles.float

          • Particles.NewTime

          Particles.Position

          • Particles.Position

          1.Lerpを使って、パーティクルのポジションとカラーを決めます。1に近ければテクスチャ通りの見た目になるはずです。

          2.現在のX座標より多い値が入力されたら、1で決定した値を現在のパーティクルに影響させ、カーブ用に用意した新しい時間をカウントします。

           

          3.カーブの横軸の為に新しい時間を作ります。

           

           

          [Niagara Emitter]

          先に作成したモジュールをParticleUpdateの一番下に追加します。

          あとは任意のカーブを設定すると、モーフィングアニメーションの完成です。

          1.影響を与える範囲をここで設定します。まずはカーブに切り替えて、0-1の値を設定します。

           

          2.今回は正規化されたパーティクルAgeを使いましたが、ここは自分の作りたいものに応じて変更してください。

           

          3.パーティクルの位置と色を調整するFloatです。これもカーブに切り替えて編集します。

           

          4.カーブの横軸は先に設定した、影響を受けた時点からカウントされる時間です。モジュールで設定したParticles.NewTimeを繋げてください。

           

          5.ここでは4と同じくParticles.NewTimeを繋いでますが、上のNewVariable(カラーのLerpに作用するFloat値)の横軸として、例えばBPを用いて別の値を入力しても面白いかもしれません

           

           

          この時点で、パーティクルがXに沿ってテクスチャと同じ見た目に並ぶはずです。

          次はBluePrintの設定を行います。

           


           

          [Blue Print]

          まずはおかずさん宅の”RenderWidgetToTarget Plugin”というプラグインをオンにしているか確認してください。

          https://github.com/pafuhana1213/RenderWidgetToTarget#renderwidgettotarget-plugin 

          @pafuhana1213

           

          一番初めにWidgetをレンダーターゲットに描画します。

          1.Draw Widget to Target を呼び出し、先に設定したレンダーターゲットテクスチャを設定します。この時、DrawSizeはテクスチャと同じにします。

           

          確認しやすいように、任意のキーを割り当てて、NiagaraEmitterを発生させます。

          最終的にはカスタムeventに置き換えてください。

           

          今回は使いませんが、任意のストリングデータをレンダーターゲットに描き込むことができるので、これを利用してもパーティクルで文字が出せます。

          "Begin Draw Canvas to Render Target"の後に、実際に描き込みたいものを指定し、”End Draw Canvas to Render Target”で描画を終了します。

           

          ふわあああ。結構まじめに書いたー。

          最後まで読んでくれた方は、感謝!

          実際にNiagaraでこれ試してくれた方には、Doble thums up!

           

          Thank you guys!

          Peace!

          | UE4 | 03:48 | comments(0) | - |
          Morphing with render target texture in Niagara (3)
          0

            Let's construct blueprint.

             

            Open your BP and add one Niagara component under SceneRoot. And make some Variables.

            • Canvas Render Target 2D
            • Texture Render Target 2D
            • Canvas
            • Vector 2D
            • String
            • Material Interface
               

            [BluePrint]

             

             

            1. Set "TextureRenderTarget2D" and set ready for drawing on canvas.

            2. Use "Begin Draw Canvas to Render Target" to draw text as texture.

            3. Clear this texture once if you need.

             

             

            This Custom event can be called at any times you need changing text.

            1. Make a custom event. Draw texture on any canvas and connect "Size" in "Begin Draw Canvas to Render Target" to "Screen Size".

            2. Call "Draw Text" and set its text size and any string. "Screen Position" should be same size as 
            "render target texture" and "Render Color" also should be red color if you set "niagara module script" like it gives only red some effects.

             

             

            You can set any variable for letting niagara move whatever you like, for instance sounds or distance.
            You should set properties that belong "User." in namespace in Niagara Emitter.

             

            Set "Draw Material to Render target" to draw material on the another "TextureRenderTarget2D".

            This wouldn't be needed a delay node though, I did for some reason.

             

            [Material]

            later on.

            | UE4 | 10:28 | comments(0) | - |
            Morphing with render target texture in Niagara (2)
            0

              This is the way of setting Morph target.

               

               


               

              [Niagara Emitter]

              Put a new Module you set on "Particle Update".

              Now, you won't see your screen like this picture as I mentioned before.
              This "Niagara Module Script" will be let us make later anyway, and now I'm gonna explain each parameter below.

              1. Put the render target texture you set on EndTex.
              2. "MovingRate" affects the particle position "MidPosition".
              3. "MovingTextRate" affects "EndPosition".

              4. Put the another render target texture you set on SampleTex.
              5. "ScalingRate" affects the particle scale "MidScale".
              6. "ScalingTextRate" affects "EndScale".

               

               

              Ex. When you want to emphasize "EndTex" rather than "SampleTex".

              MovingRate: 0;

              MovingTextRate: 140;

               

               

              [Niagara Module Script]

              Let's edit Niagara Module Script.

              First, we're gonna need 6 parameters in MapGet to calculate particle color and new position. 

               

              Particles.Vector

              • Particles.BeginningPosition
              • Particles.Range
              • Particles.BeginningScale

              Module.float

              • Module.MovingRate
              • Module.ScalingRate

              Module.TextureSample

              • Module.SampleTex

              And also 3 parameters are needed in MapSet.

              • Particles.MidPosition
              • Particles.MidScale
              • Particles.MidColor

               

              Next, Put new "Map Get" and "Map Set" in the same node graph and set new parameters in it.

               

              Particles.Vector

              • Particles.BeginningPosition
              • Particles.Range
              • Particles.BeginningScale

              Module.float

              • Module.MovingTextRate
              • Module.ScalingTextRate

              Module.TextureSample

              • Module.EndTex

              And also 3 parameters are needed in MapSet.

              • Particles.EndPosition
              • Particles.EndScale
              • Particles.EndColor

              1. Use "Sample Texture 2D" to set up particle color with each particle position and texture. First, set range of particle position of beginning as UV(0-1) with "Remap Range".

               

              2. Particle position"MidPosition" is made with 3 values that contain color range(R:0-1 + G:0-1) , vector "BeginningPosition" and any scale "MovingRate".

               

              3. Particle position"EndPosition" is made with 3 values that contain color range(R:0-1) ,"BeginningPosition" and "MovingTextRate".

               

              4. Set up particle color with each particle position and texture same as the way of 1.

               

              5. Particle Scale "MidScale" is the value that is added "BeginningPosition", color: R+G and any scale "ScalingRate".

               

              6. Particle scale "EndScale" is the value that is added "BeginningPosition", color: R and "ScalingTextRate".

               


               

              [Niagara Emitter]

              Put a new Module you set on "Particle Update".

              We're gonna make this "Niagara Module Script" later, and now I'm gonna explain this module below.

              It's used for morphing from "BeginningPosition" to "NoisePosition" and to "EndPosition" with each parameter.

              Click a triangle button and choose any types is the way that its parameter turn "float" into "Curve".

              Case of Curve


              1. Choose "Float from Curve" and adjust curve.
              2. If you may want to adjust curve in unnormalized time, you can turn "NormalizedAge" to any value like "Engine's realtime".

               

               

              [Niagara Module Script]

              We're gonna need parameters in MapGet to decide final Particles position, scale and color. 

               

              Particles.Vector

              • Particles.BeginningPosition
              • Particles.MidPosition
              • Particles.BeginningScale
              • Particles.MidScale
              • Particles.EndPosition
              • Particles.EndScale
              • Particles.NoisePosition

              Module.float

              • Module.MorphRate
              • Module.MorphEndRate
              • Module.NoiseRate

              Particles.LinearColor

              • Particles.MidColor
              • Particles.EndColor

              And also 3 parameters are needed in MapSet.

              • Particles.Position
              • Particles.Scale
              • Particles.DynamicMaterialParameter

              1. Set up new position that is in between "BeginningPosition" and "MidPosition".
              2. Set up new scale that is "BeginningScale" and "MidScale".

              3. Set up new position that is in between the position of 1 and "EndPosition".
              4. Set up new scale that is between the scale of 2 and "MidScale".

              5. Set up new position that is in between the position of 3 and "NoisePosition".

              6. Set up new color between that is "MidColor" and "EndColor".

               


               

              Ex. When you want to emphasize "EndTex" rather than "SampleTex" .

              MorphEndRate:  0.5<;

               

               

              Ex. When emphasizing extent of scale.

              MorphRate: 0<;

               

              Ex. When emphasizing noise.

              NoiseRate: 0<;

               


               

               

              [Render]

              Turn sprite renderer to "NiagaraMeshRendererPropaties" and put a mesh as particle Mesh. 

               

               

               


              Next, We're gonna finally edit BluePrint.

              Thank you.

              | UE4 | 15:32 | comments(0) | - |
              Morphing with render target texture in Niagara (1)
              0

                What's up guys?

                Today, I'm blogging how to creat Niagara with Texture Render.


                First, Please make sure your Niagara plugin on.
                Next, Let's make some assets.

                 


                 

                [Ingredients]

                "Niagara Emitter"*1

                "Niagara Module Script" *4

                "Blueprint"*1

                "Material" *2

                "RenderTargetTexture" *2

                 

                Ex.

                "Niagara Module Script"

                A: It's for counting total particles.

                B: For decide range of spawn.
                C: Third is for setting texture and particles position whatever you lke are needed.

                D: It's gonna adjust particle's position and color and scale between A and B.

                 

                "Blueprint"

                This draws "materials" and "Render texture" and controls spawn.

                 


                 

                [Niagara Module Script]

                1. Put "Module.Int" in MapGet 3 times and rename. This is for counting total particles and culculation of length of each particle. Second, Input 4 "Emitter.int" in MapSet. Spawn count is NumX * Num Y * NumZ at this time.

                 

                 

                [Niagara Emitter]

                1. Put "Niagara Module Script" that you edited on "Emitter Update".

                 

                2.Add "Spawn Burst Instantaneous" and let "Spawn Rate" disable.

                Parameter of "Spawn Count" is "Emitter.TotalNum" at that time.


                 

                [Niagara Emitter]

                1. Put "Particles.Scale" in "Set Variables" for its mesh's scale.

                 

                2.Put the new"Niagara Module Script" you're gonna edit next on "Particle Spawn" and you may not find any parameter right now.

                Next, add 9 parameters below in Parameters tab.

                Type:Vector

                • Particles.BiginningPosition
                • Particles.BiginningScale
                • Particles.EndPosition
                • Particles.EndScale
                • Particles.MidPosition
                • Particles.MidScale
                • Particles.NoisePosition

                Type:LinearColor

                • Particles.EndColor
                • Particles.MidColor

                3.Drag and drop "BiginningPosition" under " Niagara Module Script" you added and link current position.

                 

                4.Drag and drop "BiginningScale" and link current scale.

                 

                5.Add "Curl Noise Location" and drop "NoisePosition" under it.

                 

                [Niagara Module Script]

                You may feel this have a bit complexity.
                Speaking easily, these nodes work to line each particle in order with numbers of XYZ.

                 

                Call 4 parameters at "MapGet".

                • Module.SpawnRange
                • Emitter.NumX
                • Emitter.NumY
                • Emitter.NumZ

                Call 2 parameters at "MapSet".

                • Particles.Position
                • Particles.Range

                 

                1. Set up the length between each particles with these nodes as above.  Length = Spawn Range / (Particle count:X or Y or Z - 1)

                2. Construct some nodes to calculate X, Y and Z position of each particle.

                • Current particle position X = Fmod( Current particle ID, particle count: X) * Length
                • Current particle position Y = (Floor( Current particle ID, particle count: Y) - Floor( Current particle ID / particle Count: X*Y) * Particle count: Y) * Length
                • Current particle position Z = Floor( Current particle ID / particle Count: X*Y) * Length

                 

                Now, each particle which is executed is gonna has each position.
                If you'd return and look at screen of "Niagara Emitter", you could find a new parameters "SpawnRange" in module.

                 

                 


                 

                Next, I'm gonna show the way of setting Morph target.

                | UE4 | 06:08 | comments(0) | - |
                Chuni Text Material
                0

                  Shader for GUI

                   

                  Made this today first of all.

                  This is a material for GUI asset in UE4 for immature people have like hot heart of schoolboy.

                  Next step will be setting GUI Blue Print.

                  And explaining it will be done other day.

                  | UE4 | 02:07 | comments(0) | - |
                  EventBeginPlay
                  0

                    Hello World! Test Test.

                     

                    It's Aquaria-901C. Welcome to my blog!

                    This Blog is starting from now on is made for sharing knowleadge of ue4.

                    Um.. And, I'm gonna talk aboout Oreo too.

                    Take it easy!

                    | Other | 07:01 | comments(0) | - |
                    CALENDAR
                    S M T W T F S
                    1234567
                    891011121314
                    15161718192021
                    22232425262728
                    293031    
                    << December 2019 >>
                    SELECTED ENTRIES
                    CATEGORIES
                    ARCHIVES
                    モバイル
                    qrcode
                    PROFILE