Help us understand the problem. What is going on with this article?

[Unity] surface shaderでライティング

More than 5 years have passed since last update.

surface shaderでライティングを自前で行うには、#pragmaで必要な関数名を指定するようです。

custom-lighting
#pragma surface surf BasicDiffuse

// 中略

// インライン関数でライティングを実装
inline float4 LightingBasicDiffuse(SurfaceOutput s, fixed3 lightDir, fixed atten) {
    float difLight = max(0, dot(s.Normal, lightDir));
    float4 col;
    col.rgb = s.Albedo * _LightColor0.rgb * (difLight * atten * 2);
    col.a   = s.Alpha;
    return col;
}

コードを見てもらうと分かりますが、#pragma surface surf BasicDiffuseBasicDiffuseLightingを付与したインライン関数を実装することでライティングが行われます。

inline float4 LightingBasicDiffuse(SurfaceOutput s, fixed3 lightDir, fixed atten) {...}の部分ですね。

また、この引数を変えることでいくつかのライティングを行うことができるようです。

参考にした書籍(Unity Shaders and Effects Cookbook [eBook])から引用させてもらうと、

Forward rendering

forward-rendering
half4 LightingName (SurfaceOutput s, half3 lightDir, half atten){}

This function is used for forward rendering when the view direction is not needed.

ViewDirectionあり

with-view-direction
half4 LightingName (SurfaceOutput s, half3 lightDir, half3 viewDir, half atten){}

This function is used in forward rendering when a view direction is needed.

Deferred rendering

deferred-rendering
half4 LightingName_PrePass (SurfaceOutput s, half4 light){}

This function is used when you are using deferred rendering for your project.

edo_m18
現在はUnity ARエンジニア。 主にARのコンテンツ制作をしています。 趣味でWebGL/WebXRもいじってます。 Unityに関するブログは別で書いています↓ https://edom18.hateblo.jp/
http://edom18.hateblo.jp/
unity-game-dev-guild
趣味・仕事問わずUnityでゲームを作っている開発者のみで構成されるオンラインコミュニティです。Unityでゲームを開発・運用するにあたって必要なあらゆる知見を共有することを目的とします。
https://unity-game-dev-guild.github.io/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした