cubemap | レンダリングするキューブマップ |
faceMask | 6つの面のどの面をレンダリングするか確定するビットマスク |
bool レンダリングに失敗した場合、false を返します。それ以外は true を返します。
このカメラから静的のキューブマップにレンダリングします。
この関数は Editor 内でシーンの静的キューブマップに"焼き付ける"ために最も役に立ちます。
下記のウィザード例を見てください。もしキューブマップをリアルタイムでアップデートしたい場合、
isCubemap フラグを立てた RenderTexture を変形する RenderToCubemap を使用します。以下を参照してください。
カメラの位置は、クリアフラグとクリッピング平面距離のキューブマップの各面のレンダリングに使用されます。
faceMask
はキューブマップの各面にレンダリングされるべきかを示すビットフィールドです。
設定されている各ビットは面に対応しています。ビット番号は CubemapFace 列挙の int 値です。
デフォルトでは 6 つのすべての面でレンダリングされます(デフォルト値は 63 で下位 6 ビットを持ちます)
この関数はキューブマップのレンダリングに失敗したとき false
を返します。
一部のグラフィックスハードウェアでは機能がサポートされていません。
リフレクションプローブはリアルタイム反射を実行するうえで、より高度な方法であることも頭に入れておきましょう。キューブマップは Create->Legacy オプションを選択することでエディターで作成することができます。
See Also: Cubemap assets, Reflective shaders.
// Render scene from a given point into a static cube map. // Place this script in Editor folder of your project. // Then use the cubemap with one of Reflective shaders! class RenderCubemapWizard extends ScriptableWizard { var renderFromPosition : Transform; var cubemap : Cubemap; function OnWizardUpdate () { helpString = "Select transform to render from and cubemap to render into"; isValid = (renderFromPosition != null) && (cubemap != null); } function OnWizardCreate () { // create temporary camera for rendering var go = new GameObject("CubemapCamera", Camera); // place it on the object go.transform.position = renderFromPosition.position; go.transform.rotation = Quaternion.identity;
// render into cubemap go.GetComponent.<Camera>().RenderToCubemap(cubemap); // destroy temporary camera DestroyImmediate(go); } @MenuItem("GameObject/Render into Cubemap") static function RenderCubemap () { ScriptableWizard.DisplayWizard.<RenderCubemapWizard>( "Render cubemap", "Render!"); } }
using UnityEngine; using UnityEditor; using System.Collections;
public class RenderCubemapWizard : ScriptableWizard {
public Transform renderFromPosition; public Cubemap cubemap; void OnWizardUpdate () { string helpString = "Select transform to render from and cubemap to render into"; bool isValid = (renderFromPosition != null) && (cubemap != null); } void OnWizardCreate () { // create temporary camera for rendering GameObject go = new GameObject( "CubemapCamera"); go.AddComponent<Camera>(); // place it on the object go.transform.position = renderFromPosition.position; go.transform.rotation = Quaternion.identity; // render into cubemap go.GetComponent<Camera>().RenderToCubemap( cubemap ); // destroy temporary camera DestroyImmediate( go ); } [MenuItem("GameObject/Render into Cubemap")] static void RenderCubemap () { ScriptableWizard.DisplayWizard<RenderCubemapWizard>( "Render cubemap", "Render!"); } }
faceMask | キューブマップの各面にレンダリングされるべきかを示すビットフィールド |
cubemap | レンダリングするテクスチャ |
bool レンダリングに失敗した場合、false を返します。それ以外は true を返します。
このカメラからキューブマップにレンダリングします。
これはキューブマップレンダーテクスチャのリアルタイムリフレクションで使用します。
キューブマップ 6 つすべての面を毎フレームレンダリングした場合、特に高価なものとなってしまいます。
カメラの位置は、クリアフラグとクリッピング平面距離のキューブマップの各面のレンダリングに使用されます。
faceMask
はキューブマップの各面にレンダリングされるべきかを示すビットフィールドです。
設定されている各ビットは面に対応しています。ビット番号は CubemapFace 列挙の int 値です。
デフォルトでは 6 つのすべての面でレンダリングされます(デフォルト値は 63 で下位 6 ビットを持ちます)
この関数はキューブマップのレンダリングに失敗したとき false
を返します。
一部のグラフィックスハードウェアでは機能がサポートされていません。
RenderTexture は isCubemap を true に設定されている必要があります。これは以下の例で説明します。
関連項目: RenderTexture.isCubemap、Reflective shaders.
// Attach this script to an object that uses a Reflective shader. // Realtime reflective cubemaps!
@script ExecuteInEditMode
var cubemapSize = 128; var oneFacePerFrame = false; private var cam : Camera; private var rtex : RenderTexture;
function Start () { // render all six faces at startup UpdateCubemap( 63 ); }
function LateUpdate () { if (oneFacePerFrame) { var faceToRender = Time.frameCount % 6; var faceMask = 1 << faceToRender; UpdateCubemap (faceMask); } else { UpdateCubemap (63); // all six faces } }
function UpdateCubemap (faceMask : int) { if (!cam) { var go = new GameObject ("CubemapCamera", Camera); go.hideFlags = HideFlags.HideAndDontSave; go.transform.position = transform.position; go.transform.rotation = Quaternion.identity; cam = go.GetComponent.<Camera>();; cam.farClipPlane = 100; // don't render very far into cubemap cam.enabled = false; } if (!rtex) { rtex = new RenderTexture (cubemapSize, cubemapSize, 16); rtex.isCubemap = true; rtex.hideFlags = HideFlags.HideAndDontSave; GetComponent.<Renderer>().sharedMaterial.SetTexture ("_Cube", rtex); } cam.transform.position = transform.position; cam.RenderToCubemap (rtex, faceMask); }
function OnDisable () { DestroyImmediate (cam); DestroyImmediate (rtex); }