标签: shaderlab

在Unity中使用Shell技术实现Fur

我正在尝试使用Shells技术在Unity中实现毛发.Fins技术是故意遗漏的,因为我希望它在低端手机(主要是Android设备)上运行,并且需要OpenGL ES 3.0及更高版本,而Shells技术只需要OpenGL ES 2.0.

有一个基于XNA的Shell技术的例子,我试图将它移植到Unity但它无法工作.是XNA项目的文章.

XNA着色器:

float4x4 World;
float4x4 View;
float4x4 Projection;

float CurrentLayer; //value between 0 and 1
float MaxHairLength; //maximum hair length

texture FurTexture;
sampler FurSampler = sampler_state
{
    Texture = (FurTexture);
    MinFilter = Point;
    MagFilter = Point;
    MipFilter = Point;
    AddressU = Wrap;
    AddressV = Wrap;
};


struct VertexShaderInput
{
    float3 Position : POSITION0;
    float3 Normal : NORMAL0;
    float2 TexCoord : TEXCOORD0;
};

struct …
Run Code Online (Sandbox Code Playgroud)

c# shader xna unity-game-engine shaderlab

10
推荐指数
1
解决办法
991
查看次数

将XNA Shader传递,混合和剔除模式移植到Unity shaderlab中

我不得不将XNA着色器移植到Unity的着色器中,并想验证我是否正确执行了此操作.

Pass1使用alpha混合的部分SrcBlend,DestBlend并将set的cull设置为none是我唯一想要确保正确的地方.

这是XNA着色器版本:

pass Pass1
{
    AlphaBlendEnable = true;
    SrcBlend = SRCALPHA;
    DestBlend = INVSRCALPHA;
    CullMode = None;

    VertexShader = compile vs_2_0 TheVertexShader();
    PixelShader = compile ps_2_0 ThePixelShader();
}
Run Code Online (Sandbox Code Playgroud)

这是我制作的Unity Shaderlab端口:

Tags{ "Queue" = "Transparent" "RenderType" = "Transparent" }
LOD 100
Blend SrcAlpha One
Blend DstAlpha OneMinusSrcAlpha
ZWrite Off
Cull Off 
Run Code Online (Sandbox Code Playgroud)

它似乎在Unity中工作正常,但这是Unity中完全相同的传递设置吗?如果没有,则需要进行哪些更改以获得确切的等效性.

shader xna unity-game-engine shaderlab unity3d-shaders

5
推荐指数
1
解决办法
122
查看次数

将Unity游戏中的资源转储到文件中

我正在尝试创建一个函数,将Unity游戏中的每个Resources数据转储到一个文件,并能够从当前加载的场景中转储屏幕上的视频,音频,脚本名称和图像.

我试图为着色器数据做同样的事情时遇到困难,例如Textures和Matrix,Vectors和int值以及浮点数.我知道我可以通过这些Material.GetXXX功能获得这些形成.

例如,我当前可以Texture从标准着色器获取main ,该着色器具有以下命名的Texture类型属性_MainTex:

Material mat = gameObject.GetComponent<MeshRenderer>().material;
Texture mat1Tex = mat.GetTexture("_MainTex");
SaveTex(mat1Tex);
Run Code Online (Sandbox Code Playgroud)

问题是我需要知道属性的名称以及它的类型,例如Texture,Matrix,Float,Color等,然后才能在运行时获取它们的值

我希望来自第三方资源的许多着色器都在项目中,手动遍历每个着色器,复制它们的属性名称和类型以便我可以获取数据会很复杂.

有没有办法获得着色器属性和使用Material.GetXXX函数检索其值所需的类型?如果这不可能,有没有办法单独转储着色器数据?

注意:

这不是一个保存功能,我不是在寻找保存和加载游戏状态的方法.这是一个用于分析Unity游戏并对其进行故障排除的插件.

c# dump unity-game-engine shaderlab

3
推荐指数
1
解决办法
183
查看次数

将 float2/vector2 属性从着色器公开到 Unity 材质检查器

在 Unity Shaderlab 着色器中,您可以向编辑器中的材质检查器公开着色器属性。这可以通过将要公开的属性放置在该Properties部分中来完成,如下所示

Properties
{
    _SomeFloat("A Float", float) = 5
}
Run Code Online (Sandbox Code Playgroud)

Unity 在此处的文档中定义了属性列表。

然而,这不包括任何形式的 float2 或 vector2,只是单个FloatVector由 组成xyzw

我尝试将属性类型设置为float2And Vector2

_SomeFloat("A Float", float2) = (5,5)
_SomeFloat2("A Float2", Vector2) = (5,5)
Run Code Online (Sandbox Code Playgroud)

两者都返回错误Parse error: syntax error, unexpected TVAL_ID at line 7

或者试图Vector通过只设置一半的成员来将其减半

_SomeFloat("A Float", Vector) = (5,5)
Run Code Online (Sandbox Code Playgroud)

返回错误Parse error: syntax error, unexpected ')', expecting ','

我可以只使用 Vector 类型并且只使用它的xy,但这会导致 UI 不清晰,因为检查器中现在有两个未使用的元素,并且找不到允许HideInInspector您隐藏zw值的属性属性或抽屉(例如 …

shader hlsl unity-game-engine shaderlab

3
推荐指数
2
解决办法
1万
查看次数

标签 统计

shaderlab ×4

unity-game-engine ×4

shader ×3

c# ×2

xna ×2

dump ×1

hlsl ×1

unity3d-shaders ×1