Files
Liubing\LB 3d8d4d18f3 first commit
先修复一下,错误的场景

删除不必要的钓场资产

修复into场景

update:更新meta文件,修复报错

update:修复资源

修复第一章节建造

修复建造第三章

update:删除多余内容

update:更新README.md

update:还原图标

update:更新README

update:更新配置
2026-04-28 02:17:22 +08:00

96 lines
3.0 KiB
HLSL

//
// Description : HexTilingFunction based on mmikk's hextile-demo
// Original : mmikk
// License : Copyright (c) 2022 mmikk
// Distributed under the MIT License. See LICENSE file.
// https://github.com/mmikk/hextile-demo/blob/main/LICENSE
// Edited by : M.Hakozaki
//
#ifndef HEX_TILING_INCLUDED
#define HEX_TILING_INCLUDED
uint lowBias32(uint x) {
// Best Integer Hash by FabriceNeyret2
// https://www.shadertoy.com/view/WttXWX#
x ^= x >> 16;
x *= 0x7feb352dU;
x ^= x >> 15;
x *= 0x846ca68bU;
x ^= x >> 16;
return x;
}
float2 HEX_TILING_hash3_2(int2 v, uint hashSeed) {
uint2 u = uint2(asuint(v));
uint x0 = u.x + (u.y << 16) + hashSeed;
uint x1 = (u.x << 16) + u.y + (hashSeed << 16);
return float2(lowBias32(x0), lowBias32(x1)) / float(0xffffffffU);
}
float2 HEX_TILING_hash1_2(uint hashSeed) {
return float2(hashSeed, lowBias32(hashSeed)) / float(0xffffffffU);
}
float2x2 HEX_TILING_getRot(float2 hash, float rot) {
const float M_PI = 3.14159;
float rad = (frac((hash.x + hash.y) * 65536) - 0.5) * M_PI * rot;
float c = cos(rad);
float s = sin(rad);
return float2x2(c, -s, s, c);
}
void HEX_TILING_GetUV(float2 uv, float rot, uint seed, out float2 uv1, out float2 uv2, out float2 uv3, out float3 w) {
const float TILE_SIZE = 1.3;
const float HEX_RATE = sqrt(3) * 0.5; // 0.86602... 六角形の縦横比
const float2x2 gridToSkewedGrid = float2x2(1 / HEX_RATE, 0, -0.5 / HEX_RATE, 1);
uint hashSeed = lowBias32(seed);
uv += HEX_TILING_hash1_2(hashSeed);
float2 skewedCoord = mul(gridToSkewedGrid, uv * TILE_SIZE);
int2 baseIdx = floor(skewedCoord);
float3 temp = float3(frac(skewedCoord), 0);
temp.z = 1 - temp.x - temp.y;
float s = step(0, -temp.z);
float s2 = 2 * s - 1;
int2 idx1 = baseIdx + int2(s, s);
int2 idx2 = baseIdx + int2(s, 1 - s);
int2 idx3 = baseIdx + int2(1 - s, s);
float2 hash1 = HEX_TILING_hash3_2(idx1, hashSeed);
float2 hash2 = HEX_TILING_hash3_2(idx2, hashSeed);
float2 hash3 = HEX_TILING_hash3_2(idx3, hashSeed);
float2x2 rot1 = HEX_TILING_getRot(hash1, rot);
float2x2 rot2 = HEX_TILING_getRot(hash2, rot);
float2x2 rot3 = HEX_TILING_getRot(hash3, rot);
uv1 = mul(uv, rot1) + hash1;
uv2 = mul(uv, rot2) + hash2;
uv3 = mul(uv, rot3) + hash3;
w.x = -temp.z * s2;
w.y = s - temp.y * s2;
w.z = s - temp.x * s2;
return;
}
float3 HEX_TILING_gain3(float3 w, float hardness) {
float k = log(1 - hardness) / log(0.5);
float3 s = 2 * step(0.5, w);
float3 m = 2 * (1 - s);
w = 0.5 * s + 0.25 * m * pow(max(0.0, s + w * m), k);
return w.xyz / (w.x + w.y + w.z);
}
half3 HEX_TILING_MixColor(float hardness, half3 c1, half3 c2, half3 c3, float3 w) {
half3 Lw = half3(0.299, 0.587, 0.114);
half3 Dw = half3(dot(c1, Lw), dot(c2, Lw), dot(c3, Lw));
Dw = lerp(1, Dw, 0.1);
w = Dw * pow(w, 7); // 7
w /= (w.x + w.y + w.z);
w = HEX_TILING_gain3(w, hardness);
return w.x * c1 + w.y * c2 + w.z * c3;
}
#endif