You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
126 lines
3.2 KiB
HLSL
126 lines
3.2 KiB
HLSL
/******************************************************************************/
|
|
/*
|
|
Project - MudBun
|
|
Publisher - Long Bunny Labs
|
|
http://LongBunnyLabs.com
|
|
Author - Ming-Lun "Allen" Chou
|
|
http://AllenChou.net
|
|
*/
|
|
/******************************************************************************/
|
|
|
|
#ifndef MUDBUN_MESH_COMMON
|
|
#define MUDBUN_MESH_COMMON
|
|
|
|
#ifdef MUDBUN_VALID
|
|
|
|
#include "../BrushDefs.cginc"
|
|
#include "../GenPointDefs.cginc"
|
|
#include "../Math/Codec.cginc"
|
|
#include "../Math/Vector.cginc"
|
|
#include "../NormalDefs.cginc"
|
|
#include "../RenderModeDefs.cginc"
|
|
|
|
#endif
|
|
|
|
void mudbun_mesh_vert
|
|
(
|
|
uint id,
|
|
out float4 vertexWs,
|
|
out float3 vertexLs,
|
|
out float3 normalWs,
|
|
out float3 normalLs,
|
|
out float3 tangentWs,
|
|
out float3 tangentLs,
|
|
out float4 color,
|
|
out float hash,
|
|
out float sdfValue,
|
|
out float3 normal2dLs,
|
|
out float3 normal2dWs
|
|
)
|
|
{
|
|
#if MUDBUN_VALID
|
|
|
|
if ((scaleSign < 0) ^ invertNormals)
|
|
id = 3 * (id / 3) + 2 - (id % 3);
|
|
|
|
vertexLs = aGenPoint[id].posNorm.xyz;
|
|
vertexWs = mul(localToWorld, float4(vertexLs, 1.0f));
|
|
normalLs = unpack_normal(aGenPoint[id].posNorm.w);
|
|
normal2dLs = unpack_normal(aGenPoint[id].norm2d);
|
|
|
|
if (should_quantize_normal())
|
|
{
|
|
normalLs = quantize_normal(normalLs);
|
|
normal2dLs = quantize_normal(normal2dLs);
|
|
}
|
|
|
|
normalWs = normalize(mul(localToWorldIt, float4(normalLs, 0.0f)).xyz);
|
|
normal2dWs = normalize(mul(localToWorldIt, float4(normal2dLs, 0.0f)).xyz);
|
|
|
|
tangentWs = compute_tangent(normalWs);
|
|
tangentLs = normalize(mul(worldToLocalIt, float4(tangentWs, 0.0f)).xyz);
|
|
|
|
color = unpack_rgba(aGenPoint[id].material.color);
|
|
if (!IsGammaSpace())
|
|
color.rgb = gamma_to_linear_space(color.rgb);
|
|
|
|
hash = aGenPoint[id].material.hash;
|
|
|
|
sdfValue = aGenPoint[id].sdfValue;
|
|
|
|
#endif
|
|
}
|
|
|
|
void mudbun_mesh_vert
|
|
(
|
|
uint id,
|
|
out float4 vertexWs,
|
|
out float3 vertexLs,
|
|
out float3 normalWs,
|
|
out float3 normalLs,
|
|
out float3 tangentWs,
|
|
out float3 tangentLs,
|
|
out float4 color,
|
|
out float4 emissionHash,
|
|
out float2 metallicSmoothness,
|
|
out float4 textureWeight,
|
|
out float sdfValue,
|
|
out float3 normal2dLs,
|
|
out float3 normal2dWs
|
|
)
|
|
{
|
|
#if MUDBUN_VALID
|
|
|
|
mudbun_mesh_vert(id, vertexWs, vertexLs, normalWs, normalLs, tangentWs, tangentLs, color, emissionHash.a, sdfValue, normal2dLs, normal2dWs);
|
|
|
|
if ((scaleSign < 0) ^ invertNormals)
|
|
id = 3 * (id / 3) + 2 - (id % 3);
|
|
|
|
emissionHash.rgb = unpack_rgba(aGenPoint[id].material.emissionTightness).rgb;
|
|
if (!IsGammaSpace())
|
|
emissionHash.rgb = gamma_to_linear_space(emissionHash.rgb);
|
|
|
|
metallicSmoothness = unpack_saturated(aGenPoint[id].material.metallicSmoothness);
|
|
textureWeight = unpack_rgba(aGenPoint[id].material.textureWeight);
|
|
|
|
#else
|
|
|
|
vertexWs = float4(0.0f, 0.0f, 0.0f, 1.0f);
|
|
vertexLs = float3(0.0f, 0.0f, 0.0f);
|
|
normalWs = float3(0.0f, 0.0f, 0.0f);
|
|
normalLs = float3(0.0f, 0.0f, 0.0f);
|
|
tangentWs = float3(0.0f, 0.0f, 0.0f);
|
|
tangentLs = float3(0.0f, 0.0f, 0.0f);
|
|
color = float4(0.0f, 0.0f, 0.0f, 1.0f);
|
|
emissionHash = float4(0.0f, 0.0f, 0.0f, 0.0f);
|
|
metallicSmoothness = float2(0.0f, 0.0f);
|
|
textureWeight = int4(1.0f, 0.0f, 0.0f, 0.0f);
|
|
sdfValue = 0.0f;
|
|
normal2dLs = float3(0.0f, 0.0f, 0.0f);
|
|
normal2dWs = float3(0.0f, 0.0f, 0.0f);
|
|
|
|
#endif
|
|
}
|
|
|
|
#endif
|