找回密码
 点一下
查看: 1090|回复: 13

[求助]请问模型-纹理声明如何使用才能准确换皮【已解决】

[复制链接]
发表于 2021-11-18 19:12:50 | 显示全部楼层 |阅读模式
本帖最后由 Prinny 于 2022-2-6 16:48 编辑

本帖已解决,目前发现贴图的名称和模型名称都不能乱起
比如1)模型M3文件后面的_00 _01 _02是专门给变种识别的,模型数据参数“变种计数”默认=1,当=2 就不会搜叫/Bus.M3的模型,会加上_00后缀去搜,变种计数=2,就搜_00和_01文件名的模型,所以像诺娃美术MOD有个BUG,其实是官方蓝字Bus的模型变种计数填了2,素材库只有Bus.M3而不是Bus_00.M3和Bus_01.M3,导致官方单位公车模型不出现。
比如2)素材没绑定纹理皮dds的时候(新建纹理),它就参与某些规则索引,模型声明里填个前后缀就替换了皮,而不是通过演算体替换纹理,在你素材乱起名时,就出现各种BUG,在你地图名太长时,过长的素材文件还会找不到(线上发布才出现,线下OK)
注:要参照官方命名规则去处理素材名称,防止检索时发生外星人事件。
--------------------------------------
想要讨论还是可以在下面回复。

最近想要复刻FC老游戏(那些移动的时候要刷图片的老游戏)
Unity来说游戏物体可以是图片拖进场景即可,但GE来做的话,脚本中使用的游戏物体至少是模型
QQ图片20211118144833.jpg
(↑比如Unity自带地形工具,只要贴图块来拼地形)
QQ图片20211118144830.jpg
(↑拼好的重装机兵地形)

------------------------------模拟策略↓
那么GE是否可以采用很多地形板块模型,铺地板方式来实现FC游戏如“勇者斗恶龙”、“重装机兵”等地形的快速复刻呢?
QQ图片20211118190037.png
QQ图片20211118144633.png

届时可以自己坐标记录属性(如障碍)到数据表(全局变量),因为地形工具画的路径不便更改,
并且似乎不需要很多的方块地板,只做几个固定模数的,如果模型-纹理声明能换掉那层皮就能实现这样的计划~
↓模型做成装饰物埋入地表(脚本也可快速规划),之后隐藏地形单元格。
QQ图片20211118170315.png

在3DMAX里我们快速制作各式方块
QQ图片20211118144842.jpg
QQ图片20211118144712.jpg

QQ图片20211118144839.jpg
QQ图片20211118144619.png
总之,想用这个办法复刻以前老FC游戏地形到星际2,思路是不用做很多固定纹理皮的模型,只需固定模数模型小方块排列好埋入地表(隐藏地形单元格),在模型不变情况下 ,只换掉指定模型上面那层纹理-皮。

发这个帖子主要是想请教下其中模型-纹理声明的使用,因为网上这方面教程很少,希望跟大家一起讨论~

 楼主| 发表于 2021-11-18 19:20:35 | 显示全部楼层
本帖最后由 Prinny 于 2022-7-27 15:22 编辑

有人用过物编-模型-纹理声明吗?附件压缩包是布置时声明方式错误、不得要领,导致布置的Saber(测试用)一黑一白。
各位可以帮忙看看是什么原因,因为此时还没在物编新建纹理给演算体操作,仅依靠模型-纹理声明就出现了模型外纹理皮被用在模型上(变回白膜、偶尔换皮成功)。(注:压缩包内MOD是战网公开的,搜“MM_”即可下载)

模型纹理声明后布置单位一黑一白,求教如何解决?.zip

6.24 MB, 下载次数: 2

回复

使用道具 举报

 楼主| 发表于 2021-11-20 13:02:00 | 显示全部楼层
本帖最后由 Prinny 于 2022-7-27 15:25 编辑

布置的时候概率50%变黑白Saber重皮

布置的时候概率50%变黑白Saber重皮

同一个模型,怎样声明纹理才能准确换皮,而不是如上图布置时随机皮呢↑

模型-纹理声明

模型-纹理声明

dds贴图

dds贴图

这个模型原纹理是:
身体,
Saber_Body_diffuse
剑(武器),
Saber_Sword_diffuse

3DMAX制作

3DMAX制作

原贴图

原贴图

导出M3

导出M3

模型是绿衣服和正常的剑

模型是绿衣服和正常的剑

现在要通过模型-纹理声明,来换黑皮,
(就是接下来在编辑器里换 ,不在3DMAX里操作,后面计划给大量指定方块换皮..)
-----------------------,
打算后面会在演算体事件换纹理(通过触发器发消息、预制信号等形式),
但这里有个Bug,还没创建新纹理,还没绑定素材,仅在模型-声明纹理时,它偶尔自动把下方两个贴图皮

黑白Saber身体贴图

黑白Saber身体贴图

目前测试图是交替出现(概率是50%,布置时可能是白黑黑白,白黑白黑),
只进行纹理声明,白Saber(正常Saber)会换黑Saber的皮成功,但是换女仆Saber失败,不知是啥情况出现这种现象。
(注:后面发现它的工作方式是搜实际路径下贴图素材的名称进行替换,不需数据库与素材绑定后使用(即不需新建纹理给演算体用),所以在3DMAX贴图命名时就要规范前缀后缀名称,以让它搜索正确)





回复

使用道具 举报

 楼主| 发表于 2021-11-20 23:38:59 | 显示全部楼层
本帖最后由 Prinny 于 2021-11-30 12:53 编辑

QQ图片20211120233344.png
上图,默认槽位填main或none时,Slot = main.diffuse  属性=[diffuse],似乎将main改为main.diffuse是一样的
设置纹理属性时:如果填Variable00 ,则是变成 main.diffuse [00] 这样的东西,
字符串要填贴图名是看懂了,暂无法明白更多参数含义,不清楚这方面其他规则。




回复

使用道具 举报

 楼主| 发表于 2021-11-21 00:07:17 | 显示全部楼层
本帖最后由 Prinny 于 2021-11-21 00:14 编辑

纹理的相关翻译:
EDSTR_ENUMHINT_e_actorHostedPropDecal=允许附着模型从宿主身上继承印花纹理。
EDSTR_ENUMHINT_e_actorModelFlagSuppressPlayerDecals=阻止这个演算体中的模型显示印花纹理。
EDSTR_ENUMHINT_e_actorModelFlagUseSprayForDecal=使用玩家所选喷漆奖励作为印花纹理。
EDSTR_ENUMHINT_e_actorModelFlagWireframeRender=使模型渲染为线框,而没有纹理。适合用来显示调试用的演算体,比如用来显示镜头位置的辅助演算体。
EDSTR_ENUMHINT_e_actorModelSwapFlagPreventAllDynamicTextureTransfers=阻止任何动态纹理从原模型复制到新模型上。
EDSTR_ENUMHINT_e_actorMsgCreepEngulfmentStart=目标:CActorModel。告诉CActorModel开始应用一个菌毯吞没视觉特效。当模型(例如建筑或攻城模式下的攻城坦克)位于菌毯上方时,菌毯吞没会使菌毯纹理看起来像是覆盖在模型(例如建筑或攻城模式下的攻城坦克)的底部。这一消息包括控制菌毯吞没开始于哪个水平高度、覆盖多少距离、从哪个距离开始淡出。这让数据能够针对每个模型来控制菌毯吞没,这样它就能自动在大型建筑上爬得更高,同时还能在非常矮的建筑(如收起的补给站)上留下一些未被菌毯覆盖的可辨识特征。
EDSTR_ENUMHINT_e_actorMsgCreepEngulfmentStartTransition=目标:CActorModel。与CreepEngulfmentStart消息类似,但是却会使菌毯吞没以一种指定的速率在指定目标模型上爬升。通常,菌毯会在建筑上以与菌毯自身的扩张速度相同的速率出现。换句话说,当菌毯扩张到一个格子时,它就会以与地面相同的纹理覆盖建筑在那个格子里的部分。但对于部署在菌毯上的攻城坦克来说、这回使菌毯立刻出现在被部署的坦克上、因为菌毯已经覆盖了那个格子。在这种情况下,最好在工程坦克完成部署后立刻使用CreepEngulfmentStartTransition来显示菌毯爬上攻城坦克的动画。
EDSTR_ENUMHINT_e_actorMsgLightSetAmbientOcclusion=目标:CActorLight。决定一束光在投下阴影时是否受到环境光遮蔽的影响。这对基于纹理的静态环境光遮蔽和动态的屏幕空间环境光遮蔽(SSAO)都有效。任意类型的环境光遮蔽都需要“极高”画质的渲染器视频设置。
EDSTR_ENUMHINT_e_actorMsgSceneTextureRegisterFileAlias=目标:CActorScene。在运行时动态注册一个“外部”纹理文件。可用于指向用户硬盘上的任意文件。相对路径采用该用户的应用程序文档文件夹(例如:C:\Users\JRaynor\Documents\StarCraft II)。
EDSTR_ENUMHINT_e_actorMsgTextureSelectByFileAlias=目标:CActorModel。选择一个纹理文件,并作为文件别名注册到模型中,并使用文件别名中所指定的纹理槽位。
EDSTR_ENUMHINT_e_actorTransferFlagTextures=尽最大可能复制源演算体的动态纹理。比方说,假如新建的演算体可以显示印花,那么它就会复制源演算体的印花纹理。
EDSTR_ENUMHINT_e_modelFlagPreventTextureAutoUpdate=阻止纹理随着模型全局或场景纹理全局属性的变化而更新。假如内容作者不清楚这方面的规则,这类行为就可能导致错误,在某些情况下,关闭这一行为是较简单的解决方法。
EDSTR_ENUMHINT_e_modelFlagPreventTextureFileTokenRecognition=阻止纹理文件名中的纹理槽位和属性自动被辨认。数据必须使用TextureDeclare。这可能导致需要设置更多的数据,但数据没有隐藏规则,因此不会导致异常。
EDSTR_ENUMHINT_e_texturePropsOpContainsAll=假如有一套纹理名称包含所提交的所有纹理关键字就返回真。
EDSTR_ENUMHINT_e_texturePropsOpContainsAny=假如有一套纹理名称包含所提交的任意纹理关键字就返回真。
EDSTR_ENUMHINT_e_texturePropsOpEquals=假如有一套纹理名称与所提交的纹理名称完全一致(所有关键字不多不少)就返回真。
EDSTR_ENUMHINT_e_textureSelectByUpdateLinkOpAppend=将一条字符串附加到当前被赋给一个贴图栏位的TextureLink的后方。这会更改贴图链接,使得游戏载入另一张贴图。
EDSTR_ENUMHINT_e_textureSelectByUpdateLinkOpReplace=替换当前被赋给一个贴图栏位的TextureLink中的子字符串。这会更改贴图链接,使得游戏载入另一张贴图。例子:将'Decal_0001'替换为'Background_0001'。
EDSTR_ENUMHINT_e_textureVideoPlayFlagLooping=以重复循环的方式播放纹理视频,播放完一次后从头开始。
EDSTR_ENUMHINT_e_textureVideoPlayFlagSynced=将纹理视频设置为会自动同步当前播放的音效速度(或游戏总体速度),在进度落后时进行跳帧。
EDSTR_ENUMHINT_e_textureVideoSound3DAtAttach=在纹理所在模型上的指定的附着点位置(通过相关的附着查询来指定)播放音效。
EDSTR_ENUMHINT_e_textureVideoSound3DAtOrigin=在纹理所在模型的基点播放音效。
EDSTR_ENUMHINT_e_textureVideoSoundNone=关闭纹理视频的音效。
EDSTR_ENUMNAME_ETextureExpressionOp=纹理表达式选项
EDSTR_ENUMNAME_ETexturePropsOp=纹理属性运算
EDSTR_ENUMNAME_ETextureSelectByUpdateLinkOp=由更新链接选择的纹理运算
EDSTR_ENUMVAL_e_actorModelSwapFlagPreventAllDynamicTextureTransfers=阻止动态纹理传递
EDSTR_ENUMVAL_e_actorMsgSceneTextureDumpFileAliases=场景纹理转储文件别名
EDSTR_ENUMVAL_e_actorMsgSceneTextureRegisterFileAlias=场景纹理注册文件别名
EDSTR_ENUMVAL_e_actorMsgSetRenderToTextureEnabled=启用渲染到纹理
EDSTR_ENUMVAL_e_actorMsgTextureDump=纹理转储
EDSTR_ENUMVAL_e_actorMsgTextureDumpDB=纹理转储数据库
EDSTR_ENUMVAL_e_actorMsgTextureGroupApply=应用纹理组
EDSTR_ENUMVAL_e_actorMsgTextureGroupApplyGlobal=纹理组应用全局
EDSTR_ENUMVAL_e_actorMsgTextureGroupRemove=纹理组移除
EDSTR_ENUMVAL_e_actorMsgTextureGroupRemoveGlobal=纹理组移除全局
EDSTR_ENUMVAL_e_actorMsgTextureResetToDefault=纹理重设
EDSTR_ENUMVAL_e_actorMsgTextureSelectByFileAlias=纹理选择使用文件别名
EDSTR_ENUMVAL_e_actorMsgTextureSelectById=按Id选择纹理
EDSTR_ENUMVAL_e_actorMsgTextureSelectByMatch=按匹配选择
EDSTR_ENUMVAL_e_actorMsgTextureSelectBySlot=按纹理槽选择
EDSTR_ENUMVAL_e_actorMsgTextureSelectByUpdateLink=由更新链接选择的纹理
EDSTR_ENUMVAL_e_actorMsgTextureSelectDecalByPlayer=由玩家选择贴图的印花
EDSTR_ENUMVAL_e_actorMsgTextureUpdate=纹理更新
EDSTR_ENUMVAL_e_actorMsgTextureVideoEnableTimeOverride=纹理视频时间覆盖
EDSTR_ENUMVAL_e_actorMsgTextureVideoPlay=视频纹理播放
EDSTR_ENUMVAL_e_actorMsgTextureVideoSetFrame=设置视频纹理帧数
EDSTR_ENUMVAL_e_actorMsgTextureVideoSetPaused=设置视频纹理暂停
EDSTR_ENUMVAL_e_actorMsgTextureVideoSetTime=视频纹理设置时间
EDSTR_ENUMVAL_e_actorMsgTextureVideoSetTimeAll=设置纹理视频时间
EDSTR_ENUMVAL_e_actorMsgTextureVideoStop=视频纹理停止
EDSTR_ENUMVAL_e_actorMsgTextureVideoStopAll=停止所有视频纹理
EDSTR_ENUMVAL_e_actorTermTextureFileAliasIsValid=纹理文件别名有效
EDSTR_ENUMVAL_e_actorTermTextureSlotSatisfiesExpression=纹理槽匹配
EDSTR_ENUMVAL_e_actorTermTextureUpdateLink=纹理更新链接
EDSTR_ENUMVAL_e_actorTermTextureUpdateSlot=纹理更新槽位
EDSTR_ENUMVAL_e_modelFlagForceTextureSearch=强制纹理搜索
EDSTR_ENUMVAL_e_modelFlagPreventTextureAutoUpdate=阻止纹理自动更新
EDSTR_ENUMVAL_e_modelFlagPreventTextureFileTokenRecognition=阻止纹理文件特殊符号
EDSTR_ENUMVAL_e_textureEntryFlagUnifyWithInnateModelTextures=与模型纹理统一
EDSTR_FIELDHINT_CActorRange_Icon=将用于创建范围圈的纹理
EDSTR_FIELDHINT_CActorRange_IconArcLength=控制射程图标纹理间的间隔
EDSTR_FIELDHINT_CCursor_Texture=该纹理必须是 32bpp BGRA 格式的 32x32 dds 文件。
EDSTR_FIELDHINT_CCursor_Texture16=该纹理必须是 32bpp BGRA 格式的 16x16 dds 文件。可选。用于辅助指针在 16x16 和 32x32 之间的变化。
EDSTR_FIELDHINT_CCursor_Texture64=该纹理必须是 32bpp BGRA 格式的 64x64 dds 文件。可选。用于辅助指针在 32x32 和 64x64  之间的变化。
EDSTR_FIELDHINT_CTexture_File=纹理的美术文件。这可能是一张静态图片(.dds格式)或者是一段视频(.ogv 格式)
EDSTR_FIELDHINT_CTexture_File=纹理的美术文件。这可能是一张静态图片(.dds格式)或者是一段视频(.ogv 格式)
EDSTR_FIELDHINT_CTexture_MovieSoundSettings5dot1=若被设置,当播放5.1环绕影片时,便会使用这些设置。若不设置则会使用MovieSoundSettings的默认设置。
EDSTR_FIELDHINT_CTexture_MovieSoundSettingsStereo=若被设置,当播放立体声环绕影片时,便会使用这些设置。若不设置则会使用MovieSoundSettings的默认设置。
EDSTR_FIELDHINT_CTexture_Prefix=纹理的名称前缀。该前缀是用于帮助游戏在替换纹理时查找纹理。
EDSTR_FIELDHINT_CTexture_PropsAdd=添加至纹理的贴图集属性
EDSTR_FIELDHINT_CTexture_PropsRemove=从纹理中移除的贴图集属性
EDSTR_FIELDHINT_CTexture_PropsSet=该纹理的当前贴图集
EDSTR_FIELDHINT_CTexture_Slot=定义该纹理将会出现在模型上的纹理槽
EDSTR_FIELDHINT_CValidatorGameCompareTerrain_Value=已验证的纹理集
EDSTR_FIELDHINT_SActorMsgSceneTextureRegisterFileAlias_FileAlias=客户端数据或代码用于引用该消息注册的纹理文件的名称。
EDSTR_FIELDHINT_SActorMsgSceneTextureRegisterFileAlias_FilePath=Mod或用户硬盘中的纹理文件无效。相对路径必须基于用户的应用程序文档文件夹(例如:C:\Users\JRaynor\Documents\StarCraft II)。
EDSTR_FIELDHINT_SActorMsgSceneTextureRegisterFileAlias_Slot=被注册的纹理将被使用的槽位。例如,当使用TextureSelectByFileAlias消息时,注册为“印花”槽位的纹理会自动填充该印花槽位。
EDSTR_FIELDHINT_SActorMsgTextureProps_Props=设置纹理属性
EDSTR_FIELDHINT_SActorMsgTextureSelectById_Id=用于按预定ID应用纹理
EDSTR_FIELDHINT_SActorMsgTextureSelectByMatch_Source=从源到目标匹配散射光、漫射光、镜面光纹理名称(例如: 歌利亚武装机器人)
EDSTR_FIELDHINT_SActorMsgTextureSelectBySlot_Expression=用于直接匹配纹理到槽位。
EDSTR_FIELDHINT_SActorMsgTexture_Slot=纹理将会在演算体上显示的位置点
EDSTR_FIELDHINT_SModelVariation_TextureAppliedGroups=模型变种的纹理设置
EDSTR_FIELDHINT_SModelVariation_TextureExpressionsForEditor=设置模型在编辑器组合方框中显示时, 它的纹理数据
EDSTR_FIELDHINT_SModelVariation_TextureMatchesForEditor=设置模型在编辑器组合方框中显示时, 它的纹理数据
EDSTR_FIELDHINT_STextureDeclare_Prefix=该模型的声明前缀。该前缀是用于引用该模型的纹理。
EDSTR_FIELDHINT_STextureExpressionSpec_Expression=检查槽位, 查看槽位中的纹理是否满足纹理表现
EDSTR_FIELDHINT_STextureExpressionSpec_Slot=检查槽位, 查看槽位中的纹理是否满足纹理表现
EDSTR_FIELDHINT_STextureInfo_Expression=引用该纹理的表达式
EDSTR_FIELDHINT_STextureInfo_Probability=某指定纹理出现在该槽位中的几率
EDSTR_FIELDHINT_STextureInfo_Slot=模型上的纹理槽
EDSTR_FIELDHINT_STextureMatchSpec_Slot=使用与另一个源槽位相同类型的纹理来匹配槽位
EDSTR_FIELDHINT_STextureMatchSpec_Source=使用与另一个源槽位相同类型的纹理来匹配槽位
EDSTR_FIELDHINT_STextureNameAdaption_AppliesToFile=检查固有纹理(内部的)或外部纹理(mopaq)
EDSTR_FIELDHINT_STextureNameAdaption_AppliesToInnate=检查固有纹理(内部的)或外部纹理(mopaq)
EDSTR_FIELDHINT_STextureNameAdaption_PropsAdd=用于调整某个纹理的属性, 当文件名错误时
EDSTR_FIELDHINT_STextureNameAdaption_PropsRemove=用于调整某个纹理的属性, 当文件名错误时
EDSTR_FIELDHINT_STextureNameAdaption_PropsSet=用于调整某个纹理的属性, 当文件名错误时
EDSTR_FIELDHINT_STextureNameAdaption_Slot=纹理应用到该模型上的槽位
EDSTR_FIELDHINT_STextureNameAdaption_TriggerOnSubstring=纹理替换的子字符串
回复

使用道具 举报

 楼主| 发表于 2021-11-21 16:07:45 | 显示全部楼层
本帖最后由 Prinny 于 2021-11-30 12:25 编辑

QQ图片20211121155331.png
每个模型占地1X1,全图大小256X256,每个模型大小12KB,贴图13KB,也就是25KB一个,虽然这样做也行,但何必制作这么多方块,
真要用到大量换皮才想起来研究下纹理声明,希望有操作过的大佬能来解惑分享一些纹理替换的相关逻辑,非常感谢!
回复

使用道具 举报

发表于 2022-1-1 04:21:08 | 显示全部楼层
本帖最后由 Nostalie 于 2022-1-29 22:07 编辑

我佛了,你这黑皮和原皮位置的对不上啊
根本就是两个模型的贴图吧...
至少星际模型应该只能有一套uv
单纯替换纹理很简单
我知道一种方法 自己新造一个纹理 这个类型的数据 比如
<CTexture id="*****">
        <File value="Assets\Textures\******.dds"/>
        <Slot value="main.diffuse"/></CTexture>
然后用演算体动作按id选择纹理就好了

比如风暴英雄的模型换个配色这样就好了

然后顺便这里有个坑如果是演算体创建就搞这个动作
在地形预览界面是看不到变化的。游戏中是没问题的
为了预览也行.还得用个0s的计时器过度.




回复 1 0

使用道具 举报

发表于 2022-1-2 20:23:34 | 显示全部楼层
学习一下。这方面的教程真的很有限啊。
回复 1 0

使用道具 举报

 楼主| 发表于 2022-1-14 18:25:36 | 显示全部楼层
Nostalie 发表于 2022-1-1 04:21
我佛了,你这黑皮和原皮位置的对不上啊
根本就是两个模型的贴图吧...
至少星际模型应该只能有一套uv

哈哈 那个只是测试 是2个模型的皮哦,我是想成功后给方块换皮啦~感谢回复!
回复

使用道具 举报

 楼主| 发表于 2022-1-14 18:40:11 | 显示全部楼层
本帖最后由 Prinny 于 2022-1-20 19:45 编辑

除了星际2地形绘制,我最近搞了这种尝试。。
QQ图片20220120193716.png
回复

使用道具 举报

发表于 2022-1-29 21:59:24 | 显示全部楼层
本帖最后由 Nostalie 于 2022-1-29 22:10 编辑
Nostalie 发表于 2022-1-1 04:21
我佛了,你这黑皮和原皮位置的对不上啊
根本就是两个模型的贴图吧...
至少星际模型应该只能有一套uv

忘记补充了还有关键一步,模型的纹理声明里要预先定义好纹理槽位
        <TextureDeclares Prefix="agria(原贴图前缀)">
            <Adaptions TriggerOnSubstring="concrete.dds(文件名的一部分建议直接填除前缀外剩余部分)" Slot="main.diffuse(上面纹理main.diffuse的在这里定义)"/>
            <Adaptions TriggerOnSubstring="concretenormal.dds" Slot="main.normal"/>
        </TextureDeclares>
回复 1 0

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-12-22 11:23 , Processed in 0.276799 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表