平面メッシュの裏面を描画する(2023/12)
2Dアバターの実装に合わせて、ZEPETO Studioでトゥーンシェーダーが提供されるようになりました。それに伴い、標準シェーダーや、裏面を描画するための手順が追加されています。
最新のZEPETO標準シェーダーは ZEPETO/Standardで、このシェーダーは平面メッシュの裏面を描画しません。本稿ではZEPETO/Standardシェーダーを修正して裏面を描画できるよう修正する手順を説明します。
再編されたシェーダーの構造
2Dシェーダー提供と同時にシェーダーが再編され、用途ごとに名前が付いたことで、どのシェーダーを使えばよいかが分かり易くなりました。
さらに各シェーダーは1つのファイルで完結していましたが、再編後は#includeしているシェーダーが多くなり、スマートな構成になりました。#includeって何? という話ですが、本稿で説明する範囲では、複数のシェーダーで共通している処理を使うときに参照して、毎回書かなくていいように効率化している、くらいの認識でよいです。
正確な説明は以下のページなどを参照してください。
ZEPETO/Standardシェーダー
ZEPETO/Standardシェーダーの実体はzepeto.characterパッケージ内のCloth.shaderファイルとなります。Cloth.shaderファイルをベースにして、裏面も描画するシェーダーを作成していきます。
Cloth.shaderの冒頭は以下です。シェーダーの名前はZEPETO/Standardです。
Shader "ZEPETO/Standard" {
Properties {
_Color ("Color", Color) = (1,1,1,1)
_MainTex ("Albedo (RGB)", 2D) = "white" {}
_Glossiness ("Smoothness", Range(0,1)) = 0.5
_Shininess ("Shininess", Range (0.03, 1)) = 0.078125
_BumpMap ("Normal map", 2D) = "bump" {}
:
:
ZEPETO/Standardシェーダーの裏面描画バージョンを作成する手順
基本的には前回と似たような手順で、ベースとなるシェーダーファイルを自分のUnityプロジェクトフォルダ配下に配置し、修正をかけていく手順となります。
前回はUnityの提供するStandardシェーダーをベースに改変していましたが、今回はZEPETOの提供するZEPETO/Standardシェーダーをベースに改変します。また、ZEPETO/Standardは#includeを使用しているので、参照先を修正する必要があります。順に解説します。
Cloth.shaderファイルをコピーしてPJ内に配置する
shaderの識別名を変更する
Cull OFFを記述する
#includeの参照先を修正する
1. Cloth.shaderファイルをコピーしてPJ内に配置する
zepeto.characterパッケージに含まれるCloth.shaderファイルをコピーして、Unityプロジェクト配下の任意のフォルダに貼り付けます。その後、適当なファイル名にリネームします。
下図ではUnityプロジェクト配下のAssetsフォルダの下にshadersフォルダを作成し、その中にCloth.shaderを貼り付け。その後Cloth.shaderをリネームしてCloth-culloff.shaderにしています。
2. shaderの識別名を変更する
Cloth-culloff.shaderをテキストエディタで開き、1行目の”ZEPETO/Standard”を"ZEPETO/Standard Cull Off"に変更します。ここで指定した名前は、Unity上でシェーダーを選択する際の識別名になります。
Shader "ZEPETO/Standard Cull Off" {
Properties {
_Color ("Color", Color) = (1,1,1,1)
:
:
3. Cull OFFを記述する
19行目にCull Offを追記します。これで裏面が描画されるようになります。
:
:
SubShader {
Tags { "RenderType"="Opaque" }
LOD 200
Cull OFF
CGPROGRAM
// Physically based Standard lighting model, and enable shadows on all light types
#pragma surface surf StandardSpecular finalcolor:tonemapping:
:
:
4. #includeの参照先を修正する
さらに24行目の#includeについて、"ToneMapping.cginc" を、 "Packages/zepeto.character/resources-internal/ToneMapping.cginc"に修正します。
:
:
// Physically based Standard lighting model, and enable shadows on all light types
#pragma surface surf StandardSpecular finalcolor:tonemapping
#include "Packages/zepeto.character/resources-internal/ToneMapping.cginc"
// Use shader model 3.0 target, to get nicer looking lighting
#pragma target 3.0
:
:
ここで少し解説します。
改変前のファイル Cloth.shaderは、#include "ToneMapping.cginc" の記述で同じフォルダ内のToneMapping.cgincを参照しています。これは正しい。
しかし改変のために複製した Cloth-culloff.shader は全く別のフォルダにあるため、Cloth-culloff.shader と同じフォルダ内には ToneMapping.cginc は存在しません。このままだとshaderのエラーが出てしまいます。
これを解消するために、#include "Packages/zepeto.character/resources-internal/ToneMapping.cginc"とパッケージ名からのパスを記述することで、パッケージ内のToneMapping.cgincを指定しています。
別解として、24行目を #include "ToneMapping.cginc" としたまま、shadersフォルダにToneMapping.cgincを複製して配置する方法もありますが、そこはお好みで。
Unity上で確認
適当なMaterialのInspactorを開き、shaderを選択していきます。Cloth-culloff.shader内で指定していた識別名 "ZEPETO/Standard Cull Off" が出てくると思います。
これで尻を見られても安心です。
注意点
Cull Offにすることで裏面を描画するので当然、負荷は上がります。また、カメラの位置によってはメッシュで覆われているはずの裏側が見えるようになってしまいます。
裏面を描画する必要のあるパーツだけメッシュとMaterialを分けておいて、Cull Offを設定するのがベストなのですが、作業の段取りやコストの関係で、とりあえずCull Offしとけばいいやになってしまいます。負荷かけてごめんなさい。
この記事が参加している募集
この記事が気に入ったらサポートをしてみませんか?