EditorStrings.cs 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308
  1. #if UNITY_EDITOR
  2. using UnityEngine;
  3. namespace VLB
  4. {
  5. public static class EditorStrings
  6. {
  7. public static class Common
  8. {
  9. public static readonly GUIContent ButtonOpenGlobalConfig = new GUIContent("Open Config asset in use");
  10. public const string HelpNoiseLoadingFailed = "Fail to load 3D noise texture. Please check your Config.";
  11. public static readonly GUIContent[] DimensionsEnumDescriptions = new GUIContent[]
  12. {
  13. new GUIContent("3D"),
  14. new GUIContent("2D"),
  15. };
  16. }
  17. public static class Beam
  18. {
  19. public static readonly GUIContent HeaderBasic = new GUIContent("Basic", "Basic beam's properties (color, angle, thickness...)");
  20. public static readonly GUIContent HeaderAttenuation = new GUIContent("Fall-Off Attenuation", "Control the beam's range distance and the light fall-off behaviour");
  21. public static readonly GUIContent Header3DNoise = new GUIContent("3D Noise", "Simulate animated volumetric fog / mist / smoke effects.\nIt makes the volumetric lights look less 'perfect' and so much more realistic.\nTo achieve that, a tiled 3D noise texture is internally loaded and used by the beam shader.");
  22. public static readonly GUIContent HeaderBlendingDistances = new GUIContent("Soft Intersections Blending Distances", "Because the volumetric beams are rendered using cone geometry, it is possible that it intersects with the camera's near plane or with the world's geometry, which could produce unwanted artifacts.\nThese properties are designed to fix this issue.");
  23. public static readonly GUIContent HeaderGeometry = new GUIContent("Cone Geometry", "Control how the beam's geometry is generated.");
  24. public static readonly GUIContent HeaderFadeOut = new GUIContent("Fade Out");
  25. public static readonly GUIContent Header2D = new GUIContent("2D", "Tweak and combine the order when beams are rendered with 2D objects (such as 2D sprites)");
  26. public static readonly GUIContent HeaderInfos = new GUIContent("Infos");
  27. public static readonly GUIContent FromSpotLight = new GUIContent("From Spot", "Get the value from the Light Spot");
  28. public static readonly GUIContent SideThickness = new GUIContent(
  29. "Side Thickness",
  30. "Thickness of the beam when looking at it from the side.\n1 = the beam is fully visible (no difference between the center and the edges), but produces hard edges.\nLower values produce softer transition at beam edges.");
  31. public static readonly GUIContent ColorMode = new GUIContent("Color", "Apply a flat/plain/single color, or a gradient.");
  32. public static readonly GUIContent ColorGradient = new GUIContent("", "Use the gradient editor to set color and alpha variations along the beam.");
  33. public static readonly GUIContent ColorFlat = new GUIContent("", "Use the color picker to set a plain RGBA color (takes account of the alpha value).");
  34. public static readonly GUIContent IntensityModeAdvanced = new GUIContent("Adv", "Advanced Mode: control inside and outside intensity values independently.");
  35. public static readonly GUIContent IntensityGlobal = new GUIContent("Intensity", "Global beam intensity. If you want to control values for inside and outside independently, use the advanced mode.");
  36. public static readonly GUIContent IntensityOutside = new GUIContent("Intensity (outside)", "Beam outside intensity (when looking at the beam from behind).");
  37. public static readonly GUIContent IntensityInside = new GUIContent("Intensity (inside)", "Beam inside intensity (when looking at the beam from the inside directly at the source).");
  38. public static readonly GUIContent BlendingMode = new GUIContent("Blending Mode", "Additive: highly recommended blending mode\nSoftAdditive: softer additive\nTraditional Transparency: support dark/black colors");
  39. public static readonly GUIContent ShaderAccuracy = new GUIContent("Shader Accuracy", "- Fast: a lot of computation are done on the vertex shader to maximize performance.\n- High: most of the computation are done on the pixel shader to maximize graphical quality at some performance cost.\n\nWe recommend to keep the default 'Fast' shader accuracy to ensure best performance, except when using the 'Tilt Factor' feature or when using a very rich 'Gradient Color'.");
  40. public static readonly GUIContent SpotAngle = new GUIContent("Spot Angle", "Define the angle (in degrees) at the base of the beam's cone");
  41. public static readonly GUIContent GlareFrontal = new GUIContent("Glare (frontal)", "Boost intensity factor when looking at the beam from the inside directly at the source.");
  42. public static readonly GUIContent GlareBehind = new GUIContent("Glare (from behind)", "Boost intensity factor when looking at the beam from behind.");
  43. public static readonly GUIContent TrackChanges = new GUIContent(
  44. " Track changes during Playtime",
  45. "Check this box to be able to modify properties during Playtime via Script, Animator and/or Timeline.\nEnabling this feature is at very minor performance cost. So keep it disabled if you don't plan to modify this light beam during playtime.");
  46. public static readonly GUIContent AttenuationEquation = new GUIContent("Equation", "Attenuation equation used to compute fading between 'Fade Start Distance' and 'Range Distance'.\n- Linear: Simple linear attenuation\n- Quadratic: Quadratic attenuation, which usually gives more realistic results\n- Blend: Custom blending mix between linear (0.0) and quadratic attenuation (1.0)");
  47. public static readonly GUIContent AttenuationCustomBlending = new GUIContent("", "Blending value between Linear (0.0) and Quadratic (1.0) attenuation equations.");
  48. public static readonly GUIContent FallOffStart = new GUIContent("Start Distance", "Distance from the light source (in units) the beam intensity will start to fall-off.");
  49. public static readonly GUIContent FallOffEnd = new GUIContent("Range Limit", "Distance from the light source (in units) the beam is entirely faded out");
  50. public static readonly GUIContent NoiseMode = new GUIContent("Enabled", "Enable 3D Noise effect and choose the mode:\n- World Space: the noise will look 'grounded' in the world\n- Local Space: the noise will look 'tied' to the beam");
  51. public static readonly GUIContent NoiseIntensity = new GUIContent("Intensity", "Higher intensity means the noise contribution is stronger and more visible");
  52. public static readonly GUIContent NoiseScale = new GUIContent("Scale", "3D Noise texture scaling: higher scale make the noise more visible, but potentially less realistic");
  53. public static readonly GUIContent NoiseVelocity = new GUIContent("Velocity", "Direction and speed of the noise scrolling, simulating the fog/smoke movement");
  54. public static readonly GUIContent[] NoiseModeEnumDescriptions = new GUIContent[]
  55. {
  56. new GUIContent("Disabled"),
  57. new GUIContent("Enabled (World Space)"),
  58. new GUIContent("Enabled (Local Space)"),
  59. };
  60. public static readonly GUIContent CameraClippingDistance = new GUIContent("Camera", "Distance from the camera the beam will fade with.\n- 0.0: hard intersection\n- Higher values produce soft intersection when the camera is near the cone triangles.");
  61. public static readonly GUIContent DepthBlendDistance = new GUIContent("Opaque geometry", "Distance from the world geometry the beam will fade with.\n- 0.0 (feature disabled): hard intersection but faster (doesn't require to update the depth texture).\n- Higher values produce soft intersection when the beam intersects world's geometry, but require to update the camera's depth texture.");
  62. public static readonly GUIContent ConeRadiusStart = new GUIContent("Truncated Radius", "Radius (in units) at the beam's source (the top of the cone).\n0 will generate a perfect cone geometry.\nHigher values will generate truncated cones.");
  63. public static readonly GUIContent GeomMeshType = new GUIContent("Mesh Type", "");
  64. public static readonly GUIContent GeomCap = new GUIContent("Cap", "Show Cap Geometry (only visible from inside)");
  65. public static readonly GUIContent GeomSides = new GUIContent("Sides", "Number of Sides of the cone.\nHigher values make the beam looks more 'round', but require more memory and graphic performance.\nA recommended value for a decent quality while keeping the poly count low is 18.");
  66. public static readonly GUIContent GeomSegments = new GUIContent("Segments", "Number of Segments of the cone.\nHigher values give better looking results but require more performance. We recommend at least 3 segments, specially regarding Attenuation and Gradient, otherwise the approximation could become inaccurate.\nThe longer the beam, the more segments we recommend to set.\nA recommended value is 4.");
  67. public static readonly GUIContent FadeOutEnabled = new GUIContent("Enabled", "Enable the fade out of the beam according to the distance to the camera.");
  68. public static readonly GUIContent FadeOutBegin = new GUIContent("Begin Distance", "Fade out starting distance. Beyond this distance, the beam intensity will start to be dimmed.");
  69. public static readonly GUIContent FadeOutEnd = new GUIContent("End Distance", "Fade out ending distance. Beyond this distance, the beam will be culled off to save on performance.");
  70. public static readonly GUIContent SkewingLocalForwardDirection = new GUIContent("Skewing Factor", "Distort the shape of the beam horizontally and vertically while keeping its circular slice unchanged.");
  71. public static readonly GUIContent ClippingPlane = new GUIContent("Clipping Plane", "Additional clipping plane transform.");
  72. public static readonly GUIContent EditorShowClippingPlane = new GUIContent("Show clipping plane", "Display the additional clipping plane.");
  73. public static readonly GUIContent TiltFactor = new GUIContent("Tilt Factor", "Tilt the color and attenuation gradient compared to the global beam's direction.\nShould be used with 'High' shader accuracy mode.");
  74. public static readonly GUIContent EditorShowTiltDirection = new GUIContent("Show Tilt Direction", "Display the direction of the tilt factor in editor.");
  75. public static readonly GUIContent Dimensions = new GUIContent("Dimensions", "- 3D: beam along the Z axis.\n- 2D: beam along the X axis, so you won't have to rotate it to see it in 2D.");
  76. public const string SortingLayer = "Sorting Layer";
  77. public static readonly GUIContent SortingOrder = new GUIContent("Order in Layer", "The overlay priority within its layer. Lower numbers are rendered first and subsequent numbers overlay those below.");
  78. // BUTTONS
  79. public static readonly GUIContent ButtonCreateOverridePerPlatform = new GUIContent("Create another Config asset for a specific platform", "");
  80. public static readonly GUIContent ButtonResetProperties = new GUIContent("Default values", "Reset properties to their default values.");
  81. public static readonly GUIContent ButtonGenerateGeometry = new GUIContent("Regenerate geometry", "Force to re-create the Beam Geometry GameObject.");
  82. public static readonly GUIContent ButtonAddDustParticles = new GUIContent("+ Dust Particles", "Add highly detailed dustlight / mote particles on your beam");
  83. public static readonly GUIContent ButtonAddDynamicOcclusion = new GUIContent("+ Dynamic Occlusion", "Gives awareness to your beam so it reacts to changes in the world: it could be occluded by environment geometry.");
  84. public static readonly GUIContent ButtonAddTriggerZone = new GUIContent("+ Trigger Zone", "Track objects passing through the light beam and track when the beam is passing over them.");
  85. // HELP BOXES
  86. public const string HelpNoSpotlight = "To bind properties from the Light and the Beam together, this component must be attached to a Light of type 'Spot'";
  87. public const string HelpAnimatorWarning = "If you want to animate your light beam in real-time, you should enable the 'trackChangesDuringPlaytime' property.";
  88. public const string HelpTrackChangesEnabled = "This beam will keep track of the changes of its own properties and the spotlight attached to it (if any) during playtime. You can modify every properties except 'geomSides'.";
  89. public const string HelpDepthTextureMode = "To support 'Soft Intersection with Opaque Geometry', your camera must use 'DepthTextureMode.Depth'.";
  90. public const string HelpDepthMobile = "On mobile platforms, the depth buffer precision can be pretty low. Try to keep a small depth range on your cameras: the difference between the near and far clip planes should stay as low as possible.";
  91. public const string HelpFadeOutNoMainCamera = "Fail to retrieve the main camera specified in the config.";
  92. public const string HelpTiltedWithShaderAccuracyFast = "We highly recommend to set the 'Shader Accuracy' property to 'High' when using 'Tilt Factor'.";
  93. }
  94. public static class DustParticles
  95. {
  96. public static readonly GUIContent HeaderRendering = new GUIContent("Rendering");
  97. public static readonly GUIContent HeaderDirectionAndVelocity = new GUIContent("Direction & Velocity");
  98. public static readonly GUIContent HeaderCulling = new GUIContent("Culling");
  99. public static readonly GUIContent HeaderSpawning = new GUIContent("Spawning");
  100. public static readonly GUIContent HeaderInfos = new GUIContent("Infos");
  101. public static readonly GUIContent Alpha = new GUIContent("Alpha", "Max alpha of the particles");
  102. public static readonly GUIContent Size = new GUIContent("Size", "Max size of the particles");
  103. public static readonly GUIContent Direction = new GUIContent("Direction", "Direction of the particles\n- Random: random direction.\n- Local Space: particles follow the velicity direction in local space (Z is along the beam).\n- World Space: particles follow the velicity direction in world space.");
  104. public static readonly GUIContent Velocity = new GUIContent("Velocity", "Movement speed of the particles along the chosen direction");
  105. public static readonly GUIContent CullingEnabled = new GUIContent("Enabled", "Enable particles culling based on the distance to the Main Camera.\nWe highly recommend to enable this feature to keep good runtime performances.");
  106. public static readonly GUIContent CullingMaxDistance = new GUIContent("Max Distance", "The particles will not be rendered if they are further than this distance to the Main Camera");
  107. public static readonly GUIContent Density = new GUIContent("Density", "Control how many particles are spawned. The higher the density, the more particles are spawned, the higher the performance cost is");
  108. public static readonly GUIContent SpawnMinDistance = new GUIContent("Min Distance", "The minimum distance (from the light source) where the particles are spawned.\nThe higher it is, the more the particles are spawned away from the light source.");
  109. public static readonly GUIContent SpawnMaxDistance = new GUIContent("Max Distance", "The maximum distance (from the light source) where the particles are spawned.\nThe lower it is, the more the particles are gathered near the light source.");
  110. // HELP BOXES
  111. public const string HelpFeatureNotSupported = "Volumetric Dust Particles feature is only supported in Unity 5.5 or above";
  112. public const string HelpFailToInstantiate = "Fail to instantiate the Particles. Please check your Config.";
  113. public const string HelpRecommendation = "We do not recommend to use this feature if you plan to move or change properties of the beam during playtime.";
  114. }
  115. public static class DynOcclusion
  116. {
  117. public static readonly GUIContent HeaderUpdateRate = new GUIContent("Update Rate");
  118. public static readonly GUIContent HeaderRaycasting = new GUIContent("Raycasting");
  119. public static readonly GUIContent HeaderOccluderSurface = new GUIContent("Occluder Surface");
  120. public static readonly GUIContent HeaderClippingPlane = new GUIContent("Clipping Plane");
  121. public static readonly GUIContent HeaderCamera = new GUIContent("Camera");
  122. public static readonly GUIContent HeaderEditorDebug = new GUIContent("Editor Debug");
  123. public static readonly GUIContent Dimensions = new GUIContent("Dimensions", "Should it interact with 2D or 3D occluders?\n- 3D: the beam will react against 3D Occluders.\n- 2D: the beam will react against 2D Occluders. This is useful when using the beams with 2D objects (such as 2D Sprites).");
  124. public static readonly GUIContent LayerMask = new GUIContent("Layer Mask",
  125. "The beam can only be occluded by objects located on the layers matching this mask.\nIt's very important to set it as restrictive as possible (checking only the layers which are necessary) to perform a more efficient process in order to increase the performance.");
  126. public static readonly GUIContent ConsiderTriggers = new GUIContent("Consider Triggers",
  127. "Should this beam be occluded by triggers or not?");
  128. public const string ConsiderTriggersNoPossible = "In order to be able to consider triggers as 2D occluders, you should tick the 'Queries Hit Triggers' checkbox under the 'Physics 2D' settings menu.";
  129. public static readonly GUIContent MinOccluderArea = new GUIContent("Min Occluder Area",
  130. "Minimum 'area' of the collider to become an occluder.\nColliders smaller than this value will not block the beam.");
  131. public static readonly GUIContent UpdateRate = new GUIContent("Update Rate", "How often will the occlusion be processed?\nTry to update the occlusion as rarely as possible to keep good performance.");
  132. public static readonly GUIContent[] UpdateRateDescriptions = new GUIContent[]
  133. {
  134. new GUIContent("Never"),
  135. new GUIContent("On Enable (only once)"),
  136. new GUIContent("On Beam Move"),
  137. new GUIContent("Every X Frames"),
  138. new GUIContent("On Beam Move and Every X Frames"),
  139. };
  140. public static readonly GUIContent WaitXFrames = new GUIContent("X frames to wait",
  141. "How many frames we wait between 2 occlusion tests?\nIf you want your beam to be super responsive to the changes of your environment, update it every frame by setting 1.\nIf you want to save on performance, we recommend to wait few frames between each update by setting a higher value.");
  142. public static readonly GUIContent MinSurfaceRatio = new GUIContent("Min Occluded %", "Approximated percentage of the beam to collide with the surface in order to be considered as occluder.");
  143. public static readonly GUIContent MaxSurfaceDot = new GUIContent("Max Angle", "Max angle (in degrees) between the beam and the surface in order to be considered as occluder.");
  144. public static readonly GUIContent PlaneAlignment = new GUIContent("Alignment", "Alignment of the computed clipping plane:\n- Surface: align to the surface normal which blocks the beam. Works better for large occluders such as floors and walls.\n- Beam: keep the plane aligned with the beam direction. Works better with more complex occluders or with corners.");
  145. public static readonly GUIContent PlaneOffset = new GUIContent("Offset Units", "Translate the plane. We recommend to set a small positive offset in order to handle non-flat surface better.");
  146. public static readonly GUIContent FadeDistanceToSurface = new GUIContent("Fade Distance Units", "Fade out the beam before the occlusion surface in order to soften the transition.");
  147. public static readonly GUIContent EditorShowDebugPlane = new GUIContent("Show Debug Plane", "Draw debug plane on the scene view.");
  148. public static readonly GUIContent EditorRaycastAtEachFrame = new GUIContent("Update in Editor", "Perform occlusion tests and raycasts in Editor.");
  149. public static string GetUpdateRateAdvice<T>(DynamicOcclusionUpdateRate value)
  150. {
  151. switch (value)
  152. {
  153. case DynamicOcclusionUpdateRate.Never: return string.Format("The occlusion will never be updated.\nThe only way to update it is to manually call '{0}.ProcessOcclusionManually()' from script whenever you need.", typeof(T).Name);
  154. case DynamicOcclusionUpdateRate.OnEnable: return "The occlusion will only be updated once on start, and each time the beam is enabled/activated (after being disabled/deactivated).\nIt's suitable for static beams located in static environment.";
  155. case DynamicOcclusionUpdateRate.OnBeamMove: return "The occlusion will only be updated when the beam will move.\nIt's suitable for moving beams located in static environment.";
  156. case DynamicOcclusionUpdateRate.EveryXFrames: return "The occlusion will be updated every {0} frame(s).\nIt's suitable for static beams located in moving environment.";
  157. case DynamicOcclusionUpdateRate.OnBeamMoveAndEveryXFrames: return "The occlusion will be updated when the beam will move in addition to every {0} frame(s).\nIt's suitable for moving beams located in moving environment.";
  158. default: return null;
  159. }
  160. }
  161. public static readonly GUIContent DepthBufferOcclusionCulling = new GUIContent("Occlusion Culling", "Whether or not the virtual camera will use occlusion culling during rendering from the beam's POV.");
  162. public static readonly GUIContent DepthBufferDepthMapResolution = new GUIContent("Depth Map Resolution", "Controls how large the depth texture captured by the virtual camera is.\nThe lower the resolution, the better the performance, but the less accurate the rendering.");
  163. public const string HelpDepthBufferAndBeam2D = "'Dynamic Occlusion (Depth Buffer)' doesn't work with 2D sprites nor 2D colliders. It will only track 3D objects.";
  164. public const string HelpOverrideLayer = "To keep good performance, it's highly recommended to set an 'Override Layer' in the Config when using this feature, to prevent from having a LayerMark including any Volumetric Beam.";
  165. public static string HelpLayerMaskIssues { get { return string.Format("The beams are generated on the layer '{0}' (set in the Config), but this LayerMask includes this layer.\nTo keep good performance, it's highly recommended to set a LayerMask which doesn't include this layer!", UnityEngine.LayerMask.LayerToName(VLB.Config.Instance.geometryLayerID)); } }
  166. public const string HelpFeatureDisabled = "The Dynamic Occlusion features have been disabled in the plugin's Config.";
  167. }
  168. public static class TriggerZone
  169. {
  170. public static readonly GUIContent HeaderInfos = new GUIContent("Infos");
  171. public static readonly GUIContent SetIsTrigger = new GUIContent("Set Is Trigger", "Define if the Collider will be created as a convex trigger (not physical, most common behavior) or as a regular collider (physical).");
  172. public static readonly GUIContent RangeMultiplier = new GUIContent("Range Multiplier", "Change the length of the Collider.\nFor example, set 2.0 to make the Collider 2x longer than the beam.");
  173. public const string HelpDescription2D = "Generate a 2D Polygon Collider with the same shape than the beam, supporting dynamic occlusion.";
  174. public const string HelpDescription3D = "Generate a 3D Mesh Collider with the same shape than the beam. The collider doesn't support occlusion though.";
  175. public const string HelpTrackChangesDuringPlaytimeEnabled = "The TriggerZone collider cannot be changed in realtime.\nIf you animate a property which change the shape of the beam, the collider shape won't fit anymore.";
  176. }
  177. public static class SkewingHandle
  178. {
  179. public static readonly GUIContent Beam = new GUIContent("Beam", "The Volumetric Light Beam you want to modify.");
  180. public static readonly GUIContent ShouldUpdateEachFrame = new GUIContent("Should Update Each Frame", "Should the beam's skewing property be updated each frame or only once?");
  181. public const string ErrorAttachedToSelf = "You should attach the 'SkewingHandle' component to another GameObject than the beam itself.";
  182. public const string ErrorCannotSkew = "This beam can't be skewed because it doesn't use 'Custom' mesh type.";
  183. public const string ErrorCannotUpdate = "This beam can't be updated each frame since its property 'trackChangesDuringPlaytime' is disabled.";
  184. public const string HelpFeatureDisabled = "The 'Mesh Skewing' feature has been disabled in the plugin's Config.";
  185. }
  186. public static class Config
  187. {
  188. public static readonly GUIContent HeaderBeamGeometry = new GUIContent("Beam Geometry", "");
  189. public static readonly GUIContent HeaderRendering = new GUIContent("Rendering", "");
  190. public static readonly GUIContent HeaderSharedMesh = new GUIContent("Shared Mesh", "");
  191. public static readonly GUIContent HeaderGlobal3DNoise = new GUIContent("Global 3D Noise", "");
  192. public static readonly GUIContent HeaderFadeOutCamera = new GUIContent("Camera to compute Fade Out", "");
  193. public static readonly GUIContent HeaderFeaturesEnabled = new GUIContent("Features Enabled", "Disable the features you don't use in your project to speed up export time, specially with URP and HDRP.");
  194. public static readonly GUIContent HeaderInternalData = new GUIContent("Internal Data (do not change)", "");
  195. public static readonly GUIContent GeometryOverrideLayer = new GUIContent("Override Layer", "The layer the GameObjects holding the procedural cone meshes are created on");
  196. public static readonly GUIContent GeometryTag = new GUIContent("Tag", "The tag applied on the procedural geometry GameObjects");
  197. public static readonly GUIContent GeometryRenderQueue = new GUIContent("Render Queue", "Determine in which order beams are rendered compared to other objects.\nThis way for example transparent objects are rendered after opaque objects, and so on.");
  198. public static readonly GUIContent GeometryRenderPipeline = new GUIContent("Render Pipeline", "Select the Render Pipeline (Built-In or SRP) in use.");
  199. public static readonly GUIContent GeometryRenderingMode = new GUIContent("Rendering Mode",
  200. @"- Multi-Pass: Use the 2 pass shader. Will generate 2 drawcalls per beam (Not compatible with custom Render Pipeline such as HDRP and LWRP).
  201. - Single-Pass: Use the 1 pass shader. Will generate 1 drawcall per beam.
  202. - GPU Instancing: Dynamically batch multiple beams to combine and reduce draw calls.
  203. - SRP Batcher: Use the SRP Batcher to automatically batch multiple beams and reduce draw calls. Only available when using SRP.");
  204. public static string ErrorSrpAndMultiPassNotCompatible { get { return string.Format("Using a Scriptable Render Pipeline with 'Multi-Pass' Rendering Mode is not supported: please choose another Rendering Mode, or '{0}' will be used.", VLB.Config.Instance.actualRenderingMode); } }
  205. public static string ErrorSrpBatcherOnlyCompatibleWithSrp { get { return string.Format("The 'SRP Batcher' Rendering Mode is only compatible when using a SRP: please choose another Rendering Mode, or '{0}' will be used.", VLB.Config.Instance.actualRenderingMode); } }
  206. public static string ErrorSrpBatcherNotCompatibleWithLWRP { get { return string.Format("The 'SRP Batcher' Rendering Mode is not compatible with LWRP: please choose another Rendering Mode, or '{0}' will be used.", VLB.Config.Instance.actualRenderingMode); } }
  207. public static string ErrorGeometryGpuInstancingNotSupported { get { return string.Format("'GPU Instancing' Rendering Mode is only supported on Unity 5.6 or above! '{0}' will be used.", VLB.Config.Instance.actualRenderingMode); } }
  208. public const string ErrorRenderPipelineMismatch = "It looks like the 'Render Pipeline' correctly is not set.\nPlease make sure to select the proper value depending on your pipeline in use.";
  209. public static readonly GUIContent FadeOutCameraTag = new GUIContent("Fade Out Camera Tag", "Tag used to retrieve the camera used to compute the fade out factor on beams");
  210. public static readonly GUIContent BeamShader1Pass = new GUIContent("Shader (single-pass)", "Main shader (1 pass version) applied to the cone beam geometry");
  211. public static readonly GUIContent BeamShader2Pass = new GUIContent("Shader (multi-pass)", "Main shader (multi-pass version) applied to the cone beam geometry");
  212. public static readonly GUIContent BeamShaderSRP = new GUIContent("Shader (SRP)", "Main shader (SRP version) applied to the cone beam geometry");
  213. public static readonly GUIContent SharedMeshSides = new GUIContent("Sides", "Number of Sides of the cone.\nHigher values make the beam looks more 'round', but require more memory and graphic performance.\nA recommended value for a decent quality while keeping the poly count low is 18.");
  214. public static readonly GUIContent SharedMeshSegments = new GUIContent("Segments", "Number of Segments of the cone.\nHigher values give better looking results but require more performance. We recommend at least 3 segments, specially regarding Attenuation and Gradient, otherwise the approximation could become inaccurate.\nThe longer the beam, the more segments we recommend to set.\nA recommended value is 4.");
  215. public static readonly GUIContent GlobalNoiseScale = new GUIContent("Scale", "Global 3D Noise texture scaling: higher scale make the noise more visible, but potentially less realistic");
  216. public static readonly GUIContent GlobalNoiseVelocity = new GUIContent("Velocity", "Global World Space direction and speed of the noise scrolling, simulating the fog/smoke movement");
  217. public static readonly GUIContent Noise3DData = new GUIContent("3D Noise Data binary file", "Binary file holding the 3D Noise texture data (a 3D array). Must be exactly Size * Size * Size bytes long.");
  218. public static readonly GUIContent Noise3DSize = new GUIContent("3D Noise Data dimension", "Size (of one dimension) of the 3D Noise data. Must be power of 2. So if the binary file holds a 32x32x32 texture, this value must be 32.");
  219. public static readonly GUIContent DustParticlesPrefab = new GUIContent("Dust Particles Prefab", "ParticleSystem prefab instantiated for the Volumetric Dust Particles feature (Unity 5.5 or above)");
  220. public static readonly GUIContent DitheringFactor = new GUIContent("Dithering", "Depending on the quality of your screen, you might see some artifacts with high contrast visual (like a white beam over a black background).\nThese is a very common problem known as color banding.\nTo help with this issue, the plugin offers a Dithering factor: it smooths the banding by introducing a subtle pattern of noise.");
  221. public static readonly GUIContent DitheringNoiseTexture = new GUIContent("Dithering Noise Texture", "Noise texture for dithering feature.");
  222. public static readonly GUIContent OpenDocumentation = new GUIContent("Documentation", "Open the online documentation.");
  223. public static readonly GUIContent ResetToDefaultButton = new GUIContent("Default values", "Reset properties to their default values.");
  224. public static readonly GUIContent ResetInternalDataButton = new GUIContent("Reset internal data", "Reset internal data to their default values.");
  225. public static readonly GUIContent FeatureEnabledColorGradient = new GUIContent("Color Gradient", "- Off: do not support having a gradient as color.\n- High Only: support gradient color only for devices with Shader Level = 35 or higher.\n- High and Low: support gradient color for all devices");
  226. public static readonly GUIContent FeatureEnabledDepthBlend = new GUIContent("Soft Intersect w/ Opaque Geometry", "Support having soft intersection when the beam intersects other opaque geometry or not.");
  227. public static readonly GUIContent FeatureEnabledNoise3D = new GUIContent("Noise 3D", "Support 'Noise 3D' feature or not.");
  228. public static readonly GUIContent FeatureEnabledDynamicOcclusion = new GUIContent("Dynamic Occlusion", "Support 'Dynamic Occlusion' features or not.");
  229. public static readonly GUIContent FeatureEnabledMeshSkewing = new GUIContent("Mesh Skewing", "Support 'Mesh Skewing' feature or not.");
  230. public static readonly GUIContent FeatureEnabledShaderAccuracyHigh = new GUIContent("High Shader Accuracy", "Support 'Shader Accuracy' property set to 'High' or not.");
  231. public static readonly GUIContent[] GeometryRenderPipelineEnumDescriptions = new GUIContent[]
  232. {
  233. new GUIContent("Built-In"),
  234. new GUIContent("URP"),
  235. new GUIContent("HDRP"),
  236. };
  237. public static string GetErrorInvalidShader() { return string.Format("Fail to generate shader asset. Please try to reset the Config asset or reinstall the plugin."); }
  238. public static readonly string InvalidPlatformOverride = string.Format(
  239. "This Config asset has an invalid name. It should be named either:\n- '{0}.asset' for the default config.\n- '{0}PlatformName.asset' for a config specific to a platform, e.g., '{0}Android.asset'."
  240. , ConfigOverride.kAssetName
  241. , typeof(ConfigOverride).ToString()
  242. );
  243. public static readonly string WrongAssetLocation = string.Format(
  244. "This Config asset is not the one in use, please make sure: it's directly located under a 'Resources' folder."
  245. );
  246. public static readonly string NotCurrentAssetInUse = string.Format(
  247. "This Config asset is not the one in use for current Target Platform '{0}'."
  248. , PlatformHelper.GetCurrentPlatformSuffix()
  249. );
  250. }
  251. }
  252. }
  253. #endif