Universal RP 17.0.3
include “Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl” 내부에 input이 포함됨
include “Packages/com.unity.render-pipelines.universal/ShaderLibrary/Input.hlsl”
Input.hlsl
#ifndef UNIVERSAL_INPUT_INCLUDED #define UNIVERSAL_INPUT_INCLUDED // URP package specific shader input variables and defines. // Unity Engine specific built-in shader input variables are defined in .universal/ShaderLibrary/UnityInput.hlsl #include "Packages/com.unity.render-pipelines.universal-config/Runtime/ShaderConfig.cs.hlsl" #define MAX_VISIBLE_LIGHTS_UBO 32 #define MAX_VISIBLE_LIGHTS_SSBO 256 // Keep in sync with RenderingUtils.useStructuredBuffer #define USE_STRUCTURED_BUFFER_FOR_LIGHT_DATA 0 #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderTypes.cs.hlsl" #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Deprecated.hlsl" // Must match: UniversalRenderPipeline.maxVisibleAdditionalLights #if defined(SHADER_API_MOBILE) && defined(SHADER_API_GLES30) #define MAX_VISIBLE_LIGHTS MAX_VISIBLE_LIGHT_COUNT_LOW_END_MOBILE // WebGPU's minimal limits are based on mobile rather than desktop, so it will need to assume mobile. #elif defined(SHADER_API_MOBILE) || (defined(SHADER_API_GLCORE) && !defined(SHADER_API_SWITCH)) || defined(SHADER_API_GLES3) || defined(SHADER_API_WEBGPU) // Workaround because SHADER_API_GLCORE is also defined when SHADER_API_SWITCH is #define MAX_VISIBLE_LIGHTS MAX_VISIBLE_LIGHT_COUNT_MOBILE #else #define MAX_VISIBLE_LIGHTS MAX_VISIBLE_LIGHT_COUNT_DESKTOP #endif // Match with values in UniversalRenderPipeline.cs #define MAX_ZBIN_VEC4S 1024 #if MAX_VISIBLE_LIGHTS <= 16 #define MAX_LIGHTS_PER_TILE 32 #define MAX_TILE_VEC4S 1024 #define MAX_REFLECTION_PROBES 16 #elif MAX_VISIBLE_LIGHTS <= 32 #define MAX_LIGHTS_PER_TILE 32 #define MAX_TILE_VEC4S 1024 #define MAX_REFLECTION_PROBES 32 #else #define MAX_LIGHTS_PER_TILE MAX_VISIBLE_LIGHTS #define MAX_TILE_VEC4S 4096 #define MAX_REFLECTION_PROBES 64 #endif struct InputData { float3 positionWS; float4 positionCS; float3 normalWS; half3 viewDirectionWS; float4 shadowCoord; half fogCoord; half3 vertexLighting; half3 bakedGI; float2 normalizedScreenSpaceUV; half4 shadowMask; half3x3 tangentToWorld; #if defined(DEBUG_DISPLAY) half2 dynamicLightmapUV; half2 staticLightmapUV; float3 vertexSH; half3 brdfDiffuse; half3 brdfSpecular; // Mipmap Streaming Debug float2 uv; uint mipCount; // texelSize : // x = 1 / width // y = 1 / height // z = width // w = height float4 texelSize; // mipInfo : // x = quality settings minStreamingMipLevel // y = original mip count for texture // z = desired on screen mip level // w = loaded mip level float4 mipInfo; // streamInfo : // x = streaming priority // y = time stamp of the latest texture upload // z = streaming status // w = 0 float4 streamInfo; float3 originalColor; #endif }; /////////////////////////////////////////////////////////////////////////////// // Constant Buffers // /////////////////////////////////////////////////////////////////////////////// half4 _GlossyEnvironmentColor; half4 _SubtractiveShadowColor; half4 _GlossyEnvironmentCubeMap_HDR; TEXTURECUBE(_GlossyEnvironmentCubeMap); SAMPLER(sampler_GlossyEnvironmentCubeMap); #define _InvCameraViewProj unity_MatrixInvVP float4 _ScaledScreenParams; // x = Mip Bias // y = 2.0 ^ [Mip Bias] float2 _GlobalMipBias; // 1.0 if it's possible for AlphaToMask to be enabled for this draw and 0.0 otherwise float _AlphaToMaskAvailable; float4 _MainLightPosition; // In Forward+, .a stores whether the main light is using subtractive mixed mode. half4 _MainLightColor; half4 _MainLightOcclusionProbes; uint _MainLightLayerMask; // x: SSAO Enabled/Disabled (Needed for situations when OFF keyword is stripped out but feature disabled in runtime) // yz are currently unused // w: directLightStrength half4 _AmbientOcclusionParam; half4 _AdditionalLightsCount; uint _RenderingLayerMaxInt; float _RenderingLayerRcpMaxInt; // Screen coord override. float4 _ScreenCoordScaleBias; float4 _ScreenSizeOverride; uint _EnableProbeVolumes; #if USE_FORWARD_PLUS float4 _FPParams0; float4 _FPParams1; float4 _FPParams2; #define URP_FP_ZBIN_SCALE (_FPParams0.x) #define URP_FP_ZBIN_OFFSET (_FPParams0.y) #define URP_FP_PROBES_BEGIN ((uint)_FPParams0.z) // Directional lights would be in all clusters, so they don't go into the cluster structure. // Instead, they are stored first in the light buffer. #define URP_FP_DIRECTIONAL_LIGHTS_COUNT ((uint)_FPParams0.w) // Scale from screen-space UV [0, 1] to tile coordinates [0, tile resolution]. #define URP_FP_TILE_SCALE ((float2)_FPParams1.xy) #define URP_FP_TILE_COUNT_X ((uint)_FPParams1.z) #define URP_FP_WORDS_PER_TILE ((uint)_FPParams1.w) #define URP_FP_ZBIN_COUNT ((uint)_FPParams2.x) #define URP_FP_TILE_COUNT ((uint)_FPParams2.y) #endif #if USE_STRUCTURED_BUFFER_FOR_LIGHT_DATA StructuredBuffer<LightData> _AdditionalLightsBuffer; StructuredBuffer<int> _AdditionalLightsIndices; #else // GLES3 causes a performance regression in some devices when using CBUFFER. #ifndef SHADER_API_GLES3 CBUFFER_START(AdditionalLights) #endif float4 _AdditionalLightsPosition[MAX_VISIBLE_LIGHTS]; // In Forward+, .a stores whether the light is using subtractive mixed mode. half4 _AdditionalLightsColor[MAX_VISIBLE_LIGHTS]; half4 _AdditionalLightsAttenuation[MAX_VISIBLE_LIGHTS]; half4 _AdditionalLightsSpotDir[MAX_VISIBLE_LIGHTS]; half4 _AdditionalLightsOcclusionProbes[MAX_VISIBLE_LIGHTS]; float _AdditionalLightsLayerMasks[MAX_VISIBLE_LIGHTS]; // we want uint[] but Unity api does not support it. #ifndef SHADER_API_GLES3 CBUFFER_END #endif #endif #if USE_FORWARD_PLUS CBUFFER_START(urp_ZBinBuffer) float4 urp_ZBins[MAX_ZBIN_VEC4S]; CBUFFER_END CBUFFER_START(urp_TileBuffer) float4 urp_Tiles[MAX_TILE_VEC4S]; CBUFFER_END TEXTURE2D(urp_ReflProbes_Atlas); float urp_ReflProbes_Count; // 2023.3 Deprecated. This is for backwards compatibility. Remove in the future. #define samplerurp_ReflProbes_Atlas sampler_LinearClamp #ifndef SHADER_API_GLES3 CBUFFER_START(urp_ReflectionProbeBuffer) #endif float4 urp_ReflProbes_BoxMax[MAX_REFLECTION_PROBES]; // w contains the blend distance float4 urp_ReflProbes_BoxMin[MAX_REFLECTION_PROBES]; // w contains the importance float4 urp_ReflProbes_ProbePosition[MAX_REFLECTION_PROBES]; // w is positive for box projection, |w| is max mip level float4 urp_ReflProbes_MipScaleOffset[MAX_REFLECTION_PROBES * 7]; #ifndef SHADER_API_GLES3 CBUFFER_END #endif #endif #define UNITY_MATRIX_M unity_ObjectToWorld #define UNITY_MATRIX_I_M unity_WorldToObject #define UNITY_MATRIX_V unity_MatrixV #define UNITY_MATRIX_I_V unity_MatrixInvV #define UNITY_MATRIX_P OptimizeProjectionMatrix(glstate_matrix_projection) #define UNITY_MATRIX_I_P unity_MatrixInvP #define UNITY_MATRIX_VP unity_MatrixVP #define UNITY_MATRIX_I_VP unity_MatrixInvVP #define UNITY_MATRIX_MV mul(UNITY_MATRIX_V, UNITY_MATRIX_M) #define UNITY_MATRIX_T_MV transpose(UNITY_MATRIX_MV) #define UNITY_MATRIX_IT_MV transpose(mul(UNITY_MATRIX_I_M, UNITY_MATRIX_I_V)) #define UNITY_MATRIX_MVP mul(UNITY_MATRIX_VP, UNITY_MATRIX_M) #define UNITY_PREV_MATRIX_M unity_MatrixPreviousM #define UNITY_PREV_MATRIX_I_M unity_MatrixPreviousMI // Note: #include order is important here. // UnityInput.hlsl must be included before UnityInstancing.hlsl, so constant buffer // declarations don't fail because of instancing macros. // UniversalDOTSInstancing.hlsl must be included after UnityInstancing.hlsl #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/UnityInput.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/UnityInstancing.hlsl" #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/UniversalDOTSInstancing.hlsl" // VFX may also redefine UNITY_MATRIX_M / UNITY_MATRIX_I_M as static per-particle global matrices. #ifdef HAVE_VFX_MODIFICATION #include "Packages/com.unity.visualeffectgraph/Shaders/VFXMatricesOverride.hlsl" #endif #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/SpaceTransforms.hlsl" #endif
1. 헤더 정의 및 보호구문
#ifndef UNIVERSAL_INPUT_INCLUDED #define UNIVERSAL_INPUT_INCLUDED
헤더 파일을 여러 번 포함하는 것을 방지
UNIVERSAL_INPUT_INCLUDED
가 정의되지 않은 경우에만 코드가 실행되도록 합니다.
2. 패키지 및 설정 파일 포함
#include "Packages/com.unity.render-pipelines.universal-config/Runtime/ShaderConfig.cs.hlsl"
URP의 설정 및 구성을 정의하는 파일을 포함
이 파일에는 URP에서 사용하는 여러 가지 상수 값과 설정이 정의되어 있습니다.
3. 최대 조명 및 타일링 설정
#define MAX_VISIBLE_LIGHTS_UBO 32 #define MAX_VISIBLE_LIGHTS_SSBO 256
UBO(Uniform Buffer Object)와 SSBO(Shader Storage Buffer Object)에 사용할 수 있는 최대 조명 개수를 정의
MAX_VISIBLE_LIGHTS_UBO: UBO 방식으로 사용할 수 있는 최대 조명 수 (32).
MAX_VISIBLE_LIGHTS_SSBO: SSBO 방식으로 사용할 수 있는 최대 조명 수 (256).
4. 조명 데이터 저장 방법 결정
#define USE_STRUCTURED_BUFFER_FOR_LIGHT_DATA 0
0으로 설정되어 있으며, 이는 Structured Buffer가 아닌 Constant Buffer를 사용하여 조명 데이터를 저장함을 의미합니다.
5. 플랫폼에 따른 최대 조명 설정
// Must match: UniversalRenderPipeline.maxVisibleAdditionalLights #if defined(SHADER_API_MOBILE) && defined(SHADER_API_GLES30) #define MAX_VISIBLE_LIGHTS MAX_VISIBLE_LIGHT_COUNT_LOW_END_MOBILE // WebGPU's minimal limits are based on mobile rather than desktop, so it will need to assume mobile. #elif defined(SHADER_API_MOBILE) || (defined(SHADER_API_GLCORE) && !defined(SHADER_API_SWITCH)) || defined(SHADER_API_GLES3) || defined(SHADER_API_WEBGPU) // Workaround because SHADER_API_GLCORE is also defined when SHADER_API_SWITCH is #define MAX_VISIBLE_LIGHTS MAX_VISIBLE_LIGHT_COUNT_MOBILE #else #define MAX_VISIBLE_LIGHTS MAX_VISIBLE_LIGHT_COUNT_DESKTOP #endif
플랫폼에 따라 최대 조명 수를 다르게 설정합니다.
모바일 플랫폼에서는 자원을 덜 사용하도록 제한을 두며, 데스크탑에서는 더 많은 조명을 허용합니다.
6. 입력 데이터 구조체 (InputData)
struct InputData { float3 positionWS; float4 positionCS; float3 normalWS; half3 viewDirectionWS; float4 shadowCoord; half fogCoord; half3 vertexLighting; half3 bakedGI; float2 normalizedScreenSpaceUV; half4 shadowMask; half3x3 tangentToWorld; };
InputData 구조체는 Shader에서 필요한 여러 데이터를 모아둔 것입니다.
positionWS
: 월드 좌표계에서의 정점 위치.positionCS
: 클립 좌표계에서의 정점 위치.normalWS
: 월드 좌표계에서의 법선 벡터.viewDirectionWS
: 월드 좌표계에서의 시선 방향.shadowCoord
: 그림자 좌표.vertexLighting
: 정점 기반의 조명.bakedGI
: 프리컴퓨티드 전역 조명.normalizedScreenSpaceUV
: 화면 공간 UV 좌표.shadowMask
: 그림자 마스크.tangentToWorld
: 탄젠트 공간에서 월드 공간으로 변환하는 행렬.
7. 그 외 입력 구조체 (DEBUG_DISPLAY 포함)
DEBUG_DISPLAY가 정의되어 있는 경우 추가적인 디버그용 데이터를 받습니다.
- 동적, 정적 라이트맵 UV 좌표, 텍스처 스트리밍 관련 정보 등을 포함합니다.
8. 상수 버퍼 및 조명 데이터
half4 _GlossyEnvironmentColor; half4 _SubtractiveShadowColor; half4 _GlossyEnvironmentCubeMap_HDR; TEXTURECUBE(_GlossyEnvironmentCubeMap); SAMPLER(sampler_GlossyEnvironmentCubeMap);
환경 반사, 그림자 색상, 큐브맵 반사 등과 관련된 상수 값들이 정의됩니다.
텍스처와 샘플러도 정의됩니다.
9. 주 조명 및 추가 조명 데이터
float4 _MainLightPosition; half4 _MainLightColor; float4 _AdditionalLightsPosition[MAX_VISIBLE_LIGHTS]; half4 _AdditionalLightsColor[MAX_VISIBLE_LIGHTS];
주 조명과 추가 조명에 대한 데이터를 저장합니다.
각 조명에 대해 위치, 색상, 감쇠(Attenuation), 스포트라이트 방향 등이 포함됩니다.
10. 타일 기반 및 반사 프로브 처리 (Forward Plus)
CBUFFER_START(urp_TileBuffer) float4 urp_Tiles[MAX_TILE_VEC4S]; CBUFFER_END
타일 기반 조명 처리 및 반사 프로브에 대한 데이터를 정의합니다.
이는 Forward Plus 렌더링에서 사용됩니다.타일당 조명 수, 타일 크기, 반사 프로브의 위치 등을 정의합니다.
11. 매트릭스 정의
#define UNITY_MATRIX_M unity_ObjectToWorld #define UNITY_MATRIX_I_M unity_WorldToObject
객체에서 월드로 변환하는 매트릭스와 반대로 월드에서 객체로 변환하는 매트릭스 등 다양한 매트릭스가 정의됩니다.
12. 기타 패키지 포함
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/UnityInput.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/UnityInstancing.hlsl"
Unity의 인스턴싱 및 DOTS 관련 쉐이더 라이브러리를 포함하여 인스턴싱 처리 및 VFX 처리 관련 기능을 지원합니다.
이 코드는 Universal Render Pipeline에서 사용하는 다양한 조명, 타일 기반 조명 처리, 반사 처리 및 그림자 처리를 위한 입력 데이터를 처리하는 방법을 정의합니다.
Hey there! Do you know if they make any plugins
to help with Search Engine Optimization? I’m trying to
get my blog to rank for some targeted keywords but I’m not seeing very good
success. If you know of any please share. Cheers!
You can read similar text here: Eco wool