Skip to content

Commit 60f8cb4

Browse files
committed
プロパティ名を変更しREADMEを加筆
1 parent d629d88 commit 60f8cb4

File tree

5 files changed

+104
-62
lines changed

5 files changed

+104
-62
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
## [0.1.1] - 2022-09-28
44

55
- [FIXED] shiftとfilterModeが実行時にリセットされていた不具合を修正
6+
- [Changed] プロパティ名を一部変更
67

78
## [0.1.0] - 2021-10-27
89

README.md

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
UIなどの2Dのレンダリング解像度はそのままに、3Dのレンダリング解像度を下げることで、見た目のクオリティを維持したまま、処理負荷を軽減することが期待できます。
88
本コンポーネントは特定のカメラのレンダリング解像度を動的に変更する事が可能です。
99

10-
1110
## Dynamic Resolutionとの比較
1211

1312
Unity2018以降のバージョンでは[Dynamic Resolution](https://docs.unity3d.com/ja/2018.4/Manual/DynamicResolution.html)が実装されています。
@@ -21,14 +20,26 @@ Dynamic Resolutionの使用サンプルは[こちら](https://github.com/katsuma
2120

2221
## 使い方
2322

24-
[RenderTextureCamera.cs](https://github.com/katsumasa/RenderTextureCamera/blob/master/Runtime/Scripts/RenderTextureCamera.cs)をレンダリング解像度を変更したいCameraのGameObjectにADDして下さい。
23+
1. レンダリング解像度を変更する為のCameraを生成します。(既に描画対象毎にCameraが別れている場合は、新たに生成する必要はありません。)
24+
2. このCameraが何をレンダリングするかを明示的に指定する為に[cullingMask](https://docs.unity3d.com/ja/current/ScriptReference/Camera-cullingMask.html)を設定します。
25+
3. このCamera Objectへ[RenderTextureCamera Component](https://github.com/katsumasa/RenderTextureCamera/blob/master/Runtime/Scripts/RenderTextureCamera.cs)をにADDして下さい。
26+
4. RenderTextureCamer Componentの`renderTextureCamera` プロパティへ1で生成したCamera Objectを設定します。
27+
5. 同じく`blitCamera`プロパティへRenderTexure Cameraでレンダリングした内容を描画したいCameraを設定します。
28+
6. `blitCamera`プロパティへ設定したCamera Componentの`cullingMask`から2で設定したレイヤーを除外して下さい。
29+
7. `shift`プロパティや`filterMode`プロパティで解像度やフィルターモードを必要に応じて指定します。
30+
31+
### ヒント
32+
33+
既に3Dオブジェクトと2DオブジェクトでCameraが別れているプロジェクトで3Dのレンダリング解像度を下げたい場合、3Dオブジェクト用のCameraにRenderTextureCamera ComponentをADDし、`renderTextureCamera`プロパティへ3Dオブジェクトのレンダリング用Camera、`blitCameraプロパティへ2Dオブジェクトレンダリング用のCameraを設定します。
34+
35+
## プロパティ
2536

2637
### renderTextureCamera
2738

2839
レンダリング解像度を下げたいカメラを指定します。
2940
3Dをレンダリングするカメラを想定しています。
3041

31-
### mainCamera
42+
### blitCamera
3243

3344
renderTextureCameraの上にレンダリングを行うカメラを指定します。
3445
UIなど2Dをレンダリングするカメラを想定しています。
@@ -43,7 +54,7 @@ renderTextureCameraでレンダリングした内容をmainCameraへBlitする
4354
RenderTextureのサイズを指定する為に使用します。
4455
0の場合、ScreenSizeのままとなります。
4556

46-
```
57+
```:
4758
RenderTextureのサイズ = Screenサイズ >> shift
4859
```
4960

@@ -53,16 +64,15 @@ RenderTextureのフィルターモードを指定します。
5364

5465
※下記のサンプル表示は全てレンダリング解像度は`shift=5`に設定しています、
5566

56-
#### Point
67+
##### Point
5768

5869
![image](https://user-images.githubusercontent.com/29646672/138979993-a1b9bdd8-4938-4e4a-be5a-2ebf59213b06.png)
5970

60-
#### Bilinear
71+
##### Bilinear
6172

6273
![image](https://user-images.githubusercontent.com/29646672/138980101-763dea0f-309f-4738-be30-8d6aceb29c1c.png)
6374

64-
65-
#### Trilinear
75+
##### Trilinear
6676

6777
![image](https://user-images.githubusercontent.com/29646672/138980170-97e67d4b-99cd-4e6b-9f85-599df7f7161e.png)
6878

Runtime/Scripts/RenderTextureCamera.cs

Lines changed: 60 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -9,40 +9,50 @@ namespace UTJ.RenderTextureCamera
99
{
1010
// レンダリング先にRenderTextureを使用し解像度を下げる
1111
// 使い方
12-
// renderTexture:レンダリング解像度を下げたいCameraを設定
12+
// m_RenderTextureCamera:レンダリング解像度を下げたいCameraを設定
1313
// mainCamera : RenderTextureCameraの上にレンダリングを行うCameraを設定
1414
// shift : スクリーン解像度に対してshift分右へシフトさせRenderTextureのサイズを決定する
1515

1616

1717
public class RenderTextureCamera : MonoBehaviour
1818
{
19-
[Tooltip("レンダリング先をRenderTextureとするCameraを指定する")]
19+
[Tooltip("レンダリング解像度を下げたいCamera(レンダリング先をRenderTextureとするCamera)")]
2020
// 自身のCamera
21-
[SerializeField] Camera renderTextureCamera;
21+
[SerializeField] Camera m_RenderTextureCamera;
2222

23-
[Tooltip("Render TextureのベースにするCamera(2D Camera,Main Camera... etc.")]
23+
[Tooltip("RenderTextureを描画(Blit)するCamera(2D Camera,Main Camera... etc.")]
2424
// mainCamera
25-
[SerializeField] Camera mainCamera;
25+
[SerializeField] Camera m_BlitCamera;
2626

27-
[Tooltip("RenderTextureをmainCameraへBlitするタイミング。※BeforeForwardOpaqueから変更する必要は無い")]
28-
[SerializeField] CameraEvent mCameraEvent = CameraEvent.BeforeForwardOpaque;
27+
[Tooltip("RenderTextureをBlitCameraへBlitするタイミング。※基本的にはBeforeForwardOpaqueから変更する必要はありません")]
28+
[SerializeField] CameraEvent m_CameraEvent = CameraEvent.BeforeForwardOpaque;
2929

3030
// RenderTextureのフィルターモード
31-
[SerializeField][HideInInspector] FilterMode mFilterMode = FilterMode.Point;
31+
[SerializeField][HideInInspector] FilterMode m_FilterMode = FilterMode.Point;
3232

3333
// オリジナルの解像度に対して何ビットシフトさせるか
34-
[SerializeField][HideInInspector] int mShift;
34+
[SerializeField][HideInInspector] int m_Shift;
3535

3636
// mShiftに変更があったかどうか
37-
internal bool mIsDirty = false;
37+
internal bool m_IsDirty = false;
38+
39+
public Camera renderTextureCamera
40+
{
41+
get { return m_RenderTextureCamera; }
42+
}
43+
44+
public Camera blitCamera
45+
{
46+
get { return m_BlitCamera; }
47+
}
3848

3949
public FilterMode filterMode
4050
{
41-
get { return mFilterMode; }
51+
get { return m_FilterMode; }
4252
set
4353
{
44-
mFilterMode = value;
45-
mIsDirty = true;
54+
m_FilterMode = value;
55+
m_IsDirty = true;
4656
}
4757
}
4858

@@ -51,97 +61,97 @@ public int shift
5161
{
5262
get
5363
{
54-
return mShift;
64+
return m_Shift;
5565
}
5666

5767
set
5868
{
59-
mShift = value;
60-
mIsDirty = true;
69+
m_Shift = value;
70+
m_IsDirty = true;
6171
}
6272
}
6373

6474

6575
// レンダリングターゲットとして使用するRenderTexture
66-
RenderTexture renderTexture;
76+
RenderTexture m_RenderTexture;
6777

6878
// RenderTextureの内容をmainCameraへBlitする為のコマンドバッファ
69-
CommandBuffer commandBuffer;
79+
CommandBuffer m_CommandBuffer;
7080

7181

7282
// Start is called before the first frame update
7383
void Start()
7484
{
75-
if (renderTextureCamera == null)
85+
if (m_RenderTextureCamera == null)
7686
{
77-
renderTextureCamera = GetComponent<Camera>();
87+
m_RenderTextureCamera = GetComponent<Camera>();
7888
}
7989

80-
if (renderTextureCamera)
90+
if (m_RenderTextureCamera)
8191
{
8292
CreateRenderTexture();
83-
renderTextureCamera.targetTexture = renderTexture;
93+
m_RenderTextureCamera.targetTexture = m_RenderTexture;
8494
}
8595

86-
if (mainCamera)
96+
if (m_BlitCamera)
8797
{
88-
commandBuffer = new CommandBuffer();
89-
commandBuffer.name = "RenderTexture Blit to MainCamera";
90-
commandBuffer.Blit((RenderTargetIdentifier)renderTexture, BuiltinRenderTextureType.CameraTarget);
91-
mainCamera.AddCommandBuffer(mCameraEvent, commandBuffer);
92-
mainCamera.cullingMask &= ~renderTextureCamera.cullingMask;
98+
m_CommandBuffer = new CommandBuffer();
99+
m_CommandBuffer.name = "Blit RenderTexture";
100+
m_CommandBuffer.Blit((RenderTargetIdentifier)m_RenderTexture, BuiltinRenderTextureType.CameraTarget);
101+
m_BlitCamera.AddCommandBuffer(m_CameraEvent, m_CommandBuffer);
102+
m_BlitCamera.cullingMask &= ~m_RenderTextureCamera.cullingMask;
93103
}
94104
}
95105

96106

97107
private void Update()
98108
{
99-
if (mIsDirty)
109+
if (m_IsDirty)
100110
{
101111
CreateRenderTexture();
102-
renderTextureCamera.targetTexture = renderTexture;
103-
commandBuffer.Clear();
104-
commandBuffer.Blit((RenderTargetIdentifier)renderTexture, BuiltinRenderTextureType.CameraTarget);
105-
mIsDirty = false;
112+
m_RenderTextureCamera.targetTexture = m_RenderTexture;
113+
m_CommandBuffer.Clear();
114+
m_CommandBuffer.Blit((RenderTargetIdentifier)m_RenderTexture, BuiltinRenderTextureType.CameraTarget);
115+
m_IsDirty = false;
106116
}
107117

108-
if (mainCamera != null && renderTextureCamera != null)
118+
if (m_BlitCamera != null && m_RenderTextureCamera != null)
109119
{
110120
// MainCameraからRenderTextureCameraのターゲットを除く
111-
mainCamera.cullingMask &= ~renderTextureCamera.cullingMask;
121+
m_BlitCamera.cullingMask &= ~m_RenderTextureCamera.cullingMask;
112122
}
113123
}
114124

115125

116126
private void CreateRenderTexture()
117127
{
118-
if (renderTexture != null)
128+
if (m_RenderTexture != null)
119129
{
120-
renderTexture.Release();
121-
renderTexture = null;
130+
m_RenderTexture.Release();
131+
m_RenderTexture = null;
122132
}
123133

124-
renderTexture = new RenderTexture(Screen.currentResolution.width >> shift, Screen.currentResolution.height >> shift, 24);
125-
renderTexture.useMipMap = false;
126-
renderTexture.filterMode = mFilterMode;
127-
renderTexture.useDynamicScale = renderTextureCamera.allowDynamicResolution;
128-
renderTexture.Create();
134+
m_RenderTexture = new RenderTexture(Screen.currentResolution.width >> shift, Screen.currentResolution.height >> shift, 24);
135+
m_RenderTexture.useMipMap = false;
136+
m_RenderTexture.filterMode = m_FilterMode;
137+
m_RenderTexture.useDynamicScale = m_RenderTextureCamera.allowDynamicResolution;
138+
m_RenderTexture.Create();
129139
}
130140

131141

132142
private void OnDestroy()
133143
{
134-
if (renderTexture)
144+
if (m_RenderTexture)
135145
{
136-
renderTexture.Release();
137-
renderTexture = null;
146+
m_RenderTexture.Release();
147+
m_RenderTexture = null;
138148
}
139-
if (mainCamera)
149+
if (m_BlitCamera)
140150
{
141-
mainCamera.RemoveCommandBuffer(mCameraEvent, commandBuffer);
142-
if (commandBuffer != null)
151+
m_BlitCamera.RemoveCommandBuffer(m_CameraEvent, m_CommandBuffer);
152+
if (m_CommandBuffer != null)
143153
{
144-
commandBuffer.Clear();
154+
m_CommandBuffer.Clear();
145155
}
146156
}
147157
}

Runtime/Scripts/RenderTextureCameraEditor.cs

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,26 +5,47 @@
55
using UnityEngine.Rendering;
66
using UnityEditor;
77
using System.IO;
8-
8+
using System.Globalization;
99

1010
namespace UTJ.RenderTextureCamera
1111
{
1212
[CustomEditor(typeof(RenderTextureCamera))]
1313
public class RenderTextureCameraEditor : Editor
1414
{
15+
static class Styles
16+
{
17+
18+
}
19+
1520
public override void OnInspectorGUI()
1621
{
1722
base.OnInspectorGUI();
1823

1924
var renderTextureCamera = target as RenderTextureCamera;
2025

26+
if(renderTextureCamera.renderTextureCamera == null)
27+
{
28+
EditorGUILayout.HelpBox("RenderTextureCameraが設定されていません。",MessageType.Error);
29+
}
30+
if(renderTextureCamera.blitCamera == null)
31+
{
32+
EditorGUILayout.HelpBox("BlitCameraが設定されていません。", MessageType.Error);
33+
}
34+
if(renderTextureCamera.renderTextureCamera != null && renderTextureCamera.blitCamera != null)
35+
{
36+
if((renderTextureCamera.renderTextureCamera.cullingMask & renderTextureCamera.blitCamera.cullingMask) != 0)
37+
{
38+
EditorGUILayout.HelpBox($"{renderTextureCamera.blitCamera.name}{renderTextureCamera.renderTextureCamera}のcullingMaskに一致するレイヤーが含まれています。レンダリング対象が重複しないようにcullingMaskの設定を見直して下さい。", MessageType.Error);
39+
}
40+
}
41+
2142
EditorGUI.BeginChangeCheck();
2243
renderTextureCamera.shift = EditorGUILayout.IntSlider("Shit", renderTextureCamera.shift, 0, 6);
2344
renderTextureCamera.filterMode = (FilterMode)EditorGUILayout.EnumPopup("FilterMode", renderTextureCamera.filterMode);
2445

2546
if (EditorGUI.EndChangeCheck())
2647
{
27-
renderTextureCamera.mIsDirty = true;
48+
renderTextureCamera.m_IsDirty = true;
2849
}
2950
}
3051
}

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
{
22
"name": "com.utj.rendertexturecamera",
33
"displayName": "RenderTextureCamera",
4-
"version": "0.1.0",
5-
"unity": "201.1",
4+
"version": "0.1.1",
5+
"unity": "2017.1",
66
"keywords": [
77
"unity",
88
"camera",

0 commit comments

Comments
 (0)