网页
资讯
视频
图片
知道
文库
贴吧
地图
采购
进入贴吧
全吧搜索
吧内搜索
搜贴
搜人
进吧
搜标签
日
一
二
三
四
五
六
签到排名:今日本吧第
个签到,
本吧因你更精彩,明天继续来努力!
本吧签到人数:0
一键签到
成为超级会员,使用一键签到
一键签到
本月漏签
0
次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行
补签
。
连续签到:
天 累计签到:
天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
11月17日
漏签
0
天
unity3d吧
关注:
115,685
贴子:
558,739
看贴
图片
吧主推荐
视频
游戏
12
回复贴,共
1
页
<<返回unity3d吧
>0< 加载中...
多个模型共享同一个材质时,怎么让每个模型渲染不同的颜色
只看楼主
收藏
回复
13471713164
Script
11
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
多个模型共享同一个材质时,有什么办法可以让每个模型渲染不同的颜色。
十字字
Prefab
5
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
最后的color再乘一个值就可以了
这个值是绑定在模型上的,可以是顶点色,可以是第2套uv对应的彩色噪点图,可以是物体的点坐标。。。
猫哥
Project
14
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
如果改材质上的颜色就不能共用,即使运行中代码改了,也会重新实例化
十字字
Prefab
5
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
你先理解一下,模型,uv,材质,贴图的关系
贴个坐标来体现颜色的shader,你在场景里建立几个球,然后给这个材质,可以移动他们的坐标看看效果。
Shader "posioncolor" {
Properties {
_color ("color", Color) = (0.5,0.5,0.5,1)
}
SubShader {
Tags {
"RenderType"="Opaque"
}
Pass {
Name "ForwardBase"
Tags {
"LightMode"="ForwardBase"
}
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
#include "AutoLight.cginc"
uniform float4 _LightColor0;
uniform float4 _color;
struct VertexInput {
float4 vertex : POSITION;
float3 normal : NORMAL;
};
struct VertexOutput {
float4 pos : SV_POSITION;
float4 posWorld : TEXCOORD0;
float3 normalDir : TEXCOORD1;
LIGHTING_COORDS(2,3)
};
VertexOutput vert (VertexInput v) {
VertexOutput o = (VertexOutput)0;
o.normalDir = mul(_Object2World, float4(v.normal,0)).xyz;
o.posWorld = mul(_Object2World, v.vertex);
float3 lightColor = _LightColor0.rgb;
o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
TRANSFER_VERTEX_TO_FRAGMENT(o)
return o;
}
fixed4 frag(VertexOutput i) : COLOR {
i.normalDir = normalize(i.normalDir);
/////// Vectors:
float3 normalDirection = i.normalDir;
float3 lightDirection = normalize(_WorldSpaceLightPos0.xyz);
float3 lightColor = _LightColor0.rgb;
////// Lighting:
float attenuation = LIGHT_ATTENUATION(i);
float3 attenColor = attenuation * _LightColor0.xyz;
/////// Diffuse:
float NdotL = max(0.0,dot( normalDirection, lightDirection ));
float3 indirectDiffuse = float3(0,0,0);
float3 directDiffuse = max( 0.0, NdotL) * attenColor;
indirectDiffuse += UNITY_LIGHTMODEL_AMBIENT.rgb; // Ambient Light
float3 _mcolor = (_color.rgb*i.posWorld.rgb);
float3 diffuse = (directDiffuse + indirectDiffuse) * _mcolor;
////// Emissive:
float3 emissive = _mcolor;
/// Final Color:
float3 finalColor = diffuse + emissive;
return fixed4(finalColor,1);
}
ENDCG
}
}
FallBack "Diffuse"
}
13471713164
Script
11
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
想到了个方法,因为我这会上百个类似格子的模型同时存在,但是状态最多也就几种,一个状态使用一个材质球就可以共享了
登录百度账号
扫二维码下载贴吧客户端
下载贴吧APP
看高清直播、视频!
贴吧页面意见反馈
违规贴吧举报反馈通道
贴吧违规信息处理公示