2015年10月26日月曜日

UE4 初心者メモ2

UEで使用可能のテクスチャは

BMP  → .jpg

Dds → .png

Targa → .psd




マテリアルの入力値

・Base Color

マテリアルの表面カラー
Diffuseと同様のもの

・Roughness

表現の荒さを制御する入力値
ベースになるテクスチャの黒い部分は表面にツヤが増し、鏡のような表面になる

・Metalic

テクスチャカラーが明るいほど金属質になる

・Emissive

描画したい部分を色情報として読み込み、部分的なグロー効果

・Nomal

オブシェクトに擬似的な凸凹表現を可能にする
複数のnomalマップを合成することができる

・Material Instance

親のマテリアルから1部のバラメーターを変更した色違いマテリアルを作成可能
 マテリアルを右クリックで「Create Material Instance」を
インスタンスしたものの変更可能なのは、TextureSampleParameter2D、VectorParameter、ScalerParameter

・UEが利用可能のメッシュはFBXとOBJ

FBXはアニメーション情報もボーン情報も保持が可能だが、OBJは✖️
メッシュインポート時、Inport Nomals、Import Nomals and Tnagentsの両方を設定していないと、オートで別なメッシュが上書きされてしまう

2015年10月25日日曜日

UE4 初心者メモ

ジオメトリについて

配置したジオメトリのサイズを変更&Material変更

1.「詳細」>「ブラシ設定」でサイズ変更
2.ブラシ サーフェス (Ctrl + Shift + 左クリックでブラシではなくサーフェスを選択) を選択する
3.と、


4.select(選択)>Select Matching Brush(一致するブラシを選択)
5.コンテンツブラウザからMaterialをドラッグ&ドロップ


配置したジオメトリの形状を変更

1.ジオメトリを選択し、「モード」タブにてジオメトリ編集に切り替える
2.ctrlを押しながら選択(エッジを)
3.Splitを押す(エッジが張られる)

ジオメトリブラシについて

UEで使用できる、レベル内のメッシュ作成ツール
これで大まかなマップ構造を作成。その後、アセット作成で配置。
(マップの設計図みたいのはこれで行う?)

デフォルトで「Additive」になっているが、「Subtractive」にすれば、他のジオメトリをえぐることが可能

コンバートしたスタティックメッシュのライトマップを設定する

コンテンツブラウザに保存されたスタティックメッシュをダブルクリックで開く

UE4.9以降
詳細>ビルド設定>ライトマップUVを作成(Generate Lightmap UVs

UE4.2
window>Generate Unique UVs(=Generate Lightmap UVs)


2015年10月21日水曜日

UE4を始めてみた

オブジェクトの配置

左側のメニュー

「基本」と「BPS」にスフィアやらコーンやらがある。
BPSって何…? 多分バイナリ空間分割(Binary space partitioningかな?https://ja.wikipedia.org/wiki/バイナリ空間分割


オブジェクトの大きさが、基本の方は小さく、BPSの方は大きい。BPSはポリゴンみたいに幾つかのパーツに分かれて出来てる。そのため、Materialをつけたい時は、それ一つずつにドラッグ&ドロップしなきゃならない。が、基本は後付けでも1発で可能。

この二つをどうやって使い分けるのかはその内分かってくるんだろうなー。


Materialを作成

1.左下の「コンテンツブラウザ」>「新規追加」>マテリアル
2.作成したマテリアルをダブルクリックして、「マテリアルエディター」を開く
3.右側の「パレット」から「パラメーター」の「VectorParameter」をグラフ上にドラッグ& ドロップ
4.色を変更
5.今回は一番上の白い○から基本色にノードをつなげる
6.「マテリアルエディター」の保存をクリックで保存する

作成したマテリアルを選択した状態で、BSPのボックスをドラッグ&ドロップ
そしたら、マテリアルに設定した色のボックスが誕生!

・・・Unityに比べて面倒臭くないですかね


Textureを入れてみる

「マテリアルエディタ」のメニューの「ファイル」>「アセットを開く」
テクスチャの一つを選択し、ドラッグ&ドロップ

マスクをかけてみる

2種類のtextureをインポート。もちろん同じ柄。一つはマスクになるためのテクスチャ
何も選択されてない状態で、「マテリアルエディター」の「グラフ」の「詳細」に、「ブレンドモード」を「Masked」を指定。
そうしたら、ノードの部分に「オパシティマスク」が追加される。
マスク用のテクスチャをこれに繋げる。もう一つをベースカラーに。

Prefab(みたいのを)作成

メニューから「保存」で保存する。

以上。・・・ちょっとピンとこない


カメラ配置&プレー

Unityみたいに最初からカメラが配置されてるわけではないみたい。

「モードパネル」>「全てのクラス」>カメラ

このまま再生しても、何も表示されない。ので、もう一つ設定が必要。

「カメラ」>「詳細」>「オートプレイヤーアクティベーション」のAuto Activathが「Disable」になっているので、「Player 0」を選択

ツールバーからビルド。そしてから再生



スカイボックス(みたいのを)

最初はスカイは表示されてないが、一度プレイしてみれば、スカイが出現

アウトライナ」>「Sky Sphere」を選択し、マウス右クリックで太陽のある位置を表示

太陽の明るさを設定

「アウトライナ」>「Sky Sphere」の「Default」にある「Sun Brightness」の値を変更

雲の流れの速さを設定

プレイを押すと雲が流れだす。が、結構遅い。

上記と一緒の「Default」>「Cloud Speed」の値を変更

雲の量を設定

Cloud Opacityの値変更

Atmospheric Fogの設定

光の反射具合をきめる設定
「Sun Multiplier」は空の青さの設定。濃い青か薄い青か の設定。
「Distance Offset」は空の暗さの設定。青空か暗い空か

夕焼けを作る

「アウトライナ」の「Light Source」をダブルクリック
回転ツールで、白い矢印を地面と平行くらいまで回転させる。
そしてビルド。すると赤い空が出来上がる。

(注)Light Sourceを移動させた後は、ビルドしないと反映されない

Skyに関しては、Unityよりは色々いじれそう。


マーケットを使う

UnityでいうAssetStore

今回は、GameTextures Material Pack をダウンロード
ランチャーを開いて、インポートしたいプロジェクトファイルを選択して、インポート

ファイルのMaterialの一つを選択して、BSPのSphereをドラッグ&ドロップ
そしたら、選んだMaterialの柄のスフィアが出来上がる。

しかし、全然球の形じゃない!
「ブラシ設定」の「Tessellation」の値を5に

2015年10月5日月曜日

SkyBoxにオブジェクトをマッピング

http://tsubakit1.hateblo.jp/entry/2015/09/17/233000 参考


1.CameraにRefrection Probeをつける
 Refrection Probeの範囲に入っているものがSkyBoxにBakeされる
 BakeしたいObjectはstaticにチェック
2.Window>LightingのAutoのチェックを外す
3.解像度のResolutionを1024を
4.Bake
 更新したい時は、Customに変更してCubemap内に更新したいCubemapを



5.RefrectionProbe-0 というCubeMapができるはず
6.SkyBoxに設定したMaterialを作る
 Glossy Refrectionのチェックを外す

7.Sceneにドラッグアンドドロップ



2015年10月3日土曜日

ランダムに音声再生

メモ 音をランダムで再生させる


ダメージをくらった時にランダムで再生させる
public class Script : MonoBehaviour 
{
    public AudioClip[] hitClips;

}

private void OnTriggerEnter2D(Collider2D collider2d){
        if(collider2d.gameObject.tag == "DamageObject")
        {
            var clip = hitClips[Random.Range(0,hitClips.Length)];
            AudioSourceController.instance.PlayOneShot(clip);

        }
}

2015年10月2日金曜日

Lightingで遊ぶ2

1.ロボの目を光らせる Textureの変更


http://tsubakit1.hateblo.jp/entry/2015/09/10/233000 参考



このロボットの一枚textureの目を光らせるには、マスクをかけてやればいい
光らせたい部分だけを白くして、他は黒に。

設定はこんな感じで
























これで目だけを光らせることはできるが、もっとそれっぽくするには…

1.Main CameraにBloomスクリプトを
2.MainCameraのHDRをOn
3.Edit>Project Setting>Quality で Anti AliasingをDisabledに

















2.LightProbeのこと

何回目かのLightProveです。

ここに分かりやすく書かれていたように、
(以下 上記リンクから完全コピペです ごめんなさい!)
  • ライトマップの設定時に、ライトの情報を使って設定する
  • ライトマップの光の輝度や色・間接光を各プローブに格納する
  • 近くのProbeと周辺のProbeを元に、ダイナミックなオブジェクトに間接光やライトマップの色を与える
  • LightProbeの影響を受けるオブジェクトはMeshRendererのUseLightprobeがONになっているオブジェクト(Unity5で標準化)
  • 直近のProbe取得は、現在のProbeからノードを辿って追跡する。
配置の方法は、
  • 光の発生源に一つ
  • 光の色が変わるポイント(影がかかっている場所)に配置
  • 壁に配置
  • 出来るだけ間隔を広げる
だそうです!!

2015年9月25日金曜日

Ambient Occlusionを設定してみる

http://tsubakit1.hateblo.jp/entry/2015/09/18/013000 を参考


Ambient Occlusion とは
 物の接地感を出す → 境目がはっきりする

Lighting とかの設定

簡単に家のオブジェクトをおいて、ベイク

今はstaticにした場合だが、動的の時も擬似的にやる方法があるみたい。
それは、リンク先のテラシュールブログさんで…

2015年9月10日木曜日

LightをBakeする

Bakeはここを参考に
http://tsubakit1.hateblo.jp/entry/2015/05/05/133903
http://tongullman.blogspot.jp/2015/05/unity5.html



Bake中に途中でエラーを発してそれ以上動かなくなるということがあった。
その時出たエラーの対処法は以下を参考にしました。
http://cubic9.com/Devel/Unity/Unity5%A4%C7Lightmap%A4%CEbake%A4%ACLight%20Transport%A4%C7%BB%DF%A4%DE%A4%EB%B7%EF%A4%CE%C2%D0%BD%E8/



Lightingの設定項目の見方
http://indie-du.hatenablog.com/entry/2015/06/02/214909
 GIは
 http://indie-du.hatenablog.com/entry/2015/06/04/205556
 ライトマップを焼くのにこれだけは設定しろ!
 http://indie-du.hatenablog.com/entry/2014/12/02/202230

2015年9月2日水曜日

SkyBoxのSunの話


Sunの部分にLightを入れると、skyboxに太陽ができる。
その太陽を設定したい時は、skybox/Procedural
上から・太陽の大きさ
   ・大気圧(薄い=黒い 厚い=赤い)
   ・空の色合い
   ・地面の色
   ・露光(輝度)


角度により、太陽の色が変化する










LightにLens Flareのコンポーネントを付ける
Directionalにチェックを入れるとフレアができる

















Terrainでフィールドを作る

これ(左から2番目)で整地できる

Heightで高さを決める。それが地面全体の基準の高さになる
・道



Terrainの地面からしか、木や草をブラシで生やすことができない。だから、草や木が生えそうなところはあらかじめ地を作っておく。(埋めこんでおく)
今回のものでいえば、横の石壁はオブジェクトだが、そこから草が生えているように見せるために石の中にもTerrainの地面を入れておく。

2015年8月30日日曜日

キャラクター移動の基礎

 ⒈アニメーションの話 

 オブジェクトのスピードが一定以上の時、「走る」アニメーションを
 SetFloat・・はTrigger、Boolとかでも可 

  private Animator animator;

    // Use this for initialization
    void Start () 
    {
        animator = GetComponentInChildren<Animator> ();
    }


  // Update is called once per frame
    void Update () 
    {
        animator.SetFloat ("Speed"20f);
    }




⒉使い回せそうな移動スクリプトの話


CharacterController controller;
    public float MoveSpeed = 7f;
    public float RotationSpeed = 360f;

    // Use this for initialization
    void Start () 
    {
        controller = GetComponent<CharacterController> ();
    }
    
    // Update is called once per frame
    void Update () 
    {
        float h = Input.GetAxis ("Horizontal");
        float v = Input.GetAxis ("Vertical");

        var direction = new Vector3 (

              h * MoveSpeed
              0f
              v * MoveSpeed);
        if(direction.sqrMagnitude > 0.01f)
        {
            Vector3 forward = Vector3.Slerp(

                  transform.forward
                  direction
                  RotationSpeed * Time.deltaTime);

            transform.LookAt(transform.position + forward);
        }
        controller.Move (direction * MoveSpeed * Time.deltaTime);


2015年8月8日土曜日

iTweenでアニメーション

Asset Store


iTweenでNPCが巡回する


NPCオブジェクトにI Tween Event スクリプトを
Nameのところにイベント名を入力
x, y, z の座標にチェック 数字を入力
time で上の座標まで移動する時間を指定
looptype でloopの仕方を指定

iTweenEvent.GetEvent(gameObject,"イベント名").Play();
iTweenEvent.GetEvent(gameObject,"イベント名").Stop();
スクリプトではこれで制御可能


ActionScript入門Wikiで

2015年8月6日木曜日

QuickSetObjectPlacerを使ってみた

Asset StoreのQuickSetObjectPlacerを使ってみた

  1. Asset内の”_QuickSet”のprefabをScene上に配置
  2. セットしたいObjectをScene上に
  3. ”_QuickSet”のAdd an object group を押す
  4. Add a game object を押す。そこに、連続して配置したいオブジェクトを選択
  5. 左に出るチェックボックスにチェックを
  6. START OBJECT PAINTING を押す。

 これでScene上クリックで、そこに選択したオブジェクトを連続配置が可能。


この場合、Hierachy上に個別に配置される。グループでまとめたい時は⑥を押す前にGroup Name と Group Parent を設定してやるといい。


この方法で配置した場合、マウスクリックの位置になるため、バラバラの座標になる。
だから、Edit>Snap Settings で一挙座標を整数値に変えることが出来る。

が、Vキーを押して微調整する方が早いかも

Lightingについて

Lightingで遊ぶ

Sample Assetsをインポート
https://www.assetstore.unity3d.com/jp/#!/content/21064



1.

Scene全体を真っ暗にして・・
SpotLightにLightShaftのスクリプトをつけるだけ
 この方法はDirectionalLightとSpotLightのみ(普通にHaloにチェック入れればOK)

 真ん中に黒い線が走ってしまうのはなんでだろ?
スクリプトのAttenuation curveにチェックを入れて、少しずつ光が弱くなるようにした。
 これで少しごまかせたが…







2.


こんな感じの壁のScene作成


DirectionalLightにLightShaftのスクリプトを付けて、ちょうど窓から射し込むように配置





















結果・・・


これみる感じ、黄色い四角に入ったところしかボリュームライトは出来ないみたい。

⒊IBL&LightProveのこと

・Staticにしたオブジェクトは間接光の影響を受けるが、動的のものは影響を受けない。
そのためにLightProveを設置したら動的のものにも間接光をあてることができる。

・ライトを使うよりも超軽いため、LightProbeで代用する
ただ、影や光沢といった表現を行うことができない


 できてる・・・?

IBL


DirectionalRightを削除して、オブシェクトを全部staticに。IBLのみのライティング
動的オブジェクトにこのライトをつけるには、LightProveを配置する。


上のこの方法は、屋内では使えない。本来暗いはずの室内にもIBLの影響が出てしまうから
こういう時、RefrectionProveを使う。
参考:http://tsubakit1.hateblo.jp/entry/2015/03/17/233423

RefrectionProveはレンダリング結果から反射や色をきめる。
なお、RefrectionProveの設定がBakeの場合はStaticのものしか影響されない

IBLのみ
RefrectionProve使用時
Bloom.csとScreenSpaceAmbientOcclusion.csをMain Cameraに
   これは…陰と陽を強くするものだろうか…?
   まだよく分かってない


テラシュールブログさん:http://tsubakit1.hateblo.jp/entry/2015/05/15/003739
kode80SSRのをやってみた
Assets内の「SSR.cs」「SSR.cs.meta」「Resourcesファイル」を入れれば、できるみたいだったが、なぜか「SSR.cs.meta」を入れられなかったので 元のプロジェクトを開いて作ってみた。
床に赤球が反射している。床のマテリアルのSmoothnessの数値を変更すれば、反射度を変更できる。

2015年8月5日水曜日

Shader学んだことまとめ

再生させたらオブジェクトの色を変える

プロジェクト内でやったこと
・オブジェクト一つの色を変更
・Sceneに存在する全ての色を無色に(カメラにスクリプトを)
 transform.GetComponent<Camera> ().SetReplacementShader (nightvisionShadernull);
  で全てのシェーダーを差し替えできる


ソナーのようなことができるAssetを使ってみた

・オブジェクトを配置して、Asset内に入っていたスクリプトをカメラにつけた

結果… 赤い線が走っているだけのように見えた。
・インターバルの感覚、スピードの調整
・ソナーを出す時に、画面全体の色を黒く。機械視点で見ているような
・カメラを複数置く

とかすれば、ソナーっぽくなるかな?今度やってみる

2015年8月3日月曜日

綺麗なScene切り替え

テラシュールブログさんのhttp://tsubakit1.hateblo.jp/entry/20140505/1399289078やってみた。

FirstSceneには
 ・cube1つ
 ・Create Empty(GameController)に作ったFadeというスクリプトを
          スクリプト内のLodeLevelには次のScene名(SecondScene)を
 ・Inport Packageに入っている、FadeCameraを
SecondSceneには
 ・Cube2つ

Fade.cs
using UnityEngine;
using System.Collections;

public class Fade : MonoBehaviour 
{        
    void Update ()
    {
        if (Input.GetKeyDown (KeyCode.Space)) 
        {
            LoadLevel ("ScondScene");
        }
    }

    void LoadLevel (string name)
    {
        float time = 1// フェードアウト時間
            
        // フェードアウト
        FadeCamera.Instance.FadeOut (time, () =>
                                     {
                
                // フェードアウト完了後の処理(画面は真っ暗)
                Application.LoadLevel(name); // シーン遷移
                
                // フェードイン
                FadeCamera.Instance.FadeIn (time, () =>
                                            
                                      {
                    
                    //  フェードイン完了後の処理
            });
                
            });
            
        }
        
    }




ただ、自分の設定が悪いのか微妙だなー

Lightingについて

前回の続き


Bounce Intensity




Directional LightのBounce IntensityをMAXに。そして、赤床と白い壁のオブジェクトのstaticにチェックを入れる。
そしたら、赤色がうっすら反射している。(形がおかしく明らかに不自然だが…)

この場合、staticが付いていないオブジェクト(動的)には反映されない。そこでライトプローブを使用して、間接光もプローブに焼き付ける。


ライトプローブとは

光源情報を先にベイクしておくことで(ライトの当たり具合を事前に焼き込む)、リアルタイムでもモバイルで動かせるレベルで光源情報を適用させることができる技術。
テラシュールブログ さん

Karasuのアプリ奮闘記さん

のがわかりやすい





ちょっと実験・・・

こんな感じでライトプローブグループを配置


ライトプローブグルーブなし

ライトプローブグルーブあり
うーーーん・・・ありの方は、ワールド全体が赤っぽくなって、白いオブジェクトも赤っぽくなってるけど、金色カプセルには影響なしか…(わかりにくいだけ?)