177 lines
4.4 KiB
HLSL
Executable file
177 lines
4.4 KiB
HLSL
Executable file
#ifndef POICLUDES
|
|
#define POICLUDES
|
|
|
|
UNITY_DECLARE_TEX2D(_MainTex); float4 _MainTex_ST; float4 _MainTex_TexelSize;
|
|
sampler2D _PoiGrab;
|
|
float _Clip;
|
|
float _AlphaMod;
|
|
|
|
//Structs
|
|
struct appdata
|
|
{
|
|
float4 vertex: POSITION;
|
|
float3 normal: NORMAL;
|
|
float4 tangent: TANGENT;
|
|
float4 color: COLOR;
|
|
float2 uv0: TEXCOORD0;
|
|
float2 uv1: TEXCOORD1;
|
|
float2 uv2: TEXCOORD2;
|
|
float2 uv3: TEXCOORD3;
|
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
|
};
|
|
|
|
|
|
|
|
#ifdef OUTLINE
|
|
float _LineWidth;
|
|
float _OutlineEmission;
|
|
float4 _LineColor;
|
|
sampler2D _OutlineTexture; float4 _OutlineTexture_ST;
|
|
float4 _OutlineTexturePan;
|
|
float4 _OutlineFadeDistance;
|
|
float4 _OutlineGlobalPan;
|
|
#endif
|
|
|
|
struct PoiLighting
|
|
{
|
|
half3 direction;
|
|
half3 color;
|
|
fixed attenuation;
|
|
#if defined(POINT) || defined(SPOT)
|
|
fixed additiveShadow;
|
|
#endif
|
|
half3 directLighting;
|
|
half3 indirectLighting;
|
|
half lightMap;
|
|
half3 rampedLightMap;
|
|
half3 finalLighting;
|
|
half3 halfDir;
|
|
half nDotL;
|
|
half nDotH;
|
|
half lDotv;
|
|
half lDotH;
|
|
half nDotV;
|
|
half N0DotV;
|
|
half diffuseTerm;
|
|
|
|
// World normal dot half direction
|
|
#ifdef POI_VAR_DOTNH
|
|
half dotNH;
|
|
#endif
|
|
|
|
// Light direction dot half direction
|
|
#ifdef POI_VAR_DOTLH
|
|
half dotLH;
|
|
#endif
|
|
|
|
#ifdef VERTEXLIGHT_ON
|
|
// Non Important Lights
|
|
float4 vDotNL;
|
|
float3 vColor[4];
|
|
float4 vCorrectedDotNL;
|
|
float4 vAttenuation;
|
|
float4 vAttenuationDotNL;
|
|
float3 vPosition[4];
|
|
float3 vDirection[4];
|
|
float3 vFinalLighting;
|
|
float3 vHalfDir[4];
|
|
|
|
#ifdef POI_VAR_DOTLH
|
|
half4 vDotLH;
|
|
#endif
|
|
|
|
#ifdef POI_VAR_DOTNH
|
|
half4 vDotNH;
|
|
#endif
|
|
|
|
#endif
|
|
};
|
|
|
|
struct PoiCamera
|
|
{
|
|
half3 viewDir;
|
|
half3 tangentViewDir;
|
|
half3 forwardDir;
|
|
half3 worldPos;
|
|
float viewDotNormal;
|
|
float distanceToModel;
|
|
float distanceToVert;
|
|
float3 reflectionDir;
|
|
float3 vertexReflectionDir;
|
|
float2 screenUV;
|
|
float4 clipPos;
|
|
#if defined(GRAIN)
|
|
float4 screenPos;
|
|
#endif
|
|
float4 grabPos;
|
|
};
|
|
|
|
struct PoiMesh
|
|
{
|
|
float3 normals[2];
|
|
float3 tangent;
|
|
float3 binormal;
|
|
float3 localPos;
|
|
float3 worldPos;
|
|
float3 modelPos;
|
|
float3 tangentSpaceNormal;
|
|
float2 uv[5];
|
|
float4 vertexColor;
|
|
fixed3 barycentricCoordinates;
|
|
#if defined(LIGHTMAP_ON) || defined(DYNAMICLIGHTMAP_ON)
|
|
float4 lightmapUV;
|
|
#endif
|
|
float isFrontFace;
|
|
#ifdef FUR
|
|
float furAlpha;
|
|
#endif
|
|
};
|
|
|
|
struct PoiTangentData
|
|
{
|
|
float3x3 tangentTransform;
|
|
float3x3 tangentToWorld;
|
|
};
|
|
|
|
struct FragmentCommonData
|
|
{
|
|
half3 diffColor, specColor;
|
|
// Note: smoothness & oneMinusReflectivity for optimization purposes, mostly for DX9 SM2.0 level.
|
|
// Most of the math is being done on these (1-x) values, and that saves a few precious ALU slots.
|
|
half oneMinusReflectivity, smoothness;
|
|
float3 normalWorld;
|
|
float3 eyeVec;
|
|
half alpha;
|
|
float3 posWorld;
|
|
|
|
#if UNITY_STANDARD_SIMPLE
|
|
half3 reflUVW;
|
|
#endif
|
|
|
|
#if UNITY_STANDARD_SIMPLE
|
|
half3 tangentSpaceNormal;
|
|
#endif
|
|
};
|
|
|
|
struct Debug
|
|
{
|
|
float debug1;
|
|
float2 debug2;
|
|
float3 debug3;
|
|
float4 debug4;
|
|
};
|
|
|
|
static Debug debug;
|
|
static PoiLighting poiLight;
|
|
static PoiCamera poiCam;
|
|
static PoiMesh poiMesh;
|
|
static UnityGI gi;
|
|
static FragmentCommonData s;
|
|
static PoiTangentData poiTData;
|
|
float4 finalColor;
|
|
float3 finalEmission;
|
|
float4 mainTexture;
|
|
float4 albedo;
|
|
|
|
#endif
|