您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
96 行
3.6 KiB
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
|
|
}
|
|
}
|
|
}
|