サンマプログラミング

ゲームプログラマーとして主にUnity&UnrealEngineについての記事を掲載させてもらいます。時々DirectXとか・・・どうぞ見てらえれば幸いです。

Unity5でのRenderSettingsについてのあれこれ

今回はUnity5でのRenderSettingsについて記事にさせていただきました。

 はじめにそもそもUnity4ではあったRenderSettingsが、Unity5ではメニューのEdit部分からなくなっています。なのでRenderSettingsの解説&Editor拡張の復習もかねて新しく独自につくってしまおうと思います。そして覚書のため。

まずはRenderSettingsの解説をしていこうと思います。

fog             : フォグ効果を適用するの判別
fogColor    : フォグカラー設定
fogMode   : フォグ効果の3種類のどれかを選択
                    Linear                             ⇒  始点と終点の間でリニア方式で増加(線形フォグ)

                    Exponential                ⇒  指数的に増加(指数フォグ)

                    ExponentialSquared ⇒  フォグ効果は距離の 2 乗と共に指数的に増加(乗指数フォグ)

fogDensity   : フォグの密度指数(Exponential&ExponentialSquaredときのみ)
fogStartDistance : フォグの開始位置の距離(Linearのときのみ)
fogEndDistance  : フォグの終了位置の距離(Linearのときのみ)
 

ambientMode : 周囲の照明モードの4種類のどれかを選択
                       Skybox ⇒ スカイボックスベースまたはカスタムの周囲の照明

                       Trilight  ⇒ Trilight周囲の照明

                       Flat          ⇒ Flat周囲の照明

                       Custom ⇒ 設定スカイボックスかcustomReflectionのCubemapが適用

ambientLight          : 環境光のカラー設定(Flat&Trilightのときのみ)
ambientSkyColor   :  ambientLightを変更すると適用されるので使用しない
ambientEquatorColor : 横向きオブジェクトに影響を与える際使用(Trilightのみ)
ambientGroundColor : 下向きオブジェクトに影響を与える際使用(Trilightのみ)
ambientIntensity  : 全体の光源色に影響を与える際使用(Custom以外)
ambientProbe   : Skybox &Custom 周囲の照明データ(今回は使用しない)
skybox       : 広大に広がる世界を表示する画面全体周辺のラッパー
 

haloStrength : LightスクリプトのDrawHaloのサイズを変更する際使用
 

DefaultReflectionMode : デフォルト反射モードの2種類のどれかを選択
    Skybox ⇒ 設定されたスカイボックスが反射される

                      Custom ⇒ 設定されたcustomReflectionが反射される

customReflection : Custom 用の鏡面反射キューブマップを設定
 

flareFadeSpeed: Lightスクリプトで設定のFlareのScene変更時フェードスピード
flareStrength : Lightスクリプトで設定のFlareの強さ
とまぁ~長々説明させていただきました。

メニューのWindowでRenderSettingsをクリックでシートがでるので設定できます。

下につくってみたソースを掲載させていただきます。そのままコピーで使用可能です。なにか疑問があればいろいろコメントお願いします。それとLavelの上にマウスカーソルがのると説明文が表示するようにしたいのでやり方があるのであれば教えてほしいです^^;

using UnityEngine;
using UnityEngine.Rendering;
using UnityEditor;

[InitializeOnLoad]
public class CustomRenderSettings : EditorWindow
{
/// <summary>
/// RenderSettingウィンドウ生成
/// </summary>
[MenuItem("Window/RenderSettings")]
static void Init()
{
EditorWindow.GetWindow(typeof(CustomRenderSettings));
}

/// <summary>
/// Fog関連
/// </summary>
bool fog
{
get { return RenderSettings.fog; }
set { RenderSettings.fog = value; }
}
Color fogColor
{
get { return RenderSettings.fogColor; }
set { RenderSettings.fogColor = value; }
}
FogMode fogMode
{
get { return RenderSettings.fogMode; }
set { RenderSettings.fogMode = value; }
}
float fogDensity
{
get { return RenderSettings.fogDensity; }
set { RenderSettings.fogDensity = value; }
}
float fogStartDistance
{
get { return RenderSettings.fogStartDistance; }
set { RenderSettings.fogStartDistance = value; }
}
float fogEndDistance
{
get { return RenderSettings.fogEndDistance; }
set { RenderSettings.fogEndDistance = value; }
}

/// <summary>
/// Ambient&Skybox関連
/// </summary>
AmbientMode ambientMode
{
get { return RenderSettings.ambientMode; }
set { RenderSettings.ambientMode = value; }
}
Color ambientLight
{
get { return RenderSettings.ambientLight; }
set { RenderSettings.ambientLight = value; }
}
//Color ambientSkyColor
//{
// get { return RenderSettings.ambientSkyColor; }
// set { RenderSettings.ambientSkyColor = value; }
//}
Color ambientEquatorColor
{
get { return RenderSettings.ambientEquatorColor; }
set { RenderSettings.ambientEquatorColor = value; }
}
Color ambientGroundColor
{
get { return RenderSettings.ambientGroundColor; }
set { RenderSettings.ambientGroundColor = value; }
}
float ambientIntensity
{
get { return RenderSettings.ambientIntensity; }
set { RenderSettings.ambientIntensity = value; }
}
SphericalHarmonicsL2 ambientProbe
{
get { return RenderSettings.ambientProbe; }
set { RenderSettings.ambientProbe = value; }
}
Material skybox
{
get { return RenderSettings.skybox; }
set { RenderSettings.skybox = value; }
}

/// <summary>
/// Halo関連
/// </summary>
float haloStrength
{
get { return RenderSettings.haloStrength; }
set { RenderSettings.haloStrength = value; }
}

/// <summary>
/// Reflection関連
/// </summary>
DefaultReflectionMode defaultReflectionMode
{
get { return RenderSettings.defaultReflectionMode; }
set { RenderSettings.defaultReflectionMode = value; }
}
Cubemap customReflection
{
get { return RenderSettings.customReflection; }
set { RenderSettings.customReflection = value; }
}

/// <summary>
/// Flare関連
/// </summary>
float flareFadeSpeed
{
get { return RenderSettings.flareFadeSpeed; }
set { RenderSettings.flareFadeSpeed = value; }
}
float flareStrength
{
get { return RenderSettings.flareStrength; }
set { RenderSettings.flareStrength = value; }
}

/// <summary>
/// GUI描画処理
/// </summary>
void OnGUI()
{
// ==================================
// Fog 
// ==================================
GUILayout.Label( "Fog", EditorStyles.boldLabel);
fog = EditorGUILayout.Toggle("Fog", fog);
fogColor = EditorGUILayout.ColorField("Fog Color", fogColor);
fogMode = (FogMode)EditorGUILayout.EnumPopup("Fog Mode", fogMode);
if ( fogMode == FogMode.Linear)
{
fogStartDistance = EditorGUILayout.FloatField("Fog Start Distance", fogStartDistance);
fogEndDistance = EditorGUILayout.FloatField("Fog End Distance", fogEndDistance);
}
else
{
fogDensity = EditorGUILayout.FloatField("Fog Density", fogDensity);
fogDensity = Mathf.Clamp( fogDensity,0.0f, 1.0f);
}

// ==================================
// Ambient & Skybox 
// ==================================
GUILayout.Label( "Ambient & Skybox", EditorStyles.boldLabel);
ambientMode = (AmbientMode)EditorGUILayout.EnumPopup("Ambient Mode", ambientMode);

if (ambientMode != AmbientMode.Custom)
{
if ((ambientMode != AmbientMode.Skybox))
{
ambientLight = EditorGUILayout.ColorField("Ambient Light Color", ambientLight);
}
if (ambientMode == AmbientMode.Trilight)
{
ambientEquatorColor = EditorGUILayout.ColorField("Ambient Equator Color", ambientEquatorColor);
ambientGroundColor = EditorGUILayout.ColorField("Ambient Ground Color", ambientGroundColor);
}
ambientIntensity = EditorGUILayout.FloatField("Ambient Intensity", ambientIntensity);
}
skybox = (Material)EditorGUILayout.ObjectField("Skybox", skybox, typeof(Material), true);

// ==================================
// Halo 
// ==================================
GUILayout.Label("Halo", EditorStyles.boldLabel);
haloStrength = EditorGUILayout.FloatField("Halo Strength", haloStrength);

// ==================================
// Reflection 
// ==================================
GUILayout.Label("Reflection", EditorStyles.boldLabel);
defaultReflectionMode = (DefaultReflectionMode)EditorGUILayout.EnumPopup("Default Reflection Mode", defaultReflectionMode);
if (defaultReflectionMode == DefaultReflectionMode.Custom)
{
customReflection = (Cubemap)EditorGUILayout.ObjectField("Custom Reflection", customReflection, typeof(Cubemap), true);
}

// ==================================
// Flare 
// ==================================
GUILayout.Label("Flare", EditorStyles.boldLabel);
flareFadeSpeed = EditorGUILayout.FloatField("Flare Fade Speed", flareFadeSpeed);
flareStrength = EditorGUILayout.FloatField("Flare Strength", flareStrength);
}
}