5 namespace droid.Runtime.Utilities.GameObjects.NeodroidCamera.Synthesis {
9 public static class SynthesisUtilities {
10 static readonly
int _sensitivity = Shader.PropertyToID(
"_Sensitivity");
11 public const string _Shader_Layer_Color_Name =
"_LayerColor";
12 public const string _Shader_Tag_Color_Name =
"_TagColor";
13 public const string _Shader_MaterialId_Color_Name =
"_MaterialIdColor";
14 public const string _Shader_ObjectId_Color_Name =
"_ObjectIdColor";
15 public const string _Shader_OutputMode_Name =
"_OutputMode";
17 public static CapturePass[] _Default_Capture_Passes = {
21 ReplacementModes.None_
25 _SupportsAntialiasing =
33 _SupportsAntialiasing =
53 _SupportsAntialiasing =
61 _SupportsAntialiasing =
69 _SupportsAntialiasing =
73 ReplacementModes.Flow_
93 public enum ReplacementModes {
117 Depth_compressed_ = 4,
122 Depth_multichannel_ = 5,
143 public static void SetupCapturePassesFull(Camera camera,
144 Shader replacement_shader,
145 Shader optical_flow_shader,
146 Material optical_flow_material,
147 float optical_flow_sensitivity,
149 SetupHiddenCapturePassCameras(camera, ref capture_passes);
150 CleanRefreshPassCameras(camera, ref capture_passes);
153 if (!optical_flow_material || optical_flow_material.shader != optical_flow_shader) {
154 optical_flow_material =
new Material(optical_flow_shader);
157 optical_flow_material.SetFloat(_sensitivity, optical_flow_sensitivity);
160 AddReplacementShaderCommandBufferOnCamera(capture_passes[1]._Camera,
162 capture_passes[1]._ReplacementMode);
163 AddReplacementShaderCommandBufferOnCamera(capture_passes[2]._Camera,
165 capture_passes[2]._ReplacementMode);
166 AddReplacementShaderCommandBufferOnCamera(capture_passes[6]._Camera,
168 capture_passes[6]._ReplacementMode);
170 AddReplacementShaderCommandBufferOnCamera(capture_passes[5]._Camera,
172 capture_passes[5]._ReplacementMode);
174 AddReplacementShaderCommandBufferOnCamera(capture_passes[3]._Camera,
176 capture_passes[3]._ReplacementMode,
178 AddReplacementShaderCommandBufferOnCamera(capture_passes[4]._Camera,
180 capture_passes[4]._ReplacementMode);
181 SetupCameraWithPostShader(capture_passes[8]._Camera,
182 optical_flow_material,
183 DepthTextureMode.Depth | DepthTextureMode.MotionVectors);
186 public static void SetupCapturePassesReplacementShader(Camera camera,
187 Shader replacement_shader,
189 SetupHiddenCapturePassCameras(camera, ref capture_passes);
190 CleanRefreshPassCameras(camera, ref capture_passes);
192 foreach (var capture_pass
in capture_passes) {
193 AddReplacementShaderCommandBufferOnCamera(capture_pass._Camera,
195 capture_pass._ReplacementMode);
199 static void CleanRefreshPassCameras(Camera camera, ref
CapturePass[] capture_passes) {
200 var target_display = 1;
201 foreach (var pass
in capture_passes) {
202 if (pass._Camera == camera) {
206 pass._Camera.RemoveAllCommandBuffers();
207 pass._Camera.CopyFrom(camera);
208 pass._Camera.targetDisplay =
213 static void AddReplacementShaderCommandBufferOnCamera(Camera cam, Shader shader, ReplacementModes mode) {
214 AddReplacementShaderCommandBufferOnCamera(cam, shader, mode, Color.black);
217 static void AddReplacementShaderCommandBufferOnCamera(Camera camera,
219 ReplacementModes mode,
221 var cb =
new CommandBuffer {name = mode.ToString()};
222 cb.SetGlobalInt(_Shader_OutputMode_Name, (
int)mode);
223 camera.AddCommandBuffer(CameraEvent.BeforeForwardOpaque, cb);
224 camera.AddCommandBuffer(CameraEvent.BeforeFinalPass, cb);
225 camera.SetReplacementShader(shader,
"");
226 camera.backgroundColor = clear_color;
227 camera.clearFlags = CameraClearFlags.SolidColor;
230 static void SetupCameraWithPostShader(Camera cam,
232 DepthTextureMode depth_texture_mode = DepthTextureMode.None) {
233 var cb =
new CommandBuffer {name = cam.name};
234 cb.Blit(null, BuiltinRenderTextureType.CurrentActive, material);
235 cam.AddCommandBuffer(CameraEvent.AfterEverything, cb);
236 cam.depthTextureMode = depth_texture_mode;
244 static void SetupHiddenCapturePassCameras(Camera camera, ref
CapturePass[] capture_passes) {
245 capture_passes[0]._Camera = camera;
246 for (var q = 1; q < capture_passes.Length; q++) {
247 capture_passes[q]._Camera = CreateHiddenCamera(capture_passes[q]._Name, camera.transform);
251 static Camera CreateHiddenCamera(
string cam_name, Transform parent) {
252 var go =
new GameObject(cam_name, typeof(Camera)) {hideFlags = HideFlags.HideAndDontSave};
253 go.transform.parent = parent;
255 var new_camera = go.GetComponent<Camera>();
ReplacementModes _ReplacementMode
bool _SupportsAntialiasing