1. 程式人生 > >不能直接獲取?聊聊如何在Shader Graph中獲取深度圖

不能直接獲取?聊聊如何在Shader Graph中獲取深度圖

0x00 前言

在這篇文章中,我們選擇了過去幾周Unity官方社群交流群以及UUG社群群中比較有代表性的幾個問題,總結在這裡和大家進行分享。主要涵蓋了** StreamingAssets、Profiler、Playable、Particle、Spine、Launcher、Scripting 、Shader、 Shader Graph**等領域,其中會著重介紹一下是用一個workaround的方式在ShaderGraph中獲取_CameraDepthTexture。

同時,也歡迎大家加入我們這個討論乾貨的官方技術群,交流看法分享經驗。
Unity官方社群交流群:629212643

0x01 StreamingAssets

Q:請問一下,在Unity2018.2版本里,Unity會將放在StreamingAssets資料夾下的js檔案當作Unity的UnityScript進行編譯,但是我的資源裡面有html頁面,需要用到這個js檔案。

0x02 Profiler

Q:請問使用Profiler.BeginSample去標識程式碼塊或者方法以便在Profiler效能分析工具中檢視對應程式碼塊的資源消耗,在unity2017.4.5版本將標識寫在指令碼的start無法成功標識,然而一樣的程式碼在unity5.4版本卻可以標識出來,但在標識寫在unity2017.4.5的Update方法貌似也可以標識程式碼塊。這個問題是版本問題嗎?在2017.4.5的版本在某些初始化時應該怎樣成功呢?

A:嗯。查了一下2017.3之後的版本修改了profiler資料的傳送方式,從以前的frame base變成了stream base,在第一幀engine向editor傳送的profiler資料丟掉了很多sampler,所以導致沒有顯示出來。
但是beginsample並不是不會在start方法中生效,遊戲啟動之後開啟指令碼的話還是可以看到的。啟動時sampler不全的問題應該在2018上進行了修改。
WechatIMG145.jpeg
所以,簡單的說,沒有顯示BeginSample去標識程式碼塊的原因是在2017.3-2017.4時有的sampler被丟棄了。並不是針對某個特定的方法。

0x03 Playable

Q:在使用Playable的api時遇到了一些問題,下面第一張圖是正常的情況。第二張圖是呼叫:

    mixerPlayable.SetInputWeight(0, 1.5f);

將input0的權重設定為1.5之後的情況。整個模型被不正確的拉伸,並且動作表現錯誤。
螢幕快照 2018-07-30 上午11.50.06.png

螢幕快照 2018-07-30 上午11.48.54.png

A: playerable mixer的混合是這樣的機制:Weight1 * animation1 + Weight2 * animation2+Weight3 * animation3。因此在權重總和大於1的時候會出現問題。建議對傳入的權重進行歸一化。

0x04 Particle

Q: 我有這樣一個結構,剛剛建立是正常的。
24BA21F38FF900E835A5532E8B77C511.png
現在把它Disable掉後調轉180度。
CE2D84D29BDF47670C06ABB3C50B67F1.png
再啟用,黃色部分的發射器是正常的,紅色是子粒子,發射錯誤。
10CE4BA8C97F617B3CFCC8B48A558F39.png

0x05 Spine

Q:請問大家,當spine匯出圖片是兩張時,unity編輯器裡播放的動畫就是亂的。有什麼解決辦法嗎?
46FBC4D2E8E7861DA084A2253F14FD02.jpg

A: 匯出設定裡的“縮放”選項的scale縮小一下,比如改成0.8,導成一張。(成都-樹林)383CB213558F79B7CBEEB4F46C8917DC.png

Q:還是不夠放到一張,可以再縮小嗎?
A:去掉空白處,圖集小很多。(成都-樹林)
251E4EDE65739133C2E70B2A7F3040AD.png

0x06 Launcher

Q:我遇到了啟動介面白屏的問題,5.6.0和2018最新版本都有,而且網上講的辦法都試過了,都不行,試了一整天了。
F9A1B874CF7B4B9C6390A1E37F96F082.jpg

A:白屏的問題解決了,懷疑是雙顯示卡導致的,Unity的快捷方式右鍵可以選擇執行的顯示卡,我來回切了兩次就可以了。(深圳~劉彥)
A:這種並非卡在loading頁面的白屏,很多時候是DX的驅動不相容造成的,可以嘗試切換執行的顯示卡,也可以嘗試一下在命令列強制使用GL啟動。相關命令列引數可以參考這個文件:https://docs.unity3d.com/Manual/CommandLineArguments.html

Q:無限卡Loading…有人遇到過麼?
03A2386A0B6148BA6B6E03C3EF7DAE10.jpg

A:卡Loading的問題,很多時候可以看看editor.log裡面的相關輸出。
例如下面這樣的log:

No sufficient permissions while processing request "https://core.cloud.unity3d.com/api/login", HTTP error code 401

一般卡loading基本都是網路原因的多。可以試試斷網,進入離線模式。有vpn的話也可以先去掉vpn這些,有的時候是因為vpn的各種奇葩的配置導致的,當然還可以檢視一下防火牆的設定。

還有另外一種情況,例如下面這樣的Log:

此時可以考慮移除"C:\Users\XXXXXX\AppData\LocalLow\Unity"資料夾,因為該資料夾會快取一些登陸資訊,移除之後再嘗試啟動Editor。

0x07 Scripting

Q:剛學u3d不久,想問幾個問題:
1.公司裡是怎麼生成json檔案的
2.資料庫的增刪改,是直接在資料庫檔案裡修改,還是寫程式碼修改,如果公司有自己的伺服器,
怎麼拿到伺服器裡的資料.
求經驗大佬來指教.
A:絕大多數程式語言都有生成json的方法,直接呼叫即可,比如java可以使用gson包。QQ20180731-0.png
B34F0305F6DFA6B799EE8C6A2F80563F.png

資料庫操作可以使用第三方框架,java的後臺可以考慮hibernate或者mybatis。安卓端本地的sqlite可以使用content provider來呼叫資料庫。Unity也有自己的使用sqlite的方法,不過我沒用過。(南京-科穆寧)

0x08 Shader Shader Graph

Q:怎樣讓著色器弄成這樣,我翻了文件,沒查到。。。
F90EDECF52F5D46ACAE74F3D7F48DD08.png

A:這個是因為Shader檔案中沒有標示出ShaderSnippets,比如你建立一個surface shader,然後把CGPROGRAM去掉,也會是這個效果。
67123F5A5B0CEE54DBB6ED16EAD93143.png

Q:請問如何在ShaderGraph中獲取深度圖,例如_CameraDepthTexture?Unity版本2018.2。
螢幕快照 2018-07-31 上午11.31.39.png

A: 預設情況下,ShaderGraph沒有提供介面直接獲取_CameraDepthTexture的。
但是有一個workaround的方式可以來獲取_CameraDepthTexture。即建立一個新的property,該property的name和reference都叫**_CameraDepthTexture**,與此同時不勾選exposed。
螢幕快照 2018-07-31 上午11.34.54.png

同時,開啟LightWeightRenderPipeline Asset中的深度圖選項。
1533008271533.jpg

場景中的Camera要新增一個LightweightAdditionalCameraData組建,並且也開啟深度圖的選項。
1533011712705.jpg
之後,我們就可以正常的獲取深度圖_CameraDepthTexture了。
QQ20180731-1.png

0x09 後記

好了,以上就是想和大家分享的幾個在群裡討論的小問題。
再次,歡迎大家加入我們這個討論乾貨的官方技術群,交流分享呀。
Unity官方社群交流群:629212643

相關推薦

不能直接獲取聊聊如何在Shader Graph獲取深度

0x00 前言 在這篇文章中,我們選擇了過去幾周Unity官方社群交流群以及UUG社群群中比較有代表性的幾個問題,總結在這裡和大家進行分享。主要涵蓋了** StreamingAssets、Profiler、Playable、Particle、Spine、Launcher、Scripting 、Shader、

直接在input輸入框獲取時間的簡易寫法

<input type="text" name="fabushi" size="60" value="<%=new SimpleDateFormat("yyyy-MM-dd HH:mm")

實現ApplicationContextAware介面,java(new或者java反射獲取的物件)獲取spring容器的bean

本文參考了https://blog.csdn.net/bailinbbc/article/details/76446594,其實是拷貝了很多內容: 在Web應用中,Spring容器通常採用宣告式方式配置產生:開發者只要在web.xml中配置一個Listener,該Listener將會負責初始化S

Shader】黑白灰深度渲染

Shader "Custom/RenderDepthMapShader" { Properties { _MainTex ("Texture", 2D) = "whit

給大家分享一個在Android獲取驗證碼的倒數計時器,已經封裝好了,直接引用就行。

獲取簡訊驗證碼後,倒數一分鐘,重新獲取 package com.example.tsx.mytest; import android.annotation.SuppressLint; import android.app.Activity; import andro

Spring 無法注入靜態變數,直接在靜態方法獲取bean

模組中想把一個類寫成工具類,提供靜態方法呼叫。但是方法中要用到@autowire注入的dao類變數,它要能在靜態方法中使用的話本身就加上static,但是static變數是無法用@autowire注入的。 @Autowired private AppConfMapper m

tensorflow學習筆記-從checkpoint獲取graph資訊

    程式碼:import tensorflow as tf sess = tf.Session() check_point_path = 'variables' saver = tf.train.import_meta_graph('variables/save_va

使用引數攔截器通過註解直接從JSON物件獲取資料

場景:當前段傳過來的物件是JSON物件,當時我們使用的時候又是僅僅使用其中的部分欄位值的時候,可以通過實現引數攔截器來為我們自動將JSON中的key值賦值給引數 程式碼 1.自定義註解 @Target(ElementType.PARAMETER) @Retention(Re

JSP獲取properties文件屬性

util port char rip text request taglib test 文件屬性 <%@ page contentType="text/html;charset=UTF-8" import="java.util.ResourceBundle"%>

C++獲取時間

運行 結束 stat pan ++ -- spa per () #include<time.h> //獲取時間頭文件//-------------------------------------- clock_t start_time=c

iOS開發,獲取iOS設備型號

bsp ios設備型號 isequal uid eve ide inf turn res 1、首先要導入頭文件   #import <sys/utsname.h> 2、代碼如下 - (NSString *)getDeviceVersionInfo{

jquery獲取相鄰元素相關的命令:next()、prev()和siblings()

cnblogs lin Language javascrip prev round blog scrip color jquery裏我們要獲取某個元素的相鄰元素時,可以用到的命令有三個: next():用來獲取下一個同輩元素。 prev():用來獲取上一個同輩元素。 sib

C#獲取用戶登錄IP地址

sys pen host local ssi esp rdate sre gin using System.Net; //導入命名空間 public string getLocalIP() { string strHostName = D

JS獲取元素的第二種方法

utf display 獲取 重復執行 ecb sed 文檔 練習 elements 1.靜態方法   var oUl = document.getElementById(‘‘); 2.動態方法   document.getElementsByTagName(‘‘);

struts2在action獲取request、session、application,並傳遞數據

ride b2c 傳遞 sets content context 分享 https fcm 假設僅僅是通過request、session、application傳遞數據,則不須要獲取對應的對象也能夠傳遞數據,代碼例如以下: ScopeAction.java: packa

Git添加遠程庫和從遠程庫獲取(新手傻瓜式教學)

聯系 返回 github上 eba ast 要求 nbsp remote git clone 一、 Git添加遠程庫 1、在本地新建一個文件夾,在該文件夾使用Git工具,運行$ git init,將該文件夾變為本地Git倉庫,同時會生成一個隱藏的.git文件夾。 2、

PHP獲取文件擴展名的N種方法

元素 一個 nbsp n) 函數 查找 網上 only txt PHP中獲取文件擴展名的N種方法 從網上收羅的,基本上就以下這幾種方式: 第1種方法: function get_extension($file) { substr(strrchr($file, ‘.‘),

java獲取各種上下文路徑的方法小結

取出 resin pri nbsp ont row span user ade 一、獲得都是當前運行文件在服務器上的絕對路徑在servlet裏用:this.getServletContext().getRealPath(); 在struts用:this.getServlet

php獲取數據庫數據

enc connect local 檢測 highlight blog 創建 utf fetch <?php header("Content-type:text/html;charset=utf-8");//字符編碼設置 $servername = "loc

Java獲取資源文件的方法總結

tco doget 技術 resource images 磁盤 response linux exception 這裏總結3中方法獲取資源文件的 ServletContext Class ClassLoader 文件的位置 1. ServletC