//RealToon - Perspective Adjustment [Helper] //İMJQStudioWorks using UnityEngine; namespace RealToon.Script { [ExecuteAlways] [AddComponentMenu("RealToon/Tools/Perspective Adjustment - Controller")] public class PerspectiveAdjustmentController : MonoBehaviour { [HideInInspector] [SerializeField] Transform[] SubTran; [HideInInspector] [SerializeField] Material[] Mat; [HideInInspector] [SerializeField] Transform[] attac; [Header("Note: Perspective Adjustment feature will be automatically enable\nOn the materials of the object/model that uses RealToon Shader.")] [Header("It is recommend to set the Clipping Planes - Near of the camera\nto 0.01 to prevent slicing when near.")] [Space(25)] [SerializeField] [Tooltip("This will change the perspective of an object to 2D or 3D or FOV stretch look.\nFor 2d toon/anime look, set it to 0.5 or 0.")] public float Perspective = 1; [SerializeField] [Tooltip("This will change the clipping on the object.\nChange this if the object is overlapping front or back.")] public float Clip = 0; [Space(15)] [SerializeField] [Tooltip("This will adjust the size of the object when the camera is closer.")] public float CloseUpSize = 0; [SerializeField] [Tooltip("How smooth the transition of the sizing.")] public float CloseUpSizeSmoothTransition = 1; [SerializeField] [Tooltip("Distance transition from the camera to the object.")] public float CloseUpSizeDistance = 0; [Space(15)] [SerializeField] [Tooltip("Z position of the object in Clip Space.")] public float ObjectPositionZ = 0; [Space(15)] [SerializeField] [Tooltip("Can animate the values/properties or create keyframe.")] public bool CanAnimateIt = true; int coun_obj_wi_ralsha = 0; int coun_obj_mat = 0; int coun_obj_mat_arr = 0; string RT_Sha_Nam_URP = "Universal Render Pipeline/RealToon/Version 5/Default/Default"; string RT_Sha_Nam_HDRP = "HDRP/RealToon/Version 5/Default"; string RT_Sha_Nam_BiRP_DD = "RealToon/Version 5/Default/Default"; string RT_Sha_Nam_BiRP_DFT = "RealToon/Version 5/Default/Fade Transparency"; string RT_Sha_Nam_BiRP_DR = "RealToon/Version 5/Default/Refraction"; string RT_Sha_Nam_BiRP_TDD = "RealToon/Version 5/Tessellation/Default"; string RT_Sha_Nam_BiRP_TDFT = "RealToon/Version 5/Tessellation/Fade Transparency"; string RT_Sha_Nam_BiRP_TDR = "RealToon/Version 5/Tessellation/Refraction"; string RT_Sha_Nam_BiRP_DDL = "RealToon/Version 5/Lite/Default"; string RT_Sha_Nam_BiRP_DFTL = "RealToon/Version 5/Lite/Fade Transparency"; [HideInInspector] [SerializeField] bool checkstart = true; void Start() { if (checkstart == true) { InitStart(); checkstart = false; } } void LateUpdate() { if (Mat != null) { if (CanAnimateIt == true) { foreach (Material Mate in Mat) { if (Mate != null) { if (Mate.shader.name == RT_Sha_Nam_URP || Mate.shader.name == RT_Sha_Nam_HDRP || Mate.shader.name == RT_Sha_Nam_BiRP_DD || Mate.shader.name == RT_Sha_Nam_BiRP_DFT || Mate.shader.name == RT_Sha_Nam_BiRP_DR || Mate.shader.name == RT_Sha_Nam_BiRP_TDD || Mate.shader.name == RT_Sha_Nam_BiRP_TDFT || Mate.shader.name == RT_Sha_Nam_BiRP_TDR || Mate.shader.name == RT_Sha_Nam_BiRP_DDL || Mate.shader.name == RT_Sha_Nam_BiRP_DFTL) { Set_Shad_Prop(Mate); } } } } } } void OnValidate() { if (Mat != null) { foreach (Material Mate in Mat) { if (Mate != null) { if (Mate.shader.name == RT_Sha_Nam_URP || Mate.shader.name == RT_Sha_Nam_HDRP || Mate.shader.name == RT_Sha_Nam_BiRP_DD || Mate.shader.name == RT_Sha_Nam_BiRP_DFT || Mate.shader.name == RT_Sha_Nam_BiRP_DR || Mate.shader.name == RT_Sha_Nam_BiRP_TDD || Mate.shader.name == RT_Sha_Nam_BiRP_TDFT || Mate.shader.name == RT_Sha_Nam_BiRP_TDR || Mate.shader.name == RT_Sha_Nam_BiRP_DDL || Mate.shader.name == RT_Sha_Nam_BiRP_DFTL) { Set_Shad_Prop(Mate); } } } } } /* Remove Later void OnDestroy() { Res_Shad_Prop(); foreach (Material Mate in Mat) { if (Mate != null) { if (Mate.shader.name == RT_Sha_Nam_URP || Mate.shader.name == RT_Sha_Nam_HDRP) { Mate.SetFloat("_N_F_PA", 0.0f); Mate.DisableKeyword("N_F_PA_ON"); } } } } */ void Reset() { if (Mat != null) { checkstart = true; Res_Shad_Prop(); foreach (Material Mate in Mat) { if (Mate != null) { if (Mate.shader.name == RT_Sha_Nam_URP || Mate.shader.name == RT_Sha_Nam_HDRP || Mate.shader.name == RT_Sha_Nam_BiRP_DD || Mate.shader.name == RT_Sha_Nam_BiRP_DFT || Mate.shader.name == RT_Sha_Nam_BiRP_DR || Mate.shader.name == RT_Sha_Nam_BiRP_TDD || Mate.shader.name == RT_Sha_Nam_BiRP_TDFT || Mate.shader.name == RT_Sha_Nam_BiRP_TDR || Mate.shader.name == RT_Sha_Nam_BiRP_DDL || Mate.shader.name == RT_Sha_Nam_BiRP_DFTL) { Set_Shad_Prop(Mate); } } } coun_obj_wi_ralsha = 0; coun_obj_mat = 0; coun_obj_mat_arr = 0; InitStart(); } } #region Init void InitStart() { if (attac == null || attac.Length == 0) { attac = this.gameObject.GetComponentsInChildren(); } int x = 0; foreach (Transform Trans in attac) { if (Trans.GetComponent() == true) { if (Trans.GetComponent().sharedMaterial != null) { if (Trans.GetComponent().sharedMaterial.shader.name == RT_Sha_Nam_URP || Trans.GetComponent().sharedMaterial.shader.name == RT_Sha_Nam_HDRP || Trans.GetComponent().sharedMaterial.shader.name == RT_Sha_Nam_BiRP_DD || Trans.GetComponent().sharedMaterial.shader.name == RT_Sha_Nam_BiRP_DFT || Trans.GetComponent().sharedMaterial.shader.name == RT_Sha_Nam_BiRP_DR || Trans.GetComponent().sharedMaterial.shader.name == RT_Sha_Nam_BiRP_TDD || Trans.GetComponent().sharedMaterial.shader.name == RT_Sha_Nam_BiRP_TDFT || Trans.GetComponent().sharedMaterial.shader.name == RT_Sha_Nam_BiRP_TDR || Trans.GetComponent().sharedMaterial.shader.name == RT_Sha_Nam_BiRP_DDL || Trans.GetComponent().sharedMaterial.shader.name == RT_Sha_Nam_BiRP_DFTL) { coun_obj_wi_ralsha++; coun_obj_mat += Trans.GetComponent().sharedMaterials.Length; } } } if (Trans.GetComponent() == true) { if (Trans.GetComponent().sharedMaterial != null) { if (Trans.GetComponent().sharedMaterial.shader.name == RT_Sha_Nam_URP || Trans.GetComponent().sharedMaterial.shader.name == RT_Sha_Nam_HDRP || Trans.GetComponent().sharedMaterial.shader.name == RT_Sha_Nam_BiRP_DD || Trans.GetComponent().sharedMaterial.shader.name == RT_Sha_Nam_BiRP_DFT || Trans.GetComponent().sharedMaterial.shader.name == RT_Sha_Nam_BiRP_DR || Trans.GetComponent().sharedMaterial.shader.name == RT_Sha_Nam_BiRP_TDD || Trans.GetComponent().sharedMaterial.shader.name == RT_Sha_Nam_BiRP_TDFT || Trans.GetComponent().sharedMaterial.shader.name == RT_Sha_Nam_BiRP_TDR || Trans.GetComponent().sharedMaterial.shader.name == RT_Sha_Nam_BiRP_DDL || Trans.GetComponent().sharedMaterial.shader.name == RT_Sha_Nam_BiRP_DFTL) { coun_obj_wi_ralsha++; coun_obj_mat += Trans.GetComponent().sharedMaterials.Length; } } } } SubTran = new Transform[coun_obj_wi_ralsha]; foreach (Transform Trans in attac) { if (Trans.GetComponent() == true) { if (Trans.GetComponent().sharedMaterial != null) { if (Trans.GetComponent().sharedMaterial.shader.name == RT_Sha_Nam_URP || Trans.GetComponent().sharedMaterial.shader.name == RT_Sha_Nam_HDRP || Trans.GetComponent().sharedMaterial.shader.name == RT_Sha_Nam_BiRP_DD || Trans.GetComponent().sharedMaterial.shader.name == RT_Sha_Nam_BiRP_DFT || Trans.GetComponent().sharedMaterial.shader.name == RT_Sha_Nam_BiRP_DR || Trans.GetComponent().sharedMaterial.shader.name == RT_Sha_Nam_BiRP_TDD || Trans.GetComponent().sharedMaterial.shader.name == RT_Sha_Nam_BiRP_TDFT || Trans.GetComponent().sharedMaterial.shader.name == RT_Sha_Nam_BiRP_TDR || Trans.GetComponent().sharedMaterial.shader.name == RT_Sha_Nam_BiRP_DDL || Trans.GetComponent().sharedMaterial.shader.name == RT_Sha_Nam_BiRP_DFTL) { SubTran[x] = Trans; x++; } } } if (Trans.GetComponent() == true) { if (Trans.GetComponent().sharedMaterial != null) { if (Trans.GetComponent().sharedMaterial.shader.name == RT_Sha_Nam_URP || Trans.GetComponent().sharedMaterial.shader.name == RT_Sha_Nam_HDRP || Trans.GetComponent().sharedMaterial.shader.name == RT_Sha_Nam_BiRP_DD || Trans.GetComponent().sharedMaterial.shader.name == RT_Sha_Nam_BiRP_DFT || Trans.GetComponent().sharedMaterial.shader.name == RT_Sha_Nam_BiRP_DR || Trans.GetComponent().sharedMaterial.shader.name == RT_Sha_Nam_BiRP_TDD || Trans.GetComponent().sharedMaterial.shader.name == RT_Sha_Nam_BiRP_TDFT || Trans.GetComponent().sharedMaterial.shader.name == RT_Sha_Nam_BiRP_TDR || Trans.GetComponent().sharedMaterial.shader.name == RT_Sha_Nam_BiRP_DDL || Trans.GetComponent().sharedMaterial.shader.name == RT_Sha_Nam_BiRP_DFTL) { SubTran[x] = Trans; x++; } } } } Mat = new Material[coun_obj_mat]; foreach (Transform Trans in SubTran) { if (Trans.GetComponent() == true) { if (Trans.GetComponent().sharedMaterial != null) { if (Trans.GetComponent().sharedMaterial.shader.name == RT_Sha_Nam_URP || Trans.GetComponent().sharedMaterial.shader.name == RT_Sha_Nam_HDRP || Trans.GetComponent().sharedMaterial.shader.name == RT_Sha_Nam_BiRP_DD || Trans.GetComponent().sharedMaterial.shader.name == RT_Sha_Nam_BiRP_DFT || Trans.GetComponent().sharedMaterial.shader.name == RT_Sha_Nam_BiRP_DR || Trans.GetComponent().sharedMaterial.shader.name == RT_Sha_Nam_BiRP_TDD || Trans.GetComponent().sharedMaterial.shader.name == RT_Sha_Nam_BiRP_TDFT || Trans.GetComponent().sharedMaterial.shader.name == RT_Sha_Nam_BiRP_TDR || Trans.GetComponent().sharedMaterial.shader.name == RT_Sha_Nam_BiRP_DDL || Trans.GetComponent().sharedMaterial.shader.name == RT_Sha_Nam_BiRP_DFTL) { for (int i = 0; i < Trans.GetComponent().sharedMaterials.Length; i++) { Mat[coun_obj_mat_arr] = Trans.GetComponent().sharedMaterials[i]; coun_obj_mat_arr++; } } } } if (Trans.GetComponent() == true) { if (Trans.GetComponent().sharedMaterial != null) { if (Trans.GetComponent().sharedMaterial.shader.name == RT_Sha_Nam_URP || Trans.GetComponent().sharedMaterial.shader.name == RT_Sha_Nam_HDRP || Trans.GetComponent().sharedMaterial.shader.name == RT_Sha_Nam_BiRP_DD || Trans.GetComponent().sharedMaterial.shader.name == RT_Sha_Nam_BiRP_DFT || Trans.GetComponent().sharedMaterial.shader.name == RT_Sha_Nam_BiRP_DR || Trans.GetComponent().sharedMaterial.shader.name == RT_Sha_Nam_BiRP_TDD || Trans.GetComponent().sharedMaterial.shader.name == RT_Sha_Nam_BiRP_TDFT || Trans.GetComponent().sharedMaterial.shader.name == RT_Sha_Nam_BiRP_TDR || Trans.GetComponent().sharedMaterial.shader.name == RT_Sha_Nam_BiRP_DDL || Trans.GetComponent().sharedMaterial.shader.name == RT_Sha_Nam_BiRP_DFTL) { for (int i = 0; i < Trans.GetComponent().sharedMaterials.Length; i++) { Mat[coun_obj_mat_arr] = Trans.GetComponent().sharedMaterials[i]; coun_obj_mat_arr++; } } } } } foreach (Material Mat in Mat) { if (Mat != null) { Set_Shad_Prop(Mat); } } } #endregion void Set_Shad_Prop(Material Mat) { if (Mat.IsKeywordEnabled("N_F_PA_ON") == true) { Mat.SetFloat("_PresAdju", Perspective); Mat.SetFloat("_ClipAdju", Clip); Mat.SetFloat("_PASize", CloseUpSize); Mat.SetFloat("_PASmooTrans", CloseUpSizeSmoothTransition); Mat.SetFloat("_PADist", CloseUpSizeDistance); Mat.SetFloat("_ObjePosiZCS", ObjectPositionZ); } else if (Mat.IsKeywordEnabled("N_F_PA_ON") != true) { Mat.EnableKeyword("N_F_PA_ON"); Mat.SetInt("_N_F_PA", 1); } } void Res_Shad_Prop() { Perspective = 1.0f; Clip = 0.0f; CloseUpSize = 0.0f; CloseUpSizeSmoothTransition = 1.0f; CloseUpSizeDistance = 0.0f; } } }