我想知道如何将这个表面着色器代码转换为顶点/片段编译指示语法。
上面的着色器代码是下图左侧的红宝石:
我的目标是让它看起来像右边的宝石。在此过程中,我遇到了一些挑战。左侧的宝石是不透明的并且接受阴影。右侧的宝石具有正面透明度,但背面没有。然而,它不接受阴影。我必须将左侧的宝石设置为BlinnPhong,以便它可以投射和接收阴影。
是否可能为前后面的透明度创建不同的控件?透明对象是否有一种方法可以接受阴影?我想给宝石添加轮廓,以便可以从更远的地方看到它。是否可以在同一Pass中添加轮廓,还是必须有自己单独的Pass?此外,如何使接收到的阴影变暗?所有这些需求会使GPU负担过重吗?该游戏是为移动平台设计的。
我是CG编程的完全初学者。我的第一步是弄清如何将表面编程转换为顶点/片段。任何示例都将非常感激。
我在资产商店购买了几个宝石资产,但其中一些可以投射阴影但不能接收或完全不能投射或接收。这是怎么回事?右侧的宝石着色器来自于资产商店中购买的一个资产。我不想在未经他们允许的情况下在此网站上分享他们的着色器脚本。
Shader "Custom/Diamond Opaque Test" {
Properties {
_Color ("Main Color", Color) = (1,1,1,1)
_SpecColor ("Specular Color", Color) = (0.5,0.5,0.5,1)
_Shininess ("Shininess", Range (0.01, 1)) = 0.078125
_RimPower ("Rim Power", Range(0,8.0)) = 3.0
_ReflectColor ("Reflection Color", Color) = (1,1,1,0.5)
[NoScaleOffset] _Cube ("Cubemap", CUBE) = "" {}
}
SubShader {
CGPROGRAM
#pragma surface surf BlinnPhong
struct Input {
float3 worldRefl;
float3 viewDir;
};
samplerCUBE _Cube;
fixed4 _Color;
fixed4 _ReflectColor;
half _Shininess;
half _RimPower;
void surf (Input IN, inout SurfaceOutput o) {
o.Albedo = _Color.rgb;
o.Gloss = _Color.a;
o.Specular = _Shininess;
half rim = saturate(dot (normalize(IN.viewDir), o.Normal));
o.Emission = texCUBE (_Cube, IN.worldRefl).rgb * _ReflectColor.rgb * pow(rim,_RimPower);;
}
ENDCG
}
FallBack "Mobile/Diffuse"
}
上面的着色器代码是下图左侧的红宝石:
![no shadow](https://istack.dev59.com/bVOiZ.webp)
![shadow](https://istack.dev59.com/WpD8S.webp)
我是CG编程的完全初学者。我的第一步是弄清如何将表面编程转换为顶点/片段。任何示例都将非常感激。
我在资产商店购买了几个宝石资产,但其中一些可以投射阴影但不能接收或完全不能投射或接收。这是怎么回事?右侧的宝石着色器来自于资产商店中购买的一个资产。我不想在未经他们允许的情况下在此网站上分享他们的着色器脚本。