您最多选择25个主题 主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 

96 行
3.6 KiB

Shader "hidden/preview/TangentToWorld_C47CCB6C"
{
Properties
{
}
CGINCLUDE
#include "UnityCG.cginc"
void Unity_TangentToWorld_float(float3 inVector, out float3 result, float3 tangent, float3 biTangent, float3 normal)
{
float3x3 tangentToWorld = transpose(float3x3(tangent, biTangent, normal));
result= saturate(mul(tangentToWorld, normalize(inVector)));
}
struct GraphVertexInput
{
float4 vertex : POSITION;
float3 normal : NORMAL;
float4 tangent : TANGENT;
float4 texcoord0 : TEXCOORD0;
float4 lightmapUV : TEXCOORD1;
UNITY_VERTEX_INPUT_INSTANCE_ID
};
struct SurfaceInputs{
float3 WorldSpaceNormal;
float3 WorldSpaceTangent;
float3 WorldSpaceBiTangent;
};
struct SurfaceDescription{
float3 TangentToWorld_C47CCB6C_result;
};
void ScaleSurfaceDescription(inout SurfaceDescription surface, float scale){
surface.TangentToWorld_C47CCB6C_result = scale * surface.TangentToWorld_C47CCB6C_result;
};
void AddSurfaceDescription(inout SurfaceDescription base, in SurfaceDescription add){
base.TangentToWorld_C47CCB6C_result = base.TangentToWorld_C47CCB6C_result + add.TangentToWorld_C47CCB6C_result;
};
float4 TangentToWorld_C47CCB6C_inVector;
float4 TangentToWorld_C47CCB6C_tangent;
float4 TangentToWorld_C47CCB6C_biTangent;
float4 TangentToWorld_C47CCB6C_normal;
GraphVertexInput PopulateVertexData(GraphVertexInput v){
return v;
}
SurfaceDescription PopulateSurfaceData(SurfaceInputs IN) {
float3 WorldSpaceNormal = IN.WorldSpaceNormal;
float3 WorldSpaceTangent = IN.WorldSpaceTangent;
float3 WorldSpaceBiTangent = IN.WorldSpaceBiTangent;
float3 TangentToWorld_C47CCB6C_result;
Unity_TangentToWorld_float(TangentToWorld_C47CCB6C_inVector, TangentToWorld_C47CCB6C_result, WorldSpaceTangent, WorldSpaceBiTangent, WorldSpaceNormal);
SurfaceDescription surface = (SurfaceDescription)0;
surface.TangentToWorld_C47CCB6C_result = TangentToWorld_C47CCB6C_result;
return surface;
}
ENDCG
SubShader
{
Tags { "RenderType"="Opaque" }
LOD 100
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct GraphVertexOutput
{
float4 position : POSITION;
float3 WorldSpaceNormal : TEXCOORD0;
float3 WorldSpaceTangent : TEXCOORD1;
float3 WorldSpaceBiTangent : TEXCOORD2;
};
GraphVertexOutput vert (GraphVertexInput v)
{
v = PopulateVertexData(v);
GraphVertexOutput o;
o.position = UnityObjectToClipPos(v.vertex);
o.WorldSpaceNormal = mul(v.normal,(float3x3)unity_WorldToObject);
o.WorldSpaceTangent = mul((float3x3)unity_ObjectToWorld,v.tangent);
o.WorldSpaceBiTangent = normalize(cross(o.WorldSpaceNormal, o.WorldSpaceTangent.xyz) * v.tangent.w);
return o;
}
fixed4 frag (GraphVertexOutput IN) : SV_Target
{
float3 WorldSpaceNormal = normalize(IN.WorldSpaceNormal);
float3 WorldSpaceTangent = IN.WorldSpaceTangent;
float3 WorldSpaceBiTangent = IN.WorldSpaceBiTangent;
SurfaceInputs surfaceInput = (SurfaceInputs)0;;
surfaceInput.WorldSpaceNormal = WorldSpaceNormal;
surfaceInput.WorldSpaceTangent = WorldSpaceTangent;
surfaceInput.WorldSpaceBiTangent = WorldSpaceBiTangent;
SurfaceDescription surf = PopulateSurfaceData(surfaceInput);
return half4(surf.TangentToWorld_C47CCB6C_result.x, surf.TangentToWorld_C47CCB6C_result.y, surf.TangentToWorld_C47CCB6C_result.z, 1.0);
}
ENDCG
}
}
}