All MicroEvals
// GLSL Fragment Shader: FOW Integration on Terrain uniform ...
Create MicroEval
Header image for // GLSL Fragment Shader: FOW Integration on Terrain
uniform ...

// GLSL Fragment Shader: FOW Integration on Terrain uniform ...

Prompt

// GLSL Fragment Shader: FOW Integration on Terrain uniform sampler2D uTerrainTexture; uniform sampler2D uFOWTexture; // R: Active Vision (0 or 1), G: Explored Memory (0 or 1) uniform vec2 uMapSize; varying vec2 vUv; varying vec3 vWorldPosition; void main() { vec4 baseColor = texture2D(uTerrainTexture, vUv); vec2 fowUV = vWorldPosition.xz / uMapSize; vec4 fowData = texture2D(uFOWTexture, fowUV); float isVisible = fowData.r; // 1.0 = 当前全亮, 0.0 = 迷雾中 float isExplored = fowData.g; // 1.0 = 已探索, 0.0 = 未探索黑雾 (Shroud) vec3 shroudColor = vec3(0.0, 0.0, 0.0); vec3 exploredTint = baseColor.rgb * 0.35; // 已探索区域保留 35% 地形亮度,隐藏所有动态敌方单位 vec3 visibleColor = baseColor.rgb; vec3 finalColor = mix(shroudColor, mix(exploredTint, visibleColor, isVisible), isExplored); gl_FragColor = vec4(finalColor, 1.0); } 2. 地形高度图与三向贴图混色 (Triplanar Splatmap Terrain) 陡坡检测:当法线与垂直向量夹角 > 45 ∘ >45 ∘ 时,自动混合崖壁岩石贴图并标记该网格为 Impassable。 平坦地表根据 Biome 配置(草地、沙地、苔原、雪原)进行 Alpha Splatmap 混合。 🧭 SECTION 4: 寻路、编队与局部避障 (FLOWFIELD & RVO2 STEERING) 必须实现针对数百单位军团的 Hierarchical Multi-Target Flow Field(流场寻路)+ RVO2 局部避障: 成本网格 (Cost Field):通行网格 = 1,浅滩 = 3,障碍物(建筑、树木、石矿、悬崖)= 255 (Impassable)。 积分场 (Integration Field - Eikonal/Dijkstra 波前扩散):从目标点向四周扩散计算势能值 D ( x , y ) D(x,y) 。 向量场 (Vector Field): V ⃗ ( x , y ) = − ∇ D ( x , y ) = ( − D ( x + 1 , y ) − D ( x − 1 , y ) 2 , − D ( x , y + 1 ) − D ( x , y − 1 ) 2 ) V (x,y)=−∇D(x,y)=(− 2 D(x+1,y)−D(x−1,y) ​ ,− 2 D(x,y+1)−D(x,y−1) ​ ) 编队偏移矩阵 (Formation Geometry Offsets): 线阵 (Line): O ⃗ i = [ ( i − N − 1 2 ) × Spacing , 0 ] O i ​ =[(i− 2 N−1 ​ )×Spacing,0] 方阵 (Box): O ⃗ r , c = [ ( c − C − 1 2 ) × S x , ( r − R − 1 2 ) × S y ] O r,c ​ =[(c− 2 C−1 ​ )×S x ​ ,(r− 2 R−1 ​ )×S y ​ ] 分散阵 (Staggered):方阵奇数行横向错位 0.5 × S x 0.5×S x ​ (分散投石机 AOE 伤害)。 ⚔️ SECTION 5: 全文明兵种 3D 外观、装备、动画与数值大百科 (UNIT VISUAL & SPEC ENCYCLOPEDIA) 本节包含所有通用基础兵种及各大文明专属兵种的3D 几何特征、外观演化(按时代)、动画状态机、武器装备材质、克制关系与数据规格。 【第一部分:通用基础兵种 (UNIVERSAL SHARED UNITS)】 1. 村民 (Villager) 视觉外观与 3D 几何: 身着中世纪亚麻粗布长袍(Tunic),腰系皮带与工具包,头戴亚麻便帽或草帽。 动态手持道具切换:砍树时手持伐木斧;采肉/羊时手持剥皮短刀;采矿时手持铁镐;建造/修缮时手持木工铁锤;攻击时手持短矛/猎弓。 背包负重动效:身上背负随着采集量动态膨胀的亚麻背篓(内显木头/金矿/肉块模型)。 动画状态:Idle(擦汗/环顾)、Move(背负缓行)、Chop(双臂挥斧)、Mine(弯腰凿击)、Hammer(敲击地基)、Flee(慌张奔跑)。 数值与成本: 成本:50 食物 | 生产时间:20s | 生命值:50 | 近战/远程护甲:0/0 | 移速:1.12 格/秒。 攻击:近战 4(钝击),对野生动物攻击 +5(猎弓射程 4.0)。 2. 侦察兵 (Scout) 视觉外观与 3D 几何: 身穿轻便皮革甲与带兜帽的斗篷(斗篷随骑行速度飘扬)。 骑乘未披甲的轻型战马,右手持短猎矛,马鞍侧挂着一张短弓与羊皮侦察卷轴。 牵羊动效 (Sheep Tethering):侦察兵身后跟随多只白绒绵羊,绵羊呈列队小跑跟随。 动画状态:Mounted Gallop(马匹飞奔)、Signal Horn(吹响号角扩展视野)、Melee Jab(轻矛刺击)。 数值与成本: 成本:90 食物 | 生产时间:25s | 生命值:110 | 移速:1.62 格/秒(全游戏最快基础移速) | 视野:14 格。 3. 长矛兵 (Spearman / Pikeman) - 轻装反骑步兵 视觉外观与 3D 几何: 时代 I (长矛兵):无头盔,仅着粗麻衣与皮质护胸,手持 2.5 米粗木柄铁头长矛,左臂套简易圆木盾。 时代 III (长枪兵 - Pikeman):头戴铁质轻盔(Sallet),身着链甲衫(Mail Coif),手持 4.5 米钢尖长枪。 时代 IV (精锐长枪兵):全套锻铁胸甲,长枪带有玩家阵营色三角小旗飘带。 特有姿态 (Bracing):受到骑兵冲锋时,前排单膝跪地,枪尾深深扎入泥土,枪尖斜向上 45 度迎敌。 数值与成本: 成本:60 肉 20 木 | 生命值:70 (时代 I) -> 110 (时代 IV) | 攻击力:6 (时代 I) -> 10 (时代 IV)。 标签克制:对骑兵伤害加成 +15 (时代 I) -> +36 (时代 IV)。 4. 步弓手 (Archer) - 轻装远程步兵 视觉外观与 3D 几何: 身穿束腰皮甲,背负羽箭箭袋(Quiver),左手持反曲木短弓,腰间别防身小匕首。 拉弓动作具有完整张弓蓄力前摇,箭矢带有玩家色羽翎。 数值与成本: 成本:30 肉 50 木 | 生命值:70 -> 95 | 远程攻击:5 -> 8 | 射程:5.0 格。 标签克制:对轻甲步兵加成 +5 -> +9。 5. 弩手 (Crossbowman) - 破甲远程兵 视觉外观与 3D 几何: 头戴坚固的水壶盔(Kettle Hat),身着加厚棉甲(Gambeson)外覆铁板护胸。 手持带铁制脚蹬的重型机械钢弩,装填时脚踩弩环、双手摇动绞盘。 数值与成本: 成本:80 肉 40 金 | 生命值:80 -> 100 | 远程攻击:12 -> 15 | 射程:4.5 格。 标签克制:对重甲单位 (Heavy) 伤害巨幅加成 +9 -> +12。 6. 武士 / 重装步兵 (Man-at-Arms) 视觉外观与 3D 几何: 时代 II/III:头戴封闭面罩盔,身披及膝锁子甲,左手持铁包边鸢形盾(Kite Shield),右手持宽刃单手阔剑。 时代 IV:闪亮的全套哥特式连体板金甲(Full Plate),单手持破甲战锤(Warhammer)或重剑。 数值与成本: 成本:100 肉 20 金 | 生命值:100 -> 180 | 近战攻击:10 -> 14 | 近战/远程双重基础护甲:3/3 -> 5/5。 7. 骑士 (Knight / Lancer) - 重装骑兵 视觉外观与 3D 几何: 战马披挂坚韧的玩家色织锦马袍(Caparison),骑士身着厚重骑士板甲,头盔插有羽饰。 平时单手竖握 3.5 米重装骑枪(Lance),冲锋时骑枪放平夹在腋下(Couched Lance)。 数值与成本: 成本:140 肉 100 金 | 生命值:190 -> 270 | 近战攻击:19 -> 29 | 冲锋伤害:29 -> 43 | 护甲:3/3 -> 5/5。 8. 攻城武器大系 (Siege Engines) 轻型冲车 (Battering Ram):四名步兵推动的四轮重木棚架,内部悬挂包裹生牛皮与铸铁撞头的巨木。拆迁建筑首选。 芒戈奈尔掷石机 (Mangonel):重型扭力弹簧投石车,抛射 3-5 枚炽热燃烧碎石,造成致命 3x3 半径 AOE 伤害。 巨型投石机 (Trebuchet):配重式巨型投石机。需展开部署,巨大配重箱下坠抛射巨石,射程高达 16 格。 扭力弩炮 (Springald):重型反攻城器械,平射高初速穿甲巨箭,对攻城器与船只造成狙击级额外伤害。 手推加农炮 (Bombard):时代 IV 重型铸铜火炮,装载于双轮炮架上,轰鸣巨响伴随大量白色硝烟,快速瓦解石墙要塞。 【第二部分:文明专属特色兵种大百科 (CIVILIZATION EXCLUSIVE UNITS)】 🏴󠁧󠁢󠁥󠁮󠁧󠁿 1. 英格兰专属兵种 (ENGLISH CIVILIZATION) 3D 视觉与模型特征: 身高模型:比普通弓手更为魁梧修长,身着英格兰红白相间带红十字纹章的棉甲,头戴开面铁盔。 武器:手持高达 1.8 米的紫杉木长弓(Welsh Yew Longbow),背负双箭筒。 特有动画与技能: 扎设拒马 (Palisade Stakes):在身前快速打入 3 根尖锐削尖木桩,使正面撞上的骑兵眩晕并受到伤害。 扎营休息 (Setup Camp):原地搭建营火,脱战时长弓兵每秒回复 +2 HP。 兵种数值: 成本:40 肉 50 木 | 生命值:70/80/90 | 射程:7.0 格(全步兵弓箭手最远) | 攻击力:6/7/8(对轻步兵 +6)。 3D 视觉:全套皇家卫队黑色重铠甲与金边披肩,长弓游侠射程达 8.0 格,温德加德步兵手持巨型塔盾,防御力甚至超越常规皇家重步兵。 🇫🇷 2. 法兰西专属兵种 (FRENCH CIVILIZATION) 3D 视觉与模型特征: 战马披挂法国皇家百合花(Fleur-de-lis)金蓝相间刺绣重甲,骑士佩戴带雕花遮面头盔。 冲锋时马蹄带有剧烈泥土飞溅粒子,重骑枪顶端系有百合花三角骑兵旗。 特有被动机制: 冲锋强化:冲锋命中后 5 秒内获得 +3 额外全护甲,且首击附带破甲冲击。 骑士荣耀 (Chivalry):时代 III 科技,使脱离战斗的皇家骑士每秒自动回复 +1 HP。 兵种数值: 成本:140 肉 100 金 | 生命值:190/230/270 | 基础攻击:19/24/29 | 冲锋首击:29/36/43。 3D 视觉与模型特征: 背负巨大的彩绘大铺盾(Pavise Shield),手持高张力滑轮重钢弩。 特有技能 (Pavise Deployment): 将身后的大铺盾插入地面作为掩体:进入防御姿态,远程护甲额外 +5,自身装填与射速提升 15%,移动后解除。 兵种数值: 成本:80 肉 40 金 | 生命值:85/95 | 破甲攻击:12/15(对重甲 Heavy +6/+8)。 3D 视觉:法兰西皇家铸造厂特制青铜加农炮,无需展开架设,移速比普通火炮高 20%,炮击附带额外穿透杀伤。 🇨🇳 3. 中国专属兵种 (CHINESE CIVILIZATION) 3D 视觉与模型特征: 身穿明代/唐代深青色丝绸官袍,头戴展角幞头(乌纱帽),手持象牙折扇与账簿。 移动步履稳健,行走时账簿散发淡淡金光。 动作与技能状态: 监督建筑 (Supervise):命官站在建筑旁挥动象牙板,建筑生产速度/科技研发速度直接提升 +20%。 征收税金 (Collect Tax):巡游于各大生产与科技建筑之间,头顶冒出黄金图标,自动将税金存入国库。 兵种数值:成本:150 肉 | 上限:4 名 | 生命值:75 | 无攻击能力。 3D 视觉与模型特征: 身着中式扎甲(Lamellar Armor),头戴宽沿斗笠铁盔,手持木制顶置弹匣连发诸葛连弩。 三连发射击动作:单次攻击循环内快速扣动扳机连续发射 3 枚箭矢,伴随清脆机械装填音效。 兵种数值: 成本:20 肉 30 木 30 金 | 生命值:70/80/90 | 攻击力:4 x 3 连发(单轮 12 伤害,对轻步兵有毁灭级克制)。 3D 视觉与模型特征: 身着华丽的明光铠或山文甲,腰扎金红丝绦,双手握持长柄双手雁翎刀。 移速比其他所有文明的重步兵快 12%,冲锋时双手挥刀斩劈。 兵种数值: 成本:100 肉 20 金 | 生命值:155/180 | 近战攻击:10/14 | 移速:1.25 格/秒(重步兵中最快)。 3D 视觉与模型特征: 骑乘轻装战马,手持前段绑有竹筒火药喷筒的长枪(突火枪)。 冲锋引爆动效:冲锋命中目标时,枪头火药剧烈喷发爆炸,对周围 1.5 半径敌人造成大量范围火焰爆炸伤害。 兵种数值: 成本:120 肉 20 木 20 金 | 生命值:135/160 | 冲锋附带 AOE 范围溅射点燃,极度克制攻城器与建筑。 3D 视觉与模型特征: 双轮木架上安装装有 32 支火箭的六角形发射火箭巢。 齐射动效:发射时伴随尖锐啸叫与长长尾烟,连续喷射 8 枚蜂拥而出的火箭群,地表留下持续燃烧火海。 兵种数值: 成本:300 木 300 金 | 生命值:200 | 攻击力:8 x 8 火箭连发(范围 AOE)。 3D 视觉与模型特征: 身着红袍铁甲,左手持火折子,右手投掷冒着引线青烟的陶罐陶瓷手榴弹。 兵种数值: 成本:120 肉 60 金 | 生命值:110 | 射程:3.0 格 | 投掷伤害:13(附带 1.2 格范围真实爆炸破坏)。 🇲🇳 4. 蒙古专属兵种 (MONGOL CIVILIZATION) 3D 视觉与模型特征: 骑乘纯白骏马,身着厚重皮草衬里的金色鳞甲,手持雕花角弓,头戴貂皮毡帽。 身后插有一面随风狂舞的九游白纛(Sulde 战旗)。 信号箭技能动效 (Signal Arrows): 机动信号箭 (Maneuver Arrow):射出一发青色响箭,全图发出尖啸,周围友军移速 +33%,持续 5s。 攻速信号箭 (Attack Arrow):射出红色响箭,周围友军攻击速度提升 +25%。 护甲信号箭 (Armor Arrow):射出黄色响箭,周围友军全护甲 +2。 兵种数值:生命值:180 随时代成长至 400 | 远程攻击:6 提升至 20。 3D 视觉与模型特征: 轻便毛皮甲,背负双箭筒,腰间挂弯刀。 移动射击特权 (Fire On The Move):能够在全速奔跑移动中向四周任意角度(360 度)不减速自由拉弓射箭(曼古歹风筝战术)。 兵种数值: 成本:120 肉 40 金 | 生命值:80/95 | 远程攻击:7/9/10 | 移速:1.62 格/秒。 蒙古在时代 I 即可生产轻骑兵;巨型投石机采用人力拉绳牵引式投石机,机动性极强。 🏛️ 5. 神圣罗马帝国 (HRE) & 阿拔斯 & 德里 & 罗斯亮点兵种 3D 视觉:身穿白色修道院长袍,手持带十字架的黄金法杖。 神圣激励技能 (Holy Inspiration):为周围村民施加金光祝福,使村民采集效率提升 +40% 持续 30 秒;可拾取地图圣物放入建筑产生高额黄金。 3D 视觉:身着极尽浮夸的德意志泡泡袖(Slash & Puff)彩色战服,双手挥舞 1.8 米长的焰形巨剑(Zweihänder)。 范围横扫:普攻为 360 度周身大风车横斩,对周围所有步兵造成范围毁灭性真实伤害。 3D 视觉:骑乘单峰沙漠骆驼,身穿阿拉伯长袍面纱。 骆驼惊马光环 (Camel Unease Aura):周围 5 格内的敌方马匹受到惊吓,攻击力降低 -20%。 3D 视觉:身披重甲护额的巨型印度战象,背负带顶棚的木制战斗塔楼,塔楼内驻扎 2 名远程弓箭手/火枪手。 兵种数值:全游戏最高单体生命值(高达 1400 HP),象鼻横扫与践踏冲锋直接碾碎步兵集群与木质栅栏。 3D 视觉:身穿俄式红色长大衣,头戴毛皮高帽,手持重型火绳枪,左手握着一把巨大的月牙战斧(Bardiche)。 站立静止充能 (Static Deployment):站立不动每秒累积一层被动,最高累积 10 秒:装填速度提升至极限,近距离伤害高达 50/枪,任何接近的敌人均会被近战月牙斧劈碎。 🖥️ SECTION 6: 1:1 帝国时代 4 拟物化 HUD 规格 (UI/UX SPECIFICATION) code Code +-------------------------------------------------------------------------------------------------------------+ | [CIV] [AGE II] 🌾 1250(+12) 🪵 840(+8) 🪙 450(+4) 🪨 200(+0) 👥 78/100 🧑‍🌾 42 ⏱️ 14:25 [MENU] | +-------------------------------------------------------------------------------------------------------------+ | | | [ 3D BATTLE VIEWPORT ] | | | +---------------------+-------------------------------------------------------------+-------------------------+ | [ MINIMAP ] | [ SELECTION & STATS ] | [ 4x4 COMMAND GRID ] | | +---------------+ | +------+ Longbowman (Age II) | [ Q ] [ W ] [ E ] [ R ]| | | ▲ Camera Frust| | | 3D | Health: [████████████████] 80/80 | Move Stop AtkM Patrl| | | * Relic | | | Icon | Damage: 6 (Ranged) + 2 vs Light | [ A ] [ S ] [ D ] [ F ]| | | ■ Buildings | | +------+ Armor: 0 Melee / 1 Ranged | Range: 6.5 | Hold Stag Line Camp | | | • Units (Dots)| | Buffs: [Network of Castles +15% AtkSpd] [Setup Camp Ready] | [ Z ] [ X ] [ C ] [ V ]| | +---------------+ | Queue: [Icon][Icon][Icon] (Progress: 45%) | Build Eco Tech Age | +---------------------+-------------------------------------------------------------+-------------------------+ 💻 SECTION 7: 工业级核心 TypeScript / ECS 代码实现底座 1. ECS 数据结构定义 (src/engine/ecs/schema.ts) code TypeScript import { defineComponent, Types } from 'bitecs'; export const Transform = defineComponent({ x: Types.f32, y: Types.f32, z: Types.f32, rotationY: Types.f32, targetX: Types.f32, targetZ: Types.f32, velocityX: Types.f32, velocityZ: Types.f32, radius: Types.f32, speed: Types.f32, }); export const CombatStats = defineComponent({ health: Types.f32, maxHealth: Types.f32, meleeArmor: Types.ui8, rangedArmor: Types.ui8, baseDamage: Types.f32, bonusDamage: Types.f32, bonusTargetTag: Types.ui32, // Bitmask attackRange: Types.f32, minRange: Types.f32, attackCooldown: Types.f32, currentCooldown: Types.f32, targetEntityId: Types.eid, state: Types.ui8, // 0: Idle, 1: Moving, 2: Attacking, 3: Gathering, 4: Dying }); export const ResourceGatherer = defineComponent({ resourceType: Types.ui8, // 0: None, 1: Food, 2: Wood, 3: Gold, 4: Stone carryingAmount: Types.f32, maxCarryCapacity: Types.f32, gatherRatePerSecond: Types.f32, targetResourceNodeId: Types.eid, targetDropOffBuildingId: Types.eid, }); export const UnitMetadata = defineComponent({ ownerPlayerId: Types.ui8, // 0: Gaia, 1: Player, 2: Enemy AI civilizationId: Types.ui8, // 1: English, 2: French, 3: Chinese, 4: Mongols, 5: HRE, 6: Abbasid, 7: Rus, 8: Delhi unitTypeId: Types.ui16, tagMask: Types.ui32, isSelected: Types.ui8, }); 2. 战斗与伤害结算系统 (src/engine/systems/CombatSystem.ts) code TypeScript import { defineQuery, defineSystem, IWorld } from 'bitecs'; import { Transform, CombatStats, UnitMetadata } from '../ecs/schema'; const combatQuery = defineQuery([Transform, CombatStats, UnitMetadata]); export const createCombatSystem = () => { return defineSystem((world: IWorld, deltaTime: number) => { const entities = combatQuery(world); for (let i = 0; i < entities.length; i++) { const eid = entities[i]; if (CombatStats.currentCooldown[eid] > 0) { CombatStats.currentCooldown[eid] -= deltaTime; } const targetEid = CombatStats.targetEntityId[eid]; if (!targetEid || CombatStats.health[targetEid] <= 0) { CombatStats.targetEntityId[eid] = 0; if (CombatStats.state[eid] === 2) CombatStats.state[eid] = 0; // Return to Idle continue; } const dx = Transform.x[targetEid] - Transform.x[eid]; const dz = Transform.z[targetEid] - Transform.z[eid]; const distance = Math.sqrt(dx * dx + dz * dz); const range = CombatStats.attackRange[eid]; const minRange = CombatStats.minRange[eid]; if (distance <= range && distance >= minRange) { // 进入射程,停下攻击 Transform.velocityX[eid] = 0; Transform.velocityZ[eid] = 0; CombatStats.state[eid] = 2; // Attacking Transform.rotationY[eid] = Math.atan2(dx, dz); if (CombatStats.currentCooldown[eid] <= 0) { // 执行 AoE4 护甲克制公式 const targetTags = UnitMetadata.tagMask[targetEid]; const bonusTag = CombatStats.bonusTargetTag[eid]; const bonus = (targetTags & bonusTag) !== 0 ? CombatStats.bonusDamage[eid] : 0; const rawDamage = CombatStats.baseDamage[eid] + bonus; const armor = CombatStats.attackRange[eid] > 2.0 ? CombatStats.rangedArmor[targetEid] : CombatStats.meleeArmor[targetEid]; const finalDamage = Math.max(1, rawDamage - armor); CombatStats.health[targetEid] -= finalDamage; CombatStats.currentCooldown[eid] = CombatStats.attackCooldown[eid]; if (CombatStats.health[targetEid] <= 0) { CombatStats.state[targetEid] = 4; // Dying } } } else { // 追击移动 CombatStats.state[eid] = 1; // Moving const angle = Math.atan2(dx, dz); const speed = Transform.speed[eid]; Transform.velocityX[eid] = Math.sin(angle) * speed; Transform.velocityZ[eid] = Math.cos(angle) * speed; } } return world; }); }; 🚀 SECTION 8: 分阶段落地实施执行协议 (EXECUTION PROTOCOL) 你必须严格按照以下阶段逐一输出完整、可运行的工程代码,严禁跳步: 阶段一 (Phase 1):搭建 Vite + React 19 + Three.js 工程,构建 Web Worker 确定性 Tick 循环,输出完整的 ECS Schema、单位生成工厂函数(支持上述所有特色兵种的基础数据注入)与基础移动系统。 阶段二 (Phase 2):地形网格高度图生成、三向贴图地表着色器、资源节点生成与 GPU 战争迷雾 FBO 着色器渲染。 阶段三 (Phase 3):流场寻路算法(Cost/Integration/Vector Field)、RVO2 局部避障与 RTS 经典绿色框选系统。 阶段四 (Phase 4):村民采集搬运循环 FSM、建筑地基网格吸附与四大文明地标升级树。 阶段五 (Phase 5):真实战斗、弹道物理、城墙驻扎防御与攻城武器组装。 阶段六 (Phase 6):1:1 AoE4 拟物化暗金 HUD、小地图视锥投影、4x4 指令面板与选中单位属性卡。

A system prompt was added to support web rendering