mirror of
https://github.com/ncblakely/GiantsTools
synced 2024-11-22 14:15:37 +01:00
135 lines
3.5 KiB
HLSL
135 lines
3.5 KiB
HLSL
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// Licensed under the MIT License.
|
|
//
|
|
// http://go.microsoft.com/fwlink/?LinkId=248929
|
|
|
|
|
|
cbuffer Parameters : register(b0)
|
|
{
|
|
float3 AmbientDown : packoffset(c0);
|
|
float Alpha : packoffset(c0.w);
|
|
float3 AmbientRange : packoffset(c1);
|
|
|
|
float4x4 World : packoffset(c2);
|
|
float3x3 WorldInverseTranspose : packoffset(c6);
|
|
float4x4 WorldViewProj : packoffset(c9);
|
|
};
|
|
|
|
|
|
#include "Structures.fxh"
|
|
#include "Utilities.fxh"
|
|
|
|
|
|
// Vertex shader: basic
|
|
VSOutputPixelLightingTx VSDebug(VSInputNmTx vin)
|
|
{
|
|
VSOutputPixelLightingTx vout;
|
|
|
|
vout.PositionPS = mul(vin.Position, WorldViewProj);
|
|
vout.PositionWS = float4(mul(vin.Position, World).xyz, 1);
|
|
vout.NormalWS = normalize(mul(vin.Normal, WorldInverseTranspose));
|
|
vout.Diffuse = float4(1, 1, 1, Alpha);
|
|
vout.TexCoord = vin.TexCoord;
|
|
|
|
return vout;
|
|
}
|
|
|
|
VSOutputPixelLightingTx VSDebugBn(VSInputNmTx vin)
|
|
{
|
|
VSOutputPixelLightingTx vout;
|
|
|
|
float3 normal = BiasX2(vin.Normal);
|
|
|
|
vout.PositionPS = mul(vin.Position, WorldViewProj);
|
|
vout.PositionWS = float4(mul(vin.Position, World).xyz, 1);
|
|
vout.NormalWS = normalize(mul(normal, WorldInverseTranspose));
|
|
vout.Diffuse = float4(1, 1, 1, Alpha);
|
|
vout.TexCoord = vin.TexCoord;
|
|
|
|
return vout;
|
|
}
|
|
|
|
|
|
// Vertex shader: vertex color.
|
|
VSOutputPixelLightingTx VSDebugVc(VSInputNmTxVc vin)
|
|
{
|
|
VSOutputPixelLightingTx vout;
|
|
|
|
vout.PositionPS = mul(vin.Position, WorldViewProj);
|
|
vout.PositionWS = float4(mul(vin.Position, World).xyz, 1);
|
|
vout.NormalWS = normalize(mul(vin.Normal, WorldInverseTranspose));
|
|
vout.Diffuse.rgb = vin.Color.rgb;
|
|
vout.Diffuse.a = vin.Color.a * Alpha;
|
|
vout.TexCoord = vin.TexCoord;
|
|
|
|
return vout;
|
|
}
|
|
|
|
VSOutputPixelLightingTx VSDebugVcBn(VSInputNmTxVc vin)
|
|
{
|
|
VSOutputPixelLightingTx vout;
|
|
|
|
float3 normal = BiasX2(vin.Normal);
|
|
|
|
vout.PositionPS = mul(vin.Position, WorldViewProj);
|
|
vout.PositionWS = float4(mul(vin.Position, World).xyz, 1);
|
|
vout.NormalWS = normalize(mul(normal, WorldInverseTranspose));
|
|
vout.Diffuse.rgb = vin.Color.rgb;
|
|
vout.Diffuse.a = vin.Color.a * Alpha;
|
|
vout.TexCoord = vin.TexCoord;
|
|
|
|
return vout;
|
|
}
|
|
|
|
|
|
// Pixel shader: default
|
|
float3 CalcHemiAmbient(float3 normal, float3 color)
|
|
{
|
|
float3 up = BiasD2(normal);
|
|
float3 ambient = AmbientDown + up.y * AmbientRange;
|
|
return ambient * color;
|
|
}
|
|
|
|
float4 PSHemiAmbient(PSInputPixelLightingTx pin) : SV_Target0
|
|
{
|
|
float3 normal = normalize(pin.NormalWS);
|
|
|
|
// Do lighting
|
|
float3 color = CalcHemiAmbient(normal, pin.Diffuse.rgb);
|
|
|
|
return float4(color, pin.Diffuse.a);
|
|
}
|
|
|
|
|
|
// Pixel shader: RGB normals
|
|
float4 PSRGBNormals(PSInputPixelLightingTx pin) : SV_Target0
|
|
{
|
|
float3 normal = normalize(pin.NormalWS);
|
|
|
|
float3 color = BiasD2(normal);
|
|
|
|
return float4(color, pin.Diffuse.a);
|
|
}
|
|
|
|
// Pixel shader: RGB tangents
|
|
float4 PSRGBTangents(PSInputPixelLightingTx pin) : SV_Target0
|
|
{
|
|
const float3x3 TBN = CalculateTBN(pin.PositionWS.xyz, pin.NormalWS, pin.TexCoord);
|
|
float3 tangent = normalize(TBN[0]);
|
|
|
|
float3 color = BiasD2(tangent);
|
|
|
|
return float4(color, pin.Diffuse.a);
|
|
}
|
|
|
|
// Pixel shader: RGB bi-tangents
|
|
float4 PSRGBBiTangents(PSInputPixelLightingTx pin) : SV_Target0
|
|
{
|
|
const float3x3 TBN = CalculateTBN(pin.PositionWS.xyz, pin.NormalWS, pin.TexCoord);
|
|
float3 bitangent = normalize(TBN[1]);
|
|
|
|
float3 color = BiasD2(bitangent);
|
|
|
|
return float4(color, pin.Diffuse.a);
|
|
}
|